一、 實驗說明:為什麼選擇攀藤 PMS5003T 二合一感測器?
在製作 Arduino 空氣品質監測器或智慧清淨機專題時,Plantower 攀藤 PMS5003T(又稱 G5T) 是目前市場上精準度極高且功能全面的鐳射顆粒物感測模組。
核心技術與感測優勢
-
鐳射散射原理 (Laser Scattering): 透過鐳射照射空氣中的懸浮微粒,收集散射光強度隨時間變化的波形,並依據米氏 (Mie) 散射理論演算法換算得出 PM1.0、PM2.5 及 PM10 的質量濃度(微克/立方公尺, )。
-
溫濕度二合一整合: 模組內部內建高精度溫濕度感測晶片,能同時輸出空氣 PM 濃度與環境溫度、濕度,無需額外外接 DHT11/DHT22 感測器。
-
數位 UART 通訊介面: 採用 9600 bps 主動式 TX/RX 序列埠傳輸,傳輸穩健、抗干擾能力強。
二、 PMS5003T 模組說明:外觀尺寸與腳位定義
攀藤 PMS5003T 採用精巧的金屬外殼設計,能有效屏蔽電磁干擾 (EMI)。模組機構包含獨特的風道進出氣孔配置與標準 8-Pin 數位介面。

圖一: 攀藤 PMS5003T (G5T) 感測器外觀機構與工程尺寸圖。標示有出氣孔、進氣孔位置、數位通訊接口,以及長 50mm x 寬 38mm x 高 21mm 的外觀尺寸與底部安裝孔距。

圖二: 攀藤 PMS5003T 模組原生 8-Pin 連接器腳位定義圖。詳細標示 PIN 1 至 PIN 8 之功能,包含 VCC 5V 電源、GND、SET 休眠控制、RX/TX 序列埠數據傳輸、RESET 重置腳位與空腳(NC)說明。
三、 ???? 準備好你的硬體工具了嗎?
在開始進行電路接線與程式編寫前,建議先備齊原廠攀藤 PMS5003T 感測模組與轉接板,確保訊號傳輸穩定可靠:
推薦選購: 攀藤 PMS5003T PM2.5 + 溫濕度二合一感測器模組(含轉接板與連接線)
四、 實驗所需材料與電路接線圖 (Hardware Setup)
攀藤 PMS5003T 模組通常搭配 8-Pin 轉接板(或 G5 轉接板) 進行開發。本範例使用 SoftwareSerial 將 Arduino 的 Digital Pin 2 設定為 RX、Digital Pin 3 設定為 TX。
⚠️ 注意事項:
攀藤感測器的工作電源為 5V。
請務必確認轉接板上的腳位標示,避免 VCC 與 GND 接反導致晶片毀損。
準備材料
-
Arduino Uno R3 開發板 x 1
-
USB 傳輸線 x 1
-
Plantower 攀藤 PMS5003T 模組 + 轉接板 x 1
-
杜邦線 若干
腳位對接說明 (Pin Mapping)
五、 必備函式庫與安裝步驟
編譯 範例一 前,請先透過 Arduino IDE 的程式庫管理員安裝:
-
開啟 Arduino IDE,點選 草稿碼 (Sketch) > 匯入程式庫 (Include Library) > 管理程式庫 (Manage Libraries)。
-
在搜尋欄輸入 「PMS Library」。
-
找到 PMS Library by Mariusz Janky 並點擊 「安裝 (Install)」。

六、 程式碼實作範例
程式範例一:使用 PMS 函式庫讀取 PM 數據 (PMS Library Demo)
本範例呼叫標準 PMS 函式庫,快速讀取並顯示 PM1.0、PM2.5 及 PM100(PM10)的數值。
#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();
}
}
▼顯示結果

程式範例二:免函式庫直接解析 UART 封包(讀取 PM 及溫濕度) (Raw UART Packet Parsing)
本範例直接透過 SoftwareSerial 接收序列埠資料,比對起始碼 0x42 與 0x4D 後,直接將各 Byte 計算組合出 PM1.0、PM2.5、PM10 濃度以及環境溫度與環境濕度。
▼可同時監測空氣中顆粒物濃度和溫濕度,有興趣的朋友可以參考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);
}
▼顯示結果

七、 常見問題與除錯 (FAQ)
Q1:序列埠顯示「check failed」或完全沒有數據輸出?
解答:
請檢查 TX 與 RX 是否反接(Arduino 的 Pin 2 (RX) 應連接至感測器的 TX;Arduino 的 Pin 3 (TX) 連接至感測器的 RX)。
請確認感測器供電是否為穩定的 5V,電壓不足可能導致風扇運轉異常或序列埠傳輸失敗。
Q2:範例一與範例二有什麼不同?
解答:
範例一: 使用官方/通用
PMS函式庫,程式碼最簡短,適合只需要 PM2.5 數據的專題。範例二: 直接解析原始 UART 封包,無需額外安裝第三方函式庫,且能額外讀出 PMS5003T 獨有的溫度與濕度數據。
Q3:剛開機時讀到的 PM2.5 數值忽高忽低?
解答: 攀藤感測器通電初期風扇需時間建立穩定氣流,前 30 秒為預熱穩定期,建議在正式紀錄數據前忽略開機前幾筆資料。
延伸閱讀與推薦課程
- 進階顯示模組控制: 【Arduino進階教學】LCD 1602 I2C 顯示模組:4線快速接線、位址檢測與程式碼範例
- 上一篇: 【Arduino進階教學】SSD1306 0.96吋 OLED 顯示器模組:I2C 接線、位址檢測、Adafruit GFX 繪圖與雙程式範例實作
- 下一篇:【Arduino進階教學】ST7735 1.8吋 TFT 全彩顯示螢幕模組:SPI 接線、Adafruit 圖形庫與畫面繪製實作
- 總索引: Arduino 新手學習必讀經典 – 快速索引頁面