
Arduino制作PM2.5測量儀(使用GP2Y1010AU0F灰塵傳感器)
GP2Y1010AU0F灰塵傳感器在STM32平台下使用夏普GP2Y1010AU0F灰塵傳感器測量PM2.5空氣污染指數中已經詳細介紹過,本文使用Arduino連接GP2Y1010AU0F灰塵傳感器,打造一個低成本的PM2.5測量儀,實時檢測空氣質量。以下是教程。
一、GP2Y1010AU0F灰塵傳感器原理介紹
本文再詳細介紹下這個傳感器的測量原理。
這是傳感器內部電路圖傳感器內部有紅外發光管和光電晶體管,利用光敏原理來工作。傳感器的3號引腳控制LED燈,通過發射紅外光來檢測特別細微的顆粒,如香煙顆粒、細微灰塵,依靠傳感器輸出脈沖的高度來判斷顆粒濃度。
再看下脈沖波形:
這個表示傳感器工作時需要一個驅動電平波,時間周期為10ms,其中低電平占時0.32ms(是低電平,沒有寫錯)。
再看看電壓取樣脈沖:
根據上圖可以得到傳感器采樣的時機,即要在低電平持續0.28ms后,馬上取樣(這時脈沖的高度最高,為最准確的輸出值)。因為低電平長0.32ms,所以采樣后再保持低電平0.04ms,然后將電平拉到高電平,持續9.68ms后完成一個工作周期(因為前文說過,一個工作周期為10ms)。
再看下傳感器輸出電壓和粉塵濃度的關系。
根據關系圖,我們要寫出濃度和電壓之間的關系,看下“斜截式方程:y=kx+b”怎么寫:
選取電壓和濃度關系圖上斜線的兩點,(0,0.6)、(0.4,3),根據“兩點式”得到,濃度轉化公式為:
濃度=[傳感器輸出模擬電壓 * 0.1667 - 0.1] * 1000;
二、灰塵濃度與PM2.5指數轉換
首先要說的是,PM2.5即細顆粒物是指直徑在2.5微米以下的顆粒物,能長時間的懸浮在空氣中。而夏普的GP2Y1010AU0F灰塵傳感器只是用於檢測特別細微的顆粒,如香煙顆粒、細微灰塵,並不能准確測量PM2.5數值,僅僅作為一個參考。
但是這里還將其對照中國的PM2.5指數標准進行轉換。
首先看下PM2.5標准。
所以,我們通過傳感器獲得灰塵濃度后,按照PM2.5指數對應的濃度進行相應轉換即可。參考來源:PM2.5指數的中美標准差異
三、傳感器控制原理
傳感器原理圖:
從圖中可以看到:
傳感器的3號管腳要接單片機的數字輸出腳。
當LED=0的時候,傳感器內部的PNP三極管導通,紅外光二極管發光。
當LED=1的時候,傳感器內部的PNP三極管截止,紅外光二極管停止發光
Vo需要接到單片機的ADC引腳,測試Vo的電壓,就可以根據電壓和灰塵濃度的比例圖,得到灰塵濃度。
四、GP2Y1010AU0F灰塵傳感器與Arduino連接
傳感器和Arduino硬件連接:
Sharp pin 1 (V-LED) =>連接在 150歐姆電阻 和 220uf電容的中間
Sharp pin 2 (LED-GND) => GND 接地
Sharp pin 3 (LED) => Arduino PIN 2 (開關LED)
Sharp pin 4 (S-GND) => GND 接地
Sharp pin 5 (Vo) => Arduino A0 pin (空氣質量數據通過電壓模擬信號輸出)
Sharp pin 6 (Vcc) => 5V
實物圖:
五、Arduino程序
代碼如下:
int dustPin=0; int ledPower=2; int delayTime=280; int delayTime2=40; float offTime=9680; float dustVal=0; float dustVot=0; float dustDensity=0; int Pm2_5 = 0; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); pinMode(dustPin, INPUT); } void loop(){ // ledPower is any digital pin on the arduino connected to Pin 3 on the sensor digitalWrite(ledPower,LOW); delayMicroseconds(delayTime); dustVal=analogRead(dustPin); delayMicroseconds(delayTime2); digitalWrite(ledPower,HIGH); delayMicroseconds(offTime); delay(1000); // 將ADC輸出值轉換為模擬電壓值 dustVot = dustVal*0.0049; /* * 將采集到的電壓值轉換為粉塵濃度 * 公式:濃度=[傳感器輸出模擬電壓 * 0.1667 - 0.1] * 1000; * 公式根據根據官方規格書中的《Fig. 3 Output Voltage vs. Dust Density》圖表計算得出 * 公式未經過校准,僅為理論計算值 * 得出粉塵的濃度,單位為微克每立方米 */ dustDensity = ((dustVot*0.1667)-0.1)*1000; // 將粉塵的濃度轉換為PM2.5指數 // 參考標准為PM2.5中國標准 if (dustDensity < 35) { Pm2_5 = dustDensity * 1.4286; } else if (dustDensity < 150) { Pm2_5 = (dustDensity - 35)* 1.25 + 50 ; } else if (dustDensity < 250) { Pm2_5 = (dustDensity - 150)* 1 + 200 ; } else Pm2_5 = (dustDensity - 250)* 0.8 + 300 ; Serial.println(Pm2_5); }
將程序編譯后上傳,打開串口,即可看到測量到的PM2.5數值。
六、參考資料
1.規格書:https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf
2.夏普GP2Y1010AU0F灰塵傳感器規格書本地免費下載:夏普原版灰塵傳感器GP2yY1010au規格書gp2y1010au_e
3.Arduino ADC轉換(將測量值轉換為模擬電壓值):https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
4.STM32平台下使用夏普GP2Y1010AU0F灰塵傳感器測量PM2.5空氣污染指數
5.PM2.5指數分級:PM2.5指數的中美標准差異
6.傳感器說明書:灰塵傳感器GP2Y1010AU0F使用說明.pdf
原創文章,轉載請注明: 轉載自科技愛好者博客
本文鏈接地址: Arduino制作PM2.5測量儀(使用GP2Y1010AU0F灰塵傳感器) (https://www.lxx1.com/4536)
如果博客對您有幫助,請給我 贊助