SAP智能制造,为企业带来的无限机遇
298
2024-03-08
自动地板清洁剂并不是什么新鲜事,但它们都有一个共同的问题。它们对于它们所做的事情来说都太昂贵了。今天,我们将制作一款自动家庭清洁机器人,其成本仅为市场上的一小部分。这个机器人可以检测它前面的障碍物和物体,并可以继续移动,避开障碍物,直到整个房间被清理干净。它附有一个小刷子来清洁地板。
所需组件:
Arduino UNO R3。
超声波传感器。
Arduino Motor Driver Shield。
轮驱动机器人底盘。
计算机对Arduino进行编程。
电机电池。
为Arduino供电的移动电源
鞋刷。
苏格兰布里特磨砂垫。
注意:除了使用电池,您还可以像我们一样使用长 4 股线。虽然这不是一个非常优雅或实用的解决方案,但如果您不打算每天在现实世界中使用它,则可以这样做。确保电缆的长度足够。
HC-SR04 超声波传感器:
超声波传感器用于以高精度和稳定的读数测量距离。它可以测量从 2 厘米到 400 厘米或从 1 英寸到 13 英尺的距离。它在空气中以40KHz的频率发射超声波,如果物体挡住了它的方式,那么它将反弹回传感器。通过使用撞击物体并返回所需的时间,您可以计算距离。
超声波传感器使用一种称为“ECHO”的技术。“回声”只是一种反射的声波。当声音在到达死胡同后反射回来时,您将有一个回声。
当我们使“触发”引脚高约10us时,HCSR04模块在超声波范围内产生声音振动,这将以声速发送8个周期的声波突发,撞击物体后,它将被回波引脚接收。根据声音振动恢复所需的时间,它提供适当的脉冲输出。如果物体距离很远,则需要更多时间才能听到回波,并且输出脉冲宽度会很大。如果障碍物近在咫尺,那么回声将被更快地听到,输出脉冲宽度将更小。
我们可以根据超声波返回传感器所花费的时间计算物体的距离。由于声的时间和速度是已知的,我们可以通过以下公式计算距离。
Distance= (Time x Speed of Sound in Air (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连接到计算机。在“工具/端口”中选择端口。单击上传按钮。
测试机器人。如果它变得太少或太多,请尝试延迟直到完美。
在进入代码之前,我们需要安装Adafruit 电机屏蔽库来驱动直流电机。由于我们使用的是 L293D 电机驱动器扩展板,因此我们需要从此处下载 AFmotor 库。然后将其添加到Arduino IDE库文件夹中。确保将其重命名为 AFMotor。了解有关安装此库的更多信息。
代码很简单,很容易理解,但在这里我们解释了它的几个部分:
下面的代码设置机器人。首先,我们包括了用于驱动带有电机驱动器盾牌的电机的 Adafruit 库。之后,我们定义了三角引脚和回声引脚。它还设置电机。它将三角引脚设置为输出,将回显引脚设置为输入。
#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);
}
下面的代码告诉Arduino循环以下命令。之后,它使用传感器发送和接收超声波。一旦超声波反弹回来,它就会计算它与物体的距离,在注意到物体在设定的距离内后,它会告诉 Arduino 相应地旋转电机。
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);
}#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);
}版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~