刘顺财
(1.福州理工学院 计算与信息科学学院,福建 福州 350506;2.福州理工学院 移动通信和物联网福建省高校工程研究中心,福建 福州 350506)
随着嵌入式技术的发展,某些领域需要高精度温控且智能的系统. 文献[1]对烘干产品设计了高精度的温控,测量精度能达到0.1 ℃. 文献[2]为了更好地进行缆接头焊接,设计了基于ZigBee的温控系统,精度能达到0.1 ℃. 文献[3]针对有线局限性,设计了无线的温控系统,精度能达到0.1 ℃. 文献[4]针对养殖场设计了温度监测系统,精度能达到0.1 ℃. 文献[5]为智能家居设计了无线温度监测系统,精度为1 ℃. 文献[6]设计了无线温控系统,精度为±0.5 ℃. 为了满足工业高精度及智能要求,笔者将引入最小二乘法对数据进行补偿,从而提高系统精准度,精度由0.2 ℃提高到0.01 ℃,并引入智能算法使设备控制更加人性化、 智能化.
该系统采用CC2530芯片作为核心控制芯片,在ZigBee技术的基础上,终端采集温度、 气体质量等传感器的数据,引入最小二乘法对温度数据进行补偿,并通过射频天线把采集到的数据转发到协调器; 协调器接收相应的数据,并通过串口通信把数据传输到上位机或Android手机上; 上位机或Android手机上可以实时显示相关的信息,用户也可以通过上位机或Android手机界面按下相应的按钮实现远程控制终端上的继电器,从而实现高精度温度系统. 系统功能图如图1所示.
图1 系统功能图
系统硬件由协调器和终端节点组成,其核心器件是CC2530芯片.
协调器在组网中起到核心的作用,负责启动整个网络. 它选择一个通道和一个PAN ID进行组网,在组网成功之后,还需进行网络管理及维护. 协调器负责把接收终端采集到的数据传递给上位机或Android手机.
终端节点的核心芯片也是CC2530,其在ZigBee协议的基础上选择加入和协调器一样的PAN ID进行组网. 其结合温度传感器和气体传感器进行数据采集,接收协调器广播的控制指令以实现对继电器等设备的控制,进而控制制热设备和制冷设备的运行.
ZigBee内部有三种命令格式:周期性消息、 测量类消息和控制类消息. 周期性消息是指ZigBee内部组网之后,需要发送一些周期性的消息,其可以确保终端和协调器进行正常通信; 测量类消息是指协调器的串口从Android、 上位机软件接收到相应的测量温度、 气体质量的数据的消息; 控制类消息是指当需要控制终端的LED或者继电器上设备时,Android、 上位机或者串口测试软件发送的控制制热设备、 制冷设备和终端上的LED灯的消息.
ZigBee支持开发者自定义相应通信协议数据帧格式. 系统的测量类消息查询帧格式如表1所示、 响应帧格式如表2所示,控制类消息的控制帧格式如表3所示、 响应帧格式如表4所示.
表1 测量类消息查询帧格式
表2 测量类消息响应帧格式
表3 控制类消息控制帧格式
表4 控制类消息响应帧格式
如果响应报文帧数据码为1则操作成功,为0则操作失败. 数据分为高8位和低8位,它们和DS18B20的寄存器位数正好匹配. 功能码如下:01为查询所有终端设备上的传感器数据; 02为查询单个终端设备上的传感器数据; 03为查询单个终端设备上的温度传感器数据; 04为查询单个终端设备上的气体传感器数据; 05为读取单个终端设备上的制热设备数据; 06为读取单个终端设备上的设备制冷数据; 07为控制终端上所有灯,地址等于FF的时候,控制所有终端上的灯,1灭0亮; 08为控制单个终端设备上的制热设备; 09为控制单个终端设备上的制冷设备; 剩余的部分可以根据需要自定义其功能.
终端作为采集端,通过PAN ID找到相应的ZigBee网络并加入,当协调器发送相应的数据帧之后,判断命令是否合法,如果是,判断是测试命令还是控制命令. 如果是测试命令,则终端采集温度、 气体的数据返回给终端; 如果是控制命令,则通过相应的命令控制对应模块上的继电器或者灯,从而控制模块继电器上的制热设备、 制热或者终端的LED灯,并返回成功“1”或者不成功“0”的数据. 终端的软件流程图如图2所示.
图2 终端的软件流程图
终端的智能算法程序如下:设计一个TurnOn[10]的数组用来存储当工作人员按下开启制冷设备时的温度数据. 数组都存满之后,利用冒泡排序算法筛选出TurnOn[10]的最小值min. 当环境温度高于TurnOn[10]温度的最小值时,则开启制冷设备进行自动制冷. 当工作人员按下开启空调的次数达到i(≥10次)以后,则把采集到的温度重新赋值到TurnOn[i%10]中,之后利用冒泡排序算法再次筛选出最小的温度值,仍赋值给变量min. 同理可以利用冒泡算法筛选出TurnOff[10]数组中开启制热设备的最大温度值max,当环境温度低于TurnOff[10]温度的最大值max时,则开启制热设备进行自动制热. 终端具有智能的功能,智能开启制冷设备流程图如图3所示.
图3 智能算法流程图
DS18B20传感器分辨率比较低,且在数据处理过程当中会存在一定的误差. 为了提高精准性,笔者采用分辨率为0.1mK、 高精度的MKT50作为温度测量约定真值,并使用最小二乘法对采集数据进行补偿,以达到提高系统精准度的目的,该系统得到未加入最小二乘法的数据如表5所示.
表5 DS18B20测量数据值
考虑到应用需求与精度,选择二次多项式作为目标函数:
y=Ax2+Bx+C
(1)
其中y为真实值,x作为待测值,A、B、C为测量系数. 根据最小二乘法的拟合原理[7],利用MATLAB的polyfit函数求出最小二乘法拟合的目标函数如下:
y=0.000 1x2+0.972 3x+0.432 6
(2)
得到目标函数后,重新测量值(经过最小二乘法拟合后的值)如表6所示.
表6 目标函数下测量数据值
从表5和表6中比较得出:在引入最小二乘法拟合目标函数后,最大误差由0.476 5 ℃降低到0.089 5 ℃,即分辨率由0.2~0.5 ℃提高到0.01~0.09 ℃,实现了误差大幅度降低,分辨率大幅度提高.
PC上位机是实现ZigBee和上位机通信的界面交互软件. 协调器通过串口与上位机相连,接收数据并显示出来. 使用时,选择连接协调器的串口通信,输入内网电脑的IP地址,点击登录之后,即可正常联网,系统可以显示每个模块的温度以及气体是否正常,也可显示一段时间的温度曲线. 上位机可以控制终端继电器和LED. 当然,只有上位机启用网络连接,Android才能访问无线传感网络的设备.
Android软件作为移动数据显示端,可以显示每个终端的温度和气体质量,从而可以控制终端的继电器和LED灯等设备. Android软件和上位机联网成功后,将查询命令或者控制命令通过串口发送给协调器. Android软件采用的是基于TCP/IP协议的Socket通信机制. 当连接上位机后,开启新线程,并创建输入输出流,以发送与接收数据. 当接收到数据时,通过handle程序把数据发送给主线程并刷新显示在Android软件的主界面[8]. 之后可在Android程序中设置按键事件监听器,当按键被按下时,通过子线程把测量或者控制数据帧发送出去,并可通过返回值判断数据是否发送成功.
把编译好的ZigBee程序下载到协调器和不同的终端上,测试是否能够正常显示. 通过显示屏可以观察协调器和终端是否正常通信. 如果正常通信,则协调器上显示ZigBee Coord,终端上显示EndDevice; 反之,显示Failed.
对于上位机数据测试,当ZigBee与串口测试完成之后,打开上位机,连接协调器的串口号,点击打开串口,查看电脑的本地IP地址(测试计算机的IP是192.168.2.145),点击启动网络服务,并选择手动刷新数据. 如果数据正常,则可以看到上位机显示各个终端的温度以及气体,LED灯亮/灭等信息,并可以通过上位机控制终端上的制热、 制冷设备以及LED灯. 此外,还可以实时显示不同时刻的温度曲线,数据界面如图4所示.
图4 上位机显示数据界面
内网访问测试:打开Android,点击网络设置,设置好内网IP地址(必须和电脑的IP地址192.168.2.145一样),网络正常会返回各个终端的温度,气体是否正常和各个终端的灯亮/灭等信息,此外还可以打开或关闭制冷设备、 制热设备和LED等. 显示界面如图5所示.
图5 Android端显示数据
外网访问测试:打开网页,输入192.168.2.1,输入路由密码. 点选择转发规则下的虚拟服务器,配置好IP地址(192.168.2.145)和端口号(33333). 之后打开Android,点击网络设置,设置好外网地址(本地的外网地址为112.49.84.255). 经测试,可以通过Android远程控制及显示ZigBee上的设备.
将制冷设备设置成17 ℃. 当室内温度为30 ℃、 31 ℃、 30 ℃、 30 ℃、 31 ℃、 32 ℃、 33 ℃、 31 ℃、 30 ℃、 30 ℃的时候,分别开启制冷设备. 开启次数为10次,当室内温度超过30 ℃时,制冷设备能智能开启. 相应地,制热设备也可以智能开启.
系统将ZigBee、 上位机、 Android、 智能算法和最小二乘法拟合目标函数,组成了基于ZigBee的智能高精度温度系统. 经测试,上位机和Android接收和发送数据都能够快速地响应,可以准确显示终端传感器数据、 温度曲线以及气体正常/异常、 LED灯亮/灭. 终端使用DS18B20传感器进行采集,并加入智能和最小二乘法算法,最大误差由0.476 5 ℃降低至0.089 5 ℃,系统精度得到了显著的提高,精度由0.2~0.5 ℃提高到0.01~0.09 ℃,误差实现了大幅度降低,分辨率也实现了大幅度提高,终端具有智能温控功能,可以满足智能高精度温控系统的要求,具有确实可行的应用前景.