- 构建基于Arduino的地板清洁机器人所需的材料
- 便携式吸尘器
- HC-SR04超声波传感器模块
- 用于楼梯检测的地面传感器(红外传感器)
- 基于Arduino的地板清洁机器人的电路图
- 为基于Arduino的地板清洁机器人构建电路
- Arduino的
在当今的情况下,我们所有人都忙于工作,以至于没有时间适当地打扫房子。解决问题的方法非常简单,您只需要购买家用吸尘器机器人(例如irobot roomba),就可以通过按一下按钮来清洁您的房屋。但是,这种商业产品是一个普遍的问题,那就是成本。因此,今天,我们决定制造一个简单的地板清洁机器人,与市场上的商用产品相比, 它不仅制造简单,而且成本更低。经常阅读的读者可能还记得我们很久以前建造的Arduino真空吸尘机器人,但是它体积很大,需要一个大铅酸电池才能移动。新的Arduino吸尘器 我们将在此处构建的结构将更紧凑,更实用。最重要的是,该机器人将具有超声波传感器和红外接近传感器。超声波传感器将使机器人避开障碍物,以便机器人可以自由移动,直到对房间进行了适当的清洁为止;距离传感器将帮助机器人避免从楼梯上掉下。所有这些功能听起来都很有趣,对吗?因此,让我们开始吧。
在之前的一篇文章中,我们制造了许多机器人,例如自平衡机器人,自动表面消毒机器人和避障机器人。请检查那些听起来是否有趣的东西。
构建基于Arduino的地板清洁机器人所需的材料
由于我们使用了非常通用的组件来构建吸尘器机器人的硬件部分,因此您应该能够在本地的业余爱好商店中找到所有这些组件。这是所需材料的完整列表以及所有组件的图像。
- Arduino Pro迷你版-1
- HC-SR04超声波模块-3
- L293D电机驱动器-1
- 5Volt N20马达和安装支架-2
- N20马达轮-2
- 开关-1
- LM7805稳压器-1
- 7.4V锂离子电池-1
- 红外模块-1
- 冲浪板-1
- 脚轮-1
- 中密度纤维板
- 通用便携式吸尘器
便携式吸尘器
在组件要求部分中,我们讨论了便携式吸尘器,以下图像准确地表明了这一点。它是来自亚马逊的便携式真空吸尘器。这带有非常简单的机制。它在底部有三个部分(一个用于存放灰尘的小腔室,中间部分包括电动机,风扇和顶部的电池插座(电池的盖子或盖)。它有一个直流电动机和一个通过一个简单的开关,该电机直接连接到3V(2 * 1.5V AA电池)上,当我们用7.4V电池为机器人供电时,我们将切断内部电池的连接并从5V供电因此,我们卸下了所有不必要的部件,仅卸下了两线制电机,在下图中可以看到。
HC-SR04超声波传感器模块
为了检测障碍物,我们使用了流行的HC-SR04超声波距离传感器,或者我们可以将其称为避障传感器。工作非常简单,首先,发射器模块发送超声波,该超声波在空气中传播,撞到障碍物,然后反弹回来,接收器接收到该波。通过使用Arduino计算时间,我们可以确定距离。在上一篇基于Arduino的超声波距离传感器项目上的文章中,我们非常彻底地讨论了该传感器的工作原理。如果您想进一步了解HC-SR04超声波距离传感器模块,可以检查一下。
用于楼梯检测的地面传感器(红外传感器)
在“功能”部分中,我们讨论了一种功能,机器人可以检测楼梯并防止自身跌落。为此,我们使用了红外传感器。我们将在红外传感器和Arduino之间建立一个接口。红外接近传感器的工作非常简单,它具有一个IR LED和一个光电二极管,IR LED发出IR光,如果在此发出的光之前有任何障碍物,它将被反射并检测到反射光由光电二极管。但是反射产生的电压将非常低。为了增加它,我们可以使用运算放大器比较器,我们可以放大并获得输出。一个IR模块具有三个引脚-Vcc,接地和输出。通常,当障碍物进入传感器前方时,输出会变低。因此,我们可以使用它来检测地板。如果在一秒钟内我们从传感器上检测到高电平,则可以停止机器人,将其转回去或执行任何我们想防止它从楼梯上掉下来的事情。在上一篇文章中,我们制作了红外接近传感器模块的面包板版本,并详细说明了工作原理,如果您想了解更多有关此传感器的信息,可以进行检查。
基于Arduino的地板清洁机器人的电路图
我们有三个超声波传感器来检测障碍物。因此,我们需要将超声波传感器的所有接地端都连接到公共接地端。此外,我们将传感器的所有三个Vcc连接到公共VCC引脚。接下来,我们将触发和回波引脚连接到Arduino的PWM引脚。我们还将IR模块的VCC连接到5V,并接地到Arduino的接地引脚,IR传感器模块的输出引脚连接到Arduino的数字引脚D2。对于电机驱动器,因为我们使用的是5V电机,所以我们将两个使能引脚连接到5v,并将驱动器电压引脚连接到5V。在上一篇文章中,我们制作了Arduino电机驱动器护罩,您可以检查一下以了解有关L293D电机驱动器IC的更多信息。及其操作。Arduino,超声波模块,电动机驱动器和电动机的工作电压为5伏,较高的电压会杀死它,我们使用的是7.4伏电池,将其转换为5伏,使用了LM7805稳压器。将真空吸尘器直接连接到主电路。
为基于Arduino的地板清洁机器人构建电路
为了获得有关机器人的一些想法,我在网上搜索了吸尘器机器人,并获得了一些圆形机器人的图像。因此,我决定制造一个圆形机器人。要构建机器人的追逐器和机身,我有很多选择,例如泡沫板,MDF,硬纸板等。但是我选择MDF是因为它坚硬且具有某些防水性能。如果执行此操作,则可以决定为机器人选择哪种材料。
为了制造机器人,我拿了MDF板,然后画了两个半径为8 CM的圆, 在该圆内,我还绘制了另一个半径为4 CM的圆用于安装吸尘器。然后我切出圆圈。另外,我已经切割并移除了适合轮径的零件(请参阅图像以更好地理解)。最后,我为脚轮做了三个小孔。下一步是使用支架将电动机安装在底座上,并将脚轮定位并固定到其位置。之后,将超声波传感器放置在机器人的左,右和中间。另外,将红外模块连接到机器人的下方。不要忘记在外部添加开关。这就是构建机器人的全部内容,如果您对此感到困惑,则可以参考以下图像。
在顶部,我还在泡沫板上绘制了一个半径为11 CM的圆并将其切开。对于顶部和底部之间的间距,我已经切割了三根4厘米长的塑料管。之后,我将塑料垫片粘在底部,然后粘在顶部。如果需要,可以用塑料或类似材料覆盖机器人的侧面。
Arduino的
该项目的完整代码在文档末尾给出。该Arduino代码类似于基于Arduino的超声波距离传感器代码,唯一的变化是地板检测。在以下几行中,我将解释代码的工作方式。在这种情况下,我们不会使用任何额外的库。下面,我们以逐步的方式描述了代码。我们不使用任何额外的库来解码HC-SR04传感器的距离数据,因为它非常简单。在以下几行中,我们描述了如何。首先,我们需要为连接到Arduino板上的所有三个超声波距离传感器定义触发引脚和回波引脚。在这个项目中,我们有三个Echo引脚和三个Trigger引脚。请注意,1是左传感器,2是前传感器,3是右传感器。
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
然后,我们为距离定义了所有变量,它们都是(int)类型变量,对于持续时间,我们选择使用(long)。同样,我们每个都有三个。另外,我已经定义了一个整数来存储机芯的状态,我们将在本节后面讨论它。
持续时间长1; 持续时间长2; 持续时间长3; int distanceleft; int distancefront; int distanceright; int a = 0;
接下来,在设置部分,我们需要使用 pinModes() 函数将所有透视图引脚作为输入或输出 。要从模块发送超声波,我们需要将触发引脚设为高电平,即所有触发引脚都应定义为 OUTPUT。为了接收回声,我们需要读取回声引脚的状态,因此所有回声引脚都应定义为 INPUT。另外,我们启用串行监视器进行故障排除。要读取IR模块的状态,我已将irpin定义为输入。
pinMode(trigPin1,输出); pinMode(trigPin2,输出); pinMode(trigPin3,OUTPUT); pinMode(echoPin1,INPUT); pinMode(echoPin2,INPUT); pinMode(echoPin3,INPUT); pinMode(irpin,INPUT);
这些数字引脚被定义为电机驱动器输入的输出。
pinMode(4,输出); pinMode(7,输出); pinMode(8,输出); pinMode(12,输出);
在主循环中,我们为三个传感器提供了三个部分。所有部分的工作原理相同,但每个部分适用于不同的传感器。在本节中,我们读取与每个传感器的障碍物距离并将其存储在每个定义的整数中。要读取距离,首先,我们必须确保清除触发引脚,为此,我们需要将触发引脚设置为 LOW 持续2 µs。现在,为了产生超声波,我们需要将触发引脚转为 高电平 10 µs。这将发送超声波,并借助 pulseIn() 函数,我们可以读取行进时间,并将该值存储到变量“ duration ”中。此函数有2个参数,第一个是回声引脚的名称,第二个可以写高或 低。高电平表示 pulseIn () 函数将等待 由反弹的声波引起的引脚变为 高电平并开始计数,然后 在声波结束时等待引脚变为 低电平,从而停止计数。此功能以毫秒为单位给出脉冲长度。为了计算距离,我们将持续时间乘以0.034(空气中的声速为340m / s),然后将其除以2(这是由于声波的来回传播)。最后,我们将每个传感器的距离存储为相应的整数。
digitalWrite(trigPin1,LOW); delayMicroseconds(2); digitalWrite(trigPin1,HIGH); delayMicroseconds(10); digitalWrite(trigPin1,LOW); 持续时间1 = pulseIn(echoPin1,HIGH); distanceleft =持续时间1 * 0.034 / 2;
在获得每个传感器的距离之后,我们可以借助 if语句 控制电机,从而控制机器人的运动。这很简单,首先,我们给出一个障碍物距离值,在这种情况下,它是15厘米(根据需要更改此值)。然后我们根据该值给出条件。例如,当障碍物进入左传感器的前方(这意味着左传感器的距离应小于或等于15厘米)并且其他两个距离都很高(这意味着该传感器的前方没有障碍物)时,然后借助数字写入功能,我们可以将电机向右驱动。后来,我检查了红外传感器的状态。如果机器人在地板上,则IR引脚的值将为LOW;否则,该值将为高。然后,我将该值存储在 int变量中 。我们将根据此状态控制机器人。
代码的这一部分用于使机器人向前和向后移动:
if(s == HIGH) { digitalWrite(4,LOW); digitalWrite(7,HIGH); digitalWrite(8,LOW); digitalWrite(12,HIGH); 延迟(1000); a = 1; }
但是,当电动机向后移动,地板向后移动且机器人将向前移动并重复进行使机器人卡住时,此方法存在问题。为了克服这一点,我们 在了解不存在下限之后将值(1)存储在int中。我们还将检查此条件是否有其他运动。
在检测到没有地板后,机器人将不会向前移动。相反,它将向左移动,这样我们就可以避免问题。
如果((a == 0)&&(s == LOW)&&(distanceleft <= 15 && distancefront> 15 && distanceright <= 15)-(a == 0)&&(s == LOW)&&(distanceleft> 15 &&距离前> 15 &&距离右> 15))
在上述条件下。首先,机器人将检查楼层状态和整数值。只有满足所有条件,机器人才会前进。
现在,我们可以为电动机驱动器编写命令。这将使右马达向后驱动,而左马达向前驱动,从而使机器人向右转动。
代码的这一部分用于向右移动机器人:
digitalWrite(4,HIGH); digitalWrite(7,LOW); digitalWrite(8,HIGH); digitalWrite(12,LOW);
如果漫游器检测到没有地板,则该值将更改为1,并且漫游器将向左移动。向左转后,“ a”的值从1变为0。
如果((a == 1)&&(s == LOW)-(s == LOW)&&(distanceleft <= 15 && distancefront <= 15 && distanceright> 15)-(s == LOW)&&(distanceleft <= 15 && distancefront <= 15 && distanceright> 15)-(s == LOW)&&(distanceleft <= 15 && distancefront> 15 && distanceright> 15)-(distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite(4,HIGH); digitalWrite(7,LOW); digitalWrite(8,LOW); digitalWrite(12,HIGH); 延迟(100); a = 0; }
代码的这一部分用于向左移动机器人:
如果((s == LOW)&&(distanceleft> 15 && distancefront <= 15 && distanceright <= 15)-(s == LOW)&&(distanceleft> 15 && distancefront> 15 && distanceright <= 15)-( s == LOW)&&(distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite(4,LOW); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(12,LOW); }
这就是构建基于Arduino的智能吸尘器机器人的过程。您可以在本页底部的视频链接中找到该项目的完整工作。如有任何疑问,请在下面进行评论。