[智能家居] 家庭燈光的智能控制
智能家居最容易入手的一環就是智能燈光。從飛利浦的hue,到wemo的智能開關,到小米的智能燈泡,每家的技術都不一樣,但基本都能實現遙控,定時開關等基本功能。結合Alexa/Siri還能實現語音控制。到了這一步,家庭燈光就已經比較智能了。這篇文章主要介紹的是,如何在這個基礎上更進一步,加入人體感應功能。
一些品牌的燈光已經有了人體感應的功能,比如Hue有動作感應感測器,可以和Hue燈泡連起來。小米也有人體感應感測器。但它們的不足是,僅僅起到了自動開關燈的作用,和常見的聲控燈沒有太大區別。比如上廁所的時候還要一邊拉屎一邊鼓掌/揮舞自己的雙手讓燈不要超時,想想就酸爽。。同時這些感測器還並不能實現對燈光更精細的控制。比如起夜衝進廁所,啪,燈一下全打到最亮,我的氪金狗眼都要被亮瞎了。。所以,這篇文章主要介紹一下我對智能燈光應該如何做的人性化的一些思考和實現。
在定下具體的目標之前,我們先要了解一下我們手頭有什麼工具。最核心的當然就是紅外感測器啦。長得像下圖左這樣,驅動電壓5V。它裡面有一個紅外感應器(下圖右)。如果有人走過的話,它會輸出一個高電平,否則輸出低電平。靈敏度和超時長度可調。它的一個致命缺陷是,如果你就在那一直坐著不動的話,它感應不到紅外變化,就會覺得沒有人了,輸出低電平。換言之,這個感測器檢測的是人動不動而不是人在不在。價格方面,5塊人民幣就可以買到。相比之下,同樣原理的飛利浦Hue動作感應器需要300人民幣左右(當然還包括配套電路,研發等等成本和品牌溢價)。
的確有其他更高級的感測器和演算法可以實現檢測人在不在而不是動不動,比如攝像頭可以輕鬆地實現這一點,或者在門口拉個紅外/激光圍欄也可以。但綜合考慮成本和實現難度以後,我覺得這個紅外感測器還是最合適的。只是因此我們也確定了一個我們不會去實現的功能,就是自動關燈。因為除非引入更多的感測器和更精細的演算法,否則自動關燈很難做到人滿意的程度。同時它帶來的好處非常有限——現在的LED燈泡可以做到7W功率達到70W白熾燈的亮度。就算有自動關燈每天少開2個小時,也不過是0.014度電,按5毛錢一度電算,一年才能省2塊多錢。考慮到投資和收益,我們並不需要自動關燈功能。
至於我們想要的功能主要是三點:
- 人經過自動開燈。比如晚上睡前想去廚房倒杯水,我可不想摸黑走路,或者大動干戈叫Alexa開燈。又比如起夜,在廁所摸開關摸半天也很不爽。
- 要能判斷什麼時候自動開燈,什麼時候不要開。比如裝在卧室的自動燈,老婆睡覺了我一進卧室燈打開了引發家庭暴力,我睡了翻個身又把燈打開了(這個可以通過改動感測器的位置實現)。
- 要能判斷什麼時候用什麼亮度。比如我們的洗手間沒有窗戶,所以平時希望只要一有人進去就滿亮度打開。但如果夜裡進去的話希望開的比較暗,以免亮瞎狗眼。此外對於起夜的情況希望有個自動關燈功能,因為這個只靠定時也可以做得很好,而且這樣就徹底不用碰開關了。
關於用什麼機制來實現(機理設計),第一點非常簡單,弄個微控制器,感測器高電平就聯繫Hue Bridge開燈就好(我們家用的是Hue)。二三點的關鍵是在於知道什麼時候處於睡眠狀態,什麼時候解除睡眠狀態。在前面的智能家居文章里介紹過,我們的Alexa有個特殊的IFTTT trigger叫做good night。每晚睡覺前我們都會跟Alexa道晚安,這時候Alexa會自動關燈,關窗帘,啟動攝像監控,激活警報器等等。只要在這裡跟告訴自動燈控制器,激活睡眠模式就可以了。這時開始,所有房間的自動開燈功能就都被禁用了。除了洗手間仍然有自動開燈,但燈光亮度非常弱。至於什麼時候解除睡眠模式,我們用的是IFTTT,每天日出的時候把洗手間設置成全亮度,日落的時候把其他房間的自動開燈功能打開。這樣一方面比較智能,只在日光不足的時候自動開燈;一方面也比自己實現一個類似功能簡單可靠。
下面具體介紹實現的技術細節。整個技術框架如下圖所示。
具體的實現可以根據技術框圖很容易給出來。幾個要點是:- ESP-8266不僅是一個Wifi晶元,而且是一個獨立的微控制器(MCU),可以直接用Arduino IDE編程。而且它的能力比Arduino強很多。
- ESP-8266唯一的坑是它整個晶元都是3.3V的。但這個紅外感測器只能用5V驅動,用3.3V的話會不斷重啟。有個很hacky的解決方法是,如果你用的是NodeMCU開發板的話,它是用5V電壓驅動的,這個電壓可以用USB輸入,也可以用VIn輸入。所以如果用USB輸入的話,VIn其實是輸出5V電壓的。可以用這個來驅動紅外感測器。但一個坑是,在晶元啟動的那一刻,VIn不能連在感測器上,否則它會認為驅動電壓不足。要等晶元啟動以後再把感測器接上去。
- Hue Bridge的API非常簡單。基本上是個RESTful API。網上有很多教程。可以用ESP-8266直接驅動,也可以在電腦端連。我選擇了在電腦端連,是因為微控制器要重新編程調試比電腦上編程還是要麻煩不少(雖然ESP-8266可以無線更新)。如果不走API用IFTTT控制的話,延時可能會到10秒左右,實在不靠譜。所以我選擇了在本地直接發送API請求的方式。
- 樹莓派上的軟體,我用的是tornado寫了個web service。通過nginx反向代理,經過路由器把暴露在廣域網上。然後IFTTT有個Maker channel可以通過這個介面來控制睡眠模式。
最終的成品如圖所示。左上角的是紅外感測器,旁邊藍色的是溫濕度感測器。右下角的是ESP-8266開發板。注意Mini USB口和晶元的相對尺寸。所有電路感測器加起來還沒有用來供電的充電器大。
總結一下,這篇文章首先定了一個模糊的需求方向(自動開燈),然後調研市場上已有的解決方案,分析優勢和不足,確定具體的目標和非目標。接下來敲定機理設計,一步步細化,到最終實現。一遍過程做下來,還是可以學到不少東西的。
[更新] 換了一個帶5V輸出的開發板,現在重啟要手工干預的問題也解決了。同時用樂高搭了個丑萌丑萌的小盒子。。
推薦閱讀:
※iPhone 大小,可樂輕重,既能觀影有又能唱K
※小米智能家居一周年使用筆記
※幾乎是最便宜的智能設備——博聯插座深度解析