|

如何用Ameba開發板實作PM 2.5感測應用

   
作者:陸向陽

 

筆者之前示範過用聯發科技的LinkIt ONE開發板,連接SeeedStudio出的Grove裏的灰塵感測器,這是由Shinyei公司出的,型號為PPD42NS,規格可見本連結。不過,這個感測器並不是正規的PM 2.5感測器,SeeedStudio的官網百科說明:「該粉塵傳感器測量的顆粒大小與PM2.5顆粒大小不同,不能直接用於PM2.5的測量,但顆粒大小相近,可略作參考。」

這次,筆者來說明用瑞昱科技的Ameba(阿米巴)開發板,來偵測真的PM 2.5空氣品質。首先說明一下感測器,使用的是大陸攀藤科技(Plantower)的PMS3003空氣品質感測器,感測器上有8個接腳,分別是:

  • pin1,供電輸入接腳,要輸入5V電壓的電力。
  • pin2,接地接腳,接上0V。
  • pin3,設定輸入接腳,接收到0時感測器處於待備狀態(減少感測器的耗電),接收到1則為運作狀態。
  • pin4,串列埠接收接腳,邏輯準位3.3V。
  • pin5,串列埠輸出接腳,邏輯準位3.3V。
  • pin6,重置、重新開機輸入接腳,接收到3.3V則重新開機。
  • pin7,還沒用到。
  • pin8,還沒用到。

了解接腳後,將PMS3003與Ameba連接,筆者以Ameba官網的圖片指示,只要給予PMS3003供電與接地,而後再將串列埠的接收、發送接腳,與Ameba開發板的串列埠對接,就可以了,不用去管pin3的設定接腳,也不用去管重置接腳。(以下接線圖修改自官網)

將PMS3003與Ameba連接的接線圖。 將PMS3003與Ameba連接的接線圖。

電路完成後,進一步的是控制程式,一樣用Ameba放在GitHub上的範例程式,程式內容則如下:

long pmcf10=0;

long pmcf25=0;

long pmcf100=0;

long pmat10=0;

long pmat25=0;

long pmat100=0;

char buf;

void setup() {

// put your setup code here, to run once:

Serial.begin(9600);

Serial1.begin(9600);

}

void loop() {

// put your main code here, to run repeatedly:

int count = 0;

unsigned char c;

unsigned char high;

while (Serial1.available()) {

c = Serial1.read();

if((count==0 && c!=0x42) || (count==1 && c!=0x4d)){

Serial.println("check failed");

break;

}

if(count > 15){

Serial.println("complete");

break;

}

else if(count == 4 || count == 6 || count == 8 || count == 10 || count == 12 || count == 14) {

high = c;

}

else if(count == 5){

pmcf10 = 256*high + c;

Serial.print("CF=1, PM1.0=");

Serial.print(pmcf10);

Serial.println(" ug/m3");

}

else if(count == 7){

pmcf25 = 256*high + c;

Serial.print("CF=1, PM2.5=");

Serial.print(pmcf25);

Serial.println(" ug/m3");

}

else if(count == 9){

pmcf100 = 256*high + c;

Serial.print("CF=1, PM10=");

Serial.print(pmcf100);

Serial.println(" ug/m3");

}

else if(count == 11){

pmat10 = 256*high + c;

Serial.print("atmosphere, PM1.0=");

Serial.print(pmat10);

Serial.println(" ug/m3");

}

else if(count == 13){

pmat25 = 256*high + c;

Serial.print("atmosphere, PM2.5=");

Serial.print(pmat25);

Serial.println(" ug/m3");

}

else if(count == 15){

pmat100 = 256*high + c;

Serial.print("atmosphere, PM10=");

Serial.print(pmat100);

Serial.println(" ug/m3");

}

count++;

}

while(Serial1.available()) Serial1.read();

Serial.println();

delay(5000);

}

這裡再簡單說明一下程式內容,程式裡頭有用到兩個串列埠,一個是Serial,另一個是Serial1,真正跟PMS3003連接的是Serial1,Serial是用來輸出感測數據用的,即是用Arduino IDE程式開發工具中的串列埠監視器來觀看自Ameba回傳的數值。

而更具體來說,PMS3003不只是偵測PM 2.5,比PM 2.5顆粒大的PM 10,以及比PM 2.5顆粒小的PM 1,也都有偵測數據。

另外,為何串列埠的鮑率(Baud Rate)設的很慢,只有9600,因為PMS3003感測器本身的感測反應也是慢的,只保證10秒鐘內回傳一次數值,所以鮑率設快也沒用,瓶頸在感測器上。

最後再提供一些延伸閱讀,還不是很知道PM 2.5的,可以去看看大陸紀錄片《穹頂之下》,這是大陸中央電視台前主播柴靜自費拍攝的。另外也有人進一步拆解、探索PMS3003內部的設計,包含雷射、二極體,以及Cypress公司的8C4245晶片等,可參考此網址

本文為會員限定文章

立即加入會員! 全站文章無限看~

                               

已經是會員? 按此登入

只需不到短短一分鐘...

輸入您的信箱與ID註冊即可享有一切福利!

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

陸向陽

Author: 陸向陽

從電子科系畢業後,即以媒體人的角色繼續這段與「電子科技」的不解之緣。歷任電子技術專書作者、電子媒體記者、分析師等角色,並持續寫作不殆。近來投入Arduino、Raspberry Pi等開放硬體的研究與教程介紹。

Share This Post On

Submit a Comment

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