自动地板清洁剂并不是什么新鲜事物,但是它们都有一个共同的问题。他们所做的一切都太昂贵了。今天,我们将制造一款价格仅为市场上一小部分的自动家用清洁机器人。该机器人可以检测到前方的障碍物和物体,并可以继续移动,避开障碍物,直到清理整个房间。它带有一个小刷子,可以清洁地板。
同时使用Arduino检查我们的智能吸尘机器人
所需组件:
- Arduino UNO R3。
- 超声波传感器。
- Arduino电机驱动器护罩。
- 轮驱动机器人底盘。
- 计算机对Arduino进行编程。
- 电机电池。
- 为Arduino供电的移动电源
- 鞋刷。
- 苏格兰威士忌磨砂垫。
注意: 除了使用电池,您也可以像我们一样使用长4股电线。尽管这不是一个非常优雅或实用的解决方案,但是如果您不打算每天在现实世界中使用它,则可以这样做。确保电缆的长度足够。
在详细讨论之前,让我们先讨论一下超声波。
HC-SR04超声波传感器:
超声波传感器用于以高精度和稳定的读数来测量距离。它可以测量2厘米至400厘米或1英寸至13英尺的距离。它在空中以40KHz的频率发射超声波,如果物体挡住了物体,它将反弹回传感器。通过使用撞击对象并返回的时间,您可以计算距离。
超声波传感器使用一种称为“ ECHO”的技术。“ ECHO”只是反射的声波。当声音到达死角后会反射回去时,您将产生回音。
当我们将“ Trigger”引脚设为高电平约10us时,HCSR04模块会在超声波范围内产生声音振动,这将以音速发送一个8周期的声爆,并在撞击物体后被Echo引脚接收。根据声音振动恢复所需的时间,它会提供适当的脉冲输出。如果物体距离较远,则听到回声会花费更多时间,并且输出脉冲宽度将很大。并且如果障碍物在附近,则回声将被更快地听到并且输出脉冲宽度将更小。
我们可以根据超声波返回到传感器所花费的时间来计算物体的距离。由于声音的时间和速度是已知的,因此我们可以通过以下公式计算距离。
距离=(时间x空中声速(343 m / s))/ 2。
由于波向前和向后传播相同的距离,因此该值除以2。因此,到达障碍物的时间仅为总时间的一半
因此,以厘米为单位的距离= 17150 * T
我们以前使用此超声波传感器和Arduino进行了许多有用的项目,请在下面进行检查:
- 使用超声波传感器的基于Arduino的距离测量
- 使用Arduino和超声波传感器的门警报
- 使用Arduino的基于IOT的垃圾箱监控
地板清洁机器人的组装:
将Arduino安装在机箱上。如果机箱由金属制成,请确保不要短路任何东西。最好为Arduino和电机控制器护罩安装一个盒子。用螺钉将电动机固定在车轮和底盘上。您的机箱应具有出厂时执行此操作的选项,但如果没有,则可以即兴使用其他解决方案。环氧树脂不是一个坏主意。将靴刷安装在机箱正面。我们为此使用了M-Seal环氧树脂和钻孔螺钉的组合,尽管您可以使用任何其他可能更方便的解决方案。将Scotch Brite擦洗垫安装在刷子后面。我们使用了横穿底盘的轴来固定它,尽管这也是不建议的。可以使用弹簧加载轴。安装电池(或电缆在机箱背面)。环氧树脂或电池座是执行此操作的好方法。热胶也不错。
接线和连接:
该自动家用清洁机器人的电路非常简单。如下所述将超声波传感器连接到Arduino,然后像其他任何屏蔽一样将Motor Driver屏蔽放置在Arduino上。
Ultrasonic的Trig引脚连接到Arduino的第12引脚,Echo引脚连接到第13引脚,电压引脚连接到5V引脚,接地引脚连接到接地引脚。Echo引脚和Trig引脚允许Arduino与传感器通信。电源通过电压和接地引脚传输到传感器,而Trig和Echo引脚则允许它通过Arduino发送和接收数据。在此处了解有关将超声波传感器与Arduino接口的更多信息。
电动机屏蔽罩至少应具有2个输出,并且应将其连接到2个电动机。通常,这些输出标记为“ M1”和“ M2”或“电动机1”和“电动机2”。将电池和移动电源分别连接至电动机护罩和Arduino。不要交叉连接它们。电动机屏蔽罩应具有输入通道。如果使用电线,请将其连接到交流适配器。
编程说明:
打开Arduino IDE。将本教程末尾给出的完整Arduino代码粘贴到IDE中。将您的Arduino连接到计算机。在“工具/端口”中选择端口。点击上传按钮。
测试机器人。如果它变得太少或太大,请尝试延迟直到完美。
在研究代码之前,我们需要安装Adafruit电机屏蔽库来驱动直流电机。由于我们使用的是L293D电动机驱动器护罩,因此需要从此处下载AFmotor库。然后将其添加到您的Arduino IDE库文件夹中。确保将其重命名为 AFMotor 。了解有关安装此库的更多信息。
代码很容易理解,但是在这里我们解释了几部分:
下面的代码设置了机器人。首先,我们包含了Adafruit库,用于使用带马达驱动器护罩的马达进行驱动。之后,我们定义了Trig引脚和Echo引脚。它还设置电动机。它将Trig引脚设置为输出,将Echo引脚设置为输入。
#include #define trigPin 12 #define echoPin 13 AF_DCM电动机motor1(1,MOTOR12_64KHZ); AF_DCM电动机2(2,MOTOR12_8KHZ); void setup(){pinMode(trigPin,OUTPUT); pinMode(echoPin,INPUT); }
下面的代码告诉Arduino循环以下命令。之后,它使用传感器发送和接收超声波。一旦超声波回弹,它会计算出距物体的距离,并指出物体在设定距离之内,然后告诉Arduino相应地旋转电动机。
void loop(){持续时间长,距离大;digitalWrite(trigPin,LOW); delayMicroseconds(2); digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW); 持续时间= pulseIn(echoPin,HIGH); 距离=(持续时间/ 2)/ 29.1; if(距离<20){motor1.setSpeed(255); motor2.setSpeed(0); motor1.run(BACKWARD); motor2.run(BACKWARD); delay(2000); //根据机器人的旋转方式进行更改。
这使机器人通过旋转一个电动机并保持另一电动机停转来转动。
下面的代码使机器人沿相同的方向转动两个电机,以使其向前移动,直到在上述边界中检测到物体为止。
否则{motor1.setSpeed(160); //根据要如何快速运行机器人来更改此设置。motor2.setSpeed(160); //将上述更改为相同的值。motor1.run(FORWARD); motor2.run(FORWARD); }