林开司 张 露 邢兵锁
(铜陵职业技术学院电气工程系, 安徽 铜陵 244000)
工农业生产和科学实验及医疗、气象服务等众多领域都会用到温度和湿度监控技术。现有的温湿度监控系统多以单片机为控制核心,单片机除了控制传感器采集温湿度信息,还要进行数据的分析处理与显示,存在软件编程复杂、硬件设计不易和系统扩展应用不够理想等问题。随着计算机软件技术的发展,可将单片机技术和软件技术相结合来进行温湿度检测与控制,这样既可节约资源,又便于计算机控制[1]。
Visual Basic 6.0 是微软开发的一种通用的基于对象的程序设计语言[2]。我们设计了一种基于单片机和VB6.0的温湿度监测系统:单片机对温湿度传感器采集的温湿度信息,通过串口发送给上位机,上位机再利用VB6.0编程分析和处理数据。该系统可实时测量并显示环境的温湿度,绘制并呈现温湿度随时间变化曲线,在实时温湿度超过设定值时会发出报警信号。
设计的温湿度监测系统,硬件部分包括温湿度传感器STH11、STC89C52RC单片机、LCD1602液晶和安装了VB6.0软件的PC机(见图1)。采用SHT11温湿度传感器对被测环境进行温湿度测量,在字符型液晶显示器LCD1602上显示温湿度,利用单片机将测量的温湿度信息通过串口发送给上位机(PC机),PC机通过VB程序读取温湿度信息,同时对信息进行实时显示、绘制温湿度走势图、设置上下限并进行超限报警。
图1 温湿度监测系统的硬件
SHT11是瑞士Sensirion(盛世瑞恩)公司推出的二线制接口型温湿度传感器,可输出经过校准的温湿度数据。SHT11具有超小型、高精度、自校准、多功能和智能化的特点,得到广泛应用。SHT11的温度测量范围为-40 ℃~+123.8 ℃,测量精度为±0.4 ℃,分辨率为0.01 ℃;相对湿度的测量范围为0~100%RH,测量精度为±3%RH,分辨率为0.03%RH。SHT11与单片机的连接比较简单,如图2所示[3],将DATA和SCK与单片机的I/O口相连即可。
系统前端由SHT11、LCD1602和单片机最小系统构成。单片机对SHT11采集的温湿度信息,在本地LCD1602上实时显示,同时通过串口向PC机发送。常用的串行通信接口有RS-232、RS-422和RS-485等。在通信距离30 m以内,抗干扰能力要求不高的情况下,可采用RS-232。在本系统中采用RS-232。采用Protues软件仿真,仿真硬件电路如图3和图4所示。
图2 SHT11与单片机的连接电路
COMPIM是Protues中非常重要的虚拟元件。COMPIM建立起一个映射,把仿真电路中的数字量映射到计算机的物理端口。单片机的TXD和RXD与COMPIM相连接,就可以直接操作映射到物理端口。需要注意的是,TXD和RXD两根信号线是直通方式连接,而非交叉。由于单片机是TTL电平,串口是RS-232电平,两种电平互不兼容,两者直接对接时必须进行电平转换。本系统采用MAX232芯片进行电平转换[4]。
图3 液晶显示仿真电路
图4 RS-232串口通信仿真电路
需要设计的软件包括单片机程序和PC机上的VB程序。
单片机程序采用C语言编程,主要功能包括SHT11温湿度数据采集、温湿度信息液晶显示和利用串口通信将温湿度信息发送给上位机。SHT11程序流程图如图5所示。
VB程序主要是利用串行通信控件MSComm实现与单片机的串行通信。利用MSComm控件中的Input和Output属性,完成串口对信息的接收和发送。除了串行通信外,程序还要具有以下功能:对单片机发送的温度信息进行实时显示;绘制随时间变化的温湿度曲线图;在Text文本控件中逐条打印温湿度信息;如果采集的温湿度信息超过设置值的上下限,则通过shape控件发出报警信号。
2.2.1 串口通信初始化
串口通信首先要设置通信端口,然后设置波特率。通信端口可以根据实际端口进行选择。这里将波特率设置为9 600 b/s,8位数据位,没有奇偶校验位,1位停止位。波特率、数据位、奇偶校验位和停止位,都可以在程序对话框中根据实际测试情况进行选择。初始化代码为:
MSComm1.CommPort=1
MSComm1.Settings=“9600,n,8,1”
MSComm1.InputMode=comInputModeText
MSComm1.PortOpen=True
MSComm1.InputLen=1
MSComm1.SThreshold=1
通过Settings属性设置通信波特率为9 600 b/s、没有校验位、8位数据位和1位停止位。InputLen表示Input属性从接收缓冲区读取的字符数,该属性值为0时表示读取缓冲区的全部内容。这里将其设置为1,表示每次读取1个字符。读取数据的类型(InputMode)设为文本(Text)。Sthreshold表示OnComm事件产生之前在传输缓冲区中的最小字符数,这里设为1。
图5 SHT11程序流程
2.2.2 定时器事件处理
VB中的定时器控件Timer是一个在程序运行时不可见的控件,它有一个重要属性,就是时间间隔属性(Interval属性)。时间间隔属性以ms为单位,取值范围为0~65 536 ms。具体取值为多少,用户可通过属性窗口中的Interval文本框进行设置。程序运行时,每隔一定时间执行一次Timer事件中的相应代码。这里的一定时间,由Interval属性设置。本系统设置的时间间隔为200 ms,即每隔200 ms接受一次串口数据。
单片机向PC机发送的温度数据格式为:1位符号位“+”或“-”号,2位整数位,1位小数点位,1位小数位,结束符为1位空格位,共6位;发送的湿度数据格式为:3位整数位,1位小数点位,1位小数位,结束符为“%”(采用相对湿度单位),一共也是6位数据。为解决单片机发送数据与VB定时器事件扫描串口接收数据的同步问题,每次以“+”或“-”为有效数据接收的开始位,以“%”为一次温湿度数据接收的结束位。也就是一共12位,每12位为一组温湿度信息,当检测到有效数据的标志位后,nCount记为0。代码为:
If buf = "+" Or buf = "-" Then
nCount = 0
End If
nCount = nCount + 1
If nCount = 13 Then
nCount = 1
End If
2.2.3 温湿度变化曲线
以横坐标表示时间值,以纵坐标表示采集的温湿度值,纵横相交就构成一系列的点。用line方法将这些点连接起来,画出温湿度随时间变化曲线。实现代码为:
Picture1.Line (x- 1,y)-(x,y0), RGB(255, 0, 0) ‘画温度曲线
Picture2.Line (x- 1,y1)-(x,y2), RGB(255, 0, 0) ‘画湿度曲线
其中,x为横坐标,y、y1分别表示温度和湿度前一时刻纵坐标,y0和y2分别表示温度和湿度当前时刻纵坐标。RGB函数设置曲线的颜色,这里设为红色。
实现Protues仿真硬件和PC机的串行通信,须使用虚拟串口。系统测试使用Virtual Serial Port Driver 6.9虚拟串口软件,建立一对虚拟串口COM1和COM2。设置单片机为串口COM2,VB为串口COM1。温度和湿度上限初值都设为100,下限初值都设为0。运行过程中,可以随时重新设置温湿度上下限值。程序运行结果如图6所示。
实验结果显示,通过配置通信窗口、设置通信端口和数据格式,然后点击打开串口,便可启动串口接收来自单片机发送的数据。系统能实时显示SHT11采集的温湿度信息,画出温湿度随时间变化的曲线。可以通过文本框随时设置温湿度上下限值。实际温湿度超过设定的上下限值时,报警灯由绿色变成红色,显示报警。另外,温湿度信息还通过数据接收窗口逐条显示出来。点击退出系统按钮,便可退出系统。
图6 VB运行结果
现有温湿度监测系统多以单片机为控制核心,单片机在进行温湿度数据采集的同时,还要进行数据的分析处理,存在编程复杂、硬件应用不够等问题。本次研究设计的温湿度监测系统,是在VB6.0环境下利用MSComm控件接收来自单片机发送的温湿度信息,可对接收到的数据信息进行实时显示和记录,并在实时温湿度超过设定值时发出报警信号。系统中单片机的作用只是控制SHT11采集环境温湿度信息和通过串口发送数据,而对温湿度信息的监测和报警控制则由VB程序处理。仿真实验结果表明,该系统能实现所设计的功能。