电子说
烟雾报警器如何工作?
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引脚和Arduino上的ESP-01适配器的GND到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上。
代码说明
首先,添加软件序列库。软件串行库允许我们在Arduino的其他引脚上使用TX和RX通信,而不是仅使用默认的TX和RX引脚。然后我们定义了我们在Arduino上连接这些TX和RX引脚的位置。
#include #define DEBUG true SoftwareSerial wifi_module(2,3);//将esp的TX引脚连接到Arduino的引脚2和esp的RX引脚连接到Arduino的引脚3
在下面的行中,我们已经声明了LED,蜂鸣器和烟雾传感器的引脚。
int red_led_pin = 9; int green_led_pin = 8; int buzzer_pin = 10; int smoke_sensor_pin = A0;
在设置功能中,首先,我们设置串行通信的波特率和9400的wifi模块。然后我们声明了引脚并且蜂鸣器引脚作为输出引脚,因为我们将这些引脚的输出提供给LED和蜂鸣器。最后,我们将烟雾传感器引脚声明为输入,因为烟雾传感器引脚将从传感器接收输入并将其传送给Arduino。
Serial.begin(9600) ); wifi_module.begin(9600);//根据您的esp8266 pinMode(red_led_pin,OUTPUT)设置波特率; pinMode(green_led_pin,OUTPUT); pinMode(buzzer_pin,OUTPUT) ; pinMode(smoke_sensor_pin,INPUT);
这些线路将调用该功能,并将在ESP提供的IP地址处设置服务器。然后ESP将在此IP地址发送数据。
esp8266_command(“AT + RST r n”,2000,DEBUG);//reset module esp8266_command(“AT + CWMODE = 2 r n”,1000,DEBUG);//配置为接入点 esp8266_command(“AT + CIFSR r n”,1000,DEBUG);//获取IP地址 esp8266_command(“AT + CIPMUX = 1 r n”,1000,DEBUG);//为多个连接配置 esp8266_command(“AT + CIPSERVER = 1,80 r n”,1000,DEBUG);//打开端口80上的服务器
在循环函数中,我们读取来自烟雾传感器的值然后应用一个条件,如果输出值大于400,则红色LED将亮起,蜂鸣器将开始发出蜂鸣声。如果输出值小于400,则绿色LED指示灯将亮起,蜂鸣器将保持静音。
int analogSensor = analogRead(smoke_sensor_pin); if(analogSensor》 400) { digitalWrite(red_led_pin,HIGH); digitalWrite(green_led_pin,LOW); 音(buzzer_pin,1000,200); }
以下行将打印网页上的数据。首先,我们将在顶部打印“物联网烟雾探测系统”。然后在第二行,我们将打印烟雾值,在第三行,我们将打印“Everything Normal”或“DANGER!移动到其他地方“取决于条件。
字符串网页=”
物联网烟雾探测系统
“; 网页+ = “
烟雾值是”; 网页+ = analogSensor; 网页+ =“
”; if(analogSensor》 400) ) { 网页+ =“
危险!移动其他地方
”; } 其他 { 网页+ =“
一切正常
”; }
下面的代码会将命令发送到ESP,并在串口监视器上打印ESP的输出。
String esp8266_command(String command,const int timeout,boolean debug) { String response =“”; wifi_module.print(command); long int time = millis(); while((time + timeout)》 millis()) { while (wifi_module.available()) { char c = wifi_module.read(); 响应+ = c; } } 就是这样,希望你能让它运转起来!此外,您还可以查看我的博客,查看ElectronicsHobbyist.com上的其他一些项目。
代码
#include #define DEBUG true SoftwareSerial wifi_module (2,3);//将esp的TX引脚连接到Arduino的引脚2和esp的RX引脚连接到Arduino的引脚3 int red_led_pin = 9; int green_led_pin = 8; int buzzer_pin = 10; int smoke_sensor_pin = A0; void setup() { Serial。开始(9600);wifi_module.begin(9600);//根据您的esp8266 pinMode(red_led_pin,OUTPUT)设置波特率; pinMode(green_led_pin,OUTPUT); pinMode(buzzer_pin,OUTPUT) ; pinMode(smoke_sensor_pin,INPUT); esp8266_command(“AT + RST r n”,2000,DEBUG);//reset moduleesp8266_command(“AT + CWMODE = 2 r n”,1000,DEBUG);//配置为接入点 esp8266_command(“AT + CIFSR r n”,1000,DEBUG);//获取IP地址 esp8266_command(“AT + CIPMUX = 1 r n”,1000,DEBUG);//为多个连接配置 esp8266_command(“AT + CIPSERVER = 1,80 r n”,1000,DEBUG);//在端口80上打开服务器 } void loop() { int analogSensor = analogRead(smoke_sensor_pin); if(analogSensor》 400) { digitalWrite(red_led_pin,HIGH); digitalWrite(green_led_pin,LOW); 音(buzzer_pin,1000,200); } 其他 { digitalWrite(red_led_pin, LOW); digitalWrite(green_led_pin,HIGH); noTone(buzzer_pin); } if(wifi_module.available( )) { if(wifi_module.find(“+ IPD,”)) { delay(1000); int connectionId = wifi_module.read() - 48; String webpage =“
物联网烟雾探测系统
”; 网页+ =“
烟雾值是”; 网页+ = analogSensor; 网页+ =“
“; if(analogSensor》 400) { 网页+ =”
危险!移动到其他地方
“; } 其他 { 网页+ =”
一切正常
“; } 字符串cipSend =”AT + CIPSEND =“; cipSend + = connectionId; cipSend + =“,”; cipSend + = webpage.length(); cipSend + =“ r n”; esp8266_command(cipSend,1000,DEBUG); esp8266_command(网页,1000,DEBUG); 字符串closeCommand =“AT + CIPCLOSE = “;closeCommand + = connectionId;//追加连接ID closeCommand + =” r n“; esp8266_command( closeCommand,3000,DEBUG); } } } 字符串esp8266_command(字符串命令,const int timeout,布尔调试) { 字符串响应=“”; wifi_module.print(命令); long int time = millis() ; while((时间+超时)》 millis()) { while(wifi_module.available()) { char c = wifi_module.read(); 响应+ = c; } } if(debug) { Serial.print(响应); } 返回响应; }
全部0条评论
快来发表一下你的评论吧 !