使用樹莓派構建一個嬰兒監視器
香港很濕熱,即便是晚上,許多人為了更舒適,在家裡也使用空調。當我的大兒子還是一個小嬰兒的時候,他卧室的空調還是需要手動控制的,沒有溫度自動調節的功能。它的控制器只有開或者關,讓空調整個晚上持續運行會導致房間過冷,並且也浪費能源和錢。
我決定使用一個基於 樹莓派 的 物聯網 解決方案去修復這個問題。後來我進一步為它添加了一個嬰兒監視器插件。在這篇文章中,我將解釋我是如何做的,它的代碼在 我的 GitHub 頁面上。
設計空調控制器
解決我的問題的第一個部分是使用了一個 Orvibo S20 可通過 WiFi 連接的智能插頭和智能手機應用程序。雖然這樣可以讓我通過遠程來控制空調,但是它還是手動處理的,而我希望嘗試讓它自動化。我在 Instructables 上找到了一個滿足我的需求的項目:他使用樹莓派從一個 AM2302 感測器 上測量附近的溫度和濕度,並將它們記錄到一個 MySQL 資料庫中。
使用壓接頭將溫度/濕度感測器連接到樹莓派的相應 GPIO 針腳上。幸運的是,AM2302 感測器有一個用於讀取的 開源軟體,並且同時提供了 Python 示例。
與我的項目放在一起的用於 AM2302 感測器 介面的軟體已經更新了,並且我使用的原始代碼現在應該已經過時了,停止維護了。這個代碼是由一個小的二進位組成,用於連接到感測器以及解釋讀取並返回正確值的 Python 腳本。
![Raspberry Pi, sensor, and Python code](/data/attachment/album/201805/24/174759en8sz580cqsscc50.png "Raspberry Pi, sensor, and Python code")
樹莓派、感測器、以及用於構建溫度/濕度監視器的 Python 代碼。
將感測器連接到樹莓派,這些 Python 代碼能夠正確地返回溫度和濕度讀數。將 Python 連接到 MySQL 資料庫很簡單,並且也有大量的使用 python-mysql 綁定的代碼示例。因為我需要持續地監視溫度和濕度,所以我寫軟體來實現這些。
事實上,最終我用了兩個解決方案,一是作為一個持續運行的進程,周期性(一般是間隔一分鐘)地獲取感測器數據,另一種是讓 Python 腳本運行一次然後退出。我決定使用第二種方法,並使用 cron 去每分鐘調用一次這個腳本。之所以選擇這種方法的主要原因是,(通過循環實現的)持續的腳本偶爾會不返回讀數,這將導致嘗試讀取感測器的進程出現堆積,最終可能會導致系統掛起而缺乏可用資源。
我也找到了可以用程序來控制我的智能插頭的一個 Perl 腳本。它是解決這種問題所需的一部分,因此當某些溫度/濕度達到觸發條件,將觸發這個 Perl 腳本。在做了一些測試之後,我決定去設計一個獨立的 checking
腳本,從 MySQL 去拉取最新的數據,然後根據返回的值去設置智能開關為開或關。將插頭控制邏輯與感測器讀取腳本分開,意味著它們是各自獨立運行的,就算是感測器讀取腳本寫的有問題也沒事。
配置一個打開/關閉空調的溫度值是很有意義的,因此,我將這些值轉移到控制腳本讀取的配置文件中。我也發現,雖然感測器的值一般都很準確,但是,偶爾也會出現返回不正確讀數的情況。這個感測器腳本被修改為不向 MySQL 資料庫中寫入與前值差異非常大的值。同樣也在配置文件中寫入了連續讀取的溫度/濕度之間允許的最大差異值,如果讀取的值處於這些限制值以外,這些值寫不會提交到資料庫中。
雖然,做這個自動調節器似乎花費了很多努力,但是,這意味著,記錄到 MySQL 資料庫的數據是有效的、可用於進一步去分析識別用戶使用模式的有用數據。可以用多種圖形方式去展示來自 MySQL 資料庫中的數據,而我決定使用 Google Chart 在一個 Web 頁面上顯示數據。
![Temperature and humidity chart](/data/attachment/album/201805/24/174759ukjrbb3wpjwjebo2.png "Temperature and humidity chart")
過去六小時內測量到的溫度和濕度
添加一個嬰兒監視攝像頭
樹莓派開放的性能意味著我可以不斷地為它增加功能 —— 並且我有大量的未使用的可用 GPIO 針腳。我的下一個創意是去添加一個攝像頭模塊,將它放在孩子的卧室中,配置它去監視嬰兒。
我需要一個能夠在黑暗環境中工作的攝像頭,而 Pi Noir 攝像頭模塊是非常適合這種條件的。Pi Noir 除了沒有紅外過濾之外,同樣也是樹莓派常用的攝像頭模塊。這意味著它在白天時的圖像可能有點偏紫色,但是它可以在黑暗中藉助紅外燈來顯示圖像。
現在我需要一個紅外光源。由於樹莓派非常流行,並且進入門檻很低,因此它有大量的外圍配件和插件。也有適合它的各種紅外光源,我注意到的其中一個是 Bright Pi。它可以從樹莓派上供電,並且它很適合為樹莓派的攝像頭模塊提供紅外光和普通光。它唯一的缺點是太考驗我的焊接技能了。
我的焊接技能還是不錯的,但是可能花費的時間比其他人更長。我成功地連接了外殼上所有的紅外 LEDs,並將它們連接到樹莓派的 GPIO 針腳上。這意味著樹莓派能夠編程式控制制紅外 LED 是否點亮,以及它的亮度。
通過一個 Web 流去公開捕獲的視頻也很有意義,因為這樣我就可以從 Web 頁面上查看溫度和濕度的讀數圖表。進一步研究之後,我選擇了一個使用 M-JPEG 捕獲器的 流軟體。通過 Web 頁面公開 JPG 源,我可以在我的智能手機上去連接攝像頭查看程序,去查看攝像頭的輸出。
做最後的修飾
沒有哪個樹莓派項目都已經完成了還沒有為它選擇一個合適的外殼,並且它有各種零件。在大量搜索和比較之後,有了一個顯然的 贏家:SmartPi 的樂高積木式外殼。樂高的兼容性可以讓我去安裝溫度/濕度感測器和攝像頭。下面是最終的成果圖:
在這以後,我對我的這個作品作了一些改變和更新:
- 我將它從樹莓派 2 Model B 升級到了 樹莓派 3,這意味著我可以使用 USB WiFi 模塊。
- 我用一個 TP-Link HS110 智能插頭替換了 Orvibo S20。
- 我也將樹莓派插到了一個智能插頭上,這樣我就可以遠程重啟/重置它了。
- 我從樹莓派上將 MySQL 資料庫移走了,它現在運行在一個 NAS 設備上的容器中。
- 我增加了一個非常 靈活的三角夾,這樣我就可以調整到最佳角度。
- 我重新編譯了 USB WiFi 模塊,禁用了板載 LED 指示燈,這就是升級到樹莓派 3 的其中一個好處。
- 我因此為我的第二個孩子設計了另外一個監視器。
- 因為沒有時間去折騰,我為我的第三個孩子購買了夜用攝像頭。
想學習更多的東西嗎?所有的代碼都在 我的 GitHub 頁面上。
想分享你的樹莓派項目嗎?將你的故事和創意發送給我們。
via: https://opensource.com/article/18/3/build-baby-monitor-raspberry-pi
作者:Jonathan Ervine 譯者:qhwdw 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive