作者:烟台大学 刘鹏 孙强强 杜君龙
指导教师:王林平 童桂英
作品简介
开发背景
智能家居是物联网的典型应用,他将互联网与物质世界紧密联系在一起,实现了智能化,但是,传统意义上的智能家居还不够智能。将云的概念引入传统基于物联网的智能家居,他将使智能家居真正跨入智能时代。
结构说明
本作品由单片机系统、服务器两部分组成。单片机系统负责采集信息、与服务器通信、执行控制命令;服务器负责数据处理(利用云计算)、向用户提供带有查询与控制功能的网页。
功能与使用说明
1. 通过网页、LCD液晶屏查看家居状态
可以通过任何上网设备登录指定网页(http://jd.ytu.edu.cn/hom/)来查看家居温度、湿度、火警、雨水等情况;也可以通过LCD液晶屏查看。
2. 多方式控制
本作品可以对总电源、电灯、窗户、红外遥控家用电器进行操纵
a.网页控制
登录网页控制平台,分为简单控制和高级控制两种方式。简单控制对家居设备(如灯、电源、窗子、电视、空调)等进行直接的控制。高级控制指的是按照需求设定控制对象、控制时间、触发频率等,当设定的条件满足时,将会自动触发完成控制。
b.语音控制
c.红外遥控器控制
3. 无人模式智能托管
当设定为无人模式时,如果传感器检测到有人、火警等信号,将会自动触发报警,并可通过服务器向用户发送短信报警。当检测到雨水时,将会自动关闭窗户。
作品特色
1. 融合云计算与物联网的概念
本作品在传统基于物联网的智能家居基础上融合了新兴的云计算概念,充分发挥物联网与云计算的优势:物联网采集和传输数据后由远端云服务器处理,使智能家居有了更大的发展潜力。
2. 交互高效、人性化
采用网页交互,用户使用任何上网设备都能随时查看家居状态、控制家居设备,尤其在移动互联时代,没有任何平台障碍的网页交互方式,给用户带来了极大的便利。
3. 低成本
云计算的概念充分发挥了“闲置”服务器的性能,将复杂的数据处理交由服务器实现,本地硬件只负责采集、通信、执行,这样使得由低价单片机搭建此平台成为可能,极大的降低了成本。
4. 升级便捷、拓展性强
复杂的运算交由服务器执行,使得对家居控制的程序可用高级语言编程,拓展性极大提高,后续升级服务更加便捷,只需升级一次代码,即可对所有用户进行升级,免去了现场升级的成本。
5. 平台性
本作品是基于在上述特点指导下的试验性作品,选取了典型的智能家居控制对象,成功验证了方案的正确性和可行性,但是不局限于现有选取的控制对象。
分析得出系统功能结构图:
平台选型说明
STC单片机IAP15F2K61S2。
设计说明
1.硬件设计
由功能分析得知
1.完成信息采集功能,系统应具有常用的环境信息采集传感器。
2.显示功能则选用常用的LCD液晶显示屏。
3.多方式控制功能由网页控制、语音控制和红外遥控器控制构成,所以系统应具有语音模块,红外接收管。
4.执行功能控制电灯、总电源、窗户、红外遥控家电,所以系统选用继电器、步进电机、红外遥控学习模块。
5.多个模块共用单片机串口所以进行串口扩展。单片机要和服务器完成数据交换,所以系统选用串口转网络模块。
由上述分析得出系统硬件结构图:
1.1硬件选型
1.1.1信息采集功能
采集的信息包括温度、湿度、火灾、降雨、有人闯入、窗子开关状态,对应选用DS18B20数字温度传感器、DHT11数字温湿度传感器、MQ-2烟雾模块、雨滴模块、人体红外感应模块、行程开关。
1.1.2显示功能
选用LCD12864液晶屏
1.1.3执行功能
①总电源和电灯
选用松乐SRD-5VDC-SL-C继电器,触点功率240VAC -7A。
②窗子
机械结构为齿轮、齿条。窗子运动阻力不大,选用美蓓亚17PU-H022型5V步进电机。窗户开关时电机连续运行时间不长,选用ULN2003A芯片作为电机驱动芯片。
③红外家电的控制
选用了红外遥控学习模块。该模块能够对红外遥控器的发射信号进行学习和记录,并非针对NEC协议进行解码,支持多种协议。实现对绝大多数家电的红外遥控控制。
1.1.4多方式控制功能
多方式控制提高系统方便性、稳定性和可靠性。
1、网页控制
网页控制由服务器完成。
2、语音控制
选用语音模块YS-V0.7。当模块成功检测到设定的关键词后将设定的识别码通过串口发送到单片机中。
① 3、外遥控器控制
采用一体化红外接收管HS0038B。
1.1.5通信功能
1、网络转串口模块WF-U-09T
要实现网页控制,就必须实现单片机和远端服务器的通信,即实现单片机和互联网的数据交流。网络转串口模块WF-U-09T简单易用。
2、串口扩展芯片
网络模块、红外遥控学习模块、语音模块都和单片机的串口连接。所以选用串口扩展芯片GM-8123。该芯片实现串口一扩三,全双工通信。
1.1.6程序下载和调试功能
选用了MAX232芯片,通过RS232串口下载程序。
1.2硬件电路设计
使用Altium Designer设计电路图。
1.2.1电源部分
采用输出为5V 1A的手机充电插头供电。
1.2.2控制部分
选用STC的IAP15F2K61S2单片机, I\O数量已经满足要求,故不需进行I\O扩展。
1.2.3信息采集部分
各传感器按数据手册典型接线图连接
1.2.4信息显示部分
LCD12864接线图
1.2.5执行元件部分
步进电机、继电器、红外遥控学习模。红外遥控学习模块发射管工作瞬时电流达1A, 所以正负极间接2200uf蓄能电容。
1.2.6多方式控制部分
语音模块红和红外接收管接线图
1.2.7通讯部分
1.2.8程序下载和调试部分
1.3硬件制作
1.3.1 PCB电路板制作
热转印法:步骤少、最小线宽、线间距大,需要加热设备。
感光法:骤较热转印多一些、最小线宽、线间距可达0.254mm左右,无需专业的制作设备。
因无专业制板设备,过孔难以加工,所以本作品以感光法制作单面PCB板。
感光法制作单面PCB电路板步骤为:
1、打磨覆铜板,涂刷感光油墨,将打印电路图的菲林纸紧贴在涂刷完感光油墨的覆铜板上。
2、用紫外线灯曝光,有铜导线处的感光油墨固化。
3、显影剂中显影,未固化的感光油墨去除。
4、刻蚀剂中刻蚀,将多余的铜去除。
5、脱模剂中脱模,将铜导线上固化的感光油墨去掉。
6、电钻钻孔,焊接元器件
7、作调试完成
1.4硬件调试问题及解决
①行程开关动作,步进电机没有停止
原因:步进电机送相序时对P2整组I\O口操作,使得行程开关的输入引脚电平被置0,干扰了单片机的判断
解决:步进电机送相序只操作对应的引脚,避开对整组P2口的操作
②通信存在接收数据错误
原因:ISP下载线插在电脑上,硬件上单片机的TXD和RXD引脚和电脑USB接口相连,对数据产生影响
解决:程序下载完成,必须将ISP下载线从电脑USB插口拔下
③红外学习模块发射数据时程序卡死
原因:红外学习模块发射数据时,红外接收管同时接收学习模块的数据,接收管的解码程序存在while型的死循环判断,由于学习模块发射的数据不正确,不正确的数据解码导致程序卡死
解决:接收管的解码子程序,不采用while型死循环进行判断
④整个板子用电电流增加后板子电压降低至3.5V左右,导致部分模块不能正常工作
原因:USB方形口的供电线过细,电阻过大。电流过大后分压加大
解决:更换USB方形口供电线(更换电源线之后板子电压稳定在4.8V左右)
2.服务器设计
2.1需求分析
服务器承担三项工作
① 接收网络送来的传感器信息数据,并对其进行解析、保存。
② 根据预先设定,适时将控制命令通过网络发送给单片机系统;实现实时控制、定时控制、智能控制。
③ 提供网页交互界面,供用户查看家居状态,控制被控对象,设定多种控制方式。
2.2服务器设计实现
2.2.1数据服务器
前两项工作的实现显然需要与单片机系统进行网络通信,并有驻留系统的程序进行数据处理,这就需要一个常驻系统的程序。
选取面向对象的高级语言c#来编写此程序,开发环境为Microsoft Visual Studio 2010。我们将此程序称之为“数据服务器”。
网络模块有两种通信方式,即tcp模式、udp模式,由于本系统数据量小,可靠性要求高,故而采取tcp模式较为合理。
采用socket编程通信流程为:
按照上述流程即可建立起数据服务器与单片机系统的通信,经测试,数据传输正常。根据需要控制的对象以及接收的信息确定数据服务器发送数据为5字节,接收的数据为8字节。这样,我们将接收的数据进行解析,即可得到家居状态,按照规则发送数据,即可实现对家居的控制。接收到的数据,按照既定规则进行解析,得到传感器状态,并保存到state.txt的文件中。
2.2.2网页服务器
第三项工作应该由网页服务器来承担工作,采用PHP+IIS搭建动态网页服务器。
网页的显示功能实现:
当用户打开网页(http://jd.ytu.edu.cn/hom/)时,php读取state.txt中的传感器状态,生成html页面供用户浏览,用户即可了解到家居的各项状态。
网页的控制功能实现:
如图,当用户在命令内容选定所需命令,并点击“立即执行”按钮后,命令表单被提交至后台sub.php处理,此php程序将命令按照格式写入com.txt文件。写入文件的操作会触发数据服务器来读取com.txt文件,并将其数据通过socket发送至单片机系统。这样就完成了简单的实时控制。
高级控制:
如图,当设定好某项“被控项目”、“命令内容”、“触发时间”、“触发频率”后,点击“添加”按钮,本页表单被提交至add.php程序,add.php根据提交表单内容,将控制要求存入mysql数据库中,同时将此次变动的控制对象名称写入advanced.txt,写入文件的操作会触发数据服务器来读取advanced.txt文件,并启动对应名称的对象,从数据库中读取控制内容并执行(即按照内容发送网络数据)。每次执行完一条数据库中的命令后,都将重新读取数据库,以读取下一条需要执行的内容。所有未执行的命令都将显示在页面上,用户点击“删除”后,将从数据库中删除本条命令。
3.单片机程序设计
单片机是整个单片机系统的核心,他承担着采集信息,控制网络模块发送网络数据、接收数据并实现控制执行元件的任务。
3.1程序设计
单片机采用c语言编程,基本流程:
3.1.1命令字
设定全局变量存储命令字(串口接收到的命令数据),状态字(采集到的传感器数据)。
命令字定义、初始化:uchar ComWord[5]={0xfe,0xfe,0xfe,0xfe,0xff};
状态字定义、初始化:uchar idata wangluo_send_buf[8]={0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe};
3.1.2主程序
void main()
{
JDQ_init(); //继电器初始化
lcd_welcome(); //液晶LCD初始化
djl_init(); //程序初始化(操作外部中断1)
GM8123_init(); //串口扩展芯片GM8123初始化
ini_time0(); //初始化操作定时器0
while(1)
{
read_temp(); //读取温度
read_RH(); //读取湿度
zhuangtai(); //处理状态显示
lcd_display(); //液晶LCD显示
JiDianQi() ; //继电器控制
wangluo_sand_data(); //网络发送数据
hongwai_sand_data(); //红外发送数据
BuJinDianJi_control(); //步进电机控制
}
}
3.1.3中断实现
使用了单片机的串口中断和外部中断0,其中网络数据、语音模块数据通过串口中断更改控制字内容,外部中断0接收红外接收管的信息,具体工作为:
网络模块、语音模块发送来的串口数据是按照数据格式发送的,单片机收到数据后直接将其存入ComWord[]数组中;红外管接收到红外遥控信号后,单片机解码红外遥控键值,将命令存入ComWord[]数组相应元素中。这样就完成了命令字的保存。
单片机执行命令,是通过查询方式实现的,即在每一个循环中读取ComWord[]数组中操作指令,并对其存在的命令进行解析执行,执行完毕为其值写入标志着无命令的0xfe值。