作者:Felix Lin
空氣汙染一直都是國人長期關心的議題之一,不少醫學文獻也點出,人體若長期處於惡劣的空氣環境,對健康會所造成不小的危害。目前,除了在各地區所設立的空氣品質量測站以外,也有不少專案專注在此領域上,如:LASS-開源公益環境感測網路。
然而,即便了解室外空氣品質的概況,那室內空氣品質(Indoor Air Quality、IAQ)呢?在不同地區、不同建築物、甚至不同的室內空間都會有所差異。行政院環保署頒布室內空氣品質標準,對於人體有害之氣體與空氣汙染指標訂定了規範,如二氧化碳(CO2)八小時平均值超過1000 ppm等,即是達到了空氣污染的標準。若是在辦公室、展場等公共場所超標,甚至還可以舉發開罰!
本篇則是以室內空氣品質監測為目標實作物聯網專案,利用Maker易取得的開發板與各類感測器,完成一個IAQ監測系統。
土炮 Linkit 7697 室內空氣感測器專案所需元件如下:
- Linkit 7697 物聯網開發板
- 亞堤Linkit 7697擴充板(或可用麵包板取代)
- DHT22溫濕度感測器
- PMS3003 PM2.5 感測器
- MH-Z16 CO2 感測器
- 小紙箱(選擇性,做外殼用)
室內溫濕度感測
室內溫濕度感測器最常使用的約莫就是DHT11/22這系列了,這系列都是數位輸出,減少類比讀數上面的誤差。而其中DHT22的精度更高,溫度誤差在±0.5℃以內,濕度誤差在±2%RH。最重要的是性價比非常優秀且容易取得。DHT22通訊介面是其專有的one wire協定,僅透過一隻腳即可進行觸發後接收其溫濕度資料。優點是接線方便容易,缺點則是此協定並不與其他廠家產品相容。

DHT22溫濕度感測器外觀與其引腳
PM2.5細懸浮微粒感測
PM2.5感測部分就承前人之果,使用較多專案採用的攀藤PMS3003(G3)這款PM2.5感測器,內部使用風扇進氣,雷射感測懸浮微粒精確度較高,甚至可量測PM10、PM2.5與PM1.0等多種懸浮粒子。當然,除了PMS3003之外也有不同類型的感測器可選擇,如:SHARP 的GP2Y1051AU0F或是Shinyei的PPD42NS等,但此類的感測使用的是引流加熱電阻與紅外線感測,雖然價格略為便宜但精準度卻都不及PMS3003。
PMS3003提供的通訊界面是UART(Universal Asynchronous Receiver/Transmitter,非同步串列傳輸),會依序將PM1.0、PM2.5與PM10的數據傳遞出來。

PMS3003的引腳示意圖(source: amebaiot)
CO2二氧化碳感測
在室內環境中,還有一個重要的氣體指標,就是二氧化碳CO2了。若在二氧化碳濃度較高的環境下,不但容易感覺身體不適,時間久了也會對人體造成傷害。然而相較於前兩種比較常見的感測器,二氧化碳CO2感測器則較少人來做使用與感測,除了不易取得外,價格也是比較高的。
這邊所選用的是輝盛(Winsen)MH-Z16二氧化碳感測模組,其特性是高靈敏度、響應時間快、輸出線性、響應氣體單一,感測範圍為0~2000ppm,適合在一般室內空間量測。傳統的電化學氣體感測器(如MQx系列),通常都會對兩種氣體以上響應,且反應時間久需要一定時間加熱後才準確。

MH-Z16外觀
而MH-Z16採用NDIR(Non Dispersive Infrared,非散色紅外線)感測,最大的優點,是可以設計成僅針對單一氣體作響應,不會受到其他氣體濃度影響讀值,且對於溫濕度影響也較小,使用壽命也較長。同時,MH-Z16也有內建溫度的感測,是可以依據不同的環境溫度作溫度補償的參考,但我們已有專用的溫濕度感測器DHT22,所以就不取MH-Z16的溫度了。
MH-Z16提供的介面有PWM(Pulse Width Modulation,脈衝寬度調變)與UART兩種形式,PWM輸出會依照目前感測的不同二氧化碳濃度改變Duty Cycle,藉由轉換公式得到正確的感測值;而UART則是直接將二氧化碳濃度藉由UART傳遞。為了避免轉換誤差,則直接使用UART介面作資料傳輸。

MH-Z16引腳示意圖
硬體接線
統合以上三個感測器的通訊界面,需要使用到2組UART(PMS3003和MH-Z16)與1隻數位輸出腳(DHT22)。然而,Linkit7697 UART 除了原本上傳程式碼與除錯腳位UART0(TX:1,RX:0),僅剩下另一組原生的硬體UART1(TX:6,RX:7)。在不想要捨棄除錯資訊的情況下,就必須要使用Software Serial功能,用一般的數位腳位來模擬UART使用。
在使用Linkit7697 Software Serial時必須注意一點,就是RX腳必須為Pin 2或Pin 3這兩隻其中一隻,因為這兩隻才支援EINT(External Interrupt,外部觸發中斷)功能,順利將資料收進來。(接線的細節請參照下方的接線對照表。)
DHT22接線對照表
Linkit7697 |
DHT22 |
Pin 5 |
SDA |
任意 GND |
GND |
任意 5V |
VCC |
PMS3003接線對照表
Linkit7697 |
PMS3003 |
Pin 6 |
TX |
Pin 7 |
RX |
任意 GND |
GND |
任意 5V |
VCC |
MH-Z16接線對照表
Linkit7697 |
MH-Z16 |
Pin 4 |
TX |
Pin 3 |
RX |
任意 GND |
GND |
任意 3.3V |
VCC |
Arduino程式碼
此程式碼皆可於github上的檔案庫(repository)取得,下載到電腦後即可進行編譯。編譯程式碼之前須要先安裝相依第三方Arduino函式庫(library),清單如下:
- SimpleDHT (測試版本 1.0.6)
- PMS Library (測試版本 1.0.0)
程式碼重點提示:
- Line13~15:定義了CO2、PM2.5與溫濕度的功能,如果沒有其中特定的硬體,可以把後面的1改為0,將該感測器功能關閉。
- Line 17~21:定義了感測器的接線到Linkit 7697的pin腳位,如果接線的方式有所不同,這裡需要跟著修改。
- Line 28~29:所要放置場域的Wi-Fi SSID與密碼,務必修改。
- Line 31~32:定義MCS的裝置ID與裝置KEY,每個裝置都會有唯一的ID跟KEY值,務必要修改成自己建立的測試裝置。下一個段論會說明如何建立。
MCS物聯網平台設定
接下來,要把感測器數據上傳到雲端之前,必須要先建立好物聯網平台的設定。這邊使用MCS(Miediatek Cloud Sandbox)為例子。一個好的物聯網平台,除了可以穩定的儲存長期資料、查詢歷史紀錄,並且可以訂定警戒門檻值(threshold),在超出設定範圍時即時發送推播訊息。
本專案總共會感測的空氣指標分別是:溫度、濕度、二氧化碳與細懸浮微粒。在MCS上建立原型(Prototype)後,依序建立這幾個資料通道,注意通道ID與數值類型,如果錯了可能就會造成無法正確顯示。完成原型設定之後建立一個測試裝置,將測試裝至的MCS ID與KEY貼到程式中即可完成測試裝置的連接。
若資料順利上傳到MCS,在測試裝置的頁面會看到數值的更新,以及下方的最後資料點時間也會隨之更新。

建立MCS原型(prototype)
資料通道(data channel)對應表
空氣指標 | 名稱 | 通道ID | 數值類型 | 單位 |
溫度 | 任意 | temperature | Float | 攝氏 |
濕度 | 任意 | humidity | Float | 百分比 |
二氧化碳 | 任意 | co2 | Integer | ppm |
細懸浮微粒 | 任意 | pm25 | Integer | ug/m3 |

建立測試裝置

各資料通道的歷史折線圖
土炮外殼
外殼部分現階段因為還沒有強度與佈署的考量,暫不使用3D列印外殼。考量為了試作的方便與材料容易取得,我們拿了生活中隨手可得的小紙盒,簡單的切割後作為外殼使用。
先將所有零組件擺放在紙盒中,自行配置好適宜的擺放位置,如PMS3003與MH-Z16感測元件需要有外部的氣流,所以要對其風扇或感測部件進行開孔。此外,Linkit 7697的USB插孔與按鍵開關等,必要的介面也要一併開孔。完成開孔後,則將所有元件擺放至紙盒內,再使用熱熔膠加以固定,這樣就可以牢牢固定住了!

擺放零組件調整合適的位子

挖孔後將需要露出的感測器放置於外部

完成後的外觀
結論
本篇雖然僅是一個簡單的物聯網感測器專案,但除了可以量測本身所處的室內空間實際的空氣品質外,還可以學習到如何串接整個物聯網架構,對於物聯網的入門者或是學習者希望能有一些幫助。當然,各位都是Maker,以上的步驟各位可以依照實際的情況進行改造或是置換。
(本文轉載自南科AI_ROBOT自造基地、原文連結;責任編輯:葉于甄)
- 【開箱實測】OpenVINO榨出單板極限,實作離線LLM AI助理! - 2024/07/25
- 【Maker 玩 AI】Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型 - 2023/12/26
- 【Maker 玩 AI】Edge Impulse 搭配 XIAO ESP32-S3 實作影像分類專題 - 2023/12/04
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!
2019/05/30
請教內容中所提到的元件要去哪裡購買??
2019/05/30
可以上ICShop網站找找喔~
2018/10/27
您好,請問若要偵測某特定氣體【非常見之二氧化碳…等】適用同一個偵測零件嗎?還是需要更換?謝謝
2018/10/29
Lin您好:
有關於技術的問題,我們已經將您的問題轉告給作者囉~
再麻煩您等等了
謝謝您:)
MakerPRO 編輯部
2018/10/29
哈囉Lin 您好:
作者這邊提供了答復喲:「需要依據所需要偵測的氣體,去做感測器的選用喔!以本篇來說二氧化碳感測器只對二氧化碳敏感,如需其他氣體的感測,如一氧化碳、甲醛等,就須跟換不同的感測器喔。」