历史上的今天
返回首页

历史上的今天

今天是:2025年11月23日(星期日)

正在发生

2022年11月23日 | 如何使用Arduino构建一个消防机器人

2022-11-23 来源:circuitdigest

根据国家犯罪记录局(NCRB)的数据,据估计,从2010年到2014年,印度因火灾事故造成超过1.2万人死亡。尽管对火灾事故采取了很多预防措施,但这些自然/人为灾难确实时不时发生。在发生火灾时,为了救人和灭火,我们被迫使用不安全的人力资源。随着技术的进步,特别是在技术方面,很有可能用机器人代替人类来灭火。这将提高消防员的效率,并防止他们冒着生命危险。今天我们将使用构建一个消防机器人,它将自动感应火灾并启动水泵

在这个项目中,我们将学习如何使用Arduino构建一个简单的机器人,它可以向火移动并在火周围抽水来扑灭火。这是一个非常简单的机器人,可以教我们机器人的基本概念;一旦您了解了以下基础知识,您就可以构建更复杂的机器人。所以让我们开始吧...

所需材料:

Arduino UNO

火灾或火焰传感器(3 个)

伺服 (SG90)

L293D电机驱动模块

微型直流潜水泵

小型面包板

带电机(2)和轮子(2)的机器人底盘(任何类型)

一个小罐头

连接线

消防机器人工作理念:

该项目的主要大脑是Arduino,但为了感知火灾,我们使用如下所示的火灾传感器模块(火焰传感器)。

如您所见,这些传感器有一个接收器(),用于火灾。这怎么可能?当火燃烧时,它会发出少量的红外线,这种光会被传感器模块上的红外接收器接收。然后,我们使用检查红外接收器两端的电压变化,这样,如果检测到火灾,输出引脚(DO)将给出0V(LOW),如果没有火灾,输出引脚将为5V(HIGH)。

因此,我们在机器人的三个方向上放置了三个这样的传感器,以感知火在哪个方向燃烧。

我们检测火灾方向,我们可以通过L293D 模块驱动电机来使用电机在火灾附近移动。当靠近火灾时,我们必须用水将其扑灭。使用一个小容器我们可以携带水,容器中还放置了一个5V泵,整个容器放置在伺服电机的顶部,以便我们可以控制必须喷水的方向。现在让我们继续连接

电路图:

下面给出了该消防机器人的完整电路图

您可以连接所有显示的连接以上传程序以检查工作情况,也可以完全组装机器人,然后继续连接。这两种方式的连接都非常简单,您应该能够正确处理。

根据您使用的机器人底盘,您可能无法使用我正在使用的相同类型的容器。在这种情况下,请发挥自己的创造力来设置泵送系统。但是,代码将保持不变。我用一个小铝罐(冷饮罐)将泵放在里面,然后在里面倒水。然后,我将整个罐子组装在伺服电机的顶部,以控制水的方向。我的机器人组装后看起来像这样。

 

 

如您所见,我已使用胶水将伺服翅片固定在容器底部,并使用螺母和螺栓将伺服电机固定在底盘上。我们可以简单地将容器放在电机顶部,然后触发其中的泵通过管子向外泵水。然后可以使用伺服器旋转整个容器以控制水的方向。

对 Arduino 进行:
准备好硬件后,您可以上传Arduino代码以进行某些操作。本页末尾给出了完整的程序。但是,我在这里进一步解释了一些重要的零碎内容。

众所周知,火灾传感器在发生火灾时将输出高电平,在发生火灾时将输出低电平。因此,我们必须继续检查这些传感器是否发生火灾。如果没有火灾,我们要求电机保持停止,使所有引脚高,如下所示

if (digitalRe(Left_S) ==1 && digitalRead(Right_S)==1 && digitalRead(Forward_S) ==1) //If Fire not dected 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 <= 130; pos += 1) {
myservo.write(pos);
delay(10); 
}
for (pos = 130; pos >= 50; pos -= 1) {
myservo.write(pos);
delay(10);
}
digitalWrite(pump,LOW);
myservo.write(90);
fire=false;
}


消防机器人工作:

建议分步检查机器人的输出,而不是第一次一起运行。您可以将机器人构建到伺服电机上,并检查它是否能够成功跟踪火灾。然后您可以检查泵和伺服电机是否正常工作。一旦一切按预期工作,您就可以运行下面的程序并享受消防机器人的完整工作。

机器人的完整工作可以在下面的中找到。可以检测到火灾的最大距离取决于火灾的大小,对于小火柴棍来说,距离相对较小。您还可以使用模块顶部的电位计来控制机器人的灵敏度。我用移动为机器人供电,你可以使用电池,甚至可以用12V电池供电。

/*------ Arduino Fire Fighng 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()

{

nMode(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 <= 130; pos += 1) { 

myservo.write(pos); 

delay(10); 

}

for (pos = 130; 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();

}

}
 


 

推荐阅读

史海拾趣

EETools公司的发展小趣事

随着技术的不断进步和市场的变化,EETools意识到必须不断创新才能保持竞争力。公司投入大量研发资源,对嵌入式开发工具进行技术升级和产品优化。经过数年的努力,EETools成功推出了一系列具有领先技术的嵌入式开发工具,如高性能的芯片编程器、智能调试器等。这些产品不仅提高了客户的工作效率,还降低了成本,赢得了市场的广泛认可。

B&F;公司的发展小趣事

随着航空技术的不断发展,B&F公司开始积极探索与其他行业的跨界合作。例如,公司与一家知名电子公司合作,共同研发了一款新型飞行控制系统。这款系统采用了最先进的电子技术和算法,大大提高了飞机的操控性能和飞行效率。通过这种跨界合作,B&F公司不仅拓展了业务领域,还为公司带来了更多的发展机遇。

维峰电子(WCON)公司的发展小趣事

维峰电子(WCON)于2002年在广东成立,由创始人李文化带领的团队共同创立。创业初期,公司面临着资金短缺、技术落后和市场竞争激烈等多重挑战。然而,团队凭借着对电子连接器行业的深刻理解和坚定信念,不断研发新产品,优化生产工艺,逐渐在市场中站稳脚跟。他们通过不懈努力,成功开发出多款具有竞争力的电子连接器产品,为公司后续的发展奠定了坚实基础。

DAVE Embedded Systems公司的发展小趣事

在稳固国内市场的同时,DAVE Embedded Systems也开始积极拓展国际市场。他们参加了多个国际电子展会,与全球各地的潜在客户建立了联系。通过与国际知名企业的合作,公司成功将产品打入欧美市场,并取得了良好的销售业绩。此外,公司还加强了与国际研发机构的合作,共同开发新技术和新产品,以保持在行业中的领先地位。

Horn公司的发展小趣事

在追求经济效益的同时,Horn公司也注重可持续发展。公司积极采用环保材料和绿色生产工艺,减少对环境的影响。此外,Horn公司还注重人才培养和团队建设,为公司的长期发展奠定了坚实的人才基础。展望未来,Horn公司将继续秉承“创新、质量、服务”的企业理念,致力于成为切削工具行业的领导者,为全球客户提供更加优质的产品和服务。

南晶电子(DGNJDZ)公司的发展小趣事

南晶电子(DGNJDZ)成立于2011年,起初只是一家专注于半导体分立器件研发和生产的小型企业。创始人毛姬娜凭借其敏锐的市场洞察力和技术背景,带领团队攻克了一个又一个技术难关,逐渐在电子行业崭露头角。公司初期面临着资金短缺、技术瓶颈等重重困难,但毛姬娜和团队凭借坚韧不拔的精神,一步步走出了困境。

问答坊 | AI 解惑

彩色液晶屏的驱动(NXP2138,带照片)

前日偶发一帖,关于点阵液晶的驱动  https://bbs.eeworld.com.cn/thread-59177-1-1.html    响应不大。 今天再发一原创帖,关于液晶的驱动,不用过将先上图,看个效果,关于硬件你们看了程序就知道了连接方法和屏的控制器,源 ...…

查看全部问答>

PCB设计的阻抗控制和阻抗匹配.pdf

PCB设计的阻抗控制和阻抗匹配.pdf…

查看全部问答>

l298直流电机驱动器c程序

l298直流电机驱动器c程序…

查看全部问答>

本人欲兼职电子产品PCBA设计加工,有兴趣的请联系,谢谢!

本人系某世界500强外资企业(>40000人)电子工程师(R&D EE),三年硬件研发工作经验; 担任过许多知名企业如SONY,LG,DELL,LaCie,Seagate的电子硬件设计,并已经量产; 有正规的产品研发流程,严格的质量管控经验; 欢迎联系考察合作, 219er@16 ...…

查看全部问答>

关于KEIL C的调试小问题

     请问为什么我用KEIL C调试的时候,跟踪变量的时候在第一个函数的变量都能在右下角的窗口中显示,但是进入第2个函数后里面的变量就不能在窗口中显示了,窗口是空白的,请问这是为什么啊…

查看全部问答>

ADC驱动初始化s2440ADC->rADCCON导致崩溃

我在写一个2440 ADC的驱动程序,程序已经被windows启动起来了,但是只要一执行到以下初始化红色的地方,程序就在串口输出崩溃信息。我的问题是,是不是触摸屏也在使用这个ADC。而2个驱动程序不能互相竞争这个寄存器? 我感觉不应该这样的,我在初 ...…

查看全部问答>

verilog pli相关,请帮忙,谢~~!

开发环境如下: os:xp sp2 modlesim: modlesim se 6.3f 我写了一个misctf的函数,声明:int clkReactive (int data, int reason), s_tfcell veriusertfs[] = {    {usertask, 0, clkInit, 0, clkGen, clkReactive, \"$clkGen\"}, ...…

查看全部问答>

问一个验证性问题,知道的就可以马上拿分

三星2440A,的ARM9芯片,里面有GSTATUS2和GSTATUS4等寄存器。说明里是说GSTATUS4只会在电源复位的时候才会丢失数据。否者一直保存数据。 下面就是我主要要问的问题了: 使用2440内部看门狗复位,会不会导致GSTATUS4的数据丢失呢? 请验证过的朋 ...…

查看全部问答>

DIY湿度计活动进展报告!(拿到湿度计的朋友,看过来!)

  2010.8.5   板子发送及焊接调试阶段 ,调试问题详见2楼C8051版原理图及PCB: https://bbs.eeworld.com.cn/thread-154053-1-1.htmlC8051版器件清单:C8051F湿度计元器件说明:https://bbs.eeworld.com.cn/thread-154061-1-1.htmlC ...…

查看全部问答>

LED在工程应用中的一些常识

LED照明行业是一个新兴的行业,它以其独特的优点深受人们的青睐。如今在光电工程中,提高光效,节约能源和高可靠性已经成为人们共同追求的目的。我们在讨论和使用LED光源时,都会想到LED的寿命长、节约能源、亮度高等特点。也正是因为如此LED光源才 ...…

查看全部问答>