PMS7003是攀藤科技出品的高精度雷射型粉塵感測器,利用鐳射散射原理的數位式通用顆粒物濃度感測器,可連續偵測並計算單位體積內空氣中不同粒徑的懸浮顆粒物個數,即顆粒物濃度分佈,進而換算成為品質濃度,可計算PM2.5、PM1.0,以及PM10的濃度。
最近有人提供PMS7003這個感測器給我,因此就把這個積木做出來。雖然積木是針對PMS7003這一型號所設計,但其實都適用於PMS1003、PMS3003、PMS5003、PMS6003及PMS7003。另外,有的型號後面有T的,例如PMS7003T,代表這款感測器還可以偵測溫濕度,我所設計的積木也針對T型感測器設計了偵測溫濕度的積木,此乃T型的專用積木,沒有T的型號請勿使用。
PMS7003的積木位在「吉哥積木」→「模組」→「PMS7003空品感測」,可以感測PM2.5、PM1.0及PM10的懸浮微粒濃度,以及有T型號可以偵測溫濕度,都適合使用在Arduino、7697及ESP32上。
注意:PMS7003的VCC必須供應5V的電壓。
ESP32可同時連接三個序列埠,Serial、Serial1、Serial2,通常Serial已經連接到電腦,所以可以設定PMS7003連接到Serial1或Serial2,並指定好RX及TX的腳位。PMS7003的偵測模式分為主動偵測及被動偵測模式,主動模式會隨時偵測空氣濃度;而被動模式則是開發板有需求時才發送偵測的要求,然後PMS7003偵測完後才將偵測結果回傳給開發板,因此被動模式只會偵測一次。PMS7003的預設模式是主動模式,供電後便開始一直偵測空氣並傳送數據。
以下的程式會一直將感測結果每1000秒傳送到電腦序列埠,BlocklyDuino F2必須開啟Putty才看得到感測的數值。
Arduino Uno只能連接一個序列埠,在以下範例中因為要將結果顯示在電腦,因此Arduino的序列埠便被電腦佔用了,如果還要連接PMS7003,便需要將PMS7003連接到軟體序列埠,並指定腳位。以下程式PMS7003的初始化使用「連接到軟體序列埠」的積木,並指定腳位,其結果會和上一個範例一樣。
如果要使用硬體序列埠連接PMS7003,請記得將PMS7003的TX連接到開發板的RX,PMS7003的RX連接到開發板的TX,同時不能使用USB線連接電腦顯示PMS7003傳來的資訊,可以將訊息顯示在LCD1602或是OLED。
在不做任何設定下,PMS7003預設便是主動模式,只要在「重複執行」區塊中設定「PMS7003 讀取資料 timeout」積木即可接收來自PMS7003的偵測數據。如果在接收資料時超過timeout的時間還沒收到資料便會結束接收資料程序。timeout時間不宜設太小,1000毫秒比較恰當。
以下的範例會進入被動偵測模式,在PMS7003初始化連接Serial1之後最好延遲個一秒以上才設定被動偵測模式。以PocketCard板子為例,按下A鍵會清除OLED螢幕畫面,按下B鍵則會對PMS7003發出偵測要求,收到來自PMS7003的訊號後,會將偵測到的數據顯示在OLED上。按下B鍵只會偵測一次,不會連續偵測,所以是被動模式。
以下的範例,ESP32會連上WiFi,設定好試算表的ID及工作表名稱之後,PMS7003以主動偵測模式偵測外界空氣品質,ESP32接收之後顯示在OLED上,並且每五秒鐘將資料上傳到Google試算表。