Arduino制作PM2.5測量儀(使用GP2Y1010AU0F灰塵傳感器)


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)

如果博客對您有幫助,請給我 贊助

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM