使用 Blynk IOT 長(zhǎng)時(shí)間監(jiān)測(cè)周?chē)幕覊m和大顆粒 (》0.5μm) 并繪制數(shù)據(jù)以供進(jìn)一步研究。
在這個(gè)項(xiàng)目中,我制作了一個(gè)基于物聯(lián)網(wǎng)的塵埃密度監(jiān)測(cè)器,它可以測(cè)量周?chē)膲m埃并通過(guò)互聯(lián)網(wǎng)發(fā)送數(shù)據(jù),我可以以圖形方式監(jiān)測(cè)一個(gè)地方塵埃密度的長(zhǎng)期值。這可以幫助制定未來(lái)的項(xiàng)目,如改善空氣污染和許多其他項(xiàng)目。
	
關(guān)于傳感器(夏普 gp2y1014au0f)
	
夏普 gp2y1014au0f 是一款使用 IR LED 的微粒傳感器,當(dāng)空氣中的微粒進(jìn)入傳感器時(shí),光線會(huì)向光電探測(cè)器反彈。這種技術(shù)稱為激光散射。散射(反彈)光的強(qiáng)度取決于灰塵顆粒。塵埃顆粒越多,彈跳或散射就越嚴(yán)重。光檢測(cè)器上的這種光強(qiáng)度變化會(huì)改變傳感器的輸出電壓。我們可以讀取輸出電壓并測(cè)量空氣中的灰塵密度。
我將傳感器作為套件購(gòu)買(mǎi)。該套件包括:
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 模塊來(lái)連接互聯(lián)網(wǎng)。我還使用 Blynk(物聯(lián)網(wǎng)平臺(tái))應(yīng)用程序來(lái)可視化 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ā)射器必須通過(guò) Arduino 的脈沖進(jìn)行控制才能運(yùn)行。傳感器的輸出是模擬信號(hào),所以它應(yīng)該連接到 Arduino 的模擬引腳。所以我相應(yīng)地連接傳感器和Arduino。
連接:
Arduino D7 - 傳感器 LED
Arduino A5 - 傳感器 VOUT
編碼
首先,我們必須使用一些庫(kù)
#include
#include
#include
根據(jù)傳感器數(shù)據(jù)表,首先必須打開(kāi) IR LED 并等待 280μs 才能讀取讀數(shù)。然后從模擬引腳讀取電壓值。這個(gè)操作大約需要 50μs,所以給一個(gè) 50μs 的延遲,然后關(guān)閉 IR led。根據(jù)數(shù)據(jù)表,IR LED 應(yīng)每 10ms 開(kāi)啟和關(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是空氣中沒(méi)有灰塵時(shí)的電壓。這個(gè)電壓從0.1V-1V變化。您可能需要調(diào)整此值。
之后使用一些簡(jiǎn)單的計(jì)算,我們可以測(cè)量灰塵密度
	?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();
	}
                        電子發(fā)燒友App
                    
                
                
          
        
        

















           
            
            
                
            
評(píng)論