【知識教學文】自己的空氣感測器自己做!

【知識教學文】自己的空氣感測器自己做!

空氣汙染一直都是國人長期關心的議題之一,不少醫學文獻也點出,長期處於惡劣的空氣環境對健康所造成的危害匪淺。目前除了能在各地區所設立的空氣品質量測站獲取空氣品質資訊以外,也有不少專案專注在此領域上(如LASS)。

然而即便了解室外空氣品質的概況,但室內空氣品質(Indoor Air Quality, IAQ)對於不同地區、不同建築物、甚至不同的室內空間都會有所差異。行政院環保署也有頒布室內空氣品質標準,對於人體有害之氣體與空氣汙染指標訂定了規範,如二氧化碳(CO2)八小時平均值超過1000 ppm,2.5微米之細懸浮微粒(PM2.5)二十四小時平均值超過35 ug/m3等,即是達到了空氣污染的標準。若是在辦公室、展場等公共場所超標,甚至還可以舉發開罰!

本篇則是以室內空氣品質監測為目標實作物聯網專案,利用Maker易取得的開發板與各類感測器,完成一個IAQ監測系統。

土炮Linkit 7697室內空氣感測器專案所需元件列表如下:

室內溫濕度感測

室內溫濕度感測器最常使用的約莫就是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採用NDIR(Non Dispersive Infrared,非散色紅外線)感測,最大的優點是可以設計成僅針對單一氣體作響應,不會受到其他氣體濃度影響讀值,且對於溫濕度影響也較小,使用壽命也較長。同時MH-Z16也有內建溫度的感測,主要用意是可以依據不同的環境溫度作溫度補償的參考,但我們已有專用的溫濕度感測器DHT22,所以就不取MH-Z16的溫度了。

MH-Z16提供的介面有PWM(Pulse Width Modulation,脈衝寬度調變)與UART兩種形式,PWM輸出會依照目前感測的不同二氧化碳濃度改變Duty Cycle,藉由轉換公式得到正確的感測值;而UART則是直接將二氧化碳濃度藉由UART傳遞。這邊我們為了避免轉換誤差,則直接使用UART介面作資料傳輸。

MH-Z16外觀

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列印外殼。考量為了試作的方便與材料容易取得,我們拿了生活中隨手可得的小紙盒,簡單的切割後作為外殼使用。

筆者因為方便取得Mini Plan Robot Shield的包裝小紙盒,而各位Maker也可以自行尋找家中大小合適的紙盒來作改造。先將所有零組件擺放在紙盒中,自行配置好適宜的擺放位置,因為諸如PMS3003與MH-Z16感測元件需要有外部的氣流,所以要對其風扇或感測部件進行開孔,此外Linkit 7697的USB插孔與按鍵開關等必要的介面也要一併開孔。完成開孔後則將所有元件擺放至紙盒內,再使用熱熔膠加以固定,這樣就可以牢牢固定住了!

使用Mini plan Robot Shield包裝紙盒作外殼

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

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

完成後的外觀

結論

本篇雖然僅是一個簡單的物聯網感測器專案,但除了可以量測本身所處的室內空間實際的空氣品質外,還可以學習到如何串接整個物聯網架構,對於物聯網的入門者或是學習者希望能有一些幫助。當然,各位都是Maker,以上的步驟各位可以依照實際的情況進行改造或是置換。

Have fun and enjoy!

 

歡迎加入AIoT/AR/VR主題論壇:https://goo.gl/YdjJQp

(作者:AIoT/AR/VR主題論壇版主Felix;責任編輯:葉佳錚)

Comments ( 2 )

  • 葉志晃

    請問對於抽香煙的偵測,是否有另外的感應器,或是修改偵測範圍即可。

    • 不管是香菸、薰香、線香等等,在燃燒時都會產生懸浮微粒 (PM2.5),所以可以藉由 PM2.5 指標來做判斷喔!

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料