如何使用Arduino、ESP8266和气体传感器制作物联网烟雾探测系统

发布于 2020-08-13  93 次阅读


在本篇文章中,我们将制作一个物联网烟雾探测系统,其中MQ-2烟雾传感器感知附近是否有烟雾。如果附近有烟雾,则蜂鸣器将开始发出蜂鸣声,红色LED指示灯被点亮,并且我们将使用ESP8266模块创建的网页上显示警告。可以使用任何连接的设备(如移动设备、平板电脑或PC)访问此网页。

所需的组件

●    Arduino开发板

●    ESP8266 Wi-Fi模块

●    MQ-2气体传感器

●    绿色和红色LED

●    蜂鸣器

●    连接导线

●    面包板

烟雾报警器如何工作?

MQ-2烟雾传感器将以模拟电压的形式提供输出。我们在代码中设置了一个条件,即如果传感器的输出值大于400,则蜂鸣器将开始发出蜂鸣声,红色LED将被点亮;如果传感器的输出值小于400,则蜂鸣器将保持静音,绿色LED将被点亮。

这里使用的ESP模块将在IP地址创建一个网页,并将数据发送到该IP地址,然后在改网页显示数据。上传代码后,可以在串行监视器中看到此IP地址,如下所示。

当您在浏览器中键入此IP地址时,项目的输出将显示在网页中,如下图所示。

电路原理图

首先,将ESP8266模块连接到Arduino开发板。为了将ESP8266与Arduino正确连接,我们使用了ESP-01适配器模块,这将使连接变得非常容易。该适配器模块内置5V至3.3V稳压器,这意味着您不必使用任何电阻。

将ESP-01适配器的VCC引脚连接到Arduino上的5V引脚,将ESP-01适配器的GND连接到Arduino上的GND。接下来,将适配器的TX引脚连接到Arduino上的引脚2,将RX引脚从适配器连接到Arduino上的引脚3。

然后,将MQ-2气体传感器与Arduino连接。将气体传感器上的VCC和GND连接到Arduino上的5V和GND引脚。然后将MQ-2气体传感器上的A0引脚连接到Arduino上的A0。

之后,将蜂鸣器和LED连接到Arduino。将蜂鸣器上的正极连接到Arduino上的引脚10,将蜂鸣器上的负极连接到Arduino上的GND。然后通过220欧姆电阻将LED的负极连接到GND,将正极连接到Arduino的引脚8和9。

代码说明

首先,添加软件serial库。serial库允许我们在Arduino的其他引脚上使用TX和RX通信,而不是仅使用默认的TX和RX引脚。然后我们定义了我们在Arduino上连接这些TX和RX引脚的位置。

  1. #include <SoftwareSerial.h>
  2. #define DEBUG true
  3. SoftwareSerial wifi_module(2,3); // Connect TX pin of esp to the pin 2 of Arduino and RX pin of esp to the pin 3 of Arduino

复制代码

在下面的代码中,我们声明了LED、蜂鸣器和烟雾传感器连接到Arduino开发板的引脚。

  1. int red_led_pin = 9;
  2. int green_led_pin = 8;
  3. int buzzer_pin = 10;
  4. int smoke_sensor_pin = A0;

复制代码

setup()函数中,首先,我们设置串行通信和wifi模块的波特率为9600。然后将LED引脚和蜂鸣器引脚设置为输出引脚,因为我们将这些引脚的输出提供给LED和蜂鸣器。 最后,我们将烟雾传感器引脚定义为输入,因为烟雾传感器引脚将从传感器接收输入并将其传送给Arduino。

  1. Serial.begin(9600);
  2.   wifi_module.begin(9600); // Set the baudrate according to your esp8266
  3.   pinMode(red_led_pin, OUTPUT);
  4.   pinMode(green_led_pin, OUTPUT);
  5.   pinMode(buzzer_pin, OUTPUT);
  6.   pinMode(smoke_sensor_pin, INPUT);

复制代码

以下代码将调用函数,并将在ESP提供的IP地址处设置服务器。 然后ESP将在此IP地址发送数据。

  1. esp8266_command("AT+RST\r\n",2000,DEBUG); // reset module
  2.   esp8266_command("AT+CWMODE=2\r\n",1000,DEBUG); // configure as access point
  3.   esp8266_command("AT+CIFSR\r\n",1000,DEBUG); // get ip address
  4.   esp8266_command("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections
  5.   esp8266_command("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80

复制代码

loop()函数中,我们从烟雾传感器读取值,然后应用一个条件,如果输出值大于400,则红色LED将亮起,蜂鸣器将开始发出蜂鸣声。 如果输出值小于400,则绿色LED指示灯将亮起,蜂鸣器将保持静音。

  1. int analogSensor = analogRead(smoke_sensor_pin);
  2.   if (analogSensor > 400)
  3.   {
  4.     digitalWrite(red_led_pin, HIGH);
  5.     digitalWrite(green_led_pin, LOW);
  6.     tone(buzzer_pin, 1000, 200);
  7.   }

复制代码

以下代码将在网页上打印输出数据。 首先,我们将在网页顶部打印“IoT Smoke detection system”。 然后在第二行,我们将打印输出烟雾值,在第三行,我们将根据条件打印“Everything Normal”或“DANGER! Move Somewhere Else“。

  1. String webpage = "<h1>IOT Smoke Detection System</h1>";
  2.       webpage +="<p>Smoke Value is ";
  3.       webpage += analogSensor;
  4.       webpage +="</p>";
  5.       if (analogSensor > 400)
  6.   {
  7.     webpage +="<h5>DANGER! Move Somewhere Else</h5>";
  8.   }
  9.   else
  10.   {
  11.     webpage +="<h4>Everything Normal</h4>";
  12.   }

复制代码

下面的代码将命令发送到ESP,并将在串口监视器上打印ESP的输出。

  1. String esp8266_command(String command, const int timeout, boolean debug)
  2. {
  3.     String response = "";
  4.     wifi_module.print(command);
  5.     long int time = millis();
  6.     while( (time+timeout) > millis())
  7.     {
  8.       while(wifi_module.available())
  9.       {
  10.         char c = wifi_module.read();
  11.         response+=c;
  12.       }  
  13.     }

复制代码

以上就是本文的全部内容,希望您能让它运转起来! 如果有任何疑问,欢迎在本帖下面进行回复。

代码

本篇文章的完整代码如下所示: main.rar (1.04 KB, 下载次数: 133)

原文:https://www.yiboard.com/thread-1072-1-1.html


一个追求爱搞的小逗逼