祖一康,徐妙婧
( 1.黄冈师范学院 机电工程学院,湖北 黄冈 438000;2.黄冈师范学院 电子信息学院,湖北 黄冈 438000)
基于单片机和nRF905的多点温度无线采集系统
祖一康1,徐妙婧2
( 1.黄冈师范学院 机电工程学院,湖北 黄冈 438000;2.黄冈师范学院 电子信息学院,湖北 黄冈 438000)
文中基于STC89C52RC单片机和nRF905模块设计了一个多点温度无线采集系统,该系统由多个温度采集节点和一个接收节点组成。采集节点利用数字温度传感器DS18B20采集环境温度,采用LCD1602显示温度值;接收节点采用带中文字库LCD12864显示各采集节点发送的温度值;采集节点与接收节点间通过nRF905模块无线通信。接收节点通过串口将温度值发送到上位机,上位机采用Visual Basic 6.0编写温度显示界面。给出了系统的硬件和软件设计方法,并通过实验对系统进行了验证,结果表明,系统能实现对多点温度的采集和显示。
单片机;nRF905模块;温度采集;无线通信
温度是一个重要的物理量,也是一个重要的被控制量,例如重要实验室、大棚、粮库等都需要对温度进行实时采集和控制[1-2]。在现实中温度的采集往往不仅采集某一点的温度,而是采集多个点的温度。传统的有线通信除了容易产生电磁干扰影响测量数据的准确性外,也存在布线复杂、成本高等缺点,无线通信电路简单、成本低、省去布线且维护方便,无线通信越来越多的应用到了工业控制和现场检测等领域[3-4]。文中采用数字式温度传感器DS18B20采集温度值,以STC89C52RC单片机、nRF905模块、LCD1602、LCD12864和Visual Basic 6.0构建了多点温度无线采集系统。
多点温度无线采集系统总体架构如图1所示。系统由温度采集节点和接收节点组成,可分为温度采集模块、显示模块、无线通信模块以及上位机远程显示模块。采集节点通过温度传感器DS18B20采集温度值,采用LCD1602显示温度值,接收节点采用LCD12864显示温度值,采集节点和接收节点间采用nRF905模块通信,接收节点通过串口与上位机通信,上位机采用Visual Basic 6.0编写温度显示人机界面,通过人机界面可选择观测任意点的温度值和温度变化情况。
图1 系统总体架构
2.1 温度采集与显示电路
采用美国Dallas公司生产的单总线数字式温度传感器DS18B20,测温范围-55~125 ℃[5]。文中选用3引脚To-92封装的DS18B20,其与单片机连接如图2所示。DQ引脚与单片机P1.6引脚相连接,并且接4.7 kΩ的上拉电阻。
图2 DS18B20与单片机引脚连接图
采集节点的温度显示采用LCD1602,LCD1602是字符型液晶显示器,可显示2行,每行16个字符。其与单片机引脚连接如图3所示,控制引脚RS、R/W、E分别与单片机的P1.0、P1.1、P1.2引脚连接;数据引脚DB0~DB7与单片机的P0口连接。
图3 LCD1602与单片机引脚连接图
接收节点的温度显示采用带中文字库的LCD12864,LCD12864既可以显示字符也可以显示汉字,具有128列,64行,内含8 192个16×16点阵汉字以及128个16×8的点阵字符[6]。其与单片机引脚连接如图4所示,控制引脚RS、R/W、E、RESET分别与单片机的P1.0、P1.1、P1.2、P1.4引脚相连接,数据引脚DB0~DB7与单片机的P0口连接。
图4 LCD12864与单片机引脚连接图
2.2 nRF905通信模块电路
nRF905是挪威Nordic公司生产的一块低功耗无线通信芯片,其工作电压为1.9~3.6 V,可工作在433 MHz,868 MHz和915 MHz共3个频道,频道间转换时间<650 μs[7]。nRF905模块是在nRF905芯片基础上开发而成,共有14个引脚,具有掉电、空闲、接收和发送4种工作模式。14个引脚功能和4种工作模式设定见文献[8]。
因nRF905芯片的最高工作电压为3.6 V,而单片机的工作电压为5 V,所以nRF905模块引脚不能直接连接,需要进行电压转换。采用AMS1117-3.3芯片将5 V电压转换为3.3 V[9-10],给nRF905模块供电。nRF905模块与单片机引脚的连接如图5所示。
图5 nRF905模块与单片机引脚连接图
软件设计是在硬件基础上编写程序实现系统功能,系统软件设计包括温度检测与显示程序、nRF905通信程序和上位机显示程序等。系统软件设计基本思路为:(1)发送部分。为每个温度采集节点分配地址,例如:1号节点为0x01,2号节点为0x02等,各温度采集节点利用DS18B20采集温度值,LCD1602第一行显示节点编号,第二行显示温度值;(2)接收部分。定义一个结构数组用于存放节点编号和温度值,采用LCD12864显示各节点名称和相应的温度值;(3)接收节点与上位机采用串口通信,上位机通过串口向接收节点发送节点编号,接收节点收到后,发送该节点的温度值到上位机。系统的主程序如图6所示。
图6 系统的主程序图
3.1 温度采集与显示程序
DS18B20工作时对时序要求严格,包括初始化时序、写时序和读时序[11]。从DS18B20读取的温度存放在整型变量temp中,待显示的温度需分解为单个字符以ASCII码的形式在LCD1602和LCD12864上显示,分别定义变量qian、bai、shi、ge用于存放。具体实现如下:
qian=temp/1 000+0x30 ∥千位ASCII码
bai=(temp%1 000/100)+0x30 ∥百位ASCII码
shi=(temp%100/10)+0x30 ∥十位ASCII码
ge=(temp%10)+0x30 ∥个位ASCII码
如果实际温度中千位为0、百位不为0时,千位的0不显示;如果实际温度中千位与百位同时为0时,两位的0都不显示。
3.2 nRF905通信程序
nRF905通信包括发送和接收两部分。nRF905采用SPI接口与微控制器通信,STC89C52RC单片机没有SPI接口,通过普通I/O口模拟SPI,编写程序模拟SPI时序。
nRF905发送流程为[12-13]:(1)把要发送的数据传给nRF905;(2)引脚TRX_CE=1和TX_EN=1,启动发送模式,发送数据;(3)当TRX_CE=0时,发送完成,进入空闲模式。
定义一个常量NUM用于存放温度采集节点的地址,通过修改NUM值就可以修改采集节点的地址,nRF905寄存器配置参数如下:
unsigned char nRFConfig[11]={0x00, ∥配置命令
0x4c, ∥配置在433 MHz频段
0x0c, ∥输出功率为10 dB,正常模式,不重发
0x44, ∥地址宽度为4 Byte
0x04,0x04, ∥接收、发送有效数据宽度为32 Byte
0xCC,0xCC,0xCC,NUM, ∥接收地址
0x58,}; ∥CRC允许,8位CRC校验,输出4 MHz,没有外部时钟
定义发送缓冲区TxBuffer[3],用于存放待发送的数据,具体实现如下:
TxBuffer[0]=temp/10; ∥存放温度值的千位百位和十位
TxBuffer[1]=temp%10; ∥存放温度值的个位
TxBuffer[2]=NUM; ∥存放采集节点地址编号
nRF905接收流程为[12-13]:(1)当引脚TRX_CE=1和TX_EN=0时,进入接收模式;(2)650 μs后,nRF905不断监测,等待接收数据;(3)当nRF905监测同一载波频率时,CD=1;(4)当接收到相匹配地址时,AM=1;(5)接收数据完毕后,DR=1;(6)引脚TRX_CE=0,进入空闲模式;(7)单片机以一定的速率通过SPI口读取数据;(8)所有数据接收完后,DR=0,AM=0。
定义一个结构数组用于存放温度采集节点编号和温度值,假设有4个温度采集节点,定义如下:
typedef struct rec{unsigned char num; ∥节点编号
unsigned int temp;} nRFrec; ∥节点温度值
nRFrec rxdata[4]; ∥定义用于存放4个节点编号和温度值的结构数组
定义发送地址数组并将初始值设定为地址编号为0x01的采集节点,具体定义如下:
unsigned char nRF905_TxAddress[4]={0xCC,0xCC,0xCC,0x01},通过改变发送数组第3位的值,可以获得不同采集节点的温度值。
定义接收缓冲区nRF905_RxBuf[3],用于存放接收到的数据,具体实现如下[14]:
void rec_data( )
{
static unsigned char i=0; ∥节点个数
static unsigned char count=0; ∥主程序循环次数
if(count==200)
{
count=0;
nRF905_Rx( ); ∥调用接收函数
rxdata[i].temp=nRF905_RxBuf[0]*10+nRF905_RxBuf[1]; ∥接收到的温度值
rxdata[i].num=nRF905_RxBuf[2]; ∥接到的采集节点地址编号
i++;
if(i==4) i=0;
nRF905_TxAddress[3]=i+1; ∥改变地址值,获取下一个节点温度值
……
}
3.3 上位机程序设计
上位机采用Visual Basic 6.0编写,采用MSComm控件实现串口通信功能[15]。采用定时器定时,每隔一定的时间读取串口缓冲区的数据,程序实现如下:
Dim temp as Integer
Private Sub Timer1_Timer( )
If MSComm1.InBufferCount = 4 Then
temp = Val(MSComm1.Input) ‘接收串口温度值
Text1.Text = temp / 10 ‘温度值显示
End Sub
以2个温度采集节点和1个接收节点为例,对系统进行验证。采用Keil μVision 4编写温度采集节点和接收节点程序,编译成hex文件后下载到单片机中,与上位机一起联合调试,运行结果如图7所示。
图7 系统运行结果
在图7中,在串口设置中选择串口号,点击“打开串口”,指示灯变为绿色,则串口打开,否则报错;在节点选择中选择想要观测的节点;输入温度报警的下限和上限;点击“启动”按钮,上位机向温度采集节点发送所选择的节点编号;温度值以数组和曲线的形式表示;温度值在温度报警值范围内的,过高和过低指示灯为绿色,当接收到的温度值小于温度报警下限,则过低指示灯变为红色,反之,则过高指示灯变红色;点击“停止”按钮,上位机向接收节点发生送0x00,接收节点收到后停止发送温度值;点击“退出”按钮则退出温度采集系统。
基于单片机和nRF905模块设计了多点温度无线采集系统,系统由温度采集节点、接收节点和上位机构成,节点间采用nRF905模块通信。实验结果表明,系统结构简单、扩展性强、操作方便,能够实现对多点温度的无线采集,具有较好的应用价值。
[1] 祖一康,徐妙婧.一种基于单片机和VB的多点温度监测系统设计[J].长江大学学报:自然科学版,2014,11(19):50-53.
[2] 徐宏宇,沈煌飞.基于STM32的多点温度检测系统设计[J].电子科技,2016,29(5):158-161.
[3] 陈永阳,司永杰,艾树峰,等.基于nRF905的嵌入式多点数据采集系统设计[J].电讯技术,2013,3(10):1384-1388.
[4] 彭波,文方,孙国梅.基于nRF905的无线网络在温度测控中的应用[J].传感器世界,2013(9):22-26.
[5] 王静霞.单片机应用技术:C语言版[M].北京:电子工业出版社,2009.
[6] 祖一康,徐妙婧.基于STM32的温湿度采集系统设计[J].黄冈师范学院学报,2015,35(6):60-63.
[7] 谈敏.基于nRF905的无线嵌入式温度监测系统设计[J].信息化研究,2015,41(2):66-70.
[8] 欧幸福,陈文凤,李秀忠,等.基于nRF905无线通信系统的时间[J].黑龙江科技信息,2015(22):162-163.
[9] 魏芬,季宇峰.基于无线传感网的温室大棚智能监控系统的研究[J].测控技术,2016,35(2):104-107.
[10] 雷子浩,张丽艳,费继友,等.基于nRF905的无线温度测量系统设计[J].大连交通大学学报,2014,35(2):108-111.
[11] 陈海松.单片机应用技能项目化教程[M].北京:电子工业出版社,2012.
[12] 戴丽佼,刘焘.基于nRF905无线模块的温度采集系统设计[J].现代电子技术,2015,38(3):20-22.
[13] 龚鼎,艾青,刘刚.温室环境多点无线传感网络监测系统的设计[J].湖北理工学院学报,2015,31(3):22-25.
[14] 瓮嘉民,周成虎,杜大军,等.单片机典型系统设计与制作实例解析[M].北京:电子工业出版社,2014.
[15] 李江全,魏中岩,姚帅,等.单片机通信与控制应用编程实例[M].北京:中国电力出版社,2012.
A Multi-point Temperature Wireless Acquisition System Based on the Single Chip Microcomputer and nRF905 Module
ZU Yikang1, XU Miaojing2
(1.School of Mechanical and Electronic Engineering, Huanggang Normal University, Huanggang 438000, China;2.School of Electronic and Information Engineering, Huanggang Normal University, Huanggang 438000, China)
A multi-point temperature wireless acquisition system based on STC89C52RC MCU and nRF905 is designed. The system consists of a number of temperature acquisition nodes and a receiving node. The acquisition node uses the digital temperature sensor DS18B20 for collecting temperature, and the LCD1602 for display of the temperature value; the receiving node adopts LCD12864 with Chinese font to display the temperature value from the acquisition nodes; the acquisition node and receiving nodes communicate vie the nRF905module. The receiving nodes send the temperature value to the host computer through the serial port. The host computer uses Basic6.0 Visual to prepare the temperature display interface. The hardware and software design of the system is given, and the system is verified by experiment. The results show that the system can realize the collection and display of multi-point temperature.
single chip microcomputer; nRF905 module; temperature acquisition; wireless communication
2016- 09- 14
黄冈师范学院科研基金(2014022603)
祖一康(1984-),男,硕士,讲师。研究方向:网络化控制等。徐妙婧(1984-),女,硕士,讲师。研究方向:智能检测与控制。
10.16180/j.cnki.issn1007-7820.2017.07.027
TP274+.2
A
1007-7820(2017)07-099-05