尽管在geektimes已经有关于机器人真空吸尘器上的Arduino几篇文章在这里,并在这里,我想这不会是多余的发布另一个项目。而且,它与存储模型的距离更近一些,并且由于该项目正在不断发展,所以随着时间的推移,它将超过其中的一些功能。由于作者没有机会从她的帐户中发布文章,因此我在获得该机器人吸尘器开发人员的许可后发布了该帖子。因此,本文将以对作者的简短采访的形式,与方案,照片和机器人吸尘器的代码混合在一起。但是,让我们从使用此吸尘器打扫房间的视频演示开始。
因此,让我们从吸尘器的设计和工作原理开始。
该图显示真空吸尘器配备了6个红外传感器。它们在吸尘器接近障碍物时起作用,发出命令以停止并转身而不会撞到障碍物。如果6个传感器中的任何一个都没有工作并且机器人真空吸尘器与障碍物发生碰撞,则将连接保险杠(包含IR传感器)和机器人主体的2个开关之一触发。细心的读者已经注意到,图中未显示机器人的电源。这里的解决方案是非常标准的,使用了4块18650格式的电池,两对通过电池充放电控制器串联连接。此外,上下DC-DC转换器通过开关从控制器连接。 + 12伏特提供轮式电动机和前刷式电动机。 +5伏特为其余电子设备供电。涡轮由7-8伏特供电,因此不需要转换器。它看起来像这样:
结果,主要组件列表如下:arduino pro miniL298N电机驱动器模块车轮升压转换器降压转换器红外传感器6个
涡轮机充放电控制器叶轮(约200卢布)用于制造电池盒的PVC 18650 4个2个用于电刷的电动机(型号不是很重要)1个用于涡轮的电动机2个碰撞开关。草图进行混沌清洁的选项之一这里#define mot_ena 9 //
#define mot_in1 8 //
#define mot_in2 7 //
#define mot_in3 6 //
#define mot_in4 4 //
#define mot_enb 10 //
#define ir_1 A0 // 1 -
#define ir_2 A1 // 2 -
#define ir_3 A2 // 3 -
#define ir_4 A3 // 4 -
#define ir_5 A4 // 5 -
#define ir_6 A5 // 6 -
#define lev_vik 11 //
#define pra_vik 12 //
//
byte max_skor_lev = 254;
byte max_skor_prav = 244;
//---------------------------------
byte min_skor = 0;
void setup() {
randomSeed(analogRead(A7));
//
pinMode(3, INPUT); //
pinMode(2, INPUT); //
//-------------------------
//
pinMode(mot_ena, OUTPUT);
pinMode(mot_in1, OUTPUT);
pinMode(mot_in2, OUTPUT);
pinMode(mot_in3, OUTPUT);
pinMode(mot_in4, OUTPUT);
pinMode(mot_enb, OUTPUT);
//-------------------------------------------
// -
pinMode(ir_1, INPUT);
pinMode(ir_2, INPUT);
pinMode(ir_3, INPUT);
pinMode(ir_4, INPUT);
pinMode(ir_5, INPUT);
pinMode(ir_6, INPUT);
//-------------------------
//
pinMode(lev_vik, INPUT);
pinMode(pra_vik, INPUT);
//---------------------------
delay(3000);
ROB_VPERED();
}
void loop() {
//
if (digitalRead(lev_vik) == LOW)
{
ROB_STOP();
delay(200);
ROB_NAZAD();
delay(150);
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(400, 1500));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
//
if (digitalRead(pra_vik) == LOW)
{
ROB_STOP();
delay(200);
ROB_NAZAD();
delay(150);
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(400, 1500));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 2 -
if (digitalRead(ir_2) == LOW)
{
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 3 -
if (digitalRead(ir_3) == LOW)
{
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 4 -
if (digitalRead(ir_4) == LOW)
{
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 5 -
if (digitalRead(ir_5) == LOW)
{
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
}
//-----------------------------------------------
// 1 -
if (digitalRead(ir_1) == LOW)
{
ROB_PRAV();
delay(10);
ROB_VPERED();
}
//-----------------------------------------------
// 6 -
if (digitalRead(ir_6) == LOW)
{
ROB_LEV();
delay(10);
ROB_VPERED();
}
//-----------------------------------------------
}
//
void ROB_PRAV()
{
//
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, HIGH);
analogWrite(mot_ena, max_skor_lev);
//
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, HIGH);
analogWrite(mot_enb, max_skor_prav);
}
//-----------------
//
void ROB_LEV()
{
//
digitalWrite(mot_in3, HIGH);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, max_skor_prav);
//
digitalWrite(mot_in1, HIGH);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, max_skor_lev);
}
//---------------------
//
void ROB_VPERED()
{
//
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, HIGH);
analogWrite(mot_ena, max_skor_lev);
//
digitalWrite(mot_in3, HIGH);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, max_skor_prav);
}
//-------------------------------------
//
void ROB_NAZAD()
{
//
digitalWrite(mot_in1, HIGH);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, max_skor_lev);
//
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, HIGH);
analogWrite(mot_enb, max_skor_prav);
}
//------------------------------------
//
void ROB_STOP()
{
//
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, min_skor);
//
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, min_skor);
}
//--------------------------------
好吧,对这个项目的作者进行了一点采访。作者的名字叫德米特里·伊万诺夫(Dmitry Ivanov),住在索契。-德米特里(Dmitry),您是怎么想到制造机器人吸尘器的?-我在YouTube上看到一个视频,其中有一个机器人吸尘器正在清洁,我想买一个,但是当我看价格时,我想到并决定自己去做。首先,我制造了第一版的机器人,它的车轮马达很弱,固定有碎屑和灰尘的容器,几乎没有障碍物传感器,而第二版则没有这些缺点。-花费了多少金钱和时间?“大约500万卢布。加上两个月的工作”-在施工过程中最困难的是什么?最困难的事情是制造一个外壳和一个涡轮,以适应所有细节。-是否有继续改进机器人的计划?计划是为外壳涂漆,进行几种清洁模式,连接蓝牙模块并在android上为手机编写程序(模式控制,手动控制,电池电量显示)。好吧,在吸尘器下做一个蓝色的背光以便美。在这里可以找到针对初学者和专业人士的100多种arduino培训材料。PS Gimetays的Arduino在线课程在这里。我认为,在这一乐观时刻,我们将结束有关此版本的机器人吸尘器的故事,尽管仍有许多有趣的时刻尚未点燃。因此,我们得出一个问题: