[智能家居] 關於樹莓派測量空氣質量的一些實驗

現在所說的「智能家居」,其實更多的是「遙控傢具」。正如以前的文裡面提到的,我個人認為智能家居需要三個階段,遙控化,自動化,和智能化。現在利用ifttt和一些手工規則,我們已經可以實現相當程度的自動化了(6點開暖氣,日落開燈等等)。但想要到智能化還有相當的路要走。我自己就是搞機器學習的,所以也希望能學以致用,至少讓自己家更智能,過得更舒服。但要搞智能化,面臨的第一個問題就是,訓練數據從哪來,甚至,訓練數據是什麼。從提高生活質量的角度出發,我把空氣質量作為一個切入點。開始了一些用樹莓派測量空氣質量的實驗。

從自己生活的角度看,其實也很好奇室內污染到底有多嚴重,甲醛pm2.5到底有多少。由於有後期數據分析可視化的需求,所以更希望從app裡面看。然鵝,至少沒有看到美國公司做又能測pm2.5/甲醛/遊離有機物(VOC),又有app的產品(最接近的是知名pm2.5測量廠商dylos的pro版提供一個土土的串口能連PC)。國內這樣的產品有一些接近的,但看到200塊的售價和掃一掃朋友圈自動分享的廣告語,雖然覺得牛逼,總覺得哪裡不對。。所以從實用的角度出發,也決定自己動手豐衣足食一把。

最終的結果就是,做出來一個東西可以搜集/監控家裡的溫濕度,二氧化碳,噪音水平,以及空氣質量。目前空氣質量僅僅包括氮氧化物/氨/苯/酒精和甲醛。未來會加入PM2.5。app的截圖如下。

這些數據是從不同的感測器搜集來的:

  • 溫濕度是從家裡的暖氣控制器(thermostat)搜集的。它自帶一個(未公開的)OAuth API。Ajax抓包可以拿到。
  • 二氧化碳和雜訊水平用的是Netatmo。
  • 空氣質量用的是樹莓派加感測器。下面詳細說說這個。

=============hard core技術內容的分割線===============

樹莓派(基於ARM)和Arduino之類單片機的重要差異在於,他雖然有GPIO介面,能夠讀取數字信息,但他並沒有內置模擬數字轉換器(ADC),所以不能像Arduino那樣直接連模擬感測器。但流行的氣體感測器MQ135等等都是模擬的,所以得搭一個小電路,用MCP3008之類的ADC晶元先把模擬信號轉成數字信號,然後再讀取。這裡有一個相當好的教程:Analog Inputs for Raspberry Pi Using the MCP3008

但教程裡面對MCP3008信號讀取用的是bit banging的方法,也就是自行實現上圖的協議。其實樹莓派內置硬體支持SPI匯流排介面。所以我就偷個懶,直接用spidev來讀了。改改電路以後幾行python就能搞定。後端用tornado架個網站,前端用ajax刷新數據寫個web app就接起來了。

同時也和學物理的同學探討了一下。MQ135之類感測器的原理是,感測器的表面有一層二氧化錫的膜。空氣中的目標分子(比如苯分子)接觸到這層膜的時候,會可逆地放出電子,從而改變二氧化錫膜的電導率。所以通過測量電阻,就可以實現對有害氣體含量的測量了。不同的氣體會有不同的膜。至於PM2.5,一般的感測器用的是激光散射。但這個非常不準確,一般只用來做定性測量。原因是氣溶膠含量的測量博大精深,不同的條件下適合用不同的方法,很難說有一種感測器能在各種不同的環境下都能得到準確的結果。國家標準裡面測量PM2.5用的是BAM之類直接過濾空氣的方法,非常昂貴。

今天拿到了更小的樹莓派zero。踩了一些坑,也說一下。

樹莓派zero是一種5美元的全功能電腦。它和普通的樹莓派在功能上是完全一樣的,只是有一些介面上的縮水。比如4個全尺寸USB口變成了1個OTG mini USB口。而且把wifi去掉了,這就很蛋疼。。顯然不可能到哪都拖根網線,自然地,就需要折騰看能不能把Wifi給裝上去。。一個很簡單的想法是,我找個特別小的那種無線網卡,就一個USB口外面伸出來一點點那種,插上不就完了。想法很簡單,但真插上去以後發現特別不穩定,一兩秒斷一次,斷一次要找幾十秒才能重新連上。折騰了六七個小時,debug了半天內核錯誤信息。網卡設置,dhcp,路由,驅動,一個個排查過去,最終的結論是。。USB口支持的電流太小,撐不起來這個無線網卡。網上有人找個了有源的USB hub,插上就能跑了。

這特碼就有點尷尬了。樹莓派zero的好處都有啥?不就是便宜和小么!要是隨身帶個有源usb hub,又不便宜又不小了。。只能另外想辦法。先看能不能魔改OS把usb電流弄大。。搜了一些方法試了以後並沒有什麼卵用。繼續bing,找到另一個魔改方法。大概地說,就是樹莓派zero為了調試方便,在PCB電路板上暴露了一些電極。這裡面正好包括+5V, GND, 以及USB通信的D+和D-。一個簡單粗暴的方法是,老子把網卡拆了,直接把電極焊上不就完了么。

說拆就拆。網卡拆完以後特別特別小。。跟一個一分硬幣差不多大。可以看到天線其實就是彎彎曲曲的一排金屬。

有個小坑是USB信號是差分信號(differiential signal),為了避免干擾,每根線的長度最好是一樣的。所以焊上去以後擺成了這個奇怪的pose。

插電以後真特碼亮了。。DHCP也可以拿到IP地址。DHCP的過程感覺比之前快了不少,可能和電流增大了有關。然鵝,不穩定的問題還是沒有完全解決,log里時不時還是能看見網卡重啟的錯誤。還有個大坑是這麼焊了以後OTG USB用不了了。。插上網卡就滅了,然後USB也沒反應。。所以如何在樹莓派zero上加上一個又便宜又小的wifi還是一個未解之謎。。

=====================思想感情的分割線=====================

整個過程中焊了介面,拼了模擬和數字電路,操作了匯流排,做了驅動和內核debug,寫了python,架了網站,寫了前端。雖然很多東西從本科畢業就再沒碰過,一條龍下來都比較順暢,感覺本科的系統化教育還是很有用的。總體感受就是,歡迎您報考中國科學技術大學!基礎紮實真的不後悔。

推薦閱讀:

10個智能家居小工具讓你的生活更輕鬆
開始看好HomeKit了
只插一個怎麼夠——鴻雁智能插排拆解評測
iPhone 大小,可樂輕重,既能觀影有又能唱K

TAG:树莓派RaspberryPi | 智能家居 | 空气质量 |