文章類型
開發平台
解決方案
關注主題
文章類型
開發平台
解決方案
關注主題

如何用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[50];

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晶片等,可參考此網址

陸向陽

陸向陽

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

上一篇: | 下一篇:

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

成城共創股份有限公司版權所有、轉載必究.Copyright(c) 2017 MakerPRO