00-PMS3003(G3)參考資料

特點:

■數據準確:鐳射檢測,穩定、一致性好

■響應快速:場景變換響應時間小於10 秒

■便於集成:串口輸出(或IO 口輸出可定制),自帶風扇

■解析度高:分辨顆粒最小直徑達0.3 微米

適用範圍:

PM1.0 PM2.5 PM10檢測儀、淨化器

工作原理:

採用鐳射散射原理:當鐳射照射到通過檢測位置的顆粒物時會產生微弱的光散射,在特定方向上的光散射波形與顆粒直徑有關,通過不同粒徑的波形分類統計及換算公式可以得到不同粒徑的實時顆粒物的數量濃度,按照標定方法得到跟官方單位統一的質量濃度

技術參考:

■測量直徑:0.3-1.0um 1.0-2.5um 2.5-10um

■測量單位:ug/m3

■測量精度:ug/m3

■響應時間:<10s

■工作電流:5V200ma@工作狀態5V2ma@待機狀態

■數據介面:串口(3.3VTTL電平)

■模塊體積:65x42x23mm

■工作溫度範圍:: -20〜50℃

■工作濕度範圍:0〜99%RH

■最大尺寸:65×42×23(毫米)

供電質量要求:

    1. 電壓紋波:小於100mV的。

    2. 電源電壓穩定度:4.95〜5.05V。

    3. 電源:大於1W(5V @200毫安)。

    4. 上和下電電壓浪湧是系統電源電壓的小於50%。

聯繫:

注意:

    • SET:

      • SET = 1,模塊工作在連續採樣模式,它將每個取樣結束後上傳的採樣數據。(採樣響應時間為1s)

      • SET = 0,則模塊進入低功耗待機模式。

    • RESET:讓它空就可以了。

通訊協議:

串口波特率:9600; 奇偶校驗:無; 停止位:1; 包長度固定為24個字節。

其它參考資訊

G3-Arduino原始程式碼〈僅供參考〉

#include

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秒鐘內回傳一次數值,所以鮑率設快也沒用,瓶頸在感測器上。

如下表所示,由 PMS3003 資料傳輸規格所知,正確資料的開頭,一定是由下列資料『0x42、0x4D』所開頭的資料(第一個位元組到二個位元組),才有可能是正確的資料,資料內容則是由第三個位元組到二十二個位元組則是 PMS3003 空氣懸浮粒子感測器傳送的資料,如何要確定資料內容的正確性,第二十三個位元組到二十四個位元組則是使用 Check Sum 的方法來檢核。

(表 2)PMS3003 資料傳輸格式表:

資料來源:https://www.dfrobot.com/wiki/index.php?title=PM2.5_laser_dust_sensor_SKU:SEN017

==============================

資料格式

》BAUD : 9600

》長度 : 32 Byte

固定開頭 0x42 0x4d 0x00 0x1c

CF = 1 時標準顆粒物 PM1.0 2.5 10 0x00 0x45 0x00 0x62 0x00 0x6b

大氣環境下 PM1.0 2.5 10 0x00 0x45 0x00 0x62 0x00 0x6b

0.1升空氣中直徑在 0.3um 的顆粒物個數 0x2d 0xa2 (11682)

0.1升空氣中直徑在 0.5um 的顆粒物個數 0x0a 0xf8 (2808)

0.1升空氣中直徑在 1.0um 的顆粒物個數 0x01 0xb2 (434)

0.1升空氣中直徑在 2.5um 的顆粒物個數 0x00 0x2e (46)

0.1升空氣中直徑在 5.0um 的顆粒物個數 0x00 0x04 (4)

0.1升空氣中直徑在 10 um 的顆粒物個數 0x00 0x03 (3)

(公式 1)PMS3003資料檢核公式

參照附錄中 PMS3003 規格與上表內容,我們得到上面 PMS3003 資料檢核公式,得知必須將第三個位元組到二十二個位元組累加內容之後,與第二十三位元組到二十四位元雙位園進行比較,如果相等,則為正確的資料內容傳輸,不是的話,就是錯誤的資料,我們則捨棄不用。

下面資料,好像跟上面不一樣??

通訊資料格式

如下表所示,為 PMS3003 G3 PM2.5 粉塵感測器透過串列埠,定時會回傳給單晶片或其他處理器的資料之通訊格式。

(表 4)PMS3003 G3 PM2.5 粉塵感測器通訊資料格式

Serial port baudrate: 9600; Parity: None; Stop Bits: 1; packet length is fixed at 32 bytes.