基于arduino的智能家居设计与实现.docx

上传人:李司机 文档编号:1995901 上传时间:2022-12-30 格式:DOCX 页数:28 大小:380.79KB
返回 下载 相关 举报
基于arduino的智能家居设计与实现.docx_第1页
第1页 / 共28页
基于arduino的智能家居设计与实现.docx_第2页
第2页 / 共28页
基于arduino的智能家居设计与实现.docx_第3页
第3页 / 共28页
基于arduino的智能家居设计与实现.docx_第4页
第4页 / 共28页
基于arduino的智能家居设计与实现.docx_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《基于arduino的智能家居设计与实现.docx》由会员分享,可在线阅读,更多相关《基于arduino的智能家居设计与实现.docx(28页珍藏版)》请在三一办公上搜索。

1、西南科技大学毕业设计题目:基于ARDUlNO的智能家居设计与实现学习形式:成人高等教育专业:机械设计制造及其自动化层次:本科姓名:学号:指导老师:【摘要】基于arduino的智能家居控制系统,以arduino为核心,通过结合wifi转串模块搭建本地tcp/ip服务器。ArdUinO进行数据采集,发送,接受和处理。然后通过Wifi转串口模块和远端安卓客户端通信,实现家居环境信息的智能采集和控制。本文抛砖引玉,实现安卓客户端灯光亮度调节,舵机角度控制,以及家居温度和光照度采集显示在安卓客户端。本设计采用arduino为核心,arduino具有外围电路简单,程序开源,扩展模块丰富等优点,设计难度在于

2、程序中数值的处理,以及客户端软件的编写。【关键词】arduino;智能家居;Wifi转串口模块;服务器;客户端。目录1、概述错误!未定义书签。1.1 课题研究背景错误!未定义书签。1.2 本课题的研究的内容及目的错误!未定义书签。1. 4系统的控制思路与流程错误!未定义书签。2、软件、硬件介绍错误!未定义书签。1.1 客户端软件错误!未定义书签。2. 2arduino介绍错误!未定义书签。2. 2.1ardino研发过程错误!未定义书签。3. 2.2arduino编程软件错误!未定义书签。4. 2.3Arduino硬件错误!未定义书签。5. 2.4Arduino编程语言简介错误!未定义书签。2

3、. 3WIFI模块介绍错误!未定义书签。3、硬件连接错误!未定义书签。3.1温度传感器错误!未定义书签。3. 2光线传感器错误!未定义书签。3. 3伺服舵机错误!未定义书签。3. 4灯光控制错误!未定义书签。4、通讯错误!未定义书签。3.1 串行通讯错误!未定义书签。3.2 异步通讯错误!未定义书签。4. 3Arduino与wifi模块连接错误!未定义书签。5. 4通讯协议错误!未定义书签。5、成品展示错误!未定义书签。参考文献错误!未定义书签。致谢错误!未定义书签。附录错误!未定义书签。西南科技大学成人教育学院自动化专业姓名:罗永勇学号:61、概述1.1 课题研究背景近年来随着现代互联网技术

4、的发展,智能生活的理念深入人心,物联网和智能家居真正开始走向人们的视野。随着现代电力电子技术和电子元件制造工艺的发展,物联网设备的自动化程度和稳定性得到很大的提高,物联网设备也逐步向轻量化、自动化和智能化发展,还有高可靠性、高可控性、高效率等特点,功能不断增强和完善,这推动了智能家居技术的迅速发展,相继出现了多种多样的智能家居设备,如NEXT恒温器,空气净化器等,但国内外对本课题的研究尚存在待解决的问题:(1)家居智能化水平较低;(2)使用的平台不统一,功能单一且不完善;(3)价格相对昂贵,普及的难度比较大。1.2 本课题的研究的内容及目的本系统以ArduinoUNO为核心,联合hlk-rm0

5、4wifi转串口模块,通过安卓客户端使用tcp/ip协议连接外围电路及各类传感器,实现室内家居的远程监控及智能控制。研究目的基于家居生活的便捷高效的方向出发,主要是为了改进当下传统家居的控制方式落后及使用不方便等缺点,本设计的智能远程控制代替了传统家居设备手动机械控制,不仅效率高、成本低、使用方便、可控性强,更能提升家居便利性、舒适性、艺术性,并实现环保节能的居住环境。1.3 系统结构分析系统由七部分组成(如图一):安卓APP客户端、灯光控制、arduino以及Wifi模块、光敏电阻、舵机、温度传感器、外围电路。各部分组成如下:(1) APP客户端为易安卓软件用易语言编写的安卓客户端;(2)灯

6、光亮度控制采用PWm调节(3) 核心模块通过ArduinoUno单片机连接wifi转串模块组成,核心模块不仅是本系统的中央处理器,而且通过连接无线路由器搭建了本地的tcpip服务器;(4) 温度传感器采用单总线dsl8b02集成温度传感器,该传感器可以在一个io上并接多个dsl8b02,大大的节约了CPU的硬件资源。(5)光线的测量采用光敏电阻;(6)伺服舵机;(7)外围电路由简单的发光二极管及各类元器件组无物r号(图一)1.4系统的控制思路与流程APP客户端使用tcp/ip协议,远程无线连接上工作在服务器模式的Wifi模块,wifi模块连接上家庭路由器,需要注意的是家庭网络要处于公网模式,在

7、APP客户端发送控制命令,wifi模块接受命令转成串口数据输出,arduino读取串口数据实现LED灯光亮度智能调节,舵机角度控制,同时arduino模块读取温度传感器数值,采样光敏电阻电压转换为光照度,然后arduino把数据通过串口传给Wifi模块,wifi模块发送数据,客户端接收数据然后显示在安卓手机上;控制流程如图二;APP客户端ITCP/IP协议(图二)控制流程图2、软件、硬件介绍2.1客户端软件采用安卓智能手机作为命令发送和接受端,通过因特网传输数据,实现家居的智能监控和远程操控,操作简单,使用方便。客户端软件采用中文版的安卓编写软件,本文主要专注于整体框架的实现,在此就不再对开发

8、软件进行详细介绍,对软件界面的美观性和舒适性未做过多的修饰。如有不足之处,请指教!客户端软件界面如图三:环境光强度舵机角度控制界面环境温度19.50摄氏度721.0勒克斯(图三)2.2arduino介绍2.2.1arduino研发过程MassimoBanzi之前是意大利IVrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。2005年冬天,MaSSinIoBanZi跟DaVidCuartielles讨论了这个问题。DavidCuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生DaVidMeniS为电

9、路板设计编程语言。两天以后,DaVidMeniS就写出了程式码。又过了三天,电路板就完工了。这块电路板被命名为ArdUirio。2.2.2arduino编程软件ArduinoIDE基于processingIDE开发的。对于初学者来说,极易掌握,同时有着足够的灵活性。ArdUino语言基于Wiring语言开发,是对AVRGCC库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。(图四)ARDUINO编程软件界面2.2.3Arduino硬件Arduino发展至今,出现了适应各种环境的硬件版本,如ArduinoUno.ArduinoNano、ArduinoNano、A

10、rduinoLilyPad,ArduinoMega2560。本文采用ArduinoUno为主控器,ArduinoUNO是ArdUinoUSB接口系列的最新版本,作为ArdUinO平台的参考标准模板。UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PwM输出),6路模拟输入,一个16MHZ晶体振荡器,一个USB口,一个电源插座,一个ICSPheader和一个复位按钮。UNO已经发布到第三版,与前两版相比有以下新的特点:1、在AREF处增加了两个管脚SDA和SCL,支持I2C接口;2、增加IoREF和一个预留管脚,将来扩展板将能兼容5V和3.3V核心板。3、改

11、进了复位电路设计,USB接口芯片由ATlnega16U2替代了ATmega8U2,如图五为改进后的ArdUinOUN0。GNDGNDVln(D14) PC 0 : AINO (D15) PC 1 : AIN1 ID16) PC 2 : AIN2 D17) PC 3 : AIN3 D18) PC 4 : AIN4 D19) PC 5 : AIN55432BBBB111OPPPP*B*BFPpJ9321O :RRlllI98AgddddddISCKIMISOPWM T2A. MOSII PWM T1B, SS PWM T1A Input Capture76543210Dddddddd7654321

12、0DdddddddPpppppppPWMTOAPWMTOBPWMT2B.Ext Int 1ExtInt0USARTTXUSARTRX(图五)ARDUINOUNO硬件图2. 2.4Arduino编程语言简介ArdUinO语言是建立在C/C+基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们不了解AVR单片机(微控制器)的朋友也能轻松上手。关键字: if if.else for switchcase while do.while break continue return goto语法符号:/数据类型:bo

13、olean布尔类型char字符类型unsignedint无符号整数类型long长整数类型unsignedlong无符号长整数类型float浮点类型double双精度浮点类型string字符数组型array数组类型void无类型数据类型转换:char()byte()int()long()float()常量:HIGHILOW:表示数字IO的电平,HIGH表示高电平(1),LOW表示低电平(O)oINPUTIOUTPUT:表示数字IO的方向,INPUT表示输入(高阻态),OUTPUT:表示输出(AVR能提供5V电压40mA电流)。trueIfalse:true表示真(1),false表示假(O)o程

14、序结构:声明变量及接口名称(例如:intval;intledPin=13;)ovoidsetup()函数在程序开始时使用,初始化变量,管脚模式,调用库函数等(例如:pinMode(IedPin,OUTUPT);),voidIoopO在SetUP()函数之后,即初始化之后,IoopO让你的程序循环地被执行。使用它来运转ArdUino。数字I/O:pinMode(pin,mode):数字IO口输入输出模式定义函数,pin表示为013,mode表示INPUT或OUTPUTodigitalWrite(pin,value):数字IO口输出电平定义函数,Pin表示为013,ValUe表示为HIGH或LoW

15、。必须先定义为输入或输出模式digitalWrite才能生效。intdigita!Read(pin):数字IO口读输入电平函数,Pin表示为0-13,value表示为HIGH或LoTV。比如可以读数字传感器。模拟I/O:intanalogRead(pin):模拟IO口读函数,pin表示为05(ArdUinODiecimila为05,Arduinonano为07)。比如可以读模拟传感器(10位AD,05V表示为0Io23)。analogWrite(pin,value)-PWM:数字IO口PwM输出函数,ArdUinO数字IO口标注了PWM的IO口可使用该函数,pin表示3,5,6,9,10,11

16、,value表示为0-255。比如可用于电机PWM调速或音乐播放。时间函数:unsignedlongmillis():返回时间函数(单位ms),该函数是指,当程序运行就开始计时并返回记录的参数,该参数溢出大概需要50天。delay(ms):延时函数(单位ms)。delayMicroseconds(us):延时函数(单位us)。串口收发函数:Serial,begin(speed):串口定义波特率函数,SPeed表示波特率(串行每秒传输数据的速率),如9600,19200等。intSerial,available():判断缓冲器状态。intSerial,read():读串口并返回收到参数。Seri

17、al,flush():清空缓冲器。Serial,print(data):串口输出数据。Serial,print:(数据,数据的进制)默认为十进制(DEC)Serial,println(data):串口输出数据并带回车符。以上为arduino使用过程中常用的函数和语法,其他的函数和库可以参考说明书;2.3WIFI模块介绍(图六)Wifi串口模块本设计所使用的Wifi模块(图六)是海凌科电子新推出的低成本嵌入式UART-ETH-WIFI(串口-以太网-无线网)模块。内置TCP/IP协议栈,能够实现用户串口、以太网、无线网(WlFI)3个接口之间的转换。通过HLK-RM04模块,传统的串口设备在不需

18、要更改任何配置的情况下,即可通过Internet网络传输自己的数据。为用户的串口设备通过网络传输数据提供完整快速的解决方案。SerialComWIFI(Client/AP)Etheniet(图七)HLK-RM04功能结构图HLK-RM04模块在使用之前需要做些相应的配置,模块提供两种配置方式:LWEB页面;2.串AT指令;访问Web配置界面需要确认模块的ip地址,以及Web认证的用户名密码。通过串口AT指令配置参数需要先让模块进入AT指令模式,HLK-RM04_C0NFIG串口配置工具即通过AT指令方式提供简单方便的配置过程。在此就不再做过多的介绍,详细可以参考说明书;3、硬件连接3.1温度传

19、感器温度的测量方式有很多种,本文采用单总线数字式的温度传感器DS18B20,DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式(图八);温度测量范围为-559+125。:,可编程为9位12位A/D转换精度,测温分辨率可达0.0625七,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。PINASSIGNM

20、ENTDALKSOS120BOTTOMVTEWDS18B2OTo-92PackageSSNCIl NC I Il VoD IIl I I口INCIl I Ne “ I ZCIl ONDDS1SB2OZ8-PnSOIC (150 mil)123(图八)DS18B02封装DS18B20内部结构如(图九)所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DQ为数字信号输入/输出端(如图);GND为电源地;VDD为外接供电电源输入端。RoM中的64位序列号是出厂前被激光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相

21、同。这样就可以实现一根总线上挂接多个DS18B20的目的。(图九)DS18B20内部结构框图DS18B02供电方式有两种,分别为寄生电源供电方式(图十)和外部电源供电方式(图H一);VCCVCCDS18B20QzoQQOaQZcPI/OPDS18B20寄生电源供电方式I/ODSId820酬麟新躺肚技供电(S*)DS18B20VCCDS18B2ODS18B20DS18B20QQOaCIZC(图十)DS18B02寄生电源供电万式VCC1.7K-L882(辨制电源供电方式vcc阍侬3点1福AM三VCCvcc亍VCC(图十一)外部电源供电方式独特的寄生电源方式有三个好处:1)进行远距离测温时,无需本地

22、电源2)可以在没有常规电源的条件下读取ROM3)电路更加简洁,仅用一根I/O口实现测温要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到ImA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。因此近寄生电源供电方式只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VeC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。因此必须采用独立电源供电方式,本设计及采用外部电源供电方式

23、;3.2光线传感器光线测量采用光敏电阻(图十二),光敏电阻,是一种特殊的电阻,简称光电阻,又名光导管。它的电阻和光线的强弱有直接关系。光强度增加,则电阻减小;光强度减小,则电阻增大。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。(图十二)光敏电阻实物图光敏电阻接入arduino的电路图如下:3.3伺服舵机舵机(英文叫SerVo)(图十四):它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。通过发送信号,指定输出轴旋转角度。舵机一般而言都有最大旋转角度(比如180度。)与普通直流电机的区别

24、主要在,直流电机是一圈圈转动的,舵机只能在一定角度内转动,不能一圈圈转(数字舵机可以在舵机模式和电机模式中切换,没有这个问题)。普通直流电机无法反馈转动的角度信息,而舵机可以。用途也不同,普通直流电机一般是整圈转动做动力用,舵机是控制某物体转动一定角度用(比如机器人的关节)。(图十四)舵机实物图舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为L5ms这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最

25、大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是L5ms。如图十五:I周期为20ms-I_n_JI.,一-冲宽度Ims(城小值)-2ms(最大值)FrOmWWW.gzkworShoP.com(图十五)角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多大角度。例如:1.5毫秒脉冲会到转动到中间位置(对于180。舵机来说,就是90。位置)。当控制系统发出指令,让舵机移动到某一位置,并让他保持这个角度,这时外力的影响不会让他角度产生变化,但是这个是由上限的,上限就是他的最大扭力。除非控制系统不停的发出脉冲稳定舵机的角度,舵机的角度不会一直不变。当舵

26、机接收到一个小于1.5ms的脉冲,输出轴会以中间位置为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相反。不同品牌,甚至同一品牌的不同舵机,都会有不同的最大值和最小值。一般而言,最小脉冲为1ms,最大脉冲为2ms。如下图:伺服舵机接线图如下:3. 4灯光控制对于控制灯光由暗到亮或由亮到暗,采用的是脉宽PWM法。脉冲宽度调制(PWM),是英文“PulseWidthModulation的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,本文灯光亮度控制通过arduino输出不同占空比(占空比是指脉冲信号的通电时间与通电周期之比)的方波,然后用去触发固态

27、继电器,达到控制灯光亮度的功能;原理图如下:4、通讯3.1 串行通讯串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。由于Wifi模块内部自带TCP/IP协议,能够把网络数据通过串口转发出来,所以我们只需考虑如何接收和发送串口数据,大大的降低了开发的难度。4. 2异步通讯异步方式通信ASYNC(ASynChrOnOUSD

28、ataCommlmiCatiOn),又称起止式异步通信,是计算机通信中最常用的数据信息传输方式。它是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。收、发双方取得同步的方法是采用在字符格式中设置起始位和停止位。在一个有效字符正式发送前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位至停止位构成一帧。串行异步传输时的数据格式:起始位:起始位必须是持续一个比特时间的逻辑0电平,标志传送一个字符的开始。数据位:数据位为5-8位,它紧跟在起始位之后,是被传送字符的有效数据位。传送时先传送字符的低位,后传送字符的高位。数据位

29、究竟是几位,可由硬件或软件来设定。奇偶位:奇偶校验位仅占一位,用于进行奇校验或偶校验,也可以不设奇偶位。(4)停止位:停止位为1位、L5位或2位,可有软件设定。它一定是逻辑1”电平,标志着传送一个字符的结束。(5)空闲位:空闲位表示线路处于空闲状态,此时线路上为逻辑1”电平。空闲位可以没有,此时异步传送的效率为最高。4. 3ArdUino与Wifi模块连接4.4通讯协议由于数据在传输过程中容易受到干扰和一些错误,造成接收到的数据丢失和不完整,为保证数据的完整性,必须用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,说明数据是完整的,方

30、可利用获取的数据进行运算和控制。本设计采用的串口设置为:波特率9600,8个数据位,1个停止位,无奇偶校验;为保证数据的完整、正常,采用的通讯协议如下:ArduinoUj小、炳发送的数据协议包头温度数据1温度数据2光线数据1光线数据2异或校验包尾OxffArduino读取温度值的干位和百位Arduino读取的温度值的十位和个位Arduino读取的光线值的千位和百位Arduino读取的光线值的十位和个位温度数据1、2和光线数据1、2的异或校脸Oxfe注:由于arduino的模拟量端为10位的精度;最大值为1024,但是串口一个数据为8位;所以把采集到的数据拆分后再组合;手机客户端发送的数据协议包

31、头控制器件编号死机角度数据灯光亮度数据异或校险包尾OxffOxaa或Oxee控制数据1控制数据2控制器件和鸵机角度以及灯光亮度数据的异或校验Oxfe注:控制器件的编号规则:舵机控制界面为Oxaa,灯光控制界面为Oxee;arduino通过这个数据值来判别当前手机客户端处于哪个器件的控制界面;5、成品展不参考文献13网络上查找资料班兹爱上ArdUinO人民邮电出版社2011程晨ArcIUinc)开发实战指南机械工业出版社2012对于这次毕业论文的撰写,最需要感谢的是余训锋老师。他在整个过程中都给予了我充分的帮助与支持。余训锋老师不仅耐心地为我指出论文中的不足之处,对论文的改进提出宝贵的建议,而且

32、还在我遇到困难时尽心地进行指点与解答。在此借论文完成之际,表示由衷的感谢与敬意。附录:#include/调取单总线库函数include舵机库函数#includeincludedefineONE_WIRE_BUS2/初始连接在单总线上的单总线设备Servomyservo;OneWireoneWire(ONEJVIRE_BUS);DalIasTemperaturesensors(&oneWire);unsignedintRPotPin=0;/设定模拟输入引脚unsignedintval=0;定义一个变量unsignedcharservo=0;定义一个变量unsignedchardiandeng=0

33、;定义一个变量unsignedcharobject=0;定义一个变量unsignedintwendu=0;bytewendugao=0;bytewenddi=0;bytevalhigh=0;bytevalIow=O;intled=7;Stringdata=字符串缓存voidsetup(void)myservo.attach(9);定义舵机引脚为9脚;PinMOdeaed,01JTPUT);定义引脚为输出模式;Serial,begin(9600);/设置串口通信波特率;sensors,beginO;/初始库;voidloop(void)data=上次接受到的值清0while(Serial,ava

34、iIable()0)等新的串口数据data+=char(Serial,read();delay(2);稳定作用if(data,length()0)/串口数据处理,校验;digitalWrite(led,HIGH);if(data0=0xff&data4=0xfe&data3=data1data2)object=datal;if(object=0xaa)servo=data2;if(object=0xdd)diandeng=data2;digitalWrite(led,LOW);myservo.write(servo);delay(15);等待伺服到达位置;val=analogRead(RPot

35、Pin);读取模拟量值;sensors.requestTemperatures();/发送命令获取温duwendu=sensors.getTempCByIndex(O)*100;获取温度值;WelldUgaO=WendU/100;拆分温度值;wendudi=wendu%100;valhigh=va1/Io0;拆分光线值;vallow=val%100;Serial.Write(OxFF);数据发送;Serial.write(wendugao);Serial,write(wendudi);Serial,write(valhigh);Serial,write(vallow);Serial,write(wendugaowendudivalhighvallow);校验Serial,write(OxFE);delay(2);稳定作用)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号