基于Arduino的智能家居控制.docx
《基于Arduino的智能家居控制.docx》由会员分享,可在线阅读,更多相关《基于Arduino的智能家居控制.docx(27页珍藏版)》请在冰豆网上搜索。
基于Arduino的智能家居控制
学生毕业论文
(2015届)
韩山师范学院教务处制
诚信声明
我声明,所呈交的毕业论文是本人在老师指导下进行的研究工作及取得的研究成果.据我查证,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,我承诺,论文中的所有内容均真实、可信。
毕业论文作者签名:
签名日期:
2014年11月6日
摘要:
基于Arduino的智能家居控制系统以ArduinoUNO单片机为核心通过联合W5100网络模块搭建本地的WEB服务器,通过A/D采集各引脚连接的室内环境传感器的数值并进行处理,实现家居环境信息的智能采集;通过RFID模块连接第二块ArduinoUNO单片机构建刷卡门禁模块,实现智能门禁;使用蓝牙模块、5050全彩LED模块及ArduinoNano单片机搭建室内智能灯光模块,通过安卓客户端使用蓝牙协议进行连接,实现灯光亮度及色彩的远程控制及智能开关;通过安卓客户端使用HTTP协议请求该服务器获取室内环境数据并传输到安卓客户端,实现室内环境的实时智能检测;通过安卓客户端使用HTTP协议传输控制命令到服务器,实现本地WEB服务器连接外围电路的远程控制;最后通过核心板搭建的WEB服务器链接各个功能模块,组成一个功能完善,扩展性强的智能家居控制系统。
本设计代替了传统家居设备手动机械控制,具有效率高,使用方便,可控性强等优点。
关键字:
Arduino单片机;WEB服务器;高效率;可控性强.
Abstract:
Arduino—basedintelligenthomecontrolsystemtoArduinoUNOmicrocontrollercorenetworkthroughthejointW5100EthernetShieldmodulebuildlocalWEBserver,viaA/Dacquisitionvalueofindoorenvironmentalsensorsconnectedtoeachpinandprocessing,smarthomeenvironmentinformationcollection;viaRFIDmoduletobuildasecondArduinoUNOmicrocontrollercardaccessmodule,intelligentaccesscontrol;usingBluetoothmodule,5050full—colorLEDmodulesandArduinoNanomicrocontrollerbuiltindoorintelligentlightingmoduleforconnectionusingtheBluetoothprotocolbyAndroidclient,achievelightlevelsandcolorremotecontrolandintelligentswitch;indoorenvironmentaldataacquisitionviaAndroidclientusingHTTPprotocolrequeststotheserverandtransmittedtotheAndroidclient,toachievereal-timeintelligencetodetecttheindoorenvironment;usingtheHTTPprotocoltransmissioncontrolviaAndroidclientcommandtotheserver,WEBserverforlocalconnectionofperipheralcircuitsremotecontrol;andfinallythecoreboardsetupbytheWEBserverlinkstovariousfunctionalmodulestoformafunctional,strongexpansionofsmarthomecontrolsystem.Thedesignreplacesthetraditionalmanualmechanicalcontrolhomedevices,withhighefficiency,easeofuse,controllabilityandotheradvantages。
Keywords:
ArduinoSCM;WEBserver;highefficiency;controllable。
基于Arduino的智能家居控制系统
1.概述
1。
1课题研究的背景
随着物联网技术的广泛应用与发展,智能家居的应用越来越广泛。
与传统的家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,集系统、结构、服务、管理为一体的高效、舒适、安全、便利、环保的居住环境,提供全方位的信息交互功能。
现代生活中的家居电器数量急剧增多,传统家居电器的机械化控制方式已经不能完全满足现代生活的需求,伴着家居电器的使用越来越广泛,一个智能化的控制系统,不仅能够帮助家庭与外部保持信息交流畅通,优化人们的生活方式,帮助人们有效安排时间,增强家居生活的安全性,甚至为各种能源费用节约资金。
该系统的市场发展潜力尤为可观。
1.2国内外发展现状
近年来随着现代互联网技术的发展,智能生活的理念深入人心,物联网和智能家居真正开始走向人们的视野。
随着现代电力电子技术和电子元件制造工艺的发展,物联网设备的自动化程度和稳定性得到很大的提高,物联网设备也逐步向轻量化、自动化和智能化发展,还有高可靠性、高可控性、高效率等特点,功能不断增强和完善,这推动了智能家居技术的迅速发展,相继出现了多种多样的智能家居设备,如NEXT恒温器,空气净化器等,但国内外对本课题的研究尚存在待解决的问题:
(1)家居智能化水平较低;
(2)使用的平台不统一,功能单一且不完善;
(3)价格相对昂贵,普及的难度比较大。
1.3本课题的研究的内容及目的
本系统以联合EthernetShield网络模块的ArduinoUNO单片机为核心,能通过安卓客户端使用蓝牙协议及HTTP协议连接外围电路及各类传感器,实现室内家居的远程检测及智能控制.
研究目的基于生活的便捷及高效的方向出发,主要是为了改进当下传统家居的控制方式落后及使用不方便等缺点,本设计的智能远程控制代替了传统家居设备手动机械控制,不仅效率高、成本低、使用方便、可控性强,更能提升家居便利性、舒适性、艺术性,并实现环保节能的居住环境.
2.系统结构分析
2。
1系统结构组成
系统的结构组成示意图如图1。
系统由五部分组成:
APP客户端、灯光模块、核心模块、检测模块、外围电路。
各部分组成如下:
(1)APP客户端为JAVA语言编写的安卓客户端;
(2)灯光模块由ArduinoNano单片机连接蓝牙模块及全彩LED模块组成;
(3)核心模块通过ArduinoUno单片机连接EthernetShield网络模块组成,核心模块不仅是本系统的中央处理器,而且通过连接无线路由器搭建了本地的WEB服务器;
(4)检测模块由气压传感器、湿度传感器、气压传感器共同组成;
(5)外围电路由简单的发光二极管及各类元器件组。
图1系统结构组成框图
2.2系统的基本功能
系统实现的功能如图2所示,系统的各部分具体功能如下:
(1)通过APP客户端使用蓝牙协议连接灯光模块,在APP客户端中实现LED灯光颜色,亮度的智能调节;
(2)通过APP客户端使用蓝牙协议连接灯光模块,在APP端播放器中开启一段音乐,灯光模块会随着音乐的节奏进行规律性地闪烁;
(3)通过APP客户端使用HTTP协议连接核心模块,实现在APP端对外围电路的远程开关控制;
(4)检测模块将基本的环境信息采集后通过IO口传输给核心模块,再由APP端通过HTTP协议请求WEB服务器的数据,实现在APP端对室内环境信息的实时监控;
(5)通过APP客户端使用HTTP协议连接核心模块,设置特定温度时外围电路的工作状况,当检测模块检测到温度达到或低于预设温度时,外围电路电器将智能调整工作状态.
图2系统基本功能框图
2.3系统的工作流程
系统的工作流程分为两部分组成:
(1)APP客户端通过蓝牙协议控制灯光模块,具体流程图如图3所示:
图3灯光模块控制具体流程图
(2)APP客户端通过HTTP协议控制外围电路,具体流程图如图4所示:
图4外围电路控制具体流程图
3。
硬件设计
整个系统电路可以分成四个模块:
核心模块、灯光模块、检测模块、外围电路。
下面我们对这四个电路模块进行理论上的分析。
3。
1核心模块
核心模块由Arduino单片机及W5100网络模块通过直接总线连接构成,连接方式如图5所示。
图5直接总线连接原理图
ArduinoUNO是作为Arduino平台的参考标准模板,是ArduinoUSB接口系列的最新版本。
UNO的核心控制器件是ATmega328处理芯片,数字输入/输出口共计有14路:
6路PWM输出端口,6路模拟输入端口,一路ICSPheader,一个16MHz晶体振荡器,一个电源插口,一个USB接口和一个复位按钮,控制板能同时兼容5V和3.3V的供应电压。
原理图如图6所示.
图6ArduinoUNO单片机原理图
W5100是一款多功能的单片网络接口芯片,内部集成有10/100Mbps以太网控制器,主要应用于高集成、高稳定、高性能和低成本的嵌入式系统中.使用W5100可以实现没有操作系统的Internet连接。
W5100与IEEE802.310BASE-T和802.3u100BASE-TX兼容。
W5100内部集成了全硬件的、且经过多年市场验证的TCP/IP协议栈、以太网介质传输层和物理层。
全硬件TCP/IP协议栈支持TCP,UDP,IPv4,ICMP,ARP,IGMP和PPPoE等。
网络模块原理图如图7所示。
图7W5100网络模块原理图
3.2灯光模块
图8灯光模块总体原理图
整个灯光模块可以分成三个部分:
ArduinoNano单片机、蓝牙模块、5050全彩LED模块。
ArduinoNano是ArduinoUSB接口的微型版本,最大的不同是没有电源插座以及USB接口是Mini-B型插座。
ArduinoNano是尺寸非常小的而且可以直接插在面包板上使用。
其处理器核心是ATmega328,,同时具有14路数字输入/输出口,其中6路可作为PWM输出,8路模拟输入,一个16MHz晶体振荡器,一个mini—BUSB口,一个ICSPheader和一个复位按钮。
ArduinoNano单片机原理图如图9所示。
图9ArduinoNano单片机原理图
灯光模块采用的是HC—05蓝牙模块,电路原理图如图10所示.蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。
它的传输距离为10cm~10m,如果增加功率或是加上某些外设便可达到100m的传输距离。
它采用2。
4GHzISM频段和调频、跳频技术,使用权向纠错编码、ARQ、TDD和基带协议。
TDMA每时隙为0。
625μs,基带符合速率为1Mb/s。
蓝牙支持64kb/s实时语音传输和数据传输,语音编码为CVSD,发射功率分别为1mW、2.5mW和100mW,并使用全球统一的48比特的设备识别码。
由于蓝牙采用无线接口来代替有线电缆连接,具有很强的移植性,并且适用于多种场合,加上该技术功耗低、对人体危害小,而且应用简单、容易实现,所以易于推广。
图10HC—05蓝牙模块原理图
5050全彩LED模块内置控制芯片,仅需1个IO口即可控制多个LED芯片内置整形电路,信号畸变不会累计,稳定显示三基色256级亮度调剂,16万色真彩显示效果,扫描频率不低于400Hz/S串行连级接口,能通过一根信号线完成数据的接收与解码,刷新速率30帧/秒时,低速连级模式连级数不小于512点,其原理图如图11所示。
图115050全彩LED模块原理图
3。
3检测模块
检测模块由DHT11温湿度传感器及BMP085气压传感器组成。
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,其原理图如图12所示,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性.传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接,具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
图12DHT11温湿度传感器原理图
BMP085是一款高精度、超低能耗的压力传感器,其示意图如图13所示,它可以应用在移动设备中。
它的性能卓越,绝对精度最低可以达到0.03hPa,并且耗电极低,只有3uA.BMP085采用强大的8—pin陶瓷无引线芯片承载(LCC)超薄封装,可以通过IIC总线直接与各种微处理器相连。
图13BMP085压力传感器原理图
3。
4外围电路模块
外围电路由耗电设备直接通过I/O口连接到Arduino的相应接口上组成,其原理图如图14所示。
图14外围电路模块及检测模块接线原理图
4.软件设计
4.1APP端程序设计:
作为系统的控制端部分,APP端使用全球占有率最高的android系统,具有极佳的普适性;其程序设计分为两个部分:
(1)蓝牙连接控制:
APP端先通过BluetoothAdapter协议搜索获取本地的蓝牙列表,手动选择蓝牙设备后通过调用BluetoothSocket对象的方法与灯光模块的HC—05蓝牙模块进行通信,再由getOutputStream()方法以数据流的形式输出控制指令,HC—05蓝牙模块接收控制指令后传输给ArduinoNano单片机进行处理,最后APP端关闭输出,完成灯光模块的控制。
(2)HTTP连接控制:
APP端通过HTTP协议连接ArduinoUno单片机与W5100网络模块共同搭建的WEB服务器,采用AJAX技术使用Javascript向服务器提出请求及发送控制指令,从而完成对WEB服务器采集到的环境信息的获取及远程控制外围电路.
4。
2WEB服务器程序设计:
WEB服务器通过Arduino单片机的编程语言搭建,通过使用以太网库,ArduinoUno单片机将能够通过W5100模块回应APP端的HTTP请求,通过APP端内嵌的WEB浏览器连接到特定的IP地址后,ArduinoUno单片机便可以通过HTTP协议从模拟引脚端获取的检测模块检测到的环境数据,最后通过HTTP协议反馈检测数据到APP端.
4。
3灯光色彩亮度调节:
APP端将取色盘上的RGB颜色及亮度条百分比转换为特定的数据流格式后(格式为(255,255,255,100),由蓝牙模块接收并输出给ArduinoNano单片机,再由ArduinoNano单片机分析处理后传输给5050全彩LED模块进行显示,完成灯光模块的色彩及亮度调节.
4。
4节奏灯光的程序设计:
节奏灯光的程序设计分为两部分:
(1)android音乐频谱获取:
利用数字信号处理的知识把时域上连续的信号(波形)强度转换成离散的频域信号(频谱).频谱反映的是音乐在某个连续时间段内,声音的震动频率.
(2)频谱转换及传输:
通过采集震动频率将其转化为特定格式的数据流,在App端以BluetoothSocket方法传输给ArduinoNano单片机进行处理,从而实现节奏灯光.
5.总结
5.1系统总体效果图
图15系统总体效果图
图16智能灯光效果图
图17APP端主界面图
图18APP端实时环境界面图
5.2系统实现的功能
(1)1600万色的LED灯光色彩调节及100级灯光亮度调节。
(2)实时的室内温湿度及气压的监控。
(3)智能感知温度并智能调配室内电器工作状态。
(4)远程的智能家居开关控制。
5.3不足及改进之处
(1)由于App端采用了Visualizer类,所以在android2。
3以下的版本是无法支持.
(2)由于使用HTTP协议所以远程控制时会存在2到3秒内的延迟。
(3)由于安卓的系统定制版本繁多的原因,在极个别手机上会出现应用崩溃的问题。
附录:
1。
灯光模块电路设计图
2。
检测模块及外围电路接线图
3.单片机端程序
voidloop(){
//http:
//192.168。
1.177/[1,123,112]数据格式
//listenforincomingclients
EthernetClientclient=server。
available();
if(client){
Serial.println("newclient”);
//anhttprequestendswithablankline
booleancurrentLineIsBlank=true;
while(client。
connected()){
if(client。
available()){
//获取客户端的数据
charc=client.read();
if(c=='[')
ResponseBegin=true;
elseif(c==’]’)
ResponseBegin=false;
if(ResponseBegin)
returnValue+=c;
Serial.write(c);
//ifyou’vegottentotheendoftheline(receivedanewline
//character)andthelineisblank,thehttprequesthasended,
//soyoucansendareply
if(c==’\n'&¤tLineIsBlank){
Serial.println(returnValue);
parsingString();
Serial.println(id);
Serial.println(key1);
Serial.println(key2);
if(id。
equals(”1")){//温度
//sendastandardhttpresponseheader
client.println(”HTTP/1.1200OK”);
client.println("Content-Type:
text/html”);
client.println(”Connection:
close”);
client.println();
//theconnectionwillbeclosedaftercompletionoftheresponse
getTempData();//获取温度
client。
print(dattemp);//输出
}elseif(id。
equals(”2")){//LED亮度
setLedBrightness(key1。
toInt());
}elseif(id.equals("3”)){//湿度
client。
println(”HTTP/1.1200OK");
client.println("Content—Type:
text/html”);
client.println("Connection:
close");
client.println();
getHT();
client。
print(humidity11);//输出
}elseif(id.equals("4”)){//温度
client。
println("HTTP/1。
1200OK");
client.println(”Content—Type:
text/html");
client。
println("Connection:
close”);
client。
println();
getHT();
client.print(temperature11);//输出
}elseif(id.equals("5”)){//温度[5],使用的
client.println("HTTP/1.1200OK”);
client。
println("Content—Type:
text/html”);
client.println(”Connection:
close”);
client。
println();
temperature=bmp085GetTemperature(bmp085ReadUT());
client.print(0。
1*temperature);//输出
}elseif(id。
equals(”6")){//气压
client。
println(”HTTP/1。
1200OK");
client.println(”Content—Type:
text/html”);
client。
println("Connection:
close");
client。
println();
pressure=bmp085GetPressure(bmp085ReadUP());
client。
print(pressure);//输出
}elseif(id。
equals(”7")){//开关[7,1,1],[模块,开关,是否开]
switch(key1.toInt()){//选择输出口
case1:
kaiguan(led1);
break;
case2:
kaiguan(led2);
break;
case3:
kaiguan(led3);
break;
case4:
kaiguan(led4);
break;
case5:
kaiguan(led5);
break;
case6:
kaiguan(led6);
break;
case7:
kaiguan(led7);