實驗說明:
- 不少朋友在問,如果想做一個空氣品質監控系統該選用哪種感測器呢?米羅絕對是推薦各位這款工業級攀藤PMS5003T 粉塵溫濕度二合一感測器。本篇將介紹如何使用Arduino 與PMS3003 自製PM2.5 與溫濕度感測器偵測器。Plantower PMS5003T 是目前較受歡迎的PM2.5感測模組,採用雷射散射原理量測,最小量測粒徑0.3um,依據空氣中不同的懸浮顆粒個數,推算灰塵的質量濃度,體積小、接線簡單、數據詳細、穩定性強是此模組的特色,並且內嵌瑞士生產的溫濕度一體檢測晶片,可以同時監測空氣中顆粒物濃度和溫濕度的二合一傳感器。
- PMS5003T型號簡稱為G5T,注意不要買到PMS5003 (G5),兩種價格差不多,有「T」代表多了溫溼度感測功能。
▼購買PMS5003T 粉塵溫濕度二合一感測器:
材料:
- Arduino Uno R3
- USB 傳輸線
- PMS5003T 粉塵溫濕度二合一感測器
- PMS5003T 專用轉接板與排線
- 杜邦線
PMS5003T模組說明:
安裝 PMS 程式庫:
- 在 Arduino 整合環境功能表點選 草稿碼 / 匯入程式庫 / 管理程式庫
- 在右上方搜尋框輸入「pms」,下方會列出所有符合條件的程式庫,不同程式庫使用的程式碼並不相同。此處點 選「PMS Library」,該項目右下角會出現「安裝」鈕,按「安裝」鈕開始安裝。
基礎程式範例:
▼使用PMS 程式範例監測空氣中顆粒物濃度數值PM 1.0、PM 2.5、PM 10.0
#include <PMS.h>
#include <SoftwareSerial.h>
SoftwareSerial Serial1(2, 3); // 將Arduino Pin2設定為RX, Pin3設定為TX
PMS pms(Serial1);
PMS::DATA data;
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
}
void loop()
{
if (pms.read(data))
{
Serial.print("PM 1.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_1_0);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(data.PM_AE_UG_2_5);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_10_0);
Serial.println();
}
}
▼顯示結果
進階程式範例:
▼可同時監測空氣中顆粒物濃度和溫濕度,有興趣的朋友可以參考PMS5003T傳輸通訊協定 P.13~P.14
原廠規格書Datasheet:載點
#include <SoftwareSerial.h>
long pmat10 = 0;
int pmat25 = 0;
long pmat100 = 0;
unsigned int temperature = 0;
unsigned int humandity = 0;
int pmat25_value=0;
SoftwareSerial pmsSerial(2, 3); // 將Arduino Pin2設定為RX, Pin3設定為TX
void pms5003t_spec(){
int count = 0;
unsigned char c;
unsigned char high;
while (pmsSerial.available()) {
c = pmsSerial.read();
if((count==0 && c!=0x42) || (count==1 && c!=0x4d)){
Serial.println("check failed");
break;
}
if(count > 27){
Serial.println("Done!!");
break;
}
else if(count == 10 || count == 12 || count == 14 || count == 24 || count == 26) {
high = c;
}
else if(count == 11){
pmat10 = 256*high + c;
Serial.print("PM1.0=");
Serial.print(pmat10);
Serial.println(" ug/m3");
}
else if(count == 13){
pmat25 = 256*high + c;
Serial.print("PM2.5=");
Serial.print(pmat25);
Serial.println(" ug/m3");
}
else if(count == 15){
pmat100 = 256*high + c;
Serial.print("PM10=");
Serial.print(pmat100);
Serial.println(" ug/m3");
}
else if(count == 25){
temperature = (256*high + c)/10;
Serial.print("Temp=");
Serial.print(temperature);
Serial.println(" (C)");
}
else if(count == 27){
humandity = (256*high + c)/10;
Serial.print("Humidity=");
Serial.print(humandity);
Serial.println(" (%)");
}
count++;
}
while(pmsSerial.available())
pmsSerial.read();
Serial.println();
}
void setup()
{
pmsSerial.begin(9600);
Serial.begin(9600);
}
void loop()
{
pms5003t_spec();
delay(1000);
}
▼顯示結果