24小時聯系電話:18217114652、13661815404
中文
技術專題
城市空氣:一氧化碳、溫濕度監測物聯網系統
城市空氣:一氧化碳、溫濕度監測物聯網系統
由于空氣質量低、溫度異常和其他危及居民健康的因素,世界各地的城市地區都受到嚴重影響。該項目旨在監測和采樣城市中目標地點的大氣參數,例如一氧化碳濃度、溫度和濕度。隨后對收集到的數據進行采樣和分析,以確定影響這些關鍵參數的因素。在這個項目中,我們記錄了城市人口中兩個相距 5 公里的地點的數據。我們對數據進行了分析并推導出了影響這些結果的因素。
項目簡介:
該項目由基于 ESP8266 的開發板 NodeMCU 控制。它使用 MQ07 傳感器收集 CO 濃度數據,并使用 DHT11 傳感器監測溫度和濕度。一旦收集到數據,它將每分鐘上傳到云(ThingSpeak 平臺)。
我們在兩個不同的日子在兩個不同的地方收集了數據。數據已在每個位置收集了 24 小時。然后我們分析數據以找出 CO、溫度和濕度讀數的模式。這些數據模式幫助我們分配可能的原因并得出結論。
當 NODEMCU 將數據上傳到云端時,它會在 Thingspeak 云平臺上打上時間戳。ThingSpeak 將允許我們以圖表的形式可視化數據,以便我們可以定期監控數據。此外,上傳的數據可以在任何時區以“CSV”格式下載。
硬件:
NodeMCU板
DHT11(溫濕度傳感器)
MQ-07(氣體傳感器)
連接電線。
原型:
儀表板:
地點性質:
我們在兩個不同的地點收集了 24 小時的數據。
位置1:這是一棟公寓樓,大約有20戶人家。典型的城市氛圍,樹木較少,交通污染中等。
位置 2:在特定地點緊湊且緊湊的獨立房屋。典型的城市氛圍,樹木較少,交通污染中等。
數據集:
上述 Excel 電子表格由 CO、溫度和濕度數據組成。請注意,我們在位置 2 收集數據時遇到了 DHT11 問題,此后濕度和溫度已被丟棄。以下是這些數據集中的一些有趣觀察結果。
位置 1:烹飪引起的 CO 水平峰值
地點一:夜間下雨,氣溫下降,濕度偏高
位置 2:烹飪導致的高 CO 水平
位置 2:室外空氣的二氧化碳含量低于室內空氣
從下面的數據集中,我們可以推斷出以下觀察結果。
兩個地點的 CO 水平在早上到下午都達到峰值。這是由于使用液化石油氣的家庭烹飪。這導致 CO 水平急劇上升,隨后下午 CO 水平下降。
來自位置 2 的數據集顯示 CO 水平突然下降。這是由于傳感器放置在敞開的窗戶附近的原因。這允許更多的室外氣氛與傳感器交互。這得出結論,室外空氣中的 CO 水平低于室內空氣。這項關于室內和室外空氣比較的研究有一些類似的有趣觀察。
溫度和濕度是成反比的。每當溫度升高時,濕度就會下降,反之亦然。
算法:
將所需的密鑰(例如 API 密鑰、Thing Speak 的通道 ID、WiFi SSID 和密碼)作為字符串。
配置模擬和數字引腳以獲取輸入。
等待設備連接到 WiFi 熱點。
從 DHT11(溫度和濕度)和 MQ-07 讀取并存儲數據,然后將其存儲在變量中。
將硬件設置為每分鐘讀取傳感器數據。
將數據上傳到云端。
重復這些步驟。
代碼:
下載這些庫并將其移動到您的 Arduino 庫文件夾中。ESP8266、DHT-11庫和MQ-7。該項目由 L Mrudula Qury 構建和測試。您可以在此處從GitHub 存儲庫下載所有文件。
//圖書館
#include <ESP8266WiFi.h>
#include "dht.h" //for dht11 //溫濕度傳感器庫
#include "MQ7.h" //for mq07 //氣體傳感器庫
//....庫結束
//DHT設置
#define dht_apin D3 //數字引腳傳感器連接到NodeMCU的D3
DHT DHT;
//...設置結束
//Wifi 設置和 Thingspeak 憑證
char* ssid="你的 SSID"; //獲取wifi的ssid
char* pass="您的密碼"; //輸入對應的密碼
char* host="api.thingspeak.com";
char* writeapikey="IIHQG7GURQAKBDDM"; //
//...結尾
//引腳設置
const int mq07=A0; //Mq07連接到NodeMCU的模擬引腳A0
//...結尾
//MQ7設置
MQ7 mq7(A0, 3.3); //至于nodeMCU vcc=3.3v
//...結尾
無效設置(){
Serial.begin(115200);
WiFiClient客戶端;//客戶端變量
//引腳模式
pinMode(mq07,輸入);
//...結尾
//無線連接
WiFi.begin(ssid, pass);
而(WiFi.status()!= WL_CONNECTED)
{
延遲(200);
Serial.print("..");
}
Serial.println();
Serial.println("NodeMCU 已連接!");
Serial.println(WiFi.localIP());
//---------------------
}
// 項目所需的變量
浮動溫度、濕度;
浮動共同數量;
const int httpport = 80;
//--------------------------------------
無效循環(){
延遲(2000);
//來自DHT11的溫度和濕度
DHT.read11(dht_apin);
溫度=DHT.溫度;//加載溫度
濕度=DHT.濕度;//加載濕度
Serial.print("當前濕度 = ");
Serial.print(濕度);
Serial.print("%");
Serial.print("溫度 = ");
Serial.print(溫度);
Serial.println("C");
//.....結尾
//來自MQ07的CO
coquantity = mq7.getPPM(); //以PPM讀取COquantity
Serial.print("COquantity :");
Serial.print(coquantity);
Serial.println("ppm");
Serial.println("----------------------------------------- -------");
//....結尾
// 客戶端并將數據推送到服務器(云)
WiFiClient客戶端;
if(!client.connect(host,httpport))
{
Serial.println("沒有客戶端");
返回;
}
字符串 url="/update?key=";
url+=writeapikey;
//上傳溫度數據
url+="&field1=";
url+=字符串(濕度);
//----------------------------
// 上傳濕度數據
url+="&field2=";
url+=字符串(溫度);
//-------------
// 上傳光照強度數據
url+="&field3=";
url+=String(coquantity);
//-------------
// 上傳url到云端并斷開客戶端
client.print(String("GET ") + url + "HTTP/1.1\r\n" + "Host :" + host + "\r\n" + "Connection: close\r\n\r\n" );
客戶端停止();
//-------------
// 等待 60 秒
延遲(60000);
}