夏普 Sharp GP2Y10 空氣品質感測器(PM2.5)

  1. Sharp GP2Y10說明
  2. 電路安裝
  3. 程式撰寫
  4. 實驗結果

1. Sharp GP2Y10說明

GP2Y1014或GP2Y1010這顆感測器算是偵測空氣品質中較為便宜的版本,可以偵測空氣中的懸浮微粒,但不能區分微粒大小,售價大概都不會超過200,不過使用上不是那麼方便及準確,另一個系列GY2Y1051則是內建MCU,用TX直接提供數值,就不用在哪邊使用電壓換算,不過呢?台灣幾乎都沒有賣家再販售就是了。

GP2Y10產品除了本體之外,還有6P連接線、一個150歐姆電阻及220uF電容,

夏普GP2Y10

如果需要更精確的,那非常推薦攀藤系列的產品,例如PMS9003M,目前已經出到第七代的樣子,不僅也是直接產生數據,也能將PM10、PM2.5等不同大小的顆粒數據分別提供,售價則是七八百左右。

攀藤PMS9003M

GP2Y10偵測的原理是在中間的圓洞處以光線(下圖的IRED)照到空氣中的懸浮粒子就會產生散射,然後透過光感(下圖的PD)來收集散射的強度,就可以知道顆粒的大約數量,如果收集到的光線越強,那麼就代表顆粒越多,當PD收集的光線越多,也會反應更高的電壓,而到時候我們就可以利用電壓來估計空氣中的懸浮粒子有多少了。

GP2Y10偵測原理

根據規格書所列的電壓與粒子的相關圖可以發現幾個重點

  1. 最小感應電壓0.6V,代表0.6V以下電壓值都難以估計
  2. 最大感應電壓3.6V,代表3.6V(0.5mg/M^3)以上電壓值都難以估計
  3. 經由圖表換算後,其關係式約為X=0.172Y-0.1,X懸浮粒子、Y電壓,以下為我的換算過程,不要太認真湊合著看就好:
電壓(Y)與懸浮粒子(X)關係圖

雖然GP2Y10屬於便宜貨,但也沒那麼不堪,某網友測試的結果其實與氣象局的實際數據非常接近,再加上Sharp也算日本知名品牌啦,因此應該也算是可以信任的產品。關於本產品的其他規格可以參考官方規格書

資料來源:http://lafudo.blogspot.com/2013/12/arduino-gp2y1010au0fpm25.html

2. 電路安裝

本次實驗使用小霸王ESP32進行實驗,GP2Y10我測試了GP2Y1014與GP2Y1010,其線路與程式完全相同,都可以參考以下線路接法。

GP2Y10一共六條線,分別代表意義如下

  1. 紅VCC->3.3V:接3.3V,這裡不建議使用5V
  2. 黑Vo->IO39:電壓輸出腳,我們將之接到IO39
  3. 黃GND->GND:接GND
  4. 白LED->IO5:此為內部IRED光源控制腳,由IO5控制光源開關時間
  5. 綠LED-GND->GND:此為內部IRED光源GND腳,接GND
  6. 藍V-LED->3.3V:此為內部IRED光源電源供應腳,此腳較為麻煩,須串接150歐姆電阻及220uF電容。
GP2Y10線路接法

實際接好可能會長這樣,哈哈,亂得一塌糊塗。

GP2Y10實際接線

由於包裝內付的連接線頭為1.25mm並沒有做杜邦頭,因此接麵包版非常容易脫落,建議另外購買1.25 6P轉2.54杜邦線,這樣會比較容易操作,如果只是先做實驗,可以像上圖這樣,把末端電路直接插在麵包版上,然後先用膠帶或橡皮筋稍微固定,當然實際應用還是要注意接線強度問題。

3. 程式撰寫

程式部份就是控制IRED在規定的時間亮暗,並在Vo檢查輸出的電壓後,對Vo進行電壓與懸浮微粒之間的換算,程式並不算難,請參考以下,程式中的等候時間是參考網路教學的寫法,為何等候這些時間我也不清楚了。


int Vopin=39; //Vo接到IO39
int IREDpin=5; //IRED接到IO5
float Vo = 0; //用以紀錄電壓

void setup() {
  Serial.begin(115200);  
  pinMode(Vopin, INPUT); //讀取電壓腳位
  pinMode(IREDpin, OUTPUT);//控制IRED腳位
}


void loop() {
  digitalWrite(IREDpin, LOW); //開啟IRED
  delayMicroseconds(280); //等候280微秒
  Vo = analogRead(Vopin); //讀取39腳的數值(0~4095之間)
  Vo = (Vo / 4095) * 3.3; //換算成3.3V電壓
  delayMicroseconds(40); //等候40微秒
  digitalWrite(IREDpin, HIGH); //關閉IRED
  delayMicroseconds(9680); //等候9680微秒
  Serial.println(String("電壓:")+String(Vo )); //輸出電壓值,此用以除錯檢查
  if (Vo >= 0.6) { //超過0.6才需要計算
    Vo =(((0.172 * Vo) - 0.1) * 1000); //依照公式將電壓Vo換算成懸浮微粒ug
    Serial.println(String("懸浮:")+String(Vo )); //顯示結果
  } else {
    Serial.println(String("懸浮:")+String(0)); //小於0.6,都當成0懸浮微粒
  }
  delay(1000); //一秒一次
}

4. 實驗結果

程式燒錄後,就可以開始偵測了,實驗時可以利用衛生紙在感測圓洞處摩擦使其掉落纖維,就可以看到數值的變化,其結果如下圖。

衛生紙在感測圓洞摩擦可產生纖維來模擬灰塵
GP2Y10感測結果

最後總結一下

  1. 雖然感測不是那麼靈敏準確,但是簡單實驗還是可以
  2. 偵測範圍有限,且無法像攀藤感測器可區分顆粒大小(例如區分PM2.5、PM10)
  3. 接線稍微複雜,建議購買轉換杜邦頭,不然麵包板接線不好處理。

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *