基于树莓派的多功能智能家居系统
2018-03-03何静如
何静如
摘 要:为了打造更舒适安全的家居环境,解决普通智能家居用品功能集成度低的问题,并降低购买成本,文中设计了一种以树莓派作为控制终端,通过多种传感器采集信息,实现集室内温湿度调节、人脸识别门锁、红外感应夜灯、实时监控多种功能于一体的智能家居系统。该系统可对室内温湿度进行调控,增大家居环境的安全系数,并满足节能便利的生活需求。整个系统功能集成度高,成本低廉,具有一定的应用价值与市场前景。
关键词:树莓派;智能家居;多功能集成;室内温湿度调节;人脸识别门锁;红外感应夜灯;实时监控
中图分类号:TP273;TP212 文獻标识码:A 文章编号:2095-1302(2018)02-00-04
0 引 言
家居环境的安全性与人们的生活息息相关。在湿热的环境下,人体的散热功能受到抑制,易导致烦躁、中暑、精神紊乱;而干冷的环境易使人体的皮肤干燥,同时也会诱发呼吸系统病症。此外,空气湿度过大或过小时,都有利于一些细菌和病毒的繁殖和传播。因此,保持室内合理的温湿度尤为重要。
由于人的面部特征具有唯一性[1],在传统门锁中加入人脸识别系统,并实时监控,可大大增加家居环境的安全系数并方便出行。另外,根据光线情况与是否有人,灯具可自动变换开关状态,满足了节能与便利的需求。
随着物联网技术的发展,各种智能家居设备应运而生,普通智能家居用品功能单一,集成度低。单独购买智能家居用品往往花费较高,树莓派作为一款基于ARM的微型电脑主板,具有成本低,可扩展性强等优点[2],并拥有视频模拟信号的输出接口,若将其作为控制终端,可设计出集多种功能于一体的智能家居系统。
1 整体结构设计
系统以树莓派作为控制终端,通过多种传感器采集信息,采用相应的硬件连接与软件支持,使用Python编程,可实现集室内温湿度调节、人脸识别门锁、红外感应夜灯、实时监控等功能于一体的智能家居系统。各功能以及相关软硬件示意如图1所示。
(1)室内温湿度调节:根据DHT11温湿度传感器测得室内温湿度,加湿器与风扇自动开关;将插座与连接树莓派的继电器相连,可使用树莓派控制插座上电器的开关状态。
(2)人脸识别门锁:当触摸传感器感应到有人触碰时,500 W像素树莓派摄像头将拍摄照片,并启动人脸识别功能,通过Face++云平台实现人脸图像的识别处理,根据人脸识别判断的结果控制电磁锁的开关。
(3)红外感应夜灯:通过光敏传感器与HC-SR501人体红外传感器感应信息,在天黑且有人的情况下,LED灯将自动打开。
(4)实时监控:利用Motion软件通过局域网将摄像头的实时监控情况呈现在Web网页上。
系统主要由控制终端、感应单元、受控单元及云服务四个部分组成:控制终端为树莓派;感应单元由各种传感器组成;受控单元包括各种家具器件及继电器;云服务主要指Face++云平台。
感应单元将传感器采集的信息数据传递给控制终端树莓派,其中,部分信息直接在本地处理,部分信息上传至云端,云端对图像信息进行处理后,将结果返回给树莓派。根据处理后的结果,树莓派发出相应控制指令到受控单元,控制相连的各器件。系统整体的信息数据流向方式如图2所示。
2 系统的设计与实现
2.1 控制核心
系统对数据传输能力要求较高,在视频数据与图像数据上需要保证流畅及稳定性,普通的单片微控制器[3](如Arduino)难以实现。考虑到成本与功能需求,该系统采用树莓派Raspberry Pi 3b作为控制终端。
树莓派Raspberry Pi 3bBroadcom BCM2837为片上系统,其运行频率为1.2 GHz,拥有四核ARM处理器, 1 GB RAM存储器,与40个GPIO引脚,CSI摄像头接口,HDMI接口,4个USB 2.0端口,10/100以太网端口,RAC av端口,USB电源接口,DSI显示连接器,搭载蓝牙和WiFi模块。
树莓派的GPIO 引脚定义如图3所示。GPIO引脚的编号方式有三种,分别为BCM编号方式(如图3中BCM列所示);BOARD编号方式(如图3中Physical列所示);wiringPi编号方式(如图3中wPi列所示)。图3中的Mode列为引脚的输入/输出状态,可通过编程设定[4]。
2.2 室内温湿度调节
根据DHT11温湿度传感器所测得的室内温度与湿度数据,在树莓派中对数据信息进行分析与处理。根据当前温湿度情况,通过二路继电器控制风扇或加湿器的打开与关闭。相关硬件连接如图4所示。
加湿器采用额定电压为DC 5 V、额定功率约2 W的小型加湿器;风扇采用供电电压为DC 5 V、输出电流为1 A、功率约3 W的小型风扇。小型加湿器与风扇可使用树莓派供电。若考虑功率更大的加湿器或风扇,可将加湿器或风扇插在与树莓派相连的插座上,通过220 V交流电源供电。
由于树莓派的GPIO引脚在Output状态默认为0,因此采用高电平触发的5 V二路继电器。树莓派提供5 V电源引脚与继电器的常开(No1、No2)触点相连,在常态(不通电)下处于断开状态,风扇与加湿器处于关闭状态。
DHT11温湿度传感器含有电阻式感湿元件与NTC测温元件,可输出经过校验后的温度与湿度数字信号[5],适用于室内温湿度的测量。其湿度测量范围为20%~95%;温度测量范围为0~50℃。
利用DHT11温湿度传感器的检测数据控制加湿器与风扇的开关状态,每隔5 min判断一次。由于人体适宜的湿度为45%~65%[6],因此在湿度小于45%的情况下打开加湿器,湿度大于65%的情况下关闭加湿器;温度大于27℃时风扇打开,温度小于23℃时,风扇关闭。该功能实现的程序流程如图5所示。endprint
2.3 人脸识别门锁
实现人脸识别门锁功能的硬件连接图如图6所示。通过220 V交流电压转12 V直流变压器,将电压转换为12 V直流电磁锁所需要的电压。当需要被检测时,触碰触摸传感器,此时启动树莓派摄像头拍照,根据人脸识别结果,通过树莓派控制5 V继电器来控制电磁锁电流的通断,即开锁或关锁。
触摸传感器是一个基于触摸检测IC(TTP223B)的电容式点动型触摸开关模块[7]。常态下,模块输出低电平;当有人触摸相应位置时,输出高电平。该模块可安装在非金属材料如塑料、玻璃表面,也可将薄纸片等非金属材料覆盖在模块表面,隐藏在墙壁等位置。
由于树莓派的GPIO引脚在Output状态默认为0,因此采用高电平触发5 V继电器,变压器的V+与继电器的常开(No)触点相连,在常态(不通电)下处于断开状态,电磁锁不通电,处于关锁状态。
人脸识别功能基于Face++云平台,其API以Http请求的方式进行调用[8],所使用的接口及其功能描述见表1所列。
首先判断是否有人需要被检测,当有人需要被检测时,将在本地的人脸图像及相关信息上传至Face++云平台,存入FaceSet中,建立人脸数据库,再判断拍摄的待识别图像中是否有人脸。若有,则与FaceSet中的人脸图像进行对比,当相似度大于80%时,则打开门锁。程序流程如图7所示,主要步骤(使用Python编程语言)如下:
(1)采用BOARD编号方式,GPIO2设置为Input状态,GPIO29设置为Output状态:
GPIO.setmode(GPIO.BOARD)
GPIO.setup(13,GPIO.In)
GPIO.setup(40,GPIO.Out)
(2)判断是否有人需要被检测,触碰了触摸传感器。
while True:
if GPIO.Input(13)==True:
...
time.sleep(2)
(3)若有人需要被检测,启动摄像头拍摄:
os.system('raspistill -w 480 -h 360 -o customer.jpg -t 2000')
(4)创建人脸集合FaceSet
api.faceset.create(outer_id='SetTest')
(5)将本地图片上传:
Picture = {}
save1 = api.detect(image_file=facepp.File(/test/test1.jpg))
Picture ['name1'] = save1 ["faces"][0]["face_token"]
save2 = api.detect(image_file=facepp.File(/test/test2.jpg))
Picture ['name2'] = save2 ["faces"][0]["face_token"]
(6)將本地图片的FaceTocken存入FaceSet中上传:
api.faceset.addface(outer_id='SetTest',
face_tokens= Picture.itervalues())
(7)得到拍摄图像的face_token:
customer_pic = api.detect(image_file=facepp.File(customer.jpg))
(8)判断是否检测到了人脸:
if(len(customer_pic ["faces"])==0):
//未检测到人脸,删除
api.faceset.delete(outer_id='SetTest', check_empty=0)
else:
//在 FaceSet 中寻找与所拍摄人脸最相似的,返回相似度
result = api.search(face_token= customer_pic ["faces"][0]["face_token"], outer_id='SetTest')
(9)得到相似度:
similarity = result ["results"]
judge=int(similarity [0]['confidence'])
(10)若相似度大于80%,则开锁:
if judge > 80 :
GPIO.Output(40, True)
time.Sleep(3)
GPIO.Output(40, False)
2.4 红外感应夜灯
红外感应夜灯的硬件组成为光敏传感器与HC-SR501人体红外传感器。
光敏传感器利用半导体的光电效应判断光线强弱,随着入射光线的增强,其电阻值减小,将光信号转换为电信号[9]。当光线强度小于设定的阈值时,DO端输出高电平;当光线强度大于设定的阈值时,DO端输出低电平。
通过HC-SR501人体红外传感器可判断是否有人。若人进入其感应范围,则输出高电平;若人离开感应范围,则自动延时关闭高电平,输出低电平。HC-SR501有以下两种触发方式[10](可跳线选择):
(1)不可重复触发方式(L):在感应到有人输出高电平后,不再进行感应判断,延时时间结束后,输出低电平;
(2)可重复触发方式(H):在感应到有人输出高电平后,仍然进行感应判断,以最后一次感应到有人的时间为延时的起始时间。endprint
这里采用可重复触发方式(H)。
为了防止HC-SR501的针脚处于悬浮状态,出现输出电平状态不稳定的情况,接入10 kΩ下拉电阻,使其处于明确的低电平状态。硬件连接如图8所示。
红外感应夜灯在天黑且有人的情况下自动打开。功能实现的关键代码(使用Python编程语言)如下:
light = 12 //LED灯与树莓派相连的GPIO引脚编号
infrared = 25 //人体红外传感器与树莓派相连的GPIO引脚编号
photosen = 16 //光敏传感器与树莓派相连的GPIO引脚编号
GPIO.setmode(GPIO.BCM) //采用BCM的编号方式
GPIO.setup (light,GPIO.Out)
GPIO.setup (infrared,GPIO.In)
GPIO.setup (photosen,GPIO.In)
While True:
if(GPIO.Input(infrared) ==True and GPIO.input(photosen) ==True):
GPIO.Output(light,GPIO.HIGH)
time.sleep(30) //天黑且有人的情况下,开启灯30 s
else:
GPIO.Output(light,GPIO.LOW) //否則,关灯
time.sleep(5)
2.5 实时监控
摄像头与树莓派的CSI摄像头接口通过15芯的排线连接,利用Motion软件,通过局域网实现实时监控。
(1)在终端中使用如下命令安装Motion软件:
sudo apt-get install motion
(2)配置motion daemon守护进程,使其在后台运行:
sudo nano/etc/default/motion
start_motion_deamon=yes
(3)修改motion的配置文件,将deamon off 改成 on,设置分辨率,关闭localhost的限制:
sudo vim /etc/motion/motion.conf
deamon on
width 800
height 600
webcam_localhost off
(4)运行motion:
sudo motion
(5)查看树莓派IP地址:
ifconfig
(6)在同一局域网下,访问树莓派IP的8081端口,即可获取实时监控的视频数据:
http://[Raspberry Pi IP]:8081
3 结 语
本文介绍了通过树莓派实现多功能智能家居系统的可行性,设计了各功能的硬件连接图与软件实现方案。以树莓派作为控制终端,可实现室内温湿度调节、通过人脸识别开闭门锁、红外感应夜灯、实时监控。对各项功能进行实验与操作,已全部达到预期效果。系统功能集成度较高,设计易于搭建,相关硬件成本低廉,具有广阔的应用市场与发展前景。
参考文献
[1] 邱丽华.人脸信息认证系统基于设计模式的设计与实现[D].武汉:华中科技大学, 2008.
[2] Rushi Gajjar.树莓派+传感器:创建智能交互项目的实用方法、工具及最佳实践[M]. 胡训强,张欣景,译.北京:机械工业出版社,2016.
[3] 张毅刚,刘旺,邓立宝.单片机原理及接口技术[M].北京:人民邮电出版社,2016.
[4] Alex Bradbury, Ben Everard.树莓派Python编程指南[M].王文峰,译.北京:机械工业出版社,2015.
[5] Tero Karvinen,Kimmo Karvinen,Ville Valtokari.传感器实战全攻略[M].于欣龙,李泽,译.北京:人民邮电出版社,2016.
[6]眭晋华,史红梅,眭广瑞.空气湿度及其影响[J].山西科技,2011,26(3):143-144.
[7]来清民.传感器与单片机接口及实例[M].北京:北京航空航天大学出版社,2008.
[8] face++ API文档[EB/OL].https://console.faceplusplus.com.cn/documents/4887579.
[9]王琦,阮淑云.光敏电阻传感器的特性研究[J].都市家教(上半月),2014(6):188.
[10]李萌.智能楼道照明节电控制系统的设计[J].电子制作,2014(10X):49-50.endprint