Arduino单片机的智能家居设计_第1页
Arduino单片机的智能家居设计_第2页
Arduino单片机的智能家居设计_第3页
Arduino单片机的智能家居设计_第4页
Arduino单片机的智能家居设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...山东科技大学第三届学生电子设计大赛技术报告基于Arduino单片机的智能家居系统学院:电子通信与物理学院班级:硕研2015级参赛者:张荣飞曹其栋侯焕存摘要本文中我们基于Arduino单片机设计了一个模拟智能家居系统。该系统以ArduinoUNOR3单片机为核心,外接光照检测、温湿度传感器、LED、风扇和无线通信等模块。整个系统分为检测端和控制端两大局部,检测端由光敏电阻、温湿度传感器、无线通信模块和单片机组成。控制端由无线接收、液晶显示、电灯控制和风扇控制四大模块组成,包含单片机、无线通信模块、LCD显示屏、风扇和LED等。检测端和控制端之间借助无线通信模块进展无线通信,控制端内部的无线接收和液晶显示两个模块之间那么采用串口通信。该系统能够实现对室内温度、湿度和光照强度等参数的实时检测,并借助LCD显示温湿度值,还可以根据检测端探测到的光照强度和温度值以及预先设定的参数对室内的电灯和风扇进展智能控制。关键词:智能家居;Arduino单片机;自动控制;无线通信;液晶显示目录§1绪论11.1智能家居简介11.2智能家居的研究意义2§2系统总体设计方案32.1系统框图32.2系统工作原理简介3§3系统硬件设计43.1单片机的选择43.1.1ArduinoUNO简介43.1.2Arduino单片机特色53.1.3Arduino单片机引脚简介53.1.4Arduino单片机编程软件63.2温湿度检测模块设计63.2.1DHT11概述63.2.2DHT11引脚说明73.2.3电源引脚83.2.4串行接口〔单线双向〕83.3光照检测模块设计83.4无线通信模块设计93.5液晶显示模块设计93.5.1液晶显示模块的选择93.5.2液晶显示电路设计103.6其他模块设计113.6.1电灯模块设计113.6.2风扇模块设计123.7系统硬件实物图12§4软件系统设计134.1检测端程序设计134.2控制端程序设计13§5总结15参考文献15附录:源程序16§1绪论1.1智能家居简介智能家居很早就出现在人们的定义当中,但很长时间以来都没有真正意义上的智能家居成型,到了1984年美国联合科技公司〔UnitedTechnologiesBuildingSystem〕将智能信息融入建筑设备中,在整合的根基上应用到了美国康乃迪克州哈特佛市的城市地标性建筑中时,出现了世界上的首栋智能化建筑,也正是从那时开场,智能化家居正式融入到现代生活中。智能家居控制的开展关键在于设计理念以及经营者的心态,市场目标客户真正需要什么东西,如果只注重签单,不设身处地的为客户着想,不兼顾智能解决未来的开展,提供片面的智能家居解决方案,而不考虑客户的适用性,是不可取的,是急功近利的表现,这不仅降低了智能家居的应用效果,还不利于整个智能家居行业的开展。智能家居控制系统的市场不是一般普通的商品买卖,而是一项系统性工程,它涉及到很多技术,涉及到人们生活的方方面面,智能家居控制系统的终极目标是一种理想,更是一种理念,要想智能家居控制系统有很好的开展,研发机构必须本着长远开展的心态,本着简化、实用、性价比高、适合市场的理念,虔诚研究人们的生活、习惯、精神文化等需要,并把它看最高目标,运用各种技术手段实现它。在国内,智能家居不是单纯意义上的智能产品,也不能被狭义的理解为小区智能化,而是基于小区的多层次家居智能化解决方案。它综合利用主控平台、无线连接及通信、设备管理、整体布局布线等手段,将住户智能化管理、交互共享及消费服务、小区安防监控等常见家居因素协调配合并最终整合为整体,在原有小区智能化的大面上延伸到小区内部室内家居的具体环节,构建出高效、舒适、安全、便捷的个性化住宅空间。近几年,很多研发机构和厂商已经意识到家庭安全的重要性,把智能家居作为一个重要的方向和工程来研究,并纷纷投入大量人力财力,使智能家居真正的走向市场和产业化生产。智能家居是一个具有交互能力的平台,并且通过平台能够把各种不同的系统、协议、信息和内容控制在相对独立的模块单元中进展传输、交换。1.2智能家居的研究意义随着人们生活水平的不断提高,生活节奏的加快,人们不断的对居住环境提出更高的要求,越来越注重家庭生活中每个成员的舒适、安全和便利,因此从市场需求的角度来说,智能家居必然是前景广阔。因此设计一个符合国家国情和标准的集远程控制和本地控制为一体的智能家居控制系统是非常具有现实意义的,且势在必行。作为智能家居的核心系统的智能家居的控制系统,它的设计功能的完善必将推动住宅智能化的开展。而系统功能的集成化、用户使用的傻瓜化以及市场的平民化将是智能家居控制器的开展趋势,系统也将逐步迈向绿色化。最终,我想全人类的梦想是智能家居控制系统将囊括所有的家事杂物,让我们真正的享受舒适温馨的家庭生活。虽然智能家居经过十几年的蓬勃开展,很多功能已趋于完善和成熟,智能化家居系统的应用也越来越广泛,然而生活中的智能家居所展现出的智能化,与业主所理想的智能化还存在较大差距。而这也推动了智能化技术在家居领域的纵深开展,并为各类智能化家居新产品的设计和研发增加了动力,同时新产品的出现,也大大丰富了智能家居系统的厚度。因此,将智能家居作为这次研究的主要内容具有很大的现实指导意义。本文的目的就是设计一个简捷有效智能家居控制系统,从温度、湿度、光照强度的采集,到LCD实时显示,并根据采集的信号不同采取相应的应对机制,智能控制家中的电灯、风扇等电器设备,从而实现基本的智能家居功能。§2系统总体设计方案2.1系统框图智能家居控制系统对整个家庭内部环境进展监测和及时应对的系统,核心局部是单片机,通过与其他各监测模块和执行模块的连接,实现对室内环境的整体改变和各元件的控制。首先,主控元件对接收到的数据〔如光线强暗,温度上下〕通过LCD显示模块进展实时显示,使室内情况一目了然。然后根据各信号采集模块传送给单片机的数据,做出应对执行,实现家居系统的智能控制。系统总体框图如下:图2.1系统总体框图2.2系统工作原理简介本系统工作可以分为四个局部:第一局部是传感器数据采集,将温度传感器、湿度传感器以及光敏电阻分别连接到单片机①上,单片机①会将传感器采集到的实时数据进展处理;第二局部是数据传输,有两个无线模块,一个连接到单片机①上作为发射端,一个连接到单片机②上作为接收端,单片机①将处理过的数据通过发射端发送出去,单片机②通过接收端将数据接收进来,再次进展处理;第三局部是控制功能,单片机②将接收到的数据与设定的阈值进展对比,当到达阈值条件时,可以启动风扇或者电灯,另外,温度和光敏设定了几个不同的阈值,当到达某一阈值会有相应的风扇转速或者电灯亮度;第四局部,温湿度显示,单片机②将通过无线方式接收到的数据采用串口通信的方式传给单片机③,单片机③是专门用来控制LCD1602液晶显示屏的,得到数据后单片机③将数据传到液晶屏进展显示。§3系统硬件设计3.1单片机的选择首先将所需器件罗列,根据与单片机相连的各器件,确定整个系统所需与单片机连接的管脚数,通过查资料,选定Arduino单片机作为该系统的微控制器,因为它带有模拟I/O口,在外接各类传感器方面比普通的51系列单片机更为方便。Arduino单片机的模拟I/O口可以很方便地将光敏电阻和温湿度传感器等模块采集到的模拟量经A/D转换后送给单片机进展处理,而对数字信号的识别和处理正是Arduino的优势所在。3.1.1ArduinoUNO简介ArduinoUNO是ArduinoUSB接口系列的最新版本,作为Arduino平台的参考标准模板。UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口〔其中6路可作为PWM输出〕,6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSPheader和一个复位按钮。UNO已经发布到第三版,与前两版相比有以下新的特点:在AREF处增加了两个管脚SDA和SCL,支持I2C接口;增加IOREF和一个预留管脚,将来扩展板将能兼容5V和3.3V核心板。这样改进了复位电路设计,USB接口芯片由ATmega16U2替代了ATmega8U2。图2.2为改进后的ArduinoUNO。图2.2ArduinoUNOR33.1.2Arduino单片机特色1、开放源代码的电路图设计,程序开发接口免费下载,也可依需求自己修改。2、使用低价格的微处理控制器(ATMEGA8或ATmega128)。可以采用USB接口供电,不需外接电源,也可以使用外部9VDC输入。3、Arduino支持ISP在线烧,可以将新的“bootloader〞固件烧入ATmega8或ATmega128芯片。有了bootloader之后,可以通过串口或者USBtoRs232线更新固件。4、可依据官方提供的Eagle格式PCB和SCH电路图,简化Arduino模组,完成独立运作的微处理控制。可简单地与传感器,各式各样的电子元件连接(如:红外线、超声波、热敏电阻、光敏电阻、伺服马达等)。5、支持多种互动程序,如:Flash、Max/Msp、VVVV、PD、C、Processing等。6、应用方面,利用Arduino,突破以往只能使用鼠标、键盘、CCD等输入的装置的互动内容,可以更简单地达成单人或多人游戏互动。3.1.3Arduino单片机引脚简介Arduino单片机的数字I/O被分成两个局部,其中每个局部都包含有6个可用的I/O管脚,即管脚2到管脚7和管脚8到管脚13。在数字电路中开关〔switch〕是一种基本的输入形式,它的作用是保持电路的连接或者断开。Arduino从数字I/O管脚上只能读出高电平〔5V〕或者低电平〔0V〕,因此我们首先面临到的一个问题就是如何将开关的开/断状态转变成Arduino能够读取的高/低电平。解决的方法是通过上/下拉电阻,按照电路的不同通常又可以分为正逻辑〔PositiveLogic〕和负逻辑〔InvertedLogic〕两种。Arduino的优势在于对数字信号的识别和处理,但我们所生活的真实世界并不是数字〔digital〕化的,简单到只要用0和1就能够表示所有的现象。例如温度这一我们已经司空见惯的概念,它只能在一个范围之内连续变化,而不可能发生像从0到1这样的瞬时跳变,类似这样的物理量被人们称为是模拟〔analog〕的。Arduino是无法理解这些模拟量的,它们必须在经过模数转换后变成数字量后,才能被Arduino进一步处理。3.1.4Arduino单片机编程软件Arduino语言是建设在C/C++根基上的,其实也就是根基的C语言,Arduino语言只不过把AVR单片机〔微控制器〕相关的一些存放器参数设置等都函数化了,不用我们去了解他的底层,让不太了解AVR单片机〔微控制器〕的朋友也能轻松上手。图2.3Arduino编程界面Arduino语言是以setup()开头,loop()作为主体的一个程序构架。官方网站是这样描述setup()的:用来初始化变量,管脚模式,调用库函数等等,此函数只运行一次。loop()函数是一个循环函数,函数内的语句周而复始的循环执行,功能类似c语言中的“main();〞。3.2温湿度检测模块设计智能家居的一个主要控制对象就是住户室内温湿度,适宜的温湿度为主人提供良好的家居环境,这样一来,温湿度检测与控制模块就变得尤为重要。考虑到硬件电路的复杂性,本设计中选择DHT11数字温湿度传感器来检测室内的温度和湿度,这样可以用一个传感器检测两个指标,使硬件电路得以简化。3.2.1DHT11概述DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为准确的湿度校验室中进展校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最正确选那么。产品为4针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。图3.1DHT11实物图3.2.2DHT11引脚说明引脚号引脚名称类型引脚说明1VCC电源正电源输入,3V-5.5VDC2Dout输出单总线,数据输入/输出引脚3NC空空脚,扩展未用4GND地电源地图3.2DHT11典型应用电路3.2.3电源引脚DHT11的供电电压为3-5.5V。传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。电源引脚〔VDD,GND〕之间可增加一个100nF的电容,用以去耦滤波。3.2.4串行接口〔单线双向〕DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,用户MCU发送一次开场信号后,,DHT11从低功耗模式转换到高速模式,等待主机开场信号完毕后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取局部数据。从模式下,DHT11接收到开场信号触发一次温湿度采集,如果没有接收到主机发送开场信号,DHT11不会主动进展温湿度采集,采集数据后转换到低速模式。3.3光照检测模块设计光敏电阻特性是在不同光照强度下,其阻值发生变化〔只要是人眼可感受的光,都会引起它的阻值变化〕。利用这一特性,我们把光敏电阻接入电路实现光照强度检测。图3.3光照检测电路示意图亮度检测电路工作原理:我们把光敏电阻接入电路后,光敏电阻置于窗口处,由于光线的变化,其阻值也在一定时间内不断变化,从而产生连续的电信号,通过模拟I/O口进入单片机。由于单片机内部自带A/D转换电路,通过相应程序,能使模拟I/O口传来的电信号转换成数字信号,单片机读取这些数字信号,就能得出相应的光照强度,并决定是否启动其他应对措施。3.4无线通信模块设计考虑到系统的普遍适用性和硬件电路实现的难易程度,本次设计中选取NRF24L01无线模块作为系统的无线通信模块,该模块既可以用于发送数据,也可以用于接收数据,且易于编程操作。NRF24L01无线模块主要特点如下:(1)2.4Ghz全球开放ISM频段免许可证使用;(2)最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合;(3)126频道,满足多点通信和跳频通信需要;(4)内置硬件CRC检错和点对多点通信地址控制;(5)低功耗1.9-3.6V工作,待机模式下状态为22uA;掉电模式下为900nA;(6)内置2.4Ghz天线,体积种类多样;(7)模块可软件设地址,只有收到本机地址时才会输出数据〔提供中断指示),可直接接各种单片机使用,软件编程非常方便;(8)内置专门稳压电路,使用各种电源包括DC/DC开关电源均有很好的通信效果;(9)2.54MM间距接口,DIP封装;(10)工作于EnhancedShockBurst具有Automaticpackethandling,Autopackettransactionhandling,具有可选的内置包应答机制,极大的降低丢包率。3.5液晶显示模块设计3.5.1液晶显示模块的选择LCD1602屏幕为2行,每行显示16个字符,为字符型显示器,只能显示数字和字符,不可以显示汉字。LCD12864屏幕为64行,每行显示128个字符,为点阵型显示器,可根据需求任意显示字符,数字,汉字和图形。综合价格因素和实际应用的需要,选用LCD1602为改家居系统的显示器。下面详细介绍一下LCD1602的功能实现和各项参数。LCD1602主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最正确工作电压:5.0V字符尺寸:2.95×4.35(W×H)mmLCD1602相比传统显示器的几个突出优点:〔1〕显示质量高由于液晶显示器收到信号后的每一个点都会一直保持原有亮度和颜色,恒定发光。而不像阴极射线管显示器〔CRT〕那样需要不断刷新新亮点。因此,液晶显示器既不会闪烁,又保证了画质高。〔2〕数字式接口液晶显示器的输入输出采用数字量,和主控芯片〔SCM〕的接口连接更加简单可靠,操作也更为简便。〔3〕重量轻,体积小液晶显示器通过显示屏上的电极控制液晶分子状态来到达显示的目的,在重量上比一样显示面积的传统显示器要轻得多。〔4〕功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其他显示器要少得多。LCD1602分为带背光和不带背光两种,基控制器大局部为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差异。3.5.2液晶显示电路设计图3.4液晶显示电路示意图液晶显示电路工作原理:液晶显示器LCD1602通过7~14管脚的数据总线与单片机进展数据传送,单片机通过输出高地电平来控制液晶显示器LCD1602的4~6管脚配合传送的数据决定读/写数据,并通过LCD显示屏显示出来。期间单片机是控制元件,而LCD1602为显示和执行元件。3.6其他模块设计3.6.1电灯模块设计本次系统设计中用发光二极管LED来替代实际场景中的电灯。LED发光原理发光二极管是由Ⅲ-Ⅳ族化合物,如GaAs(砷化镓)、GaP(磷化镓)、GaAsP(磷砷化镓)等半导体制成的,其核心是PN结。因此它具有一般P-N结的I-N特性,即正向导通,反向截止、击穿特性。此外,在一定条件下,它还具有发光特性。在正向电压下,电子由N区注入P区,空穴由P区注入N区。进入对方区域的少数载流子(少子)一局部与多数载流子(多子)复合而发光。假设发光是在P区中发生的,那么注入的电子与价带空穴直接复合而发光,或者先被发光中心捕获后,再与空穴复合发光。除了这种发光复合外,还有些电子被非发光中心(这个中心介于导带、介带中间附近)捕获,而后再与空穴复合,每次释放的能量不大,不能形成可见光。发光的复合量相对于非发光复合量的比例越大,光量子效率越高。由于复合是在少子扩散区内发光的,所以光仅在靠近PN结面数μm以内产生。理论和实践证明,光的峰值波长λ与发光区域的半导体材料禁带宽度Eg有关,即λ≈1240/Eg(mm)式中Eg的单位为电子伏特(eV)。假设能产生可见光(波长在380nm紫光~780nm红光),半导体材料的Eg应在3.26~1.63eV之间。比红光波长长的光为红外光。现在已有红外、红、黄、绿及蓝光发光二极管,但其中蓝光二极管成本、价格很高,使用不普遍。LED的应用由于发光二极管的颜色、尺寸、形状、发光强度及透明情况等不同,所以使用发光二极管时应根据实际需要进展恰中选择。由于发光二极管具有最大正向电流IFm、最大反向电压VRm的限制,使用时,应保证不超过此值。为安全起见,实际电流IF应在0.6IFm以下;应让可能出现的反向电压VR0。6VRm。LED被广泛用于种电子仪器和电子设备中,可作为电源指示灯、电平指示或微光源之用。红外发光管常被用于电视机、录像机等的遥控器中。在连接电路时,首先应正确区分LED的正负极,防止正负极戒饭导致无法使用甚至烧坏元件。LED的两只引脚中,长的一根为正极,短的一根为负极,连接电路时,正极接一个220Ω的电阻,电阻另一端接单片机的数字I/O口,负极接地。3.6.2风扇模块设计本设计中,采用普通的直流电机带动扇叶来模拟实际场景中的风扇。直流风扇的两个接线端不分正负,一端接地,另一端接单片机数字I/O口即可,根据系统设计的要求,通过程序控制输出到电机的电压不同来改变电机转速,从而实现根据温度变化和预设参数改变风扇转速的目的。3.7系统硬件实物图根据上述各模块的硬件设计,最后做出的实物图如下:图3.5模拟智能家居硬件实物图§4软件系统设计4.1检测端程序设计检测端由单片机、光照检测模块、温湿度检测模块和无线通信模块组成,相应的程序包括光照检测程序、温湿度检测程序和无线通信程序,局部程序如以以下图所示,完整的程序在附录中。图4.1检测端局部程序4.2控制端程序设计控制端由单片机、液晶显示模块、电灯模块、风扇模块和无线通信模块组成,相应的程序包括无线接收程序、串口通信程序、显示程序、风扇和电灯控制程序,局部程序如以以下图所示,完整的程序在附录中。图4.2无线接收局部程序图4.3液晶显示局部程序§5总结本次设计的模拟智能家居系统满足了所有的系统设计要求,完成了对温湿度的实时监测和现实,得到的最终结果误差也在要求的范围之内,而且完成了根据光照强度变化、温度变化和预设参数对电灯和风扇进展智能控制的任务,取得了令人满意的成果。通过本次设计,使我对基于单片机的智能控制有了更多的了解和掌握,在科技飞速开展的今天,科技意味着第一生产力,机器智能正在越来越多的方面取代人工操作,作为智能控制在工业应用的代表性成果,它结合了程序调控,提供了定时控制、计数控制、步进控制以及数据处理等多种功能,具有人工作业无法对比的优越性和准确性。随着科技的开展,基于单片机的智能控制功能也会不断扩大,各项性能也将不断提高。参考文献[1]张鑫.单片机原理及应用[M].北京:电子工业出版社,2008[2]童诗白,华成英.模拟电子技术根基[M].北京:高等教育出版社,2001[3]王港元.电工电子实践指导[M].南昌:江西科学技术出版社,2006[4]李朝青.PC机及单片机数据通信技术,北京,北京航空航天大学出版社,2000[5]蓝宇电子研发团队.Arduino设计[M].[6]汤凯,刘洋,续欣.Arduino程序设计指南[M].北京:电子工业出版社,2015[7]赵光宙.信号分析与处理[M].北京:机械工业出版社,2010[8]张国雄.测控电路〔第四版〕[M].北京:机械工业出版社,2011附录:源程序检测端发送程序:#include<SPI.h>#include<Mirf.h>#include<nRF24L01.h>#include<MirfHardwareSpiDriver.h>#defineDHT11_PIN0//ADC0接到模拟口0byteread_dht11_dat(){bytei=0;byteresult=0;for(i=0;i<8;i++){while(!(PINC&_BV(DHT11_PIN)));//waitfor50usdelayMicroseconds(30);if(PINC&_BV(DHT11_PIN))result|=(1<<(7-i));while((PINC&_BV(DHT11_PIN)));//wait'1'finish}returnresult;}voidsetup(){DDRC|=_BV(DHT11_PIN);PORTC|=_BV(DHT11_PIN);Serial.begin(9600);Mirf.cePin=9;//设置CE引脚为D9Mirf.csnPin=10;//设置CE引脚为D10Mirf.spi=&MirfHardwareSpi;Mirf.init();//初始化nRF24L01//设置接收标识符"Sen01"Mirf.setRADDR((byte*)"Sen01");//设置一次收发的字节数,这里发一个整数,写sizeof(unsignedint),实际等于2字节Mirf.payload=sizeof(unsignedint);//发送通道,可以填0~128,收发必须一致。Mirf.channel=5;Mirf.config();Serial.println("I'mSender...");}voidloop(){bytedht11_dat[5];bytedht11_in;bytei;unsignedintGuangmin,WenDu,ShiDu;//startcondition//1.pull-downi/opinfrom18msPORTC&=~_BV(DHT11_PIN);delay(18);PORTC|=_BV(DHT11_PIN);delayMicroseconds(40);DDRC&=~_BV(DHT11_PIN);delayMicroseconds(40);dht11_in=PINC&_BV(DHT11_PIN);if(dht11_in){Serial.println("dht11startcondition1notmet");return;}delayMicroseconds(80);dht11_in=PINC&_BV(DHT11_PIN);if(!dht11_in){Serial.println("dht11startcondition2notmet");return;}delayMicroseconds(80);//nowreadyfordatareceptionfor(i=0;i<5;i++)dht11_dat[i]=read_dht11_dat();DDRC|=_BV(DHT11_PIN);PORTC|=_BV(DHT11_PIN);bytedht11_check_sum=dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];//checkcheck_sumif(dht11_dat[4]!=dht11_check_sum){Serial.println("DHT11checksumerror");}WenDu=(unsignedint)(dht11_dat[2]);ShiDu=(unsignedint)(dht11_dat[0]);Guangmin=analogRead(A2);//Guangmin=(unsignedint)20;Serial.println(WenDu);Serial.println(ShiDu);Serial.println(Guangmin);fasong(WenDu);fasong(ShiDu);fasong(Guangmin);delay(1000);}voidfasong(unsignedintadata){bytedata[Mirf.payload];data[0]=adata&0xFF;//低八位给data[0],data[1]=adata>>8;//高八位给data[1]。//设置向"serv1"发送数据Mirf.setTADDR((byte*)"Rec01");Mirf.send(data);//while死循环等待发送完毕,才能进展下一步操作。while(Mirf.isSending()){}}控制端无线接收程序:#include

<SPI.h>

#include

<Mirf.h>

#include

<nRF24L01.h>

#include

<MirfHardwareSpiDriver.h>

int

fengshan

=

6;

int

led

=

5;

//定义一个变量adata存储最终结果,oldadata存储旧结果,防止一样结果刷屏。

unsigned

int

WenDu

=

0,

ShiDu

=

0,

Guangmin

=

0;

void

setup()

{

pinMode(fengshan,

OUTPUT);

pinMode(led,

OUTPUT);

Serial.begin(9600);

Mirf.cePin

=

9;

//设置CE引脚为D9

Mirf.csnPin

=

10;

//设置CE引脚为D10

//初始化局部,不可随时修改

Mirf.spi

=

&MirfHardwareSpi;

Mirf.init();

//初始化nRF24L01

//配置局部,可以随时修改

//设置接收标识符"Rev01"

Mirf.setRADDR((byte

*)"Rec01");

//设置一次收发的字节数,这里发一个整数,

//写sizeof(unsigned

int),实际等于2字节

Mirf.payload

=

sizeof(unsigned

int);

//发送通道,可以填0~128,收发必须一致。

Mirf.channel

=

5;

Mirf.config();

}

void

loop()

{

//定义一个暂存数组,大小为Mirf.payload。

byte

data[Mirf.payload];

if

(Mirf.dataReady())

//等待接收数据准备好

{

Mirf.getData(data);

//接收数据到data数组

WenDu

=

(unsigned

int)((data[1]

<<

8)

|

data[0]);

Mirf.getData(data);

//接收数据到data数组

ShiDu

=

(unsigned

int)((data[1]

<<

8)

|

data[0]);

Mirf.getData(data);

//接收数据到data数组

Guangmin

=

(unsigned

int)((data[1]

<<

8)

|

data[0]);

sender(WenDu);

sender(ShiDu);

delay(1050);

}

if

(25

<=

WenDu

<=

28)

analogWrite(fengshan,

51);

else

if

(29

<=

WenDu

<=

32)

analogWrite(fengshan,

153);

else

if

(WenDu

>=

33)

analogWrite(fengshan,

255);

else

analogWrite(fengshan,

0);

if

(0

<=

Guangmin

<=

60)

analogWrite(led,

255);

else

if

(61<=

Guangmin

<=

120)

analogWrite(led,

153);

else

if

(121

<=

Guangmin

<=

180)

analogWrite(led,

51);

else

digitalWrite(led,

LOW);

}

void

sender(unsigned

int

x)

{

unsigned

int

c,

d,

j

;

unsigned

int

SHU[2];

c

=

x/10;

d

=

x-c

*

10;

SHU[0]

=

c;

SHU[1]

=

d;

for

(j

=

0;

j

<

2;

j++)

{

switch

(SHU[j])

{

case

0:

Serial.print('0');

break;

case

1:

Serial.print('1');

break;

case

2:

Serial.print('2');

break;

case

3:

Serial.print('3');

break;

case

4:

Serial.print('4');

break;

case

5:

Serial.print('5');

break;

case

6:

Serial.print('6');

break;

case

7:

Serial.print('7');

break;

case

8:

Serial.print('8');

break;

default:

Serial.print('9');

break;

}

}

}控制端串口通信及液晶显示程序:int

DI

=

12;

int

RW

=

11;

int

DB[]

=

{3,

4,

5,

6,

7,

8,

9,

10};

int

Enable

=

2;

int

Echo

=

13;

int

Trig

=

A0;

void

LcdCommandWrite(int

value)

{

int

i

=

0;

for

(i

=

DB[0];

i

<=

DI;

i++)

{

digitalWrite(i,

value

&

01);

value

>>=

1;

}

digitalWrite(Enable,

LOW);

delayMicroseconds(1);

digitalWrite(Enable,

HIGH);

delayMicroseconds(1);

digitalWrite(Enable,

LOW);

delayMicrosecon

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论