系统简介
温湿度测量技术在工业、农业生产中的应用十分广泛,在我国经济快速发展的今天,工业、农业技术的发展与
应用日益引起人们的关注。常规的温湿度传感器需要采用较为复杂的线路来实现数据的转换,而且在长距离传输时
存在着很大的误差。由于在监控室内和工地之间要铺设很多的电缆,需要耗费大量的人力和时间。因此,为了满足
工业、农业生产的需求、为了满足大型场所的测量需要、为了快速简便的进行线缆的维修和保养,本文提出的系统
采用无线温湿度监测,无需铺设电缆,并且节约了时间和成本。该设计系统采用AT89C52单片机为主要控制单元,利
用DHT11型温度湿度传感器完成温度、湿度等有效数据的收集,再利用nRF24L01实现数据的传输和发送,最终采用
LCD1602实现数据的实时显示。。该系统采用Keil C51软件进行软件的开发,利用温湿度传感器,51单片机等硬件模
块电路最终制作出实物并且对其进行实地环境的测验。该技术可较好的适用于各种场景,性能比较稳定可靠,可以
实现温湿度采集、无线传输、显示等多种功能,具有很好的应用前景和推广价值。
关键词:AT89C52,温湿度测量,无线传输
第一章 概述
1.1 研究背景和意义
随着人类社会对环保问题的日益重视,环境监测也受到了越来越多的关注。环境监控系统需要对各种环境因子
进行监控,其中不限于温度、光照、湿度等等。在环境监控系统中,光线、气压、空气温度和相对湿度是影响环境
质量的主要指标。随着科学技术在工业和农业领域的迅速发展,对产品在生产中的温度和湿度的检测要求也日益增
加,但是由于这些参数不易被人工监测,因此尤为需要无线环境监测设备以代替人为的去对环境的监测。因此设计
一种有效监测环境的装置迫在眉睫。
进入21世纪以后,我国的温湿度测试产品正面临着严峻的考验。特别是在传统工业中,迫切需要采用智能控制
技术以及电子技术来改善生产时的条件,提高产品质量。比如,在纺织业,纺织工业中的温度、湿度是决定纺织品
品质的重要因素,然而,目前在我国,一些纺织企业的温湿度测量和控制方法相较于其他国家还是比较落后。有些
小型企业仍然使用测温贴片或依靠人力去手动调节风扇和阀门,其效果达不到预期所想。在制药行业,由于进行某
些微生物研究时,它们对于实验时温度的要求十分严格,因而需要时刻远程进行高精度的温度监测,因此无线测温
技术则可以充分满足无菌温度测量的需求。
在农业方面,农业要实现产业化,就必须抛弃传统的农耕方式,进而需要引进一些先进的科学技术,以应对来
自进口的新产品的挑战,并且逐渐打入国际市场。近几年,我国各地陆续涌现出许多能种植反季节花卉、蔬菜等蔬
菜的新型大棚。随着我国大规模的建设调温仓库,因此温湿度测量与控制技术未来将会有更大的发展空间。
1.2 国内研究现状和发展前景
近年来,由于工业生产效率的不断提升,自动化程度和范围越来越广,对环境监控技术的需求也越来越高,因
此,各领域的专家们都开展了各种实用的检测技术,并取得了较大的进步。但是,目前国内大多数的环境检测设备
都是由中小规模企业生产制作,其中主要以中低档次的设备为主,无法适应我国环保行业的发展。它的主要特征
是:
(1)技术水平低,重复生产严重,规模效益低。
(2)产品质量差,性能不稳定,产品寿命短,故障率高。
(3)技术开发水平低,装备的在线监测装备支持能力不够,难以适应市场需要。
在科技快速发展和工业化水平不断提升的今天,自然生态环境受到的损害日益加剧。现实中,随着人民的物质
条件越来越好,对自己的生存条件也越来越有要求,人们开始对自身居住环境的期待也逐渐提高。目前,我国的民
用生活环境监测体系很薄弱,且地理位置分散,地理环境复杂,无人看守,手工采集数据不方便,效率低,采用有
线方法采集数据,布线麻烦,传输距离有限,没有形成一个完善的监控网络。环境监测技术在人类的日常生产、生
活中得到了广泛的应用。然而,随着传感器的出现,大量的数据电缆也随之出现,这些电缆不但造成了布线的复杂
性,也带来了短路和断线的危险,同时也造成了设备老化、成本高、线路复杂等问题。尤其是对于某些临时应用的
传感器来说,电缆的搭接非常不方便。因此,寻求一种能够满足数据传输需求的便捷的无线通讯技术,以消除电缆
缠绕的复杂性是目前急需解决的问题。
随着射频、微电子及集成电路等技术的不断发展,无线通讯技术得到了迅速的发展,使得无线通讯变得更加方
便、更快捷、更可靠。无线技术在工业环境中的应用是近几年的一种新的发展方向,目前无线技术已深入到了数据
采集的各个方面,本次毕业设计将传感器技术与无线技术相结合,成功地完成了温度、湿度检测及无线传输系统的
软硬件设计,以无线化的方式解决了布线所带来的许多问题,为工业控制提供了方便。随着微处理器的广泛使用和
通讯技术的不断发展,远程实时监测技术日益受到人们的重视,特别是在国防、工业等领域有着不可取代的地位。
本文以此为基础,设计了一种以单片机为核心的无线环境监控系统。本系统不仅能够通过进行室内环境参数的采集,
还可以将数据无线传输至另一个设备,可见本设计实时性能较好,具有较强的控制性和交互性,可以在实际室内环境监
测当中得到较好应用。
1.3 课题研究主要内容
本次设计以AT89C52单片机作为核心进行环境监测,设计的主要内容是对其完成各部分硬件电路设计和系统软件
设计。该环境监控装置主要以AT89C52微处理器最小控制系统为核心,外部电路包括温湿度传感器、LCD1602液晶显
示模块和无线数据传输模块nRF24L01模块组成,供电方式采用5V的USB供电。DHT11数字温湿度传感器采集到周围环
境的温度和湿度后,经过单片机处理,由nRF24L01无线模块发送至检测端,检测端同采用nRF24L01接收,通过
LCD1602进行实时显示。
第二章 系统总体方案设计
2.1 系统设计方案选择
温、湿度的测定方法多种多样,可采用的技术和仪器也较多。所以,该系统的整体设计必须达到整体性能的需
求,并根据实际应用情况,尽可能地选择实用性强、方便实现的结构,如参数合理、性能稳定、低功耗、低成本等
指标。该系统尽可能地利用近年来较为成熟的传感器、无线通信、数据处理等技术构建出系统的基础功能。
2.2 系统组成
2.2.1主控芯片选择
方案一:以AT89C52单片机为控制核心。该芯片支持ISP下载,使用十分方便,可靠性好,网上学习资料学习较
多,适合初学者使用,价格也比较合适。
方案二:以STC12C5A60S2增强型新一代8051单片机作为本次设计主控芯片。该芯片具有较高的测频精度以及超强
抗干扰的能力,且多一个串口,内部有8路10位AD。
经过对本次设计的具体对比和综合考量,最后选定了一种能够达到设计要求的单片AT89C52。
2.2.2 温湿度传感器的选择
方案一: DS18B20传感器可直接输出数字信号、且具有成本较低,抗干扰能力较强、方便控制等优点,并且可
使用单总线进行传输以及具有很好的扩展性。由于DS18B20的温度精度不高,只能达到0.5℃,不太适用于温度高要
求的区域,而且在湿度测定方面还需进一步扩充,故本次DS18B20的测试结果无法满足。
方案二:选取DHT11传感器,可同时实现对环境中温度和湿度的测量,检测过程中灵敏度较高,并且采用了单总
线的数据格式,与现有的大部分传感器比较,该系统控制精度高,就是检测精度不高,但是足够满足日常生活和本
次设计所需。
通过对两者进行了综合比较,最终确定了DHT11为本次测试的温度和湿度测量元件。
2.2.3 无线传输模块的选取
方案一:使用 GSM模块,使用该模块可以远程传送数据,GSM无线传输模块需要通过内置 SIM卡和移动卫星来完
成功能实现,但这个方案的成本很高,后期需要通讯费用,因此不太适用于此次设计。
方案二:本次选择nRF24L01模块进行通信,此模块有自动应答、以及自动再发射功能,可以工作在2.4GHz的ISM
频段,既可作为数据发送端,也可以作为数据接收端,并且在空中的传输速率可高达2Mbit/s,传输速率较高,相对其他方式来说是一款低功耗的无线通信模块。
综合上述两种方式的比较,最终选定了第二种方案,用于本系统的无线发射和接收。
2.2.4显示模块选择
方案一:使用LCD12864作为显示模块。此模块可以显示日常生活中最常用的汉字和ASCII码,IC功能较为强大,
并且其主控为ST7920,是带字库的,具有较高的稳定性,且为低功耗,体积较轻不占面积,但是其程序和电路相对
来说较为复杂且价格较高。
方案二:使用LCD1602字符型液晶,作为显示模块,一是它的高显示品质,在接受到讯号后,能够连续地显示文
字和数码;二是与 MCU的接口比较简单、稳定、操作简便、价格适中,对于学生来说性价比很高。
综合考虑以上方案,对于毕业设计硬件部分设计来说,选择LCD1602作为显示模块可以充分地符合毕业论文的要
求,因此选择方案二。
2.3 本章小结
本章针对系统的设计需求,主要是对各模块的硬件进行了选择及确定。首先对本系统的功能进行了详细的阐
述,并对整个系统的功能进行了详细的描述,接着介绍了主控芯片、温湿度传感器、无线收发模块和显示模块的选
取,并从这些方案中选出最符合本次系统设计需要的。
第三章 系统硬件电路设计
3.1 总体结构设计
整个无线温湿度环境监测系统分为两大部分,分别是温湿度数值的采集和发送,温湿度数值的接收和显示,两
个部分之间主要是通过无线传输的方式实现了温度、湿度的数据的传送。系统整体的结构流程图分为主机和从机进
行设计,如下图3-1和图3-2所示。
图3-1 从机结构系统设计框图
图3-2 从机结构系统设计框图
3.2单片机控制模块
本系统采用单片机最小系统AT89C52 为主控芯片,由于AT89C52是低电压、性能优良的8位 CMOS微控制器,
AT89C52内置8字节可编 Flash 快速存储器,所以在组成最小系统时不需要外扩程序存储器,只需要有晶振电路、复
位电路等外围电路组成,AT89C52单片机有40个引脚,32个外部双向输入/输出(I/O)端口,同时片内包含2个外部中
断口,3个16位可编程定时计数器,2个全双工串行通信口,以及2个读写口线。
AT89C52管脚说明:
VCC:电源正极
GND:接地端
P0端口:P0端口为8位漏极开路的双向I/O端口。
P1端口:P1端口是一个双向8位I/O口,专用于分时传送低8位地址信号和8位数据信号,且具有内部上拉电阻,
P1端口的输出缓冲区可驱动4个TTL逻辑电平。
此外,具体如表3-1所示,P1.0和P1.1还有附加功能,可分别作为定时/计数器2的外部计数输入、输出。
表3-1 P1.0和P1.1的第二功能
引脚号 功能特性
P1.0 T2(定时/计数器2外部计数脉冲输入),时钟输出
P1.1 T2EX定时/计数2捕获/重装载触发和方向控制
P2端口:P2端口是一个双向8位的标准I/O接口,专用于传送高8位地址信号,其内部有一个上拉电阻,既可以作
为输入,也可以作为输出,也可以作为高8位地址总线使用。
P3端口:P3端口是一个双向8位标准I/O接口,其内部带有上拉电阻,能驱动4个TTL逻辑电平。在P3口输入“1”
时,端口会被内部上拉电阻拉高,这时可以用作输入端口。P3端口除了充当普通 I/O端口之外,还具有第二辅助功
能,如表3-2所示。
表3-2 P3口引脚第二功能
引脚号 第二功能
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
PXD(串行输入)
TXD(串行输出)
INT0(外部中断0)
INT1(外部中断1)
T0(定时器0外部输入)
T1(定时器1外部输入)
WR(外部数据存储器写选通)
RD(外部数据存储器读选通)
控制引脚:
RST:复位输入。当晶振开始工作时,RST脚维持2个机器周期以高电平将使用单片机进行复位。
PROG:地址锁存器允许控制信号(ALE),功能是当访问外部程序存储器时,ALE信号用于锁存低8位地址。在一
般情况下,ALE以晶振六分之一的固定频率输出脉冲,可作为外部定时器或时钟使用。
PSEN:外部ROM读选通信号输出引脚,一般用在外部存储器的情况下。当AT89C52从外部程序存储器执行外部存
储器的代码时,PSEN在每个机器周期会被激活产生两次有效输出, PSEN就相当于外部ROM芯片输出允许的选通信
号。
EA/VPP:访问外部程序存储器的控制信号。为了能从0000H—FFFFH的外部存储器读取指令,EA端必须保持低电
平。为了执行内部程序指令,EA端应该接VCC。
外接晶振引脚:
XTA L1:振荡器反相放大器及内部时钟发生器的输入端。
XTA L2:振荡器反相放大器的输出端。
3.3温湿度采集模块
DHT11是一款近年来在日常生产设计研究中被频繁使用的已校准数字信号输出的温湿度复合型传感器,传感器是
由电阻式的感湿元件、NTC测温元件两部分组成,并且与一个高性能的8位单片机相连接。DHT11为了保证可靠性和长
期稳定性,采用了特别的数字模块检测方法,产品具有快速响应、优质、防干扰、
DHT11传感器在生产出厂时采用了4针单列引脚的包装。在进行系统研究设计时,可以很容易地实现连接,并可
以按照客户的要求,为客户提供任意专业的包装形式。图3-4为DHT11引脚接线图。表3-3所示为DHT11引脚说明。
表3-3 DHT11引脚说明
引脚号 引脚名称 类型 引脚说明
1 VCC 电源 正电源输入,3V-5.5V DC
2 DOUT 输出 单总线,数据输入/输出引脚
3 NC 空 空脚,扩展未用
4 GND 地 电源地
DHT11的工作范围为3V-5.5VDC,测量电流为 0.5mA-2.5mA。传感器在刚开始接通电源时,由于初始状态不够稳
定,所以在一秒内不会发出任何指令。DHT11在1脚与4脚(VCC, GND)之间可加入一个100 nF的电容器作为去耦滤波
器。DHT11与单片机的通讯是一种单一的总线数据形式,它的发送周期大约为4 ms,DHT11在发送一次开始信号之
后,便会将其转换为最高速度,在激活信号结束后,将会发射40位的响应信号,并在同一时刻进行一次数据采集。
DHT11数码温湿度传感器在VDD=5V,T=25℃时的电气特性,如表3-4所示为,采样周期的时间间隔应该大于1秒。
表3-4 电气特性
参数 条件 Min TYP Max 单位
供电 DC 3 5 5.5 V
测量 0.5 2.5 mA
供电电路 平均 0.2 1 mA
待机 100 150 uA
采样周期 秒 1 次
3.4 无线传输模块
3.4.1无线收发模块nRF24L01收发模块特点
nRF24L01是近些年来生产的一种新型的单片射频收发仪器,工作频率在全世界通用的2.4GHz到2.5GHz的 ISM频
段之间,其内置有调制器、晶体振荡器、功率放大器、频率合成器等元件,通过编程可以对通讯信道和功率进行适
当的分配。nRF24L01所需的能量相对较低,假定其在-6 dBm功率发射的情况下,所需发送和接收信号时的工作电压
为12 mA和9 mA,功耗较低,是一种更加节省能源的产品。GFSK调制:硬件集成OSI链路层,在芯片中可以完成自动发
送和接收,在芯片内部会产生报头和 CRC的代码,在进行数据通讯时,对应的数据传送速度为2 Mbls,并且具有125
个通道,完全可以与各种类型的 RF设备相匹配,并且这种无线收发模块的引脚使用的是44毫米的包装形式,工作
电压为3.6V。
nRF24L01的引脚说明如表3-5所示,引脚结构分布如图3-6所示。
表3-5 nRF24L01引脚说明
引脚号 引脚名称 引脚说明
1脚 CE 使能端
2~5脚 CSN、SCK、MOSI、MISO SPI引脚端,微处理器可通过其和无线收发模块关联
6脚 IRQ 中断标志位
7脚 VDD 电源输入端
8脚 VSS 电源地
9~10脚 XC2、XC1 晶体振荡器引脚
11脚 VDD_PA 功率放大器输出接口
12~13脚 ANT1、ANT2 相应的天线接口
16脚 IREF 参考电流输入
各引脚相应的功能如下:
(1) VCC引脚的外加电压在1.9V至3.6 V之间,超出该范围就会造成损害。通常选用3.3 V的电压。
(2)它能与电源 VCC和接地端相联接,并能与传统5 V的 I/O端口单独相连,无需进行电平变换。当然,如果是
3 V左右的单片机,能满足更高的需求。
(3)没有SPI的单片机也可以运行该模块,只要利用普通的单片机 I/O端口来仿真SPI,就可以避免串行干扰。
nRF24L01模块特点如下:
(1)集成接收和发射一体化;(2)2.4GHz的工作频率;(3)采用 FSK技术,其抗干扰性强,可充分满足行业控
制需求;(4)采用 DDS+ PLL相组合的频谱技术,使其具有相对的稳定性;(5)具有-105 dBm的高灵敏度;(6)+10 dBm
的最大传输能力;(7)低电压,并且功率消耗较小;(8)避免2个频段,能够适应特定的情况;(9)工作速率最高
可以达到2Mbit/s;(10)超小体积约40mm×27mm ×5mm;(11)利用的是低发射功率,信号接收具有较高的灵敏度,
不再需要重新申请使用许可证;(12)DIP引脚间距采用标准的固定距离,具有较好的嵌套性。
3.4.2无线收发模块nRF24L01的电气特性
如表3-6所示为无线收发方式的电气特性。
表3-6无线收发模块nRF24L01的电气特性
参数 数值 单位
供电电压 1.9~3.6V V
最大发射功率 0 dBm
最大数据传输数率 2000 kbps
发射模式下,电流消耗(0dBm) 11.3 mA
接受模式下,电流消耗(2000kbps) 12.3 mA
温度范围(外界温度) -40~+85 ℃
数据传输数率为1000kbps下的灵敏度 -85 dBm
3.4.3无线收发模块nRF24L01的重要时序
nRF24L01模块具有无线电发射和接收部分,利用FSK技术,传输速率带宽达到2 Mbps,它的工作时序采用的是
SPI通讯协议,可以作为串口的外接装置使用。SPI是一种具有高工作效率和通信总线实时性的全双工工作方式,只
需要四根引线就可以达到要求。此外, PCB结构简单实用,节省了大量的空间,因此近年来在芯片集成中得到了电
子行业普遍的应用。SPI总线由 SDO, SDI, SCK, SS等组成,并且为环状结构,还可以使用两个双向移位寄存器来进
行数据的处理。向上代表发射,向下代表接受,而置高位时,首先进行传输。SDO的内部电平在升高边缘时会被传输到设备的存储器中;在下降边缘时,SDI的内部电平会发送到主机的寄存器中。此步操作完成两个存储器8位的转
换。因此,总的发射循环是十六位一次,它有两个相对应的字节,主机首先发出了一条命令,从机收到传输的命令
后,进行变换,然后在对应的时段中完全读出该数据信息。
SPI总线采用三条线路接口进行数据同步,即三种通讯方式,时钟线 SCK模式,数据输出线 MISO模式,数据输
入线 MOSI模式。SPI的主要功能是:能在同一时间接收和发送串行数据,能实现两种工作模式,具备一定的写入冲
突保护能力。该总线的工作模式由 SPI0、SPl1、SPI2和SPI3四大部分组成,其中 SPI0和SPI3是主要使用的工作方
式。SPI模块在工作此种需要与各种外设装置交互数据,并利用串行时钟调整各相位,且不会影响到时钟的性能。若
在CPOL=0的情况下,对应的串行同步时钟可以维持在低水平;若是1,那么该时钟则为高电平。时钟相位可以对这2
种传输协议进行合理配置,实现数据转换。
3.5 LCD1602液晶显示模块
采用LCD1602字符型液晶显示模块,是一款以162显示模式显示文字、数字、符号等内容的点阵 LCD。下图为
LCD1602液晶显示屏的接线电路原理,
LCD 1602是一种低功率、无源发射的显示装置。因为像液晶这样的材料不会发出光,所以它们只是在外部的电
场作用下,让液晶中的分子有序地排列起来,这样,它们就会改变穿过液晶的光的方向,然后通过基板的反射、散
射,最终到达人们的视线。LCD具有重量轻、体积小、功耗低、抗干扰能力强等特点,在生活、仪器、控制等方面得
到了广泛的应用。LCD1602利用液晶自身的物理特性来显示,可以改变LCD1602内部输入电压值的大小变化,显示屏
幕对应的部分就会显示出结果。只要给LCD1602通电,它就可以显示。因为LCD显示器的集成度高,物理特性上厚度
薄、各种颜色都易实现显示的特点,在当今的日常生活中已经广泛应用于笔记本电脑、iPad、手机屏幕等众多领
域。
1602液晶显示屏是因为自身的特点,可以在日常生活中显示不同的现象。1602字符型LCD常见类型有14个引脚
的显示屏和16个引脚的显示屏,两者的差距是是否存在背光线路。
LCD1602的引脚为标准的16脚接口,各引脚的功能介绍如下表3-7所示:
表3-7 LCD1602引脚说明
引脚号 引脚名称 引脚说明
1 GND 地电源
2 VCC 正电源
3 VL 对比度调整端口
4 RS 寄存器选择端
5 RW 读/写信号端口
6 EN 使能(enable)端
7~14 D0~D7 双向的8位数据线
15 VCC 背光电源正极
16 GND 背光电源负极
LCD1602液晶模块工作状态可以分为两种,一种为读写指令,另一种为读数据状态,控制信号设置如表3-8。
表3-8 LCD1602工作状态命令
读状态 输入 RS=L,R/W=H,E=H 输出 D0-D7=状态字
写指令 输入 RS=L,R/W=H,D0-D7=指令码,E=高脉冲 输出 无
读数据 输入 RS=H,R/W=H,E=H 输出 D0-D7=数据
LCD1602液晶显示屏实物如下,如图3-9所示。
图3-9 LCD1602液晶显示器实物图
仿真程序代码如下:
#include "reg52.h"
#include "lcd.h"
#include "DS18B20.h"
#include "DHT11.h"
#include "SPI.h"
//#define DS18B20
#define DHT11
unsigned char DisBuf[] = "TEMP: --.- C HUMI: --.- % ";
unsigned char cnt = 0;
int temp = 0;
extern unsigned char DHTDATA[];
void Sys_Init(void);
void Datapros(void);
void Display(void);
int main()
{
Sys_Init();
while(1)
{
#ifdef DS18B20
{
DS18B20_ConvertT();
cnt=10000;while(--cnt);
temp = DS18B20_ReadT();
DHT_receive();
}
#endif
#ifdef DHT11
{
23
DHT_receive();
cnt=1000;while(cnt--);
}
#endif
Datapros();
Display();
cnt=1000;while(cnt--);
SPI_Read_Write_Byte(0x55);
}
}
void Sys_Init()
{
LcdInit();
Display();
#ifdef DS18B20
{
DS18B20_ConvertT();
cnt=50000;while(--cnt);
cnt=50000;while(--cnt);
}
#endif
}
void Display(void)
{
LcdWriteCom(0x80);
for(cnt=0; cnt<16; cnt++)
{
LcdWriteData(DisBuf[cnt]); //LCD第一行显示温度
}
LcdWriteCom(0x80+0x40);
for(cnt=0; cnt<16; cnt++)
{
LcdWriteData(DisBuf[cnt+16]); //LCD第二行显示湿度
}
}
void Datapros(void)
{
float tp;
#ifdef DS18B20
{
if(temp<0)
{
DisBuf[5]='-';
temp = temp-1;
temp = ~temp;
tp = temp;
temp=tp*0.0625*100+0.5;
24
}
else
{
DisBuf[5]=' ';
tp = temp;
temp=tp*0.0625*100+0.5;
}
DisBuf[7]=temp%10000/1000 + 0x30;
DisBuf[8]=temp%10000%1000/100 + 0x30;
DisBuf[10]=temp%100/10 + 0x30;
UPLOAD[0]=DisBuf[7];
UPLOAD[1]=DisBuf[8];
UPLOAD[2]=DisBuf[10];
}
#endif
#ifdef DHT11
{
DisBuf[7]=DHTDATA[2]/10 + 0x30;
DisBuf[8]=DHTDATA[2]%10 + 0x30;
DisBuf[10]=DHTDATA[3]/10 + 0x30;
}
#endif
DisBuf[23]=DHTDATA[0]/10 + 0x30;
DisBuf[24]=DHTDATA[0]%10 + 0x30;
DisBuf[26]=DHTDATA[1]/10 + 0x30;
}
系统仿真图:
第四章 系统软件设计
4.1 软件开发环境简介
Keil C51是由美国 Keil公司早期推出的软件开发平台,此软件平台功能强大,应用范围广,可以适用于广泛的
集成开发环境。C语言在功能、结构、可读性、可维护性等诸多优点上均优于汇编语言,对于初学者来说,一开始易
于学习和使用。Keil C51软件开发平台为所有使用者提供了一套较为完整的开发方案,其中包含了由 uVision结合
起来的C语言编译器,宏汇编,库管理,以及功能强大的仿真调试器等这些组件。Keil C51还能够为用户提供大量的
库函数,以及强大的集成开发和调试工具。C语言相对其他语言来说,是一种可较为便捷使用的结构化的设计语言,
它能从上到下,有层次地进行结构化的编程。所以本次设计中,我选择C语言作为软件部分的编程语言,并且可以大
大缩短开发时间,提高程序可读性,对以后的开发工作也有很大的帮助。
4.2 系统软件设计
4.2.1 数据采集模块软件设计
对于数据采集模块的软件设计,我们首先需要对DHTI1模块进行初始化,并进行温度、湿度的测量和采集,并将
所获得的温度和湿度的数据传输给单片机,在此期间,要对DHT11进行判定,如果正确,由单片机进行温度、湿度的
数据处理,主机配置完成后使得nRF24L01实现数据的发送和接收。图4-1为采集模块的主程序流程图。
图4-1 采集模块主程序
在进行温湿度采集模块软件设计时,主要是要进行初始化设置,然后调用各子程序实现其功能,将nRF24L01设
置为发送模式,TRX_CE置高。温湿度采集流程图,如下图4-2所示。
温湿度采集具体流程如下:
首先对DHT11进行初始化,延迟0.2秒,随后读取温度和湿度,如果有效的读出数据,则经过单片机配置处理,
通过SPI总线将数据由nRF24L01发送给主机。反之,则DHT11重启,经过延时0.8s后重新读取有效的温湿度数据。
4-2 温湿度采集流程图
4.2.2数据处理模块软件总体设计
数据接收端的基本流程是:首先对LCD1602和 单片机I/O口进行初始化,再设定nRF24L01作为接收模式,再启动
无限周期循环,由单片机继续对nRF24L01的接收模块工作状况寄存器进行检测。当nRF24L01收到数据被检测到时,
单片机将该数据进行存储并自动发送应答信号。如图4-3所示,为接收端软件设计的流程图。
图4-3 接收端软件总体设计
4.3无线收发模块软件设计
4.3.1无线发射模块软件设计
在进行配置发送模式时,必须先进入待机模式,或者掉电模式后,才能对nRF24L01的寄存器开始进行配置,当
发送端开始发送数据时,会自动加上字头以及CRC校验码。
nRF24L01发送数据的具体过程如下:
开始进行数据的发射时,首先进入待机模式,或掉电模式,将nRF24L01的寄存器设置为发送方式,然后根据SPI
时序,通过 SPI端口将地址和所要传输的有效信息,写到nRF24L01的缓存区,随后 CE设置为高,延迟一段时间后,
开始发送数据;若此时自动应答成功,则进入接收模式,等待接收到信号后,置高TX_DS同时清除FIFO;相反,若未
能成功接收到回复信号,则开始启动自动重发功能再次发送,直至最后发送成功后,产生IRQ中断,并对CE置低,
nRF24L01进入待机模式,整个发射流程结束。
4.3.2无线接收模块软件设计
在配置接收模式时,也是必须先进入待机模式或掉电模式,然后配置nRF24L01寄存器,首先要配置接收模式的
接收地址以及要接受的数据包的大小,接收数据通道使能等等。接着设置高 CE,经过一定的延时,进行空中环境温
湿度信号的初始接收,也就是进入接收模式后,等待数据的到达。在接收端检测到地址匹配CRC校验正确的温湿度数
据包后,将有效数据存储到RX_FIFO寄存器中,并且状态寄存器中的RX_DR置高,同时IRQ引脚变低,产生中断去通知
MCU读取数据,单片机通过SPI接口将数据从FIFO 读出,同时接收完成后,nRF24L01进入发射模式,向发送模块发送
应答信号。最后微控制处理器通过SPI接口将CE脚置低,使接收模块进入空闲模式。整个发射过程的流程图如下图4-
5所示。
图4-5 无线接收模块工作流程图
4.4本章小结
本章首先对软件开发环境进行了详细的描述,接着对数据采集模块软件、数据处理模块软件和无线收发传输模
块软件的基本设计思路进行了阐述。在此基础上,对各个子程序和最终的程序流程通过流程图进行了详细的描述,
对系统的软件设计采用了模块化的设计思想。
第五章 系统框架制作与调试分析
5.1 硬件调试
第一步是对硬件的调试前准备工作。首先,根据PCB的设计,完成实物元器件的装配和焊接;调试前准备工作主
要是检查电源电路有无短路、虚焊等情况。然后接通电源上电进行测试,主要检查芯片有没有出现发热情况,如果
测试时出现问题,要立刻切断电源,然后通过万用表来检测电源情况。
第二步是开始进行硬件调试。本系统的硬件部分,主要针对信号的采集、无线传输、系统的稳定性等方面进行
了测试,并在不同的温度、湿度条件下进行了对比。
该系统利用仿真试验的方式来测试该电路:
(1)对线路的断点状态进行检测,其中包含了焊点、元件引脚插孔的金属性等。
(2)利用万用表,对故障的线路进行测试,确认它们是否满足相关规定,并进行线路的短路测试,若发现有故
障,应根据电路原理进行修正。
(3)对各线路连接情况进行检测,看看有没有漏电。
5.2 软件调试
通过对各硬件部分的设计后实现了软件的设计,并取得了以下结果:
(1)在编写完程序后,可以进行一次程序自查,然后再将程序写入单片机内,这样可以降低出错的几率。由于
本次使用的是C语言,很有可能存在一些语法上的问题,需要进行进一步的检查,例如漏写分号、括号不匹配等问
题,必须尽快解决。
(2)经自查确认无误后,即可进行计算机调试。如果是因为编译而产生的错误,则可以使用相应的程序来查找
问题根源。需要注意的是:某一行的错误代码往往可能需要查看前面的代码来逐渐找出问题。
(3)如果在代码中不存在语法或逻辑上的差错的情况下,将其写入到单片机中,然后进行测试。测试的方式,
就是从下往上,从底层开始,按照模块化的思路,对所有的模块都单独检查一遍,最后将它们组合在一起,形成一
个完整的系统后再整体测试一遍。
(4)将编码写进 MCU后,认真地检查每个组件的性能,查看是否满足设计需求。
(5)将代码输入到 MCU,并对LCD1602进行调试校验,保证数据能正确的呈现出来。
(6)将测量的温湿度的代码输入到单片机中,测试nRF24l01,以保证它的的工作性能完好。
(7)使用Proteus仿真的虚拟示波器验证SPI协议时序的正确性。
(8)将接收端和发送端的数据输入到单片机中,以确认无线传输模块工作状态是否正常。
(9)将所有的程序代码都写入微处理器中,进行操作,经过运行,最终完成了温度、湿度参数的实时显示。这
次设计中的一个失误是nRF24L01的引脚有问题,经过反复的寻找发现并且解决问题,耗费了很多的时间,因此在未
来的设计开发过程中,一定要防止类似的错误再次出现发生。
5.2.1软件调试原理及结果
首先使用Proteus仿真软件的虚拟示波器,对所编写SPI协议的时序正确性进行验证,由于无线收发模块与单片
机通信基于SPI协议,因此SPI时序正确才能进一步对无线收发模块进行调试。验证时将SPI发送函数写于main函数的
while(1)循环中,发送任意数据,以下以发送0x55为例,然后使用虚拟示波器查看CSN,SCK以及MOSI信号的时序正
确性,CSN信号连接至示波器通道A,SCK信号连接至通道B,MOSI信号连接至通道C,显示波形如下图5-1所示,首先
CSN片选信号拉低,其次SCK产生8位的时钟脉冲,极性为高,高电平持续时间约6us,时钟周期约16us,同时在每个
时钟脉冲的第一个跳变沿,MOSI信号发生变化,在时钟脉冲的第二个跳变沿,MOSI上的信号保持不变并被从机采
样,同时数据保持时间大于5us,经过8个脉冲后一个字节的数据被发送完成,CSN片选信号拉高。由此可见程序中编
写的SPI时序符合无线收发模块的要求,可以进一步对无线收发模块进行调试。
图5-1 SPI时序图
其次,对无线发射和接收模块进行了调试,保证了系统的正常通讯。在这一次的调试过程中,对其两个部分模
块分开单独进行调试,首先取消了自动应答模式,然后只是对其进行简单的发送、中断,以及接收、中断的过程。
在此基础上,对于最终是否发送和接受成功,可以通过状态寄存器来查看,本次使用 STATUS和FIFO_STATUS作为主
要的两个寄存器,其主要含义如图5-2以及5-3所示:
图5-2 STAUS寄存器
图5-3 FIFO_STATUS寄存器
首先对发送与接收端的NRF24L01的RX地址,数据宽度,RF频道,波特率以及LNA HCURR进行配置,发送与接收端
均应保持一致,PWR_UP ,CRC配置为失能,发送端增益配置为0dB,低噪声增益开启。
其次,进行发射模块的调试工作,发射模块的工作流程大致为:对寄存器进行配置,使芯片处在发射模式下开
始进行工作,然后将CE端置高不少于10 us,读取状态寄存器STATUS,确定是否是发送完成标志位置位,然后清除标
记位置,再对数据缓冲区进行清除。如果发送数据成功,STATUS状态寄存器的数值则变为0x2e,FIFO_STAUS寄存器
的数值为0x11。
接着开始调试接收模块,该接收模块的工作流程为:首先将寄存器配置为接收方式,随后将CE端提高,延迟不
低于130 us,然后读取STATUS状态寄存器,确定是否接收完毕标志位置位,之后清标志位,读取数据缓冲区中所存
的数据,最后再清除数据缓冲区。
在将无线收发模块与DHT11模块结合之前,先使用无线收发模块在发送端发送固定数据,在接收端将接受数据显
示在LCD1602上,查看发送,接收是否一致,以验证无线收发模块通信是否成功。
DHT11相比NRF24L01模块采用了更简单的单总线时序,根据手册,DHT11在读数据时,首先将DATA拉高,等待
30us,再将DATA拉低20ms,随后再次拉高30us,等待模块将DATA拉低,即可开始读取一个字节数据。读取一个字节
时,首先将DATA拉高,随后等待模块将DATA再次拉低,延时30us,对此时的DATA脚电平进行采样,随后DATA脚将被
再次拉低,依此循环8次,读取一个字节的数值。一次读数将读出4个字节的数据,依次为湿度整数部分以及湿度小
数部分,温度整数部分以及温度小数部分,校验位。若前4字节数据和与校验位一致,此时再将DATA拉低,延时55us
后拉高,则完成一次正确读数。
最后将DHT11模块与NRF24L01模块相结合,将DHT11一次读数的数据暂存于缓冲数组,待发送模块准备就绪依次
送入TX BUF,在接收模块成功读取后,仅需对整数部分字节进行除以10取整,小数部分除以10取余即可得到温湿度
整数、小数部分值,将此值加上0x30即得到对应ASCII码,可直接显示于LCD1602。
5.3测试结果
本系统通过AT89C52单片机作为核心能够完成实时环境的监测。如图5-4所示,在开通电源的情况下实现对环境
中任意一地点的温度和湿度进行监测,经过微控制器的进一步处理,然后通过无线传输模块传送至主控系统,主控
系统通过接受采集到的信号值处理后控制液晶显示器进行实时的显示。
图5-4 系统实物图
第六章 总结
该系统由AT89C52单片机、温湿度传感器DHT11、nRF24L01、LCD1602组成,由温湿度传感器采集和处理数据,然后由nRF24L01无线发射模块传送,接收单元通过nRF24L01从传感器接收到数据后并进行处理,最后将其显示在
LCD1602液晶显示屏上。该装置具有运行简单,操作方便,工作稳定等优点。与传统的温湿度测量相比,它具有很大
的优越性,因为以往的温湿度检测需要用十分复杂的线路把温度和湿度信号转换成数字信号,并且在长距离的情况
下,甚至还需要铺设很多的光缆,这是一种十分繁琐的工作。因此本设计采用了无线通讯传输技术来有效的减少人
力物力去监测温湿度,可以有效地从根源上解决上述问题。
本文首先对整个系统的工作原理进行了分析,并将其分为两大部分:数据采集部分和数据处理部分。根据此次
毕业设计实际所需的功能需求选取合适的主控芯片、温湿度传感器、无线收发传输模块、显示模块等。之后将该系
统分为两大部分,并且分别对其中包含的各个部分的功能特性、内部电路的结构进行了详细的分析阐述,然后根据
设计所需功能,进行了硬件电路原理接线图的设计。在此基础上,进行了系统的软件开发,采用了C语言进行编程设
计,以 C语言为核心,运用了模块化的编程思路,增强了整个程序的易用性,方便了整个软件的调试。在最后对软
件和硬件的综合性能进行了全面的检测。
在本学期的毕业论文中,本次设计主要是在了解电路板的基础上,结合 PCB板的焊接与调试,让本人对于单片
机相关的专业知识、无线收发模块等的构造与功能,有了更为深入而的认识和理解。
在完成这次毕业设计时,通过学习电路设计方面的知识,以及对PCB板的焊接、调试后,使我对单片机有关的专
业知识,无线传输模块等的结构功能有了更加深刻全面的认识和理解。