如何建立一個(gè)室內(nèi)空氣質(zhì)量監(jiān)測(cè)器
如果你在辦公室工作,你…在辦公室里。不管是不是在你家里,我都要大膽猜測(cè),它也是在室內(nèi)——在室內(nèi)長(zhǎng)時(shí)間沒有良好通風(fēng)的空間會(huì)導(dǎo)致空氣質(zhì)量低(理論上是健康問題)。
現(xiàn)在,我不想傳播恐懼,讓你們都認(rèn)為自己會(huì)因?yàn)槲胪碌暮魵舛劳?。然而,我在這里展示一個(gè)簡(jiǎn)單的方法來建立一個(gè)云連接的室內(nèi)空氣質(zhì)量系統(tǒng):
?各種Adafruit空氣質(zhì)量傳感器。
?一個(gè)blue Notecard通過LTE連接將項(xiàng)目云連接起來。
?Adafruit IO將空氣質(zhì)量數(shù)據(jù)可視化,并與其他服務(wù)集成。
?飛利浦Hue LED燈條,為低空氣質(zhì)量警報(bào)提供實(shí)時(shí)視覺效果.
注意:這個(gè)項(xiàng)目最初出現(xiàn)在Adafruit Playground上。
硬件組成
讓我們從采購和組裝不同的硬件組件開始。
空氣質(zhì)量傳感器來自Adafruit
Adafruit是我制作新項(xiàng)目原型時(shí)的首選組件來源。因此,受TJ VanToll項(xiàng)目的啟發(fā),我開始使用Adafruit SCD40傳感器來測(cè)量溫度、濕度和二氧化碳水平。
接下來,我想找到一種簡(jiǎn)單的方法來測(cè)量VOC(揮發(fā)性有機(jī)化合物)的含量。Adafruit的SGP40氣體傳感器提供了這一點(diǎn),支持的庫可以訪問“原始”氣體水平和輸出VOC指數(shù)的算法。
順便說一句,我還使用了一個(gè)7段顯示器來顯示最近計(jì)算的VOC指數(shù),本地:
來自blue的云連接
我知道我需要的不僅僅是在7段顯示器上顯示單個(gè)值的本地顯示。我想創(chuàng)建一個(gè)真正的云連接系統(tǒng),讓我可以使用像Adafruit IO這樣的云服務(wù)來可視化數(shù)據(jù),發(fā)送警報(bào),并與其他“智能家居”設(shè)備進(jìn)行交互。
這段旅程以布魯斯和筆記卡手機(jī)開始并結(jié)束。
雖然說到“cellular”這個(gè)詞可能會(huì)讓一些人感到害怕,但Blues通過將古老的AT命令語法隱藏在健壯的基于json的API后面來簡(jiǎn)化cellular。更不用說,使用Notecard無需每月支付SIM卡費(fèi)用——只需一次性支付硬件費(fèi)用,包括在140多個(gè)國(guó)家/地區(qū)使用500MB的數(shù)據(jù)和服務(wù)。
主MCU和載波板
為了將所有組件組合在一起,我選擇使用基于stm32的主機(jī)MCU(與feather兼容的Blues Cygnet)和另一個(gè)blue提供的組件Notecarrier F。Notecarrier F提供了一個(gè)(物理)開發(fā)平臺(tái),您可以在該平臺(tái)上安裝Notecard(基于feather的主MCU),并連接傳感器和其他外圍設(shè)備。
最終硬件結(jié)果
連接7段顯示器就像提供電源和連接地線,SDA和SCL線一樣簡(jiǎn)單。由于STEMMA QT/Qwiic連接器的便利性,其他兩個(gè)Adafruit空氣質(zhì)量傳感器通過幾根電纜連接:
寫入固件
我通常在編寫Arduino/C和CircuitPython之間來回切換。對(duì)于這個(gè)項(xiàng)目,我選擇了Arduino/C -只是因?yàn)镃ircuitPython對(duì)Blues Cygnet的支持還沒有完全準(zhǔn)備好。然而,無論哪種方式,Adafruit傳感器庫和Blues Python或Blues Arduino sdk都提供了對(duì)兩種語言的強(qiáng)大支持。
完整的源代碼可以在GitHub上找到。然而,這里有一些亮點(diǎn):
空氣質(zhì)量傳感器數(shù)據(jù)
除了一些必要的儀式來初始化空氣質(zhì)量傳感器,實(shí)際提取的值是幾個(gè)命令的問題:
蜂窩連接編碼
同樣,Blues使云連接這個(gè)項(xiàng)目變得非常容易。實(shí)際上,只需要兩個(gè)命令就可以將本地傳感器數(shù)據(jù)發(fā)送到云端。
我們數(shù)據(jù)的第一個(gè)目的地是Blues云服務(wù)Notehub,它作為Notecard的安全云代理,最終將收集到的傳感器數(shù)據(jù)路由到Adafruit IO。
1)使用樞紐。集合API:
的中心。set API告訴Notecard它應(yīng)該向哪個(gè)Notehub云項(xiàng)目發(fā)送數(shù)據(jù)。
在設(shè)置了一個(gè)(免費(fèi)的)Notehub項(xiàng)目后,你會(huì)得到一個(gè)全局唯一的ProductUID:
以及支持的代碼塊:
2)使用筆記。添加API
每次我們想要將積累的傳感器數(shù)據(jù)與云同步時(shí),我們都會(huì)調(diào)用note。添加API。這將創(chuàng)建一個(gè)充滿我們所有傳感器數(shù)據(jù)的事件(或藍(lán)調(diào)術(shù)語中的注釋)。
結(jié)果數(shù)據(jù)顯示在Notehub項(xiàng)目中如下所示:
云連接
目前,我們正在本地收集傳感器數(shù)據(jù),并通過蜂窩定期將其發(fā)送到云端。
太酷了!
然而,現(xiàn)在我們需要對(duì)這些數(shù)據(jù)做一些有意義的事情,這就是Adafruit IO發(fā)揮作用的地方。這個(gè)云服務(wù)提供了一個(gè)慷慨的免費(fèi)層,提供了一種非常簡(jiǎn)單的方式來可視化數(shù)據(jù)(儀表板),創(chuàng)建警報(bào)(操作),甚至集成第三方服務(wù)(升級(jí))。
Adafruit IO Feeds
設(shè)置Adafruit IO帳戶后,前往Feeds部分,為想要使用的每個(gè)數(shù)據(jù)元素創(chuàng)建一個(gè)feed:
藍(lán)調(diào)Notehub
接下來,我們需要回到Notehub創(chuàng)建一個(gè)路由,它將告訴Notehub如何將事件傳遞到Adafruit IO!
在Routes菜單選項(xiàng)中,選擇General HTTP/HTTPS Request/Response,它允許我們向Adafruit IO HTTP api發(fā)送數(shù)據(jù)。
安排好剩下的路線
1) URL
其中{username}是您的Adafruit IO用戶名,{group}是封裝提要的組名。(這可能是默認(rèn)設(shè)置。)
2)在HTTP報(bào)頭下,您必須添加Adafruit IO密鑰(可在您的Adafruit IO帳戶中找到)。x - IO- key是名稱,您的Adafruit IO key是值。
3)在過濾器下,您將希望發(fā)送與此項(xiàng)目相關(guān)的傳感器數(shù)據(jù),并忽略Notecard發(fā)送的其他會(huì)話和健康信息。因此,在Notefiles部分下,選擇Selected Notefiles,然后選擇傳感器。qo(這是代碼中使用的Notefile的名稱)。
4)最后在Data部分,我們需要編輯或轉(zhuǎn)換從設(shè)備發(fā)送到Adafruit IO之前的JSON有效負(fù)載。每個(gè)云服務(wù)都有特定的數(shù)據(jù)格式,Adafruit IO也不例外!
實(shí)際上,我們需要?jiǎng)?chuàng)建一組鍵值對(duì),每個(gè)要發(fā)送的數(shù)據(jù)元素對(duì)應(yīng)一個(gè)鍵值對(duì)。之類的……
這是如何實(shí)現(xiàn)的呢?通過JSONata表達(dá)的魔力!JSONata允許您動(dòng)態(tài)地轉(zhuǎn)換JSON對(duì)象。
提示:JSONata練習(xí)器是測(cè)試JSONata表達(dá)式的好方法!
下面是我使用的完整的JSONata表達(dá)式,以及前面提到的JSONata練習(xí)器中該表達(dá)式的圖像:
最后,保存路由(確保已啟用)并觀察下一個(gè)事件。您應(yīng)該在事件視圖的狀態(tài)列下看到一個(gè)綠色的小復(fù)選框,它告訴您事件已成功路由到Adafruit IO!
Adafruit IO儀表板
現(xiàn)在我們有數(shù)據(jù)流入Adafruit IO,讓我們創(chuàng)建一個(gè)儀表板。
前往Adafruit IO中的儀表板菜單選項(xiàng)并創(chuàng)建您的第一個(gè)儀表板。
使用提供的直觀UI,為每個(gè)提要?jiǎng)?chuàng)建一個(gè)或多個(gè)塊。例如,使用VOC指數(shù)數(shù)據(jù)饋送,我創(chuàng)建了一個(gè)顯示最近讀數(shù)的儀表和一個(gè)顯示歷史讀數(shù)的折線圖:
現(xiàn)在,對(duì)要可視化的每個(gè)數(shù)據(jù)元素重復(fù)前面的步驟。就是這么簡(jiǎn)單!
Adafruit IO Actions
接下來,我認(rèn)為每當(dāng)我的VOC指數(shù)超過100(通常是空氣質(zhì)量從好到不太好!)時(shí),收到電子郵件提醒會(huì)很方便。
前往Adafruit IO中的Actions菜單選項(xiàng)。
使用表單或“Blockly”編輯器創(chuàng)建一個(gè)新動(dòng)作(感覺有點(diǎn)像在Scratch中編程!)
以下是我的郵件提醒在Blockly編輯器中的樣子:
警報(bào)呢?相當(dāng)吸引人:
Adafruit IO Power-Ups
現(xiàn)在是時(shí)候認(rèn)真對(duì)待Adafruit IO power - up了!
這些是與第三方服務(wù)(如IFTTT、Zapier和SMS)的健壯集成,用于消息傳遞(以及其他服務(wù))。
就我個(gè)人而言,我認(rèn)為使用IFTTT與我的飛利浦Hue LED燈條集成并在我當(dāng)?shù)氐目諝赓|(zhì)量(VOC指數(shù))出現(xiàn)問題時(shí)提供一些更戲劇性的反饋將是非常簡(jiǎn)潔的!
讓我們把這個(gè)設(shè)置好。
1)在Adafruit IO的Power-Ups菜單中選擇IFTTT。
2)登錄您的IFTTT帳戶并創(chuàng)建一個(gè)applet。
3) applet的第一步是監(jiān)視來自Adafruit IO的監(jiān)視器。搜索“Adafruit”,并根據(jù)需要填寫表格,將顏色設(shè)置為綠色(例如,VOC值<= 100)。
4)接下來,在“然后”部分,你需要連接到你的Hue帳戶,并為你的Hue燈選擇“改變顏色”動(dòng)作。
5) IFTTT小程序應(yīng)該就完成了!
您將需要重復(fù)此過程來設(shè)置紅色,更改“if”語句,使其在VOC值為bbb100時(shí)觸發(fā)。
注意:IFTTT的免費(fèi)層每小時(shí)只輪詢你的Adafruit IO feed一次。你可以升級(jí)到他們的“專業(yè)”層,以獲得更頻繁的投票。
最終結(jié)果
結(jié)果呢?巨大的成功!
我辦公室里的揮發(fā)性有機(jī)化合物含量自然在90到130之間,但我硬編碼了一些揮發(fā)性有機(jī)化合物的值,以便快速演示燈光的變化:
如果你能認(rèn)出那只貓,那就加分了!
因此,我希望你已經(jīng)看到,構(gòu)建一個(gè)真正的云連接產(chǎn)品是多么容易,它可以:
?測(cè)量室內(nèi)空氣質(zhì)量。
?將這些數(shù)據(jù)發(fā)送到云端。
?在儀表板上可視化傳感器數(shù)據(jù)。
?當(dāng)空氣質(zhì)量惡化時(shí),發(fā)送電子郵件提醒。
?在本地智能家居設(shè)備上可視化結(jié)果。
多虧了bluesnotecard和Adafruit IO的簡(jiǎn)單(和強(qiáng)大),這個(gè)項(xiàng)目只花了我?guī)讉€(gè)小時(shí)就拼湊起來了——我希望你也能這樣做!
在這里開始使用Adafruit IO,并在這里獲得您自己的藍(lán)調(diào)入門工具包。入門套件包括STM32主機(jī),Notecarrier F和Notecard Cell+WiFi。也請(qǐng)記住,這個(gè)項(xiàng)目的完整源代碼可以在GitHub上找到!
本文編譯自hackster.io