微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 基于ZigBee的无线温度监控系统的设计

基于ZigBee的无线温度监控系统的设计

时间:01-24 来源:互联网 点击:

时存在一条总线上,实现多点测温,由ROM读取操作来判断选择某点的DS18B20温度数据。在9字节RAM单元中,字节0-1是温度寄存器,用来保存转换好的温度,共16bits。其中,bit0-bit7为LSB,分别保存权值为2-4至23的数据;bit8-bit15为MSB,bit8-bit10保存权值为24至26的数据,bit11-bit15为符号位,DS18B20的分辨率为0.0625,温度计算公式为:temperature=(MSB+LSB)×256x0.062。DS18 B20内部还有2个E2PROM字节TH和TL,用于配置温度最高界限和温度最低界限,用户通过设置这2个寄存器的值可以设定温度报警的上下限。
3.2 单片机控制系统
单片机控制系统使用Atmel公司的ATMega16L芯片作为主控芯片,实现温度数据的采集、串行数据的发送与接收,以及根据上位机的设定温度和当前温度比对结果做出加热或降温响应。数据传输和温度信号采集部分的主要程序如下。
1 UART数据接收模块

利用单片机内部自带的接收中断来完成数据接收模块。在此之前,需要对UART寄存器进行如下配置:异步模式、8位数据位、无校验位、1位停止位。波特率设置函数为:UBRRL=(CRYSTAL/BAUD/16-1)%256和UBRRH=(CRYSTAL/BAUD/16-1)/256。
2 UART数据发送模块

当系统调用字符发送函数时,会先判断发送寄存器是否为空,如果为空,则函数会向UART的I/O数据寄存器UDR写入待发送的字符,格式为char型(8bits)。单片机接收到来自DS18B20的温度数据,分别取出温度的整数位和小数位,添加小数点后,将所有的整数位和小数点后两位数据发送给UART。温度数据以字符数组的形式保存,因此发送时以字符串的形式发送数据。
3.DS18B20温度数据接收模块

完成对DS18B20的报警温度的设置和当前温度的读取。单片机与DS18B20的通讯,一般需要经过3个步骤:(1)DS18B20复位;(2)执行ROM指令,对于总线上挂接多个DS18B20的情况,通过读取ROM里的序列号来匹配某个DS18B20,否则可以直接跳过ROM指令(0XCC);(3)执行DS18B20功能指令(RAM指令)。DS18B20有2个常用的功能指令:0x44:开始转换温度,转换好的温度会储存在暂存器字节0和1;最小频率不得小于750ms。0xBE:读RAM指令,依次读取RAM的9个字节的数据。DS18B20复位可以终止此进程。

4 上位机GUI监控模块
该模块是基于WINDOWS系统开发的上位机程序,通过系统预设的API函数与主机RS232底层端口进行通讯和捕获用户输入。用户可以通过用户UI界面自行设定预设温度值,通过主机RS232端口发送至ZigBee模块;ZigBee模块将接收来自ROUTE终端节点的温度信息,并反馈至上位机程序。用户界面的设计采用跨平台的图形用户界面应用程序QT软件,采用第三方开源qextsertalport类,对串口进行读写操作。在WINDOWS下,需要使用其中的6个文件:qextserialbase.cpp和qextserialbase.h,qextserialport.cpp和qextserialport.h,win qextserialpo rt.cpp和win qextserialport.h定义的API接口函数,具体如下。
4.1 建立串口
serialPort=new ManageSedalPort;
connect(serialPort,SIGNAL(newDataReeeived(const QByteArray)),this,SLOT(slot_new DataReceived(const QByteArray)));
基于ManageSerialPort类新建一个串口对象serialPort,包含对串口名、波特率、数据位、起始位、停止位、校验位等变量的定义以及设定这些变量的相关函数。第二条语句是一个信号连接槽的函数,将serialPort的信号SIGNAL与槽SLOT相连接,在这种情况下,每当发送这个信号的时候,就会自动调用这个槽。
4.2 打开串口

包括了对串口常用参数:串口名、波特率、数据位、起始位、停止位、发送接收使能等的设置。
4.3 发送数据
serialPort->scndData(temp);
调用对象sendData,将变量temp的数据通过串口RS232发送。通过返回值来指示发送状态:1表示数据发送成功;2表示未打开串口;3表示发送使能但无发送数据。主要用于发送预设温度值,UI界面接收到用户设定的预设温度后,将其保存,并在用户按下发送按钮后,将数据通过RS232串口发送给ZigBee模块。
4.4 接收数据
QString decodedStr=in.readAll();
这里rcadAll()函数是使用在槽slot_new DataReceived(const QByteArraydataReeeived)中负责对数据接收的操作函数,由于之前在串口定义时,已经将信号与槽函数关联,因此,当串口缓冲区有数据时,会自动调用此槽函数,进行读串口操作,并通过readAll()函数读取串口缓冲区数据(即来自单片机DS18B20的温度数据),给临时变量decodeStr。
4.5 串口关闭操作
serialPort->close(); -调用close()子函数关闭串口对象
设计后的用户UI界面如图5所示,左部分为通信串口的设置,串口和波特率均可调整,默认使用COM1、38400波特率;中部为系统预设温度;右部为系统数据返回,当接收到来自串口的温度数据后,欢迎界面将显示系统当前温度。

5 结语
基于ZigBee模块设计的无线温度监控系统,具有ZigBee技术的低复杂度、低功耗、低成本等优点,同时由于ZigBee模块的高集成化,用户不需要了解复杂的ZigBee协议,所有的ZigBee协议的处理部分,在ZigBee模块内部自动完成,用户只需要通过串口传输数据即可,研发周期短,满足了产品快速入市,适应市场快速变化的需求,通过分置在多个地点的ZigBee温度采集模块,可以方便的实现多点分布式温度信号的采集。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top