Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所构成的室内安全报警模块

该系统模块主要由Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所组成,MQ-2烟雾浓度传感器达到不同的阈值的时候,LED灯会通过不同的颜色来进行警示。烟雾浓度增大,LED灯依次显示绿、蓝、红,且步进电机会驱动风扇进行不同挡位转速旋转,蜂鸣器会进行警报提示。烟雾浓度超过最大的阈值,或者检测到有火焰产生,红灯亮起,蜂鸣器鸣响,步进电机以最大的转速驱动风扇旋转,SIM900A会给指定用户拨打电话。
因为该模块有WiFi模块,也可以通过连接WiFi通过APP进行控制步进电机的转速驱动,也可以实现手动的控制风扇转速。

一、设备准备

Arduino UNO R3Arduino UNO R3开发板+MQ-2烟雾浓度传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所构成。MQ-2烟雾浓度传感器实时检测室内烟雾浓度数值,若超过阈值,风扇进行转动
在这里插入图片描述
WIFI模块
在这里插入图片描述
MQ-2烟雾浓度传感器
在这里插入图片描述
火焰传感器模块
在这里插入图片描述

舵机
在这里插入图片描述
无源蜂鸣器
在这里插入图片描述
风扇
在这里插入图片描述
RGB三色LED灯
在这里插入图片描述

步进电机
在这里插入图片描述
SIM900A
在这里插入图片描述

二、设备连接

烟雾浓度传感器

烟雾浓度传感器Arduino UNO R3
VCC5V
GNDGND
DOP7
AOA0

火焰传感器

火焰传感器Arduino UNO R3
DOP2
GNDGND
VCC5V

无源蜂鸣器

无源蜂鸣器Arduino UNO R3
GNDGND
I/OP8
VCC5V

三色LED灯

三色LED灯Arduino UNO R3
RP11
GP12
BP13
GNDGND

步进电机

步进电机Arduino UNO R3
IN3P9
IN4P4
+5V
-GND

风扇

风扇步进电机
红线B灯处
黑线C灯处

WIFI模块(局域模式)

WIFI模块Arduino UNO R3
RXTX
TXRX
GNDGND
5V5V

SIM900A模块

SIM900AArduino UNO R3
5VRTX
5VTRX
GNDGND
VCC55V
GNDGND

舵机模块

舵机Arduino UNO R3
黄线P6
灰线GND
红线5V

三、配置网络

将代码下载到Arduino UNO R3开发板上
WIFI模块需要调节到局域模式,此时打开手机wifi热点,即可检测到WiFi模块所组成的网络,在这里插入图片描述,进行连接。
APP下载路径,打开下载安装好的手机APP
在这里插入图片描述
之后,点击右上角的连接在这里插入图片描述
连接成功之后,即可点击 开锁(49)、加速、减速、蜂鸣器开(50)、蜂鸣器关(51)、一档、二档、三档 可以对舵机、蜂鸣器以及风扇进行控制。

四、完整代码

/******************************************************
 * connection:
 * MQ-2 gas sensor            Uno R3
 * D0                            7
 * A0                            A0
 * GND                           GND
 * VCC                            5V
 * 
 * 
 * Dual-color LED    Arduin Uno R3
 * R                  11
 * G                  12
 * B                  13
 * GND                GND
 * 
 * 
 * buzzerPin                      8
 * GND                           GND
 * VCC                            5V
 * 
 * 
 * motorIn1 = 9;
 * motorIn2 = 10;
 * 
 *******************************************************/
#include <Servo.h>  //Arduino IDE自带的舵机库文件
const int Servo_Pin = 6;      //模拟开门
Servo myservo;      //定义舵机对象myservo

const int digitalInPin = 2; //D0 attach to digital 2

const int analogPin=A0; //the DO on the Module attach to Pin7 on the SunFounder 
const int digitalPin=7;  //the D0 attach to pin7
int Astate=0;
boolean  Dstate=0;

int redPin = 11;    // select the pin for the red LED
int greenPin = 12; 
int bluePin = 13; 

int buzzerPin = 8;//the pin of the active buzzer attach to pin8
int comdata;
const int motorIn1 = 9;
const int motorIn2 = 4;
#define rank1 150
#define rank2 200
#define rank3 250

void set_tele(void)
{
    Serial.begin(115200);                  //波特率为115200
    delay(1000);
    Serial.println("AT\r\n");                  //判断模块是否正常
    delay(1000);
}
void tele(void)
{
    Serial.println("AT+CPIN?\r\n");         
    delay(1000);
    Serial.println("AT+CSQ\r\n");              
    delay(3000);
    Serial.print("AT+CREG?\r\n");          
    delay(3000);
    Serial.println("AT+CGATT?\r\n");  
    delay(1000);
    Serial.println("ATD15336551683;\r\n");      
    delay(30000);
}


void setup() 
{
  pinMode(digitalInPin,INPUT);
  
  //set the pins state 
  pinMode (digitalPin,INPUT);

  pinMode(redPin, OUTPUT); //set redPin as OUTPUT
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  
  pinMode(buzzerPin,OUTPUT);//set the buzzer as as OUTPUT
  digitalWrite(buzzerPin,LOW);//initialize the buzzerPin as LOW level

  pinMode(motorIn1,OUTPUT);
  pinMode(motorIn2,OUTPUT);

  pinMode(Servo_Pin, OUTPUT);  //初始化舵机为输出模式
  myservo.attach(Servo_Pin);    //设置舵机控制引脚为6
  myservo.write(0);    //初始化舵机位置0
  set_tele();
  Serial.begin(9600);
} 
void loop()
{  
  boolean stat = digitalRead(digitalInPin);
  Serial.print("D0: "); 
  Serial.println(stat); // print to serial monitor 
  Serial.println(" ");

  
  Astate=analogRead(analogPin);//read the value of A0
  Serial.println(Astate); //peint 

  if( stat == LOW)
  {
    analogWrite(motorIn1,0);
    analogWrite(motorIn2,rank3);
    
    analogWrite(redPin, 255); //red
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 0);
    //digitalWrite(buzzerPin,LOW);

    myservo.write(90); //舵机旋转至90度
    delay(5000);      // 延时3000ms
    myservo.write(0);//舵机旋转至0度
    delay(1000);      // 延时3000ms

    for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      {
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(2);    //wait for 5 milliseconds   
      }
      delay(1000);   //wait for 4 seconds on highest frequence
      for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      {
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(2);  //delay 10ms
      }

      tele();
  }

  
  if((Astate>120 && Astate<150))
  {
    analogWrite(motorIn1,0);
    analogWrite(motorIn2,rank1);
    
    analogWrite(redPin, 0); //red
    analogWrite(greenPin, 255);
    analogWrite(bluePin, 0);
    
    //digitalWrite(buzzerPin,LOW);

    myservo.write(90); //舵机旋转至90度
    delay(5000);      // 延时3000ms
    myservo.write(0);//舵机旋转至0度
    delay(1000);      // 延时3000ms


    for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      {
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(10);    //wait for 5 milliseconds   
      }
      delay(4000);   //wait for 4 seconds on highest frequence
      for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      {
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(10);  //delay 10ms
      }

  }
  else if((Astate>=150 && Astate<200))
  {
    analogWrite(motorIn1,0);
    analogWrite(motorIn2,rank2);
    
    analogWrite(redPin, 0); //red
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 255);
    //digitalWrite(buzzerPin,LOW);

    myservo.write(90); //舵机旋转至90度
    delay(5000);      // 延时3000ms
    myservo.write(0);//舵机旋转至0度
    delay(1000);      // 延时3000ms

    for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      {
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(5);    //wait for 5 milliseconds   
      }
      delay(2000);   //wait for 4 seconds on highest frequence
    for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      {
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(5);  //delay 10ms
      }
    
  }
  else if((Astate>=200))
  {
    analogWrite(motorIn1,0);
    analogWrite(motorIn2,rank3);
    
    analogWrite(redPin, 255); //red
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 0);
    //digitalWrite(buzzerPin,LOW);

    myservo.write(90); //舵机旋转至90度
    delay(5000);      // 延时3000ms
    myservo.write(0);//舵机旋转至0度
    delay(1000);      // 延时3000ms

    for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      {
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(2);    //wait for 5 milliseconds   
      }
      delay(1000);   //wait for 4 seconds on highest frequence
      for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      {
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(2);  //delay 10ms
      }

      tele();
/*      
    Serial.print("AT+CMGD=1");
    Serial.print("\r\n");
    Serial.print("AT");
    Serial.print("\r\n");
    Serial.print("AT+CPIN?");
    Serial.print("\r\n");
    Serial.print("AT+CSQ");
    Serial.print("\r\n");
    Serial.print("AT+CREG?");
    Serial.print("\r\n");
    Serial.print("AT+CGATT?");
    Serial.print("\r\n");
    Serial.print("ATD15336551683;");
    Serial.print("\r\n");
*/    
  }
  else
  {
    analogWrite(redPin, 0); //red
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 0);
    
    //digitalWrite(buzzerPin,HIGH);
    pinMode(buzzerPin,INPUT);
    pinMode(motorIn1,0);
    pinMode(motorIn2,0);
  }

  
  
  delay(200);//delay 200ms


 while (Serial.available())
    {
      comdata= Serial.read();
      if(comdata==49)
      {
        Serial.print("open the door\n");
        myservo.write(90); //舵机旋转至90度
        delay(1000);      // 延时3000ms
        myservo.write(0);//舵机旋转至0度
        delay(1000);      // 延时3000ms
      }
      if(comdata==50)
      {
        Serial.print("open fmq\n");
        for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800
      {
        tone(8,i);   //in pin7 generate a tone,it frequence is i
        delay(5);    //wait for 5 milliseconds   
      }
      delay(4000);   //wait for 4 seconds on highest frequence
      for(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200
      {
        tone(8,i);  //in pin7 generate a tone,it frequence is i
        delay(10);  //delay 10ms
      }
        delay(100);
     }
     if(comdata==51)
      {
        Serial.print("close fmq\n");
        pinMode(buzzerPin,INPUT);
        delay(100);
     }
     if(comdata==52)
      {
        Serial.print("111\n");
        analogWrite(motorIn1,0);
        analogWrite(motorIn2,rank1);
        delay(100);
     }
     if(comdata==74)
      {
        Serial.print("222\n");
        analogWrite(motorIn1,0);
        analogWrite(motorIn2,rank2);
        delay(100);
     }
     if(comdata==54)
      {
        Serial.print("333\n");
        analogWrite(motorIn1,0);
        analogWrite(motorIn2,rank3);
        delay(100);
     }
    }
}


五、演示视频

B站演示视频
CSDN演示视频

  • 11
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
要制作一个基于Arduino Mega2560的烟雾报警器,你需要以下材料: - 一个Arduino Mega2560控制板 - 一个烟雾传感器模块 - 一个蜂鸣器 - 杜邦线 - 面包板 - 9V电池 接下来是制作步骤: 1. 将烟雾传感器模块连接到Arduino Mega2560的数字引脚2上,将蜂鸣器连接到数字引脚3上。接线方法可以参考传感器模块和蜂鸣器的说明书,也可以通过搜索引擎来获取连接图。 2. 将Arduino Mega2560连接到电脑,并打开Arduino IDE软件。 3. 在Arduino IDE中,新建一个空白工程,并编写代码。代码的主要逻辑如下: - 首先定义数字引脚2为输入模式,数字引脚3为输出模式。 - 然后通过循环读取数字引脚2的值,如果检测到烟雾,则将数字引脚3输出高电平,同时蜂鸣器发出警报声音。 4. 完成代码编写后,将代码上传到Arduino Mega2560控制板上。 5. 将面包板和电池连接起来,将Arduino Mega2560控制板插入面包板上,用杜邦线连接好电池、烟雾传感器模块和蜂鸣器。 6. 将面包板上的杜邦线插入Arduino Mega2560控制板上对应的引脚。 7. 打开电源,测试烟雾报警器是否正常工作。如果检测到烟雾,则蜂鸣器应该会发出声音,同时数字引脚3也会输出高电平。 以上就是制作一个基于Arduino Mega2560的烟雾报警器的步骤。注意,这只是一个简单的示例,实际应用中还需要考虑更多的因素,例如如何调整传感器的灵敏度、如何处理误报等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond谚语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值