历史上的今天
今天是:2026年01月02日(星期五)
2023年01月02日 | 基于Arduino制作一款自动家庭清洁机器人
2023-01-02 来源:circuitdigest
自动地板清洁剂并不是什么新鲜事,但它们都有一个共同的问题。它们对于它们所做的事情来说都太昂贵了。今天,我们将制作一款自动家庭清洁,其成本仅为市场上的一小部分。这个机器人可以它前面的障碍物和物体,并可以继续移动,避开障碍物,直到整个房间被清理干净。它附有一个小刷子来清洁地板。
所需组件:
UNO R3。
超声波。
Arduino Motor Driver Shield。
轮驱动机器人底盘。
计算机对Arduino进行。
电池。
为Arduino供电的移动
鞋刷。
苏格兰布里特磨砂垫。
注意:除了使用电池,您还可以像我们一样使用长 4 股线。虽然这不是一个非常优雅或实用的解决方案,但如果您不打算每天在现实世界中使用它,则可以这样做。确保电缆的长度足够。
HC-SR04 超声波传感器:
超声波传感器用于以高精度和稳定的读数测量距离。它可以测量从 2 厘米到 400 厘米或从 1 英寸到 13 英尺的距离。它在空气中以40KHz的频率发射超声波,如果物体挡住了它的方式,那么它将反弹回传感器。通过使用撞击物体并返回所需的时间,您可以计算距离。
超声波传感器使用一种称为“ECHO”的技术。“回声”只是一种反射的声波。当声音在到达死胡同后反射回来时,您将有一个回声。
当我们使“触发”引脚高约10us时,H04模块在超声波范围内产生声音振动,这将以声速发送8个周期的声波突发,撞击物体后,它将被回波引脚接收。根据声音振动恢复所需的时间,它提供适当的脉冲输出。如果物体距离很远,则需要更多时间才能听到回波,并且输出脉冲宽度会很大。如果障碍物近在咫尺,那么回声将被更快地听到,输出脉冲宽度将更小。
我们可以根据超声波返回传感器所花费的时间计算物体的距离。由于声的时间和速度是已知的,我们可以通过以下公式计算距离。
Distance= (me x Speed of Sound in r (343 m/s))/2.
该值除以 2,因为波向前和向后传播覆盖相同的距离。因此,到达障碍物的时间仅为总时间的一半
所以以厘米为单位的距离 = 17150*T
地板清洁机器人组装:
将 Arduino 安装在机箱上。确保您的机箱由金属制成时不会短路任何东西。最好为Arduino和器扩展板买一个盒子。使用螺钉将电机与车轮和底盘固定。您的机箱应该可以从工厂开始选择执行此操作,但如果没有,您可以即兴制作不同的解决方案。环氧树脂不是一个坏主意。将鞋刷安装在机箱前面。为此,我们使用了M-Seal环氧树脂和钻孔螺钉的组合,尽管您可以使用任何其他对您来说可能更容易的解决方案。将苏格兰布里特磨砂垫安装在刷子后面。我们使用了穿过底盘的轴来支撑它,尽管这也是即兴的。弹簧加载轴可用于伴随它。安装电池(或机箱背面的电缆)。环氧树脂或电池座是做到这一点的好方法。热胶也不错。
接线和连接:
这款自动家庭清洁机器人的电路非常简单。如下所述,将超声波传感器连接到Arduino,并像任何其他扩展板一样将屏蔽放在Arduino上。
超声波的Trig引脚连接到Arduino上的第12个引脚,Echo引脚连接到第13个引脚,电压引脚连接到5V引脚,接地引脚连接到接地引脚。Echo引脚和Trig引脚允许Arduino与传感器。电源通过电压和接地引脚输送到传感器,三角和回波引脚允许它使用 Arduino 发送和接收数据。
电机屏蔽应至少有 2 个输出,并且它们应连接到 2 个电机。通常,这些输出标记为“M1”和“M2”或“电机1”和“电机2”。将电池和移动电源分别连接到电机护罩和 Arduino。不要交叉连接它们。电机屏蔽应具有输入通道。如果您使用的是电线,请将它们连接到交流适配器。
编程说明:
打开 Arduino IDE。将本末尾给出的完整 Arduino 代码粘贴到 IDE 中。将Arduino连接到计算机。在“工具/端口”中选择端口。单击上传按钮。
测试机器人。如果它变得太少或太多,请尝试延迟直到完美。
在进入代码之前,我们需要安装afruit 电机屏蔽库来驱动直流电机。由于我们使用的是 L293D 电机驱动器扩展板,因此我们需要从此处 AFmotor 库。然后将其添加到Arduino IDE库文件夹中。确保将其重命名为 AFMotor。了解有关安装此库的更多信息。
代码很简单,很容易理解,但在这里我们解释了它的几个部分:
下面的代码设置机器人。首先,我们包括了用于驱动带有电机驱动器盾牌的电机的 Adafruit 库。之后,我们定义了三角引脚和回声引脚。它还设置电机。它将三角引脚设置为输出,将回显引脚设置为输入。
#include
#define trigPin 12
#define echon 13
AF_Motor motor1(1,MOTOR12_64KHZ);
AF_DCMotor motor2(2, MOTOR12_8KHZ);
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
下面的代码告诉Arduino循环以下命令。之后,它使用传感器发送和接收超声波。一旦超声波反弹回来,它就会计算它与物体的距离,在注意到物体在设定的距离内后,它会告诉 Arduino 相应地旋转电机。
void loop() {
long duraTIon, distance;
digitalWri(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duraTIon = pulseIn(echoPin, HIGH);
distance = (duraTIon/2) / 29.1;
if (distance < 20) {
motor1.setSpeed(255);
motor2.setSpeed(0);
motor1.run(BACKWARD);
motor2.run(BACKWARD);
delay(2000); //CHANGE THIS ACCORDING TO HOW THE ROBOT TURNS.
这使得机器人通过旋转一个电机并保持另一个电机停滞来转动。
下面的代码使机器人向同一方向转动两个电机,以使其向前移动,直到它检测到上述边界中的物体。
else {
motor1.setSpeed(160); //CHANGE THIS ACCORDING TO HOW FAST YOUR ROBOT SHOULD GO.
motor2.setSpeed(160); //CHANGE THIS TO THE SAME VALUE AS YOU PUT IN ABOVE.
motor1.run(FORWARD);
motor2.run(FORWARD);
}
#include
#define trigPin 12
#define echoPin 13
AF_DCMotor motor1(1,MOTOR12_64KHZ);
AF_DCMotor motor2(2, MOTOR12_8KHZ);
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 20) {
motor1.setSpeed(255);
motor2.setSpeed(0);
motor1.run(BACKWARD);
motor2.run(BACKWARD);
delay(2000); //CHANGE THIS ACCORDING TO HOW THE ROBOT TURNS.
}
else {
motor1.setSpeed(160); //CHANGE THIS ACCORDING TO HOW FAST YOUR ROBOT SHOULD GO.
motor2.setSpeed(160); //CHANGE THIS TO THE SAME VALUE AS YOU PUT IN ABOVE.
motor1.run(FORWARD);
motor2.run(FORWARD);
}
上一篇:工业机器人基本构成及分类
史海拾趣
|
引 言 SMS(Short Message Service)短信息服务是GSM(Global System for Mobile Communication)系统中提供的一种GSM终端(手机)之间,通过服务中心(Service Center)进行文本信息收发的应用服务,其中服务中心完成信息的存储和转发功能。短 ...… 查看全部问答> |
|
CF卡hive注册表保存问题。我按网上的众多资料中几乎每种说法都试过了,但还是不行,不是启动黑屏就是不能保存。 我就是想在进入CE后将IP设置的信息保存下来,下次开机不必从新设置。我的是冷启动,直接拔插电源的。 哎。。搞了两天了没有一点进展 ...… 查看全部问答> |
|
在DM9000所给的web例子中,设定DM9000的IP地址为: 172,20,24,42,然后将对接的PC的IP也设在该网段就行了,我想问的是,是不是DM9000的IP可以任意设置,只要保证同和它连接的PC的IP在一个网段就行了?… 查看全部问答> |
|
我用了max232cpe做了个串口烧录器,主要烧录STC51单片机,但是就是不行,我在max232里看到max232周围的电容用的是1u的,max232A用的电容是0.1U的,我想问一下max232可以用0.1u的电容吗?我的就是无法烧录,你们谁有完整的线路图给我个,谢谢。… 查看全部问答> |
|
不明白现在51学习板为什么都配彩屏,就因为学生不懂,忽悠学生们的钱?还真不如做点实用的,把价格降下来,给广大学生们省点钱来搞学习。 看看实际做产品的,哪个产品是用51来驱动彩屏做显示的?简直赚钱不要命。… 查看全部问答> |
|
初学FPGA (4)不完整条件语句与时序电路(EEFPGA学习计划) …… BEGIN IF CLK’EVENT AND CLK=’1’ THEN Q1<=D; END IF; 不完整的条件语句:即在条件语句中,没有将所有可能发生的情况给出对应的处理方式。对于这种现象,VHDL综合器理解为:对于不满足的条件,跳过Q1<=D不执行,但是需要保 ...… 查看全部问答> |
|
expression must have pointer type mdk中出现expression must have pointer type看一下出错的语句是否是这样的:TIM_TimeBaseInitstruct->TIM_Prescaler改为 TIM_TimeBaseInitstruct.TIM_Prescaler。可能就好了… 查看全部问答> |




