毕业设计(论文)基于ARDUINO的智能家居设计与实现.doc

上传人:仙人指路1688 文档编号:2881610 上传时间:2023-03-01 格式:DOC 页数:27 大小:1.60MB
返回 下载 相关 举报
毕业设计(论文)基于ARDUINO的智能家居设计与实现.doc_第1页
第1页 / 共27页
毕业设计(论文)基于ARDUINO的智能家居设计与实现.doc_第2页
第2页 / 共27页
毕业设计(论文)基于ARDUINO的智能家居设计与实现.doc_第3页
第3页 / 共27页
毕业设计(论文)基于ARDUINO的智能家居设计与实现.doc_第4页
第4页 / 共27页
毕业设计(论文)基于ARDUINO的智能家居设计与实现.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

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

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

2、开源,扩展模块丰富等优点,设计难度在于程序中数值的处理,以及客户端软件的编写。【关键词】arduino;智能家居;wifi转串口模块;服务器;客户端。目录1、概述41.1课题研究背景41.2 本课题的研究的内容及目的41.4系统的控制思路与流程52、软件、硬件介绍62.1客户端软件62.2 arduino介绍72.2.1 arduino 研发过程72.2.2 arduino 编程软件82.2.3 Arduino硬件82.2.4 Arduino 编程语言简介92.3 WIFI模块介绍123、硬件连接133.1 温度传感器133.2光线传感器163.3伺服舵机163.4灯光控制184、通讯194.

3、1串行通讯194.2异步通讯194.3 Arduino与wifi模块连接204.4 通讯协议205、成品展示22参考文献23致谢24附录24 西南科技大学成人教育学院 自动化专业 姓名:罗永勇 学号:146850310006 1、概述1.1课题研究背景近年来随着现代互联网技术的发展,智能生活的理念深入人心,物联网和智能家居真正开始走向人们的视野。随着现代电力电子技术和电子元件制造工艺的发展,物联网设备的自动化程度和稳定性得到很大的提高,物联网设备也逐步向轻量化、自动化和智能化发展,还有高可靠性、高可控性、高效率等特点,功能不断增强和完善,这推动了智能家居技术的迅速发展,相继出现了多种多样的智能

4、家居设备,如NEXT恒温器,空气净化器等,但国内外对本课题的研究尚存在待解决的问题: (1) 家居智能化水平较低; (2) 使用的平台不统一,功能单一且不完善; (3) 价格相对昂贵,普及的难度比较大。1.2 本课题的研究的内容及目的本系统以Arduino UNO为核心,联合hlk-rm04 wifi转串口模块,通过安卓客户端使用tcp/ip协议连接外围电路及各类传感器,实现室内家居的远程监控及智能控制。 研究目的基于家居生活的便捷高效的方向出发,主要是为了改进当下传统家居的控制方式落后及使用不方便等缺点,本设计的智能远程控制代替了传统家居设备手动机械控制,不仅效率高、成本低、使用方便、可控性

5、强,更能提升家居便利性、舒适性、艺术性,并实现环保节能的居住环境。1.3 系统结构分析系统由七部分组成(如图一):安卓APP客户端、灯光控制、arduino 以及wifi模块、光敏电阻、舵机、温度传感器、外围电路。各部分组成如下:(1)APP客户端为易安卓软件用易语言编写的安卓客户端;(2)灯光亮度控制采用pwm调节 (3)核心模块通过ArduinoUno单片机连接 wifi转串口模块组成,核心模块不仅是本系统的中央处理器,而且通过连接无线路由器搭建了本地的tcp/ip服务器;(4)温度传感器采用单总线ds18b02集成温度传感器,该传感器可以在一个io上并接多个ds18b02,大大的节约了C

6、PU的硬件资源。(5)光线的测量采用光敏电阻;(6)伺服舵机;(7)外围电路由简单的发光二极管及各类元器件组(图一)1.4系统的控制思路与流程APP客户端使用tcp/ip协议,远程无线连接上工作在服务器模式的wifi模块,wifi模块连接上家庭路由器,需要注意的是家庭网络要处于公网模式,在APP客户端发送控制命令,wifi模块接受命令转成串口数据输出,arduino读取串口数据实现LED灯光亮度智能调节,舵机角度控制,同时arduino模块读取温度传感器数值,采样光敏电阻电压转换为光照度,然后arduino把数据通过串口传给wifi模块,wifi模块发送数据,客户端接收数据然后显示在安卓手机上

7、;控制流程如图二; (图二)控制流程图2、软件、硬件介绍2.1客户端软件采用安卓智能手机作为命令发送和接受端,通过因特网传输数据,实现家居的智能监控和远程操控,操作简单,使用方便。客户端软件采用中文版的安卓编写软件,本文主要专注于整体框架的实现,在此就不再对开发软件进行详细介绍,对软件界面的美观性和舒适性未做过多的修饰。如有不足之处,请指教!客户端软件界面如图三:(图三)2.2 arduino介绍2.2.1 arduino 研发过程Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。 2005年冬天, Massimo Banzi

8、跟David Cuartielles讨论了这个问题。 David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。这块电路板被命名为Arduino。2.2.2 arduino 编程软件Arduino IDE基于processing IDE开发的。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 AVRGCC库的二次封装,不需要太多的单片机基础、编程基

9、础,简单学习后,你也可以快速的进行开发。(图四)ARDUINO 编程软件界面2.2.3 Arduino硬件Arduino发展至今,出现了适应各种环境的硬件版本,如Arduino Uno、Arduino Nano、Arduino Nano、Arduino LilyPad,Arduino Mega 2560。本文采用Arduino Uno为主控器, ArduinoUNO是ArduinoUSB接口系列的最新版本,作为Arduino平台的参考标准模板。UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口

10、,一个电源插座,一个ICSPheader和一个复位按钮。UNO已经发布到第三版,与前两版相比有以下新的特点:1、 在AREF处增加了两个管脚SDA和SCL,支持I2C接口;2、 增加IOREF和一个预留管脚,将来扩展板将能兼容5V和3.3V核心板。3、 改进了复位电路设计,USB接口芯片由ATmega16U2替代了ATmega8U2,如图五为改进后的ArduinoUNO。(图五)ARDUINO UNO 硬件图2.2.4 Arduino 编程语言简介Arduino语言是建立在C/C+基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不

11、用我们去了解他的底层,让我们不了解AVR单片机(微控制器)的朋友也能轻松上手。关键字: if if.else for switch case while do. while break continue return goto语法符号:; / 数据类型: boolean 布尔类型 char 字符类型 unsigned int 无符号整数类型 long 长整数类型unsigned long 无符号长整数类型float 浮点类型double 双精度浮点类型 string 字符数组型array 数组类型void 无类型数据类型转换:char() byte() int() long() float()

12、常量: HIGH | LOW :表示数字IO口的电平,HIGH 表示高电平(1),LOW 表示低电平(0)。 INPUT | OUTPUT:表示数字IO口的方向,INPUT 表示输入(高阻态),OUTPUT : 表示输出(AVR能提供5V电压 40mA电流)。 true | false : true 表示真(1),false表示假(0)。 程序结构:声明变量及接口名称(例如:int val;int ledPin=13;)。 void setup() 函数在程序开始时使用,初始化变量,管脚模式,调用库函数等(例如:pinMode(ledPin,OUTUPT);)。 void loop() 在se

13、tup()函数之后,即初始化之后,loop() 让你的程序循环地被执行。使用它来运转Arduino。数字I/O:pinMode(pin,mode):数字IO口输入输出模式定义函数,pin表示为013,mode表示INPUT或OUTPUT。digitalWrite(pin,value):数字IO口输出电平定义函数,pin表示为013,value表示为HIGH或LOW。必须先定义为输入或输出模式digitalWrite才能生效。intdigitalRead(pin):数字IO口读输入电平函数,pin表示为013,value表示为HIGH或LOW。比如可以读数字传感器。模拟I/O:intanalog

14、Read(pin):模拟IO口读函数,pin表示为05(ArduinoDiecimila为05,Arduinonano为07)。比如可以读模拟传感器(10位AD,05V表示为01023)。analogWrite(pin,value)PWM :数字IO口PWM输出函数,Arduino数字IO口标注了PWM的IO口可使用该函数,pin表示3,5,6,9,10,11,value表示为0255。比如可用于电机PWM调速或音乐播放。时间函数:unsigned long millis(): 返回时间函数(单位ms),该函数是指,当程序运行就开始计时并返回记录的参数,该参数溢出大概需要50天。delay(m

15、s): 延时函数(单位ms)。delayMicroseconds(us): 延时函数(单位us)。串口收发函数:Serial.begin(speed): 串口定义波特率函数,speed表示波特率(串行每秒传输数据的速率),如9600,19200等。 int Serial.available():判断缓冲器状态。int Serial.read():读串口并返回收到参数。Serial.flush(): 清空缓冲器。Serial.print(data):串口输出数据。Serial.print:(数据,数据的进制) 默认为十进制(DEC) Serial.println(data):串口输出数据并带回车

16、符。以上为arduino使用过程中常用的函数和语法,其他的函数和库可以参考说明书;2.3 WIFI模块介绍(图六)wifi串口模块本设计所使用的Wifi模块(图六)是海凌科电子新推出的低成本嵌入式UART-ETH-WIFI(串口-以太网-无线网)模块。内置TCP/IP 协议栈,能够实现用户串口、以太网、无线网(WIFI)3 个接口之间的转换。通过HLK-RM04 模块,传统的串口设备在不需要更改任何配置的情况下,即可通过Internet 网络传输自己的数据。为用户的串口设备通过网络传输数据提供完整快速的解决方案。(图七)HLK-RM04功能结构图 HLK-RM04 模块在使用之前需要做些相应的

17、配置,模块提供两种配置方式: 1.WEB 页面;2.串口AT 指令;访问web配置界面需要确认模块的ip地址,以及web认证的用户名密码。通过串口AT指令配置参数需要先让模块进入AT 指令模式,HLK-RM04_CONFIG串口配置工具即通过AT 指令方式提供简单方便的配置过程。在此就不再做过多的介绍,详细可以参考说明书;3、硬件连接3.1 温度传感器温度的测量方式有很多种,本文采用单总线数字式的温度传感器DS18B20,DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式(图八);温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可

18、达0.0625,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少, 可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。(图八) DS18B02封装DS18B20内部结构如(图九)所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DQ为数字信号输入输出端(如图);GND为电源地;VDD为外接供电电源输入端。 ROM中的64位序列号是出厂前被激光刻好的,

19、它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。这样就可以实现一根总线上挂接多个DS18B20的目的。(图九)DS18B20内部结构框图DS18B02供电方式有两种,分别为寄生电源供电方式(图十)和外部电源供电方式(图十一);(图十)DS18B02寄生电源供电方式(图十一)外部电源供电方式独特的寄生电源方式有三个好处:1)进行远距离测温时,无需本地电源2)可以在没有常规电源的条件下读取ROM3)电路更加简洁,仅用一根I/O口实现测温要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电

20、流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。因此近寄生电源供电方式只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。因此必须采用独立电源供电方式,本设计及采用外部电源供电方式;3.2光线传感器光线测量采用光敏电阻(图十二),光敏电阻,是一种特殊的电阻,简称光电阻,又名光导管。它的电阻和光线的强弱有直接关系。光强度增加,则电阻减小;光强度减小,则电阻增大。这是由于光照产生的载流子都参与导

21、电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。(图十二)光敏电阻实物图光敏电阻接入arduino 的电路图如下: (图十三)光敏电阻接线图3.3伺服舵机舵机(英文叫Servo)(图十四):它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。通过发送信号,指定输出轴旋转角度。舵机一般而言都有最大旋转角度(比如180度。)与普通直流电机的区别主要在,直流电机是一圈圈转动的,舵机只能在一定角度内转动,不能一圈圈转(数字舵机可以在舵机模式和电机模式中切换,没有这个问题)。普通直流电机无法反馈转动的角度信息,而舵机可以。用途也不同

22、,普通直流电机一般是整圈转动做动力用,舵机是控制某物体转动一定角度用(比如机器人的关节)。(图十四)舵机实物图舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。如图十五:(图十五)角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多

23、大角度。例如:1.5毫秒脉冲会到转动到中间位置(对于180舵机来说,就是90位置)。当控制系统发出指令,让舵机移动到某一位置,并让他保持这个角度,这时外力的影响不会让他角度产生变化,但是这个是由上限的,上限就是他的最大扭力。除非控制系统不停的发出脉冲稳定舵机的角度,舵机的角度不会一直不变。当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相反。不同品牌,甚至同一品牌的不同舵机,都会有不同的最大值和最小值。一般而言,最小脉冲为1ms,最大脉冲为2ms。如下图:(图十六)伺服舵机接线图如下:(图十七)舵机控制电路图3.4灯光控制对于控

24、制灯光由暗到亮或由亮到暗,采用的是脉宽PWM法。脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,本文灯光亮度控制通过arduino输出不同占空比(占空比是指脉冲信号的通电时间与通电周期之比)的方波,然后用去触发固态继电器,达到控制灯光亮度的功能;原理图如下:(图十八)灯光亮度控制电路4、通讯4.1串行通讯串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远

25、距离通信。串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。由于wifi模块内部自带TCP/IP协议,能够把网络数据通过串口转发出来,所以我们只需考虑如何接收和发送串口数据,大大的降低了开发的难度。4.2异步通讯异步方式通信ASYNC(Asynchronous Data Communication),又称起止式异步通信,是计算机通信中最常用的数据信息传输方式。它是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。收、发双方取得同步的方法是采用在字符格式中设置起

26、始位和停止位。在一个有效字符正式发送前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位至停止位构成一帧。串行异步传输时的数据格式: 起始位:起始位必须是持续一个比特时间的逻辑0电平,标志传送一个字符的开始。数据位:数据位为5-8位,它紧跟在起始位之后,是被传送字符的有效数据位。传送时先传送字符的低位,后传送字符的高位。数据位究竟是几位,可由硬件或软件来设定。 奇偶位:奇偶校验位仅占一位,用于进行奇校验或偶校验,也可以不设奇偶位。 停止位:停止位为1位、1.5位或2位,可有软件设定。它一定是逻辑1电平,标志着传送一个字符的结束。 空闲位:空闲位表示线路处于空闲状

27、态,此时线路上为逻辑1电平。空闲位可以没有,此时异步传送的效率为最高。4.3 Arduino与wifi模块连接(图十九)通讯连接4.4 通讯协议由于数据在传输过程中容易受到干扰和一些错误,造成接收到的数据丢失和不完整,为保证数据的完整性,必须用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,说明数据是完整的,方可利用获取的数据进行运算和控制。本设计采用的串口设置为:波特率9600,8个数据位,1个停止位,无奇偶校验;为保证数据的完整、正常,采用的通讯协议如下:Arduino端发送的数据协议包头温度数据1温度数据2光线数据1光线数据2异

28、或校验包尾0xffArduino读取温度值的千位和百位Arduino读取的温度值的十位和个位Arduino读取的光线值的千位和百位Arduino读取的光线值的十位和个位温度数据1、2和光线数据1、2的异或校验0xfe注:由于arduino的模拟量端为10位的精度;最大值为1024,但是串口一个数据为8位;所以把采集到的数据拆分后再组合;手机客户端发送的数据协议包头控制器件编号舵机角度数据灯光亮度数据异或校验包尾0xff0xaa或0xee控制数据1控制数据2控制器件和舵机角度以及灯光亮度数据的异或校验0xfe注:控制器件的编号规则:舵机控制界面为0xaa,灯光控制界面为0xee;arduino通

29、过这个数据值来判别当前手机客户端处于哪个器件的控制界面;5、成品展示参考文献1 网络上查找资料2 班兹爱上Arduino人民邮电出版社20113 程晨Arduino开发实战指南机械工业出版社2012 致 谢对于这次毕业论文的撰写,最需要感谢的是余训锋老师。他在整个过程中都给予了我充分的帮助与支持。余训锋老师不仅耐心地为我指出论文中的不足之处,对论文的改进提出宝贵的建议,而且还在我遇到困难时尽心地进行指点与解答。在此借论文完成之际,表示由衷的感谢与敬意。 附录:#include / 调取单总线库函数#include /舵机库函数#include #include #define ONE_WIRE

30、_BUS 2/ 初始连接在单总线上的单总线设备Servo myservo; OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);unsigned int RPotPin =0; / 设定模拟输入引脚unsigned int val = 0; /定义一个变量 unsigned char servo = 0; /定义一个变量unsigned char diandeng = 0; /定义一个变量unsigned char object = 0; /定义一个变量unsigned int wendu=0;byte wendu

31、gao=0; byte wendudi=0;byte valhigh=0;byte vallow=0;int led =7;String data = ; /字符串缓存void setup(void) myservo.attach(9);/定义舵机引脚为9脚; pinMode(led,OUTPUT);/定义引脚为输出模式; Serial.begin(9600); / 设置串口通信波特率;sensors.begin();/ 初始库; void loop(void) data = ;/上次接受到的值清0 while (Serial.available() 0) /等新的串口数据 data += c

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

33、PotPin);/读取模拟量值; sensors.requestTemperatures(); / 发送命令获取温du wendu=sensors.getTempCByIndex(0)*100;/获取温度值; wendugao=wendu/100;/拆分温度值; wendudi=wendu%100; valhigh=val/100;/拆分光线值; vallow=val%100; Serial.write(0xFF); /数据发送; Serial.write(wendugao); Serial.write(wendudi); Serial.write(valhigh); Serial.write(vallow); Serial.write(wendugaowendudivalhighvallow); /校验 Serial.write(0xFE); delay(2);/稳定作用

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号