家里養了寵物(例如寵物狗)的朋友都有一個困擾,當外出時不能隨時看見家里的情況。因此,我想到了用開源硬件(Arduino)和開源軟件(OpenHAB)制作一個實用的家庭自動化系統。但是這個系統并不像用智能手機控制燈光的開關那樣,我主要把心思花在大量的網絡傳感器和及時警報等事情上。
以下是基本構思,利用Arduino可輕松連接負載和廉價傳感器。通過設置,傳感器上的負載可直接連上網絡,所以在溫度太高(太低)或者燈光太亮等情況時可以及時給你發郵件提醒。你的寵物在叫時同樣可以發郵件提醒,另外你還可以在智能手機上檢查傳感器的狀態。由于傳感器節點都是無線的,所以你不需要進行以太網端口布線等事宜。
下圖是連接的方法。
在這篇文章里還會介紹如何建立大量的遠程無線節點,如何將這些傳感器集成到一個開源家庭自動化服務器。除了在手機App上看到家里的情形外,你還可以快速收到郵件提醒和語音提示。
如下是這次設計的關鍵要素:
· 低成本,每個傳感器節點的成本少于20美元
· 靈活性,基于Arduino的節點可允許任意一個向系統發出特定的感應需求
· 高可靠性,工作時間和無線傳感范圍
· 同時利用電池供電和wall-power傳感器節點
以下是該設計用到的傳感器:
聲音傳感器
可感知寵物的叫聲,并且發送郵件。我用這個傳感器來獲得叫聲的信息,并可遠程打開網絡攝像頭監視狗吠的原因,這里還有一個計算叫聲次數的計數器。
洗滌/烘干傳感器
在清洗或烘干程序完成后會發出一個語音提醒,只需要通過手機App就可檢查程序是否完成。
光傳感器
通過手機App顯示燈光的狀態,可檢查燈泡是出故障。
異物監視器
紅外傳感器可以監視房間的一切情形,并可發出聲音警報和郵件提醒。
寵物跟蹤器
當寵物離開時可接受提示,并在谷歌地圖上顯示其位置,還可以監視寵物排便的位置。
煙霧傳感器
可以用此傳感器來感應并發送冒煙、失火或者是液化氣泄露等信息。
溫度和濕度數據均在手機App中顯示,你也可以啟用郵件提醒功能。用OpenHAB可統計歷史溫度,你可以在手機上看到溫度變化圖表。
漏水傳感器
當出現漏水情況時會發出郵件提醒和語音警報。
門、窗、抽屜和信箱安全傳感器
用一個電池供電舌簧開關傳感器可觸發聲音警報并發送郵件提醒。除了監視門、窗、信箱和抽屜之外,還可記錄事發時間。
車庫門監視器
用手機可在線監視車庫門的開關情形,同樣可設置語音提示。
通過這些傳感器,房間內所有的物體都成為了物聯網的一部分。
第一步:用法解釋
有視頻教程教你如何使用此系統,而后續的步驟是教你如何搭建系統。
2、無線洗衣房傳感器
3、無線車庫門監視器
4、無線超級傳感器
5、無線門、信箱安全傳感器
這次設計的優點主要如下:
· 成本低,每個傳感器節點耗資少于20美元,包括無線收發器。
· 高靈活性,用wall-powered傳感器和節能電池供電傳感器可維持1年工作。
· 精致的用戶界面,OpenHAB用戶界面可在手機App顯示,也可以通過其他瀏覽器進入。顯示設備和樹莓派之間的通信都需加密驗證。
· 可控制其他產品,如果你家有Sonos揚聲器、Insteon燈/插座或者z-wave,就可用OpenHAB來控制這些產品。
· 可集成任何傳感器
下面的熱圖是RFM69HW無限收發器的監視范圍,我是通過一個GPS模塊和連有RFM69HW的Arduino一起傳送坐標。一個GPS Arduino在戶外,另一個Arduino在室內接收信號。用Zigbee、bluetooth、Z-wave和 wifi就不會這么便宜了。RFM69發出的915MHz頻率信號穿透能力比2.4GHz無限模塊強。這也是我不用nRF24L01+收發器的原因之一。
下圖是OpenHAB用戶界面
——本文選自電子發燒友網2014年12月《智慧家庭特刊》“EE SHOW”欄目
更多關于智能家居設計技巧與精華請下載相關特刊。
第二步:材料清單和事前準備
材料清單
· 3個3.3V Arduino Clone
· 一個Arduino W5100以太網屏蔽器
· 樹莓派或者你的個人電腦
· 連個10KΩ電阻
· 原型擴展板
· 2個RFM69HW無線收發器
· DH11溫度傳感器
· 超聲波距離傳感器
· 舌簧開關
· 紅外傳感器
· 火焰傳感器
· 聲音傳感器
· MQ2煙感器
· 光敏電阻
· GPS模塊
· 電流變換器
· 磁力計
· 伺服馬達
· 杜邦電纜
· 22 gauge安裝線
準備好這些材料后就可以開始了。唯一的焊接步驟是RFM69HW收發器,按照如下布線圖焊接。
第三步:設計Arduino網關和OpenHAB
當你把線纜焊接到RFM69芯片上后,需要制作無線網關并且利用OpenHAB設置樹莓派。用I2C連接兩個Arduinos。
無線數據以數組形式從傳感器節點傳送到RFM網關,隨后數據通過I2C由RFM網關傳送到以太網網關。
設計Arduino網關
元件:
1、 兩個3.3V/5V 開關Arduino Uno Clone,并設置為3.3V
2、 一個Wiznet 5100以太網擴展板
3、 一個焊接好電線的RFM69HW
一個Arduino用作RFM網關,另一個用作以太網網關。RFM網關的Arduino連接到RFM69HW,如第一步的接線圖。
RFM69HW與Arduino連接
· NSS to Pin 10
· MOSI to Pin 11
· MISO to Pin 12
· SCK to Pin 13
· GND to Ground
· 3.3V to the 3.3V header
· DI00 to Pin 2 (interrupt)
· NSS連接Pin10
· MOSI連接Pin11
· MISO連接Pin12
· SCK連接Pin13
· 接地相連
· 3.3V連接3.3V
· DI00連接Pin2
將以太網擴展板放到以太網網關上,用杜邦線勾住兩個Arduino。
· 接地腳相連
· Pin 4連接Pin 4
· Pin 5連接Pin 5
準備主機
接下來,將OpenHAB安裝到主機上(樹莓派或者電腦)。
然后,在主機上下載MQTT broker(Mosquitto)。如下是用樹莓派的情形。
sudoapt-getinstallmosquittomosquitto-clientspython-mosquitto
上述步驟做完后,就可以開始設計傳感器了。
第四步:車庫門監視器
用超聲傳感器裝置可以提醒車庫門是否關閉,或者監視汽車是否出故障。傳感器可在一定范圍內監測到物體,而數據也可無線傳輸到網關,隨后通過OpenHAB分析車庫門的狀態。
第五步:電池供電舌簧開關
這個電池供電無線Arduino傳感器可做很多用途,可以用作安全傳感,例如發出聲音警報或者郵件提醒。
下圖是電池供電單元工作的基本情形,可以把舌簧開關放在信箱底部,當信箱開啟后就會發出信息。
按照下圖銅箔面包板接線圖來安裝傳感器。
這里需要用到:
1個ATMEGA328P-PU
1個915MHz RFM69HW收發器
1個螺旋接線柱,用來連接電池
2個1MΩ電阻,用作分壓
3個0.1μF陶瓷電容
1個10μF鉭質電容
1個振蕩器,最好選用8MHz
2個22pF電容
1個LED
1個220Ω電容,用作LED限流
1個10KΩ上拉電阻
舌簧開關
3*6英寸帶板
24Pin插槽
電池箱
在樹莓派上安裝MP3文件,下圖是配置文件的部分代碼。
rule “send email and talk”
when
Item itm_mailbox changed from OFF to ON
then
playSound(“aolmail.mp3”)
sendMail(“myemailaddr[email protected]”, “subject line here” , “email body text”)
end
電池電流損耗的測量有點棘手,如果用無線電萬用表可能無法測準,我估計在睡眠模式下僅為0.mA。因為微控制器大部分時間處于睡眠模式,因此用一個4*AA電池組可以正常工作1年半。
第六步:超級傳感器
我把幾個傳感器集成到這個無線超級傳感節點,通過USB適配器供電,與網關進行無線傳輸。如下傳感器依據需要挑選:
· 聲音傳感器
· 溫濕度傳感器
· 紅外傳感器
· 煙霧傳感器
· 火焰傳感器
· 光傳感器
OpenHAB用戶界面如下圖,用手機進入此界面后,可以隨時接受傳感器的信息。一旦受到警報提示,就可以收到異常信息的郵件。
第七步:超級傳感器—紅外傳感
這個Arduino傳感器可檢測房屋入侵信息,一有情況可立即向手機發送提示信息。
按照如下接線圖安裝,可以很明顯的看到幾個不同型號的紅外傳感器,有些是要上拉電阻。如果直接在Arduino連接輸出線不能正常工作,你就需要像接線圖一樣添加一個上拉電阻。
第八步:超級傳感器—聲音感應
除了感應寵物的叫聲外,還可以監視警報聲的消除,傳感器的靈敏度可按照需要調節。
如果需要對著傳感器的麥克風發出很大的聲音,LED燈才會亮則說明輸出太大了,如果很小的聲音也能觸發LED點亮,也需要調節。
如果用的是叫聲傳感器,還需準備一個計數器來記錄寵物叫喊的次數。下面是計數代碼,當叫聲警報解除后數據會被重置。因為傳感器在20秒內才發送一次數據,所以計數并不準確。
項目定義
Number itm_uber1_bark_cnt “Bark count [%.0f]”
站點地圖
Frame label=“Uber Sensor Alarm Status” {
Switch item=itm_uber1_gas_alm_sta mappings=[OFF=“Off”]
Switch item=itm_uber1_flame_alm_sta mappings=[OFF=“Off”]
Switch item=itm_uber1_bark_alm_sta mappings=[OFF=“Off”]
Text item=itm_uber1_bark_cnt
Switch item=itm_uber1_pir_alm_sta mappings=[OFF=“Off”]
規則
//place this at be top of the rules file
var Number bark_counter = 0
//rules for bark sensor
rule “Uber bark threshold”
when
Item itm_uber1_bark_mqtt received update
then
if(itm_uber1_bark_alm_enb.state == ON)
{
sendCommand(itm_uber1_bark_alm_sta, ON)
bark_counter = bark_counter + 1
itm_uber1_bark_cnt.postUpdate(bark_counter.toString)
}
end
rule “Uber bark response”
when
Item itm_uber1_bark_alm_sta changed from OFF to ON
then
sendMail(“[email protected]”, “bark detected” , “dog barked!!!”)
//playSound(“ding.mp3”)
postUpdate(itm_uber1_bark_time, new DateTimeType())
end
rule “deactivate bark sensor”
when
Item itm_uber1_bark_alm_enb received update
then
bark_counter = 0
itm_uber1_bark_cnt.postUpdate(bark_counter.toString)
end
第九步:超級傳感器—光傳感
上圖是光傳感器的接線圖,電阻阻值為10KΩ。
如下是OpenHAB配置
if(itm_uber1_light_mqtt.state < 350)
按照需求調整傳感器的靈敏度。其他配置參照第六步。
第十步:超級傳感器—溫濕度傳感
這里用到了數字傳感器,型號為DHT11。
//#define DHTTYPE DHT11
#define DHTTYPE DHT21
同樣,按照上面接線圖安裝,使用10K電阻。
這里設置的事每6分鐘更新一次數據(36000ms)
if (time_passed> 360000)
{
float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
...——本文選自電子發燒友網2014年12月《智慧家庭特刊》“EE SHOW”欄目
-
傳感器
+關注
關注
2562文章
52548瀏覽量
763630 -
DIY
+關注
關注
176文章
892瀏覽量
351707 -
Arduino
+關注
關注
188文章
6491瀏覽量
190084 -
智慧家庭
+關注
關注
5文章
302瀏覽量
40795
發布評論請先 登錄
評論