SAP智能制造,为企业带来的无限机遇
318
2023-12-08
尽管对火灾事故采取了很多预防措施,但这些自然/人为灾难确实时不时发生在发生火灾时,为了救人和灭火,我们被迫使用不安全的人力资源随着技术的进步,特别是在机器人技术方面,很有可能用机器人代替人类来灭火这将提高消防员的效率,并防止他们冒着生命危险。
今天我们将使用Arduino构建一个消防机器人,它将自动感应火灾并启动水泵 在这个项目中,我们将学习如何使用Arduino构建一个简单的机器人,它可以向火移动并在火周围抽水来扑灭火这是一个非常简单的机器人,可以教我们机器人的基本概念;一旦您了解了以下基础知识,您就可以构建更复杂的机器人。
所以让我们开始吧... 所需材料: Arduino UNO 火灾传感器或火焰传感器(3 个) 伺服电机?(SG90) L293D电机驱动模块 微型直流潜水泵 小型面包板 带电机(2)和轮子(2)的机器人底盘(任何类型) 一个小罐头 连接线 消防机器人工作理念: 该项目的主要大脑是Arduino,但为了感知火灾,我们使用如下所示的火灾传感器模块(火焰传感器)。
如您所见,这些传感器有一个红外接收器(光电二极管),用于检测火灾这怎么可能?当火燃烧时,它会发出少量的红外线,这种光会被传感器模块上的红外接收器接收然后,我们使用运算放大器检查红外接收器两端的电压变化,这样,如果检测到火灾,输出引脚(DO)将给出0V(LOW),如果没有火灾,输出引脚将为5V(HIGH)。
因此,我们在机器人的三个方向上放置了三个这样的传感器,以感知火在哪个方向燃烧 我们检测火灾方向,我们可以通过L293D 模块驱动电机来使用电机在火灾附近移动当靠近火灾时,我们必须用水将其扑灭使用一个小容器我们可以携带水,容器中还放置了一个5V泵,整个容器放置在伺服电机的顶部,以便我们可以控制必须喷水的方向。
现在让我们继续连接 电路图: 下面给出了该消防机器人的完整电路图 您可以连接所有显示的连接以上传程序以检查工作情况,也可以完全组装机器人,然后继续连接这两种方式的连接都非常简单,您应该能够正确处理。
根据您使用的机器人底盘,您可能无法使用我正在使用的相同类型的容器在这种情况下,请发挥自己的创造力来设置泵送系统但是,代码将保持不变我用一个小铝罐(冷饮罐)将泵放在里面,然后在里面倒水然后,我将整个罐子组装在伺服电机的顶部,以控制水的方向。
我的机器人组装后看起来像这样 如您所见,我已使用胶水将伺服翅片固定在容器底部,并使用螺母和螺栓将伺服电机固定在底盘上我们可以简单地将容器放在电机顶部,然后触发其中的泵通过管子向外泵水然后可以使用伺服器旋转整个容器以控制水的方向。
对 Arduino 进行编程: 准备好硬件后,您可以上传Arduino代码以进行某些操作本页末尾给出了完整的程序但是,我在这里进一步解释了一些重要的零碎内容 众所周知,火灾传感器在发生火灾时将输出高电平,在发生火灾时将输出低电平。
因此,我们必须继续检查这些传感器是否发生火灾如果没有火灾,我们要求电机保持停止,使所有引脚高,如下所示 if (digitalRead(Left_S) ==1 && digitalRead(Right_S)==1 && digitalRead(Forward_S) ==1) //If Fire not detected all sensors are zero { //Do not move the robot digitalWrite(LM1. HIGH); digitalWrite(LM2. HIGH); digitalWrite(RM1. HIGH); digitalWrite(RM2. HIGH); } 同样,如果发生火灾,我们可以通过旋转相应的电机来要求机器人向该方向移动。
一旦它到达火场,左右传感器将不会检测到火势,因为它会直立在火场前方现在我们使用名为“fire”的变量来执行函数来熄火 else if (digitalRead(Forward_S) ==0) //If Fire is straight ahead { //Move the robot forward digitalWrite(LM1. HIGH); digitalWrite(LM2. LOW); digitalWrite(RM1. HIGH); digitalWrite(RM2. LOW); fire = true; } 一旦变量火灾变为真,消防机器人arduino代码将执行put_off_fire功能,直到火灾被扑灭。
这是使用下面的代码完成的 while (fire == true) { put_off_fire(); } 在 put_off_fire() 中,我们只需要通过使所有引脚变高来停止机器人然后打开泵将水推出容器,同时我们还可以使用伺服电机旋转容器,使水均匀地分开。
这是使用下面的代码完成的 void put_off_fire() { delay (500); digitalWrite(LM1. HIGH); digitalWrite(LM2. HIGH); digitalWrite(RM1. HIGH); digitalWrite(RM2. HIGH); digitalWrite(pump, HIGH); delay(500); for (pos = 50; pos = 50; pos -= 1) { myservo.write(pos); delay(10); } digitalWrite(pump,LOW); myservo.write(90); fire=false; } 消防机器人工作: 建议分步检查机器人的输出,而不是第一次一起运行。
您可以将机器人构建到伺服电机上,并检查它是否能够成功跟踪火灾然后您可以检查泵和伺服电机是否正常工作一旦一切按预期工作,您就可以运行下面的程序并享受消防机器人的完整工作 机器人的完整工作可以在下面的视频中找到。
可以检测到火灾的最大距离取决于火灾的大小,对于小火柴棍来说,距离相对较小您还可以使用模块顶部的电位计来控制机器人的灵敏度我用移动电源为机器人供电,你可以使用电池,甚至可以用12V电池供电 /*------ Arduino Fire FighTIng Robot Code----- */ #include Servo myservo; int pos = 0; boolean fire = false; /*-------defining Inputs------*/ #define Left_S 9 // left sensor #define Right_S 10 // right sensor #define Forward_S 8 //forward sensor /*-------defining Outputs------*/ #define LM1 2 // left motor #define LM2 3 // left motor #define RM1 4 // right motor #define RM2 5 // right motor #define pump 6 void setup() { pinMode(Left_S, INPUT); pinMode(Right_S, INPUT); pinMode(Forward_S, INPUT); pinMode(LM1. OUTPUT); pinMode(LM2. OUTPUT); pinMode(RM1. OUTPUT); pinMode(RM2. OUTPUT); pinMode(pump, OUTPUT); myservo.attach(11); myservo.write(90); } void put_off_fire() { delay (500); digitalWrite(LM1. HIGH); digitalWrite(LM2. HIGH); digitalWrite(RM1. HIGH); digitalWrite(RM2. HIGH); digitalWrite(pump, HIGH); delay(500); for (pos = 50; pos = 50; pos -= 1) { myservo.write(pos); delay(10); } digitalWrite(pump,LOW); myservo.write(90); fire=false; } void loop() { myservo.write(90); //Sweep_Servo(); if (digitalRead(Left_S) ==1 && digitalRead(Right_S)==1 && digitalRead(Forward_S) ==1) //If Fire not detected all sensors are zero { //Do not move the robot digitalWrite(LM1. HIGH); digitalWrite(LM2. HIGH); digitalWrite(RM1. HIGH); digitalWrite(RM2. HIGH); } else if (digitalRead(Forward_S) ==0) //If Fire is straight ahead { //Move the robot forward digitalWrite(LM1. HIGH); digitalWrite(LM2. LOW); digitalWrite(RM1. HIGH); digitalWrite(RM2. LOW); fire = true; } else if (digitalRead(Left_S) ==0) //If Fire is to the left { //Move the robot left digitalWrite(LM1. HIGH); digitalWrite(LM2. LOW); digitalWrite(RM1. HIGH); digitalWrite(RM2. HIGH); } else if (digitalRead(Right_S) ==0) //If Fire is to the right { //Move the robot right digitalWrite(LM1. HIGH); digitalWrite(LM2. HIGH); digitalWrite(RM1. HIGH); digitalWrite(RM2. LOW); } delay(300); //Slow down the speed of robot while (fire == true) { put_off_fire(); } }免责声明:本文来源:[中国传动网]的所有文字、图片、音视和视频文件,版权均为中国传动网(www.chuandong.com)独家所有。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~