基于Arduino的消防机器人

原文:https://circuitdigest.com/microcontroller-projects/arduino-fire-fighting-robot-code

基于Arduino的消防机器人

ARDUINO项目

经过**阿斯温斯·拉吉(Aswinth Raj)** 2017年12月20日
在这里插入图片描述

根据国家犯罪记录局(NCRB)的估计,从2010年至2014年,印度发生的火灾事故已造成超过120万死亡。即使为火灾事故采取了许多预防措施,但这些自然/人为灾难确实时有发生。发生火灾时,为了营救人员和灭火,我们被迫使用不安全的人力资源。随着技术的进步,尤其是机器人技术的发展,很有可能用机器人代替人来灭火。这将提高消防员的效率,也将防止他们冒着生命危险。今天,我们将使用Arduino构建消防机器人,该机器人将自动感应火势并启动水泵

在这个项目中,我们将学习如何使用Arduino构建一个简单的机器人,该机器人可以朝着火势移动并在其周围抽水以扑灭大火。这是一个非常简单的机器人,可以教给我们有关机器人技术的基本概念。了解以下基本知识后,您就可以构建更复杂的机器人。因此,让我们开始吧…

所需材料:

  1. Arduino UNO
  2. 火灾传感器或火焰传感器(3个)
  3. 伺服马达(SG90)
  4. L293D电机驱动器模块
  5. 微型直流潜水泵
  6. 小面包板
  7. 带电机(2)和车轮(2)的机器人底盘(任何类型)
  8. 一小罐
  9. 连接线

购买上述所有所需的Arduino消防机器人组件

消防机器人的工作理念:

该项目的主要大脑是Arduino,但是为了感知火情,我们使用了如下所示的火情传感器模块火情传感器)。
在这里插入图片描述

如您所见,这些传感器具有用于检测火情的红外接收器(光电二极管)。这怎么可能?当火燃烧时,它会发出少量的红外光,该光将被传感器模块上的IR接收器接收。然后,我们使用运算放大器检查IR接收器两端的电压变化,以便在检测到火灾时输出引脚(DO)的输出为0V(LOW),如果没有火灾,则输出引脚的输出为5V(高的)。

因此,我们在机器人的三个方向上放置了三个这样的传感器,以感应火在哪个方向上燃烧。
在这里插入图片描述

我们可以通过通过L293D模块驱动我们的电动机来检测起火的方向,从而可以使电动机在起火附近移动。当着火时,我们必须用水灭火。使用一个小容器我们可以运载水,一个5V的泵也被放置在容器中,整个容器被放置在伺服电机的顶部,这样我们就可以控制喷水的方向。现在让我们继续进行连接

电路图:

消防机器人的完整电路图如下所示
在这里插入图片描述

您可以连接所有显示的连接以上传程序以检查程序是否正常运行,也可以完全组装机器人,然后继续进行连接。两种方式的连接都非常简单,您应该能够正确进行连接。

根据您使用的机械手机箱,您可能无法使用与我使用的相同类型的容器。在这种情况下,请使用您自己的创造力来设置泵系统。但是,代码将保持不变。我用一个小的铝罐(凉饮料罐)将泵放入其中,并向其中倒水。然后,我将整个罐子组装在伺服电机的顶部,以控制水的方向。组装后,我的机器人看起来像这样。
在这里插入图片描述
在这里插入图片描述

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

编程Arduino:

准备好硬件后,您可以上传Arduino代码以执行某些操作。该完整的程序是在本页面末尾。但是,我在这里进一步解释了一些重要的细节。

众所周知,火灾传感器在发生火灾时将输出高电平,在发生火灾时将输出低电平。因此,如果发生任何火灾,我们必须继续检查这些传感器。如果没有火灾,请通过使所有销高的方式使电动机保持停止,如下所示

    if(digitalRead(Left_S)== 1 && digitalRead(Right_S)== 1 && digitalRead(Forward_S)== 1)//如果未检测到火灾,则所有传感器均为零
    {
    //不要移动机器人
    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;
    }

一旦变量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电池为其供电。

希望您理解该项目,并喜欢构建类似的东西。如果您在构建此版本时遇到任何问题,请使用下面的评论部分来发布您的需求或使用论坛获取技术帮助。

查看我们的机器人技术部分,以找到更多很棒的DIY机器人。

/*------ Arduino Fire Fighting Robot Code----- */
 
#include <Servo.h>
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 <= 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();
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值