使用樹莓派構建一個嬰兒監視器

Jonathan Ervine發表於2018-05-24

比一般的影片監控還要好,這種 DIY 型號還有嬰兒房間的自動室溫控制功能。

香港很溼熱,即便是晚上,許多人為了更舒適,在家裡也使用空調。當我的大兒子還是一個小嬰兒的時候,他臥室的空調還是需要手動控制的,沒有溫度自動調節的功能。它的控制器只有開或者關,讓空調整個晚上持續執行會導致房間過冷,並且也浪費能源和錢。

我決定使用一個基於 樹莓派物聯網 解決方案去修復這個問題。後來我進一步為它新增了一個嬰兒監視器外掛。在這篇文章中,我將解釋我是如何做的,它的程式碼在 我的 GitHub 頁面上。

設計空調控制器

解決我的問題的第一個部分是使用了一個 Orvibo S20 可透過 WiFi 連線的智慧插頭和智慧手機應用程式。雖然這樣可以讓我透過遠端來控制空調,但是它還是手動處理的,而我希望嘗試讓它自動化。我在 Instructables 上找到了一個滿足我的需求的專案:他使用樹莓派從一個 AM2302 感測器 上測量附近的溫度和溼度,並將它們記錄到一個 MySQL 資料庫中。

使用壓接頭將溫度/溼度感測器連線到樹莓派的相應 GPIO 針腳上。幸運的是,AM2302 感測器有一個用於讀取的 開源軟體,並且同時提供了 Python 示例。

與我的專案放在一起的用於 AM2302 感測器 介面的軟體已經更新了,並且我使用的原始程式碼現在應該已經過時了,停止維護了。這個程式碼是由一個小的二進位制組成,用於連線到感測器以及解釋讀取並返回正確值的 Python 指令碼。

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

過去六小時內測量到的溫度和溼度

新增一個嬰兒監視攝像頭

樹莓派開放的效能意味著我可以不斷地為它增加功能 —— 並且我有大量的未使用的可用 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章