筆者之前示範過用聯發科技的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的設定接腳,也不用去管重置接腳。(以下接線圖修改自官網)
電路完成後,進一步的是控制程式,一樣用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註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏