家里养了宠物(例如宠物狗)的朋友都有一个困扰,当外出时不能随时看见家里的情况。因此,我想到了用开源硬件(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(“myemailaddress@gmail.com”, “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(“ArduinoHomeAutomationOpenHAB@gmail.com”, “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”栏目
-
传感器
+关注
关注
2546文章
50522浏览量
751365 -
DIY
+关注
关注
176文章
886浏览量
348133 -
Arduino
+关注
关注
187文章
6461浏览量
186565 -
智慧家庭
+关注
关注
5文章
300浏览量
40436
发布评论请先 登录
相关推荐
评论