使用 Blynk IOT 長時(shí)間監(jiān)測周圍的灰塵和大顆粒 (》0.5μm) 并繪制數(shù)據(jù)以供進(jìn)一步研究。
在這個(gè)項(xiàng)目中,我制作了一個(gè)基于物聯(lián)網(wǎng)的塵埃密度監(jiān)測器,它可以測量周圍的塵埃并通過互聯(lián)網(wǎng)發(fā)送數(shù)據(jù),我可以以圖形方式監(jiān)測一個(gè)地方塵埃密度的長期值。這可以幫助制定未來的項(xiàng)目,如改善空氣污染和許多其他項(xiàng)目。
關(guān)于傳感器(夏普 gp2y1014au0f)
夏普 gp2y1014au0f 是一款使用 IR LED 的微粒傳感器,當(dāng)空氣中的微粒進(jìn)入傳感器時(shí),光線會向光電探測器反彈。這種技術(shù)稱為激光散射。散射(反彈)光的強(qiáng)度取決于灰塵顆粒。塵埃顆粒越多,彈跳或散射就越嚴(yán)重。光檢測器上的這種光強(qiáng)度變化會改變傳感器的輸出電壓。我們可以讀取輸出電壓并測量空氣中的灰塵密度。
我將傳感器作為套件購買。該套件包括:
1x GP2Y1014AU0F 傳感器
1 x 6 針尾纖電纜,用于輕松連接傳感器
1 x 150 歐姆電阻
1 x 220uF 電容
因?yàn)樗?6 個(gè)連接器,我必須添加電阻器和電容器,所以我用它制作了一個(gè)模塊。
制作項(xiàng)目
這個(gè)項(xiàng)目基于物聯(lián)網(wǎng),所以我使用 Arduino UNO 微控制器和 ESP8266 (ESP01) Wi-Fi 模塊來連接互聯(lián)網(wǎng)。我還使用 Blynk(物聯(lián)網(wǎng)平臺)應(yīng)用程序來可視化 Arduino 發(fā)送的數(shù)據(jù)。
Arduino 和 ESP01
要將 Wi-Fi 添加到 Arduino UNO,我連接了一個(gè) ESP-01 模塊。在此之前,您可能需要更新 ESP8266 模塊的固件。
連接:
Arduino RX - ESP01 TX
Arduino TX - ESP01 RX
Arduino 3.3V - ESP01 VCC 和芯片選擇引腳
Arduino GND - ESP01 GND
Arduino 和 GP2Y1014AU0F
GP2Y1014AU0F中的紅外發(fā)射器必須通過 Arduino 的脈沖進(jìn)行控制才能運(yùn)行。傳感器的輸出是模擬信號,所以它應(yīng)該連接到 Arduino 的模擬引腳。所以我相應(yīng)地連接傳感器和Arduino。
連接:
Arduino D7 - 傳感器 LED
Arduino A5 - 傳感器 VOUT
編碼
首先,我們必須使用一些庫
#include
#include
#include
根據(jù)傳感器數(shù)據(jù)表,首先必須打開 IR LED 并等待 280μs 才能讀取讀數(shù)。然后從模擬引腳讀取電壓值。這個(gè)操作大約需要 50μs,所以給一個(gè) 50μs 的延遲,然后關(guān)閉 IR led。根據(jù)數(shù)據(jù)表,IR LED 應(yīng)每 10ms 開啟和關(guān)閉一次脈沖,因此它必須等待剩余的 (10000-280-50)μs = 9670μs。
?digitalWrite(led,LOW);
?delayMicroseconds(280);
?SensorOut = analogRead(SensorPin);
?delayMicroseconds(50);
?digitalWrite(led,HIGH);
?delayMicroseconds(9670);
然后要計(jì)算灰塵密度,我們需要數(shù)據(jù)表中的一些值,K 是傳感器的靈敏度,它是 0.5V/100μgm/m^3。Voltage_noDust是空氣中沒有灰塵時(shí)的電壓。這個(gè)電壓從0.1V-1V變化。您可能需要調(diào)整此值。
之后使用一些簡單的計(jì)算,我們可以測量灰塵密度
?SensorVo = SensorOut*(5.0/1024);
?Dust = (SensorVo-Voltage_noDust)*100/K;
然后使用 Blynk.virtualWrite(V1,Dust); 函數(shù)將灰塵密度值發(fā)送到云端。該值每秒發(fā)送一次。
其余代碼由注釋解釋。
Blynk 應(yīng)用程序設(shè)置
按照步驟
上傳代碼后檢查一切是否正常。
之后您可以從應(yīng)用程序中導(dǎo)出 Excel 數(shù)據(jù),并將其發(fā)送到您的電子郵件地址,然后使用該數(shù)據(jù)進(jìn)行進(jìn)一步分析。
Dust_density monitor:
#define BLYNK_PRINT Serial
#include
#include
#include
char auth[] = "fI1Hhyw20XUE7WmUhcJhJ_QAFHVYkPxQ"; ?//The authentication token send to your email?
//Your WIFI credentials
char ssid[] = "ABID"; ? ? ? ? ? ? ? ? ? ? ? ? ? ??
char pass[] = "8901234567";
#define ESP8266_BAUD 115200 ? ?
ESP8266 wifi(&Serial);
int SensorPin = A5;
int led = 7; ?
float SensorOut = 0;
float SensorVo = 0;
float Dust = 0;
float Voltage_noDust = 0.12; ? ? ?//calibrate by changing this
float K = 0.5; ? ? ? ? ? ? ? ? ? ?//Sensitivity from the datasheet 0.5V/ugm/m^3
SimpleTimer timer;
void sendSensor(){ ?
? digitalWrite(led,LOW); ? ? ? ? ? ? ? ? ? ? //turning on the led
? delayMicroseconds(280); ? ? ? ? ? ? ? ? ? ?//wait for 0.28ms
? SensorOut = analogRead(SensorPin); ? ? ? ? //read the sensor output voltage
? delayMicroseconds(50); ? ? ? ? ? ? ? ? ? ? //wait for 50us
? digitalWrite(led,HIGH); ? ? ? ? ? ? ? ? ? ?//turning off the led
? delayMicroseconds(9670); ? ? ? ? ? ? ? ? ? //wait for (10000-280-50)=9670us
? SensorVo = SensorOut*(5.0/1024); ? ? ? ? ? //calculating sensor output voltage
? Dust = (SensorVo-Voltage_noDust)*100/K; ? ?//calculating Dust density(ugm)/m^3
?
? if ( Dust < 0)
? {
? ? Dust = 0.00;
? }
? Blynk.virtualWrite(V1,Dust); ?//sending data to the cloud
}
void setup()
{
?pinMode(led,OUTPUT);
?Serial.begin(115200);
?delay(10);
?Serial.begin(ESP8266_BAUD);
?delay(10);
?Blynk.begin(auth, wifi, ssid, pass);
?timer.setInterval(1000L, sendSensor); ? ? //set timer interval of 1s
}
void loop()
{
?Blynk.run();
?timer.run();
}
評論
查看更多