- 所需组件:
- 电路图和说明:
- 工作说明:
- 代码说明:
- “;网页+ =”空气质量为“;网页+ = air_quality;网页+ =” PPM“;网页+ =”
“;
以下代码将调用名为sendData的函数,并将数据和消息字符串发送至网页以显示。
sendData(cipSend,1000,DEBUG); sendData(网页,1000,调试); cipSend =“ AT + CIPSEND =”; cipSend + = connectionId; cipSend + =“,”; cipSend + = webpage.length(); cipSend + =“ \ r \ n”;
以下代码将在液晶显示屏上打印数据。我们已经采用了各种条件来检查空气质量,如果污染超过1000 PPM,LCD将根据条件打印消息,并且蜂鸣器还将发出蜂鸣声。
lcd.setCursor(0,0); lcd.print(“空气质量是”);lcd.print(air_quality); lcd.print(“ PPM”); lcd.setCursor(0,1); 如果(air_quality <= 1000){lcd.print(“ Fresh Air”); digitalWrite(8,LOW);
最后,以下功能将发送并显示网页上的数据。我们存储在名为'webpage'的字符串中的数据将保存在名为'command'的字符串中。然后,ESP将从“命令”中逐个读取字符,并将其打印在网页上。
String sendData(String command,const int timeout,boolean debug){字符串响应=“”; esp8266.print(命令); //将读取的字符发送给esp8266 long int time = millis(); while((time + timeout)> millis()){while(esp8266.available()){// esp有数据,因此将其输出显示到串行窗口char c = esp8266.read(); //读取下一个字符。响应+ = c; }} if(debug){Serial.print(response); 返回响应;}
- 项目的测试和输出:
在这个项目中,我们将制作一个基于IoT的空气污染监测系统,在该系统中,我们将使用Internet通过网络服务器监测空气质量,并在空气质量下降到一定水平以上(即当有足够数量的空气质量下降)时触发警报空气中存在诸如CO2,烟,酒精,苯和NH3等有害气体。它会在LCD和网页上以PPM显示空气质量,因此我们可以非常轻松地对其进行监控。
以前我们使用MQ6传感器构建了LPG检测器,使用MQ2传感器构建了烟雾检测器,但是这次我们使用MQ135传感器作为空气质量传感器,这是监测空气质量的最佳选择,因为它可以检测到大多数有害气体并可以测量其数量准确。在此物联网项目中,您可以使用计算机或移动设备从任何地方监视污染水平。我们可以在任何地方安装该系统,也可以在污染程度超过一定水平时触发某些设备,例如我们可以打开排气扇或向用户发送警报SMS /邮件。
所需组件:
- MQ135气体传感器
- Arduino Uno
- Wi-Fi模块ESP8266
- 16X2 LCD
- 面包板
- 10K电位器
- 1K欧姆电阻
- 220欧姆电阻
- 蜂鸣器
您可以从这里购买上述所有组件。
电路图和说明:
首先,我们将ESP8266与Arduino连接。 ESP8266在3.3V电压下运行,如果您从Arduino给它提供5V电压,则它将无法正常工作,并且可能会损坏。将VCC和CH_PD连接到Arduino的3.3V引脚。 ESP8266的RX引脚工作在3.3V电压上,当我们将其直接连接到Arduino时,它将不与Arduino通信。因此,我们将不得不为其制造一个分压器,它将5V转换为3.3V。这可以通过串联三个电阻来实现,就像我们在电路中所做的那样。通过电阻将ESP8266的TX引脚连接到Arduino的引脚10,将esp8266的RX引脚连接到Arduino的引脚9。
ESP8266 Wi-Fi模块可让您的项目 访问Wi-Fi或Internet。这是一种非常便宜的设备,使您的项目非常强大。它可以与任何微控制器通信,并且是物联网平台中最领先的设备。在此处了解有关将ESP8266与Arduino结合使用的更多信息。
然后,我们将MQ135传感器与Arduino连接。将VCC和传感器的接地引脚连接到Arduino的5V和接地,并将传感器的模拟引脚连接到Arduino的A0。
将蜂鸣器连接到Arduino的引脚8,当条件变为真时,它将开始发出蜂鸣声。
最后,我们将LCD与Arduino连接。LCD的连接如下
- 将引脚1(VEE)接地。
- 将引脚2(VDD或VCC)连接到5V。
- 将引脚3(V0)连接到10K电位计的中间引脚,并将电位计的另一端连接到VCC和GND。电位器用于控制LCD的屏幕对比度。除10K以外的其他电位器也可以使用。
- 将引脚4(RS)连接到Arduino的引脚12。
- 将引脚5(读/写)连接到Arduino的地面。该引脚不经常使用,因此我们将其接地。
- 将引脚6(E)连接到Arduino的引脚11。RS和E引脚是用于发送数据和字符的控制引脚。
- 以下四个引脚是数据引脚,用于与Arduino通信。
将引脚11(D4)连接到Arduino的引脚5。
将引脚12(D5)连接到Arduino的引脚4。
将引脚13(D6)连接到Arduino的引脚3。
将引脚14(D7)连接到Arduino的引脚2。
- 通过220欧姆电阻将引脚15连接到VCC。该电阻将用于设置背光亮度。较大的值会使背光更暗。
- 将引脚16接地。
工作说明:
MQ135传感器可以感应NH3,NOx,酒精,苯,烟,CO2和其他一些气体,因此对于我们的空气质量监测项目而言,它是理想的气体传感器。当我们将其连接到Arduino时,它将感应出气体,并且我们将获得PPM(百万分之一)的污染水平。MQ135气体传感器以电压电平形式提供输出,我们需要将其转换为PPM。因此,为了在PPM中转换输出,这里我们使用了MQ135传感器的库,在下面的“代码说明”部分中将对其进行详细说明。
当附近没有气体且空气质量的安全水平为350 PPM并且不应超过1000 PPM时,传感器给出的值为90。当它超过1000 PPM的极限时,它会开始引起头痛,嗜睡和停滞,陈旧,闷热的空气,如果超过2000 PPM,则可能导致心律加快和许多其他疾病。
当该值小于1000 PPM时,LCD和网页将显示“ Fresh Air”。每当该值增加1000 PPM时,蜂鸣器就会开始发出蜂鸣声,并且LCD和网页将显示“空气不良,打开Windows”。如果增加2000,则蜂鸣器将持续发出蜂鸣声,并且LCD和网页将显示“ Danger!转移到新鲜空气中”。
代码说明:
在开始对该项目进行编码之前,我们需要首先校准MQ135气体传感器。将传感器的输出转换为PPM值涉及很多计算,我们在之前的烟雾探测器项目中已经进行了此计算。但是这里我们使用的是MQ135库,您可以从这里下载并安装此MQ135库:https://github.com/GeorgK/MQ135。
使用此库,只需使用以下两行即可直接获取PPM值:
MQ135 gas传感器= MQ135(A0); float air_quality = gasSensor.getPPM();
但是在此之前,我们需要校准MQ135传感器,要校准该传感器,请上传以下给定的代码,并使其运行12至24小时,然后获得 RZERO 值。
#include“ MQ135.h” void setup(){Serial.begin(9600); } void loop(){MQ135 gasSensor = MQ135(A0); //将传感器连接到A0引脚上float rzero = gasSensor.getRZero(); Serial.println(rzero); 延迟(1000); }
获得 RZERO 值之后。将RZERO值放入下载的“ MQ135.h”库文件中: #define RZERO 494.63
现在,我们可以开始我们的空气质量监测项目的实际代码了。
在代码中,我们首先定义了气体传感器和LCD的库和变量。通过使用软件串行库,我们可以将任何数字引脚设置为TX和RX引脚。在此代码中,我们将ESP8266的引脚9用作RX引脚,将引脚10用作TX引脚。然后,我们包括了LCD的库,并为它们定义了引脚。我们还定义了另外两个变量:一个用于传感器模拟引脚,另一个用于存储 air_quality 值。
#包括
然后,将引脚8声明为连接蜂鸣器的输出引脚。l cd.begin(16,2) 命令将启动LCD来接收数据,然后将光标置于第一行并打印出 “ circuitdigest” 。然后,将光标置于第二行并打印 “ Sensor Warming” 。
pinMode(8,输出); lcd.begin(16,2); lcd.setCursor(0,0); lcd.print(“ circuitdigest”); lcd.setCursor(0,1); lcd.print(“传感器变暖”);延迟(1000);
然后,我们将设置串行通信的波特率。不同的ESP具有不同的波特率,因此请根据您的ESP的波特率进行写入。然后,我们将发送命令以将ESP设置为与Arduino通信,并在串行监视器上显示IP地址。
Serial.begin(115200); esp8266.begin(115200); sendData(“ AT + RST \ r \ n”,2000,DEBUG); sendData(“ AT + CWMODE = 2 \ r \ n”,1000,DEBUG); sendData(“ AT + CIFSR \ r \ n”,1000,DEBUG); sendData(“ AT + CIPMUair_quality = 1 \ r \ n”,1000,DEBUG); sendData(“ AT + CIPSERVER = 1,80 \ r \ n”,1000,DEBUG); pinMode(sensorPin,INPUT); lcd.clear();
为了在Web浏览器中的网页上打印输出,我们将不得不使用 HTML编程。因此,我们创建了一个名为 webpage 的字符串并将 输出存储在其中。我们从输出中减去48,因为 read() 函数返回ASCII十进制值,而第一个十进制数字0从48开始。
if(esp8266.available()){if(esp8266.find(“ + IPD,”)){delay(1000); int connectionId = esp8266.read()-48; 字符串网页=“
物联网空气污染监测系统
“;网页+ =”“;网页+ =”空气质量为“;网页+ = air_quality;网页+ =” PPM“;网页+ =”
“;
以下代码将调用名为 sendData 的函数,并将数据和消息字符串发送至网页以显示。
sendData(cipSend,1000,DEBUG); sendData(网页,1000,调试); cipSend =“ AT + CIPSEND =”; cipSend + = connectionId; cipSend + =“,”; cipSend + = webpage.length(); cipSend + =“ \ r \ n”;
以下代码将在液晶显示屏上打印数据。我们已经采用了各种条件来检查空气质量,如果污染超过1000 PPM,LCD将根据条件打印消息,并且蜂鸣器还将发出蜂鸣声。
lcd.setCursor(0,0); lcd.print(“空气质量是”);lcd.print(air_quality); lcd.print(“ PPM”); lcd.setCursor(0,1); 如果(air_quality <= 1000){lcd.print(“ Fresh Air”); digitalWrite(8,LOW);
最后,以下功能将发送并显示网页上的数据。我们存储在名为 'webpage'的 字符串中的数据将保存在名为 'command'的 字符串中。然后,ESP将从 “命令”中 逐个读取字符,并将其打印在网页上。
String sendData(String command,const int timeout,boolean debug){字符串响应=“”; esp8266.print(命令); //将读取的字符发送给esp8266 long int time = millis(); while((time + timeout)> millis()){while(esp8266.available()){// esp有数据,因此将其输出显示到串行窗口char c = esp8266.read(); //读取下一个字符。响应+ = c; }} if(debug){Serial.print(response); 返回响应;}
项目的测试和输出:
在上传代码之前,请确保您已连接到ESP8266设备的Wi-Fi。上传后,打开串行监视器,它将显示如下所示的IP地址。
在浏览器中输入该IP地址,它将显示如下输出。如果要在PPM中查看当前的空气质量值,则必须再次刷新页面。
我们已经设置了本地服务器来演示其工作原理,您可以查看下面的视频。但是要监视世界各地的空气质量,您需要将端口80(用于HTTP或Internet)转发到设备的本地或私有IP地址(192.168 *)。端口转发后,所有传入的连接都将转发到该本地地址,您只需在任何地方输入Internet的公共IP地址即可打开上面显示的网页。您可以通过登录路由器(192.168.1.1)来转发端口,并找到设置端口转发的选项。