基于物联网技术的无线多路温度采集系统设计
2018-08-23杨剑锋丁中涛
冉 述,曾 维,杨剑锋,杨 雪,丁中涛,谭 浩
(成都理工大学 信息科学与技术学院,四川 成都 610000)
0 引言
在城市信息化浪潮与数据科学崛起的共同推动下,智慧城市开始在全球范围内成为未来城市发展的新理念与新实践[1],物联网技术是智慧城市获取数据和控制设备不可或缺的手段;而温度这一物理量无处不在、无时不在。将温度用电子技术和计算机技术数字化,并借助于计算机网络实现远程监测、甚至大数据分析,对各行各业,尤其是智慧城市、工业智能都有积极意义。
目前,测量方法和数据的传输方式多样,测温方法主要有:① 热电效应测温,利用这种方法的温度传感器主要是热电偶,发展较早,技术较为成熟,至今仍是应用最广泛的温度传感器,其弊端是线性度不佳,参考端需要温度补偿[2]。② 热阻效应测温,利用感温元件电阻随温度变化的特点,达到温度检测目的。这类元件如镍、铂电阻,陶瓷热敏电阻等,其优点是耐高温、稳定性好,弊端在于随着传输线路长度的改变需要温度补偿。物联网传输数据方法主要有:ZigBee无线传感技术[3],传输距离远、网络拓扑能力强、功耗低,缺点在于需要专用的硬件设备和软件系统,开发难度大,开发周期长,成本高,穿透能力差。WiFi无线数据传输[4],普及率高,能直接联通互联网,传输速率快,可靠性好,无线网络的搭建简单,缺点是功耗较大。
为了适应温度监测环境的多样、多变、复杂,本文设计了基于WiFi(Wireless Fidelity)的多路温度采集系统[5-6]。WiFi是一种短程无线传输技术,传输速率高,在信号较弱和有干扰时,可调整带宽,能有效地保障数据传输的稳定性和可靠性。WiFi局域网普及率高,搭建和拓展简单,只需要将传感器节点接入WiFi局域网即可实现无线传感网络的建设,比起传统的无线传感网络需要各种专用的硬件、软件,大大降低了成本。
1 系统设计
本设计核心处理器为乐鑫信息科技公司专为移动设备、可穿戴电子产品和物联网应用设计的高性能无线SOC─ESP8266EX[7-10],如图1所示,所有传感器节点通过WiFi连接到无线路由器,与计算机组成局域网,在局域网内计算机的上位机软件(数据显示、分析软件)搭建SERVER,传感节点通过TCP/IP协议连接到计算机并向计算机POST设备ID、时间和温度数据。同时计算机将显示和保存这些数据,并能够通过上位机软件分析这些数据。
在能接入互联网的情况下,传感节点向局域网发送数据完成后,建立与云服务器(YeeLink)的TCP/IP连接,并向其POST数据。
手持设备和计算机可以在任意有网络的地方,连接到云服务器查看所有传感节点的数据。
图1 系统设计结构
传感节点设计如图2(a)所示,其中数字温度传感器选用DS18B20,用作热电偶参考端温度补偿;信号放大、滤波、ADC转换;整个传感节点开发阶段采用Micro USB接口供电,批量生产可用3节1.5 V干电池供电,经降压、稳压芯片ASM117-3V3和滤波电路后,为ESP8266-12E提供稳定的3.3 V直流电压;另外,ESP8266-12E通过USB转串口芯片CH340与计算机连接仅用于开发阶段的固件烧录和调试。实物图如图2(b)所示。
图 2 传感节点设计与实物
2 温度采集设计
热电势由两部分组成:帕尔帖(Peltier)效应产生的接触电势和汤姆逊(Thomson)效应产生的温差电势[11-12]。总电动势与电子密度和接触点的温度有关,当材料一定时,电子密度随温度的变化而变化,所以总电势可看作温度T和T0的函数差,即:
EAB(T,T0)=f(T)-f(T0)。
(1)
当冷端温度固定式f(T0)成为常数,对确定的材料,其总电势就只与热端温度有关,于是可以通过测量总电势来得到热端温度T的值。根据测温范围和成本,本设计选用上海自动化仪表三厂生产的WRNT-1热电偶,标准K型热电偶,测量范围为0~600 ℃。选用德州仪器(TI)公司的运放芯片LM321作为该部分电路的核心器件,它是一种单通道、高性价比的解决方案,具有杰出的电源利用效率和速度,拥有1 MHz的带宽和0.4 V/μs的转换速率,主要应用于低电压(2.7~5.5 V)、体积要求严格的场合。查K型热电偶分度表得,0~600℃时热电偶的输出电势为0~24.905 mV,ADC的测量范围为0~1 V,所以设计的信号放大倍数约为40倍。考虑到使用环境的干扰情况,低通滤波器截止频率设计约为50 Hz。电路原理如图3所示。
图 3 弱电信号放大电路图
其中,放大倍数:
(2)
低通滤波器的截止频率:
(3)
采用ESP8266集成的ADC,该ADC精度为10 bit,模拟输入电压范围为0~1 V。具有2种功能,测量VDD3P3的电源电压和测量TOUT管脚6的输入电压,在这里测量TOUT管脚6的输入电压。其实现方法如下:电源电压使用经过稳压滤波的3.3 V电压;设置vdd33_const值为33,范围:18~36;使用系统接口编程,其函数接口为uint16 system_adc_read(void);返回TOUT管脚6的输入电压,单位:1/1 024 mV。需注意:在ESP8266发包时不可使用ADC,否则将会导致电压值的不准确。
由于ADC测量的是放大后的电势,所以需要工程量变换,将ADC测得的电压值还原为具有意义的量纲:
(4)
式中,Ymax、Ymin为被测温度电势的上下限;Nmax、Nmin为ADC的上下限,Yx为ADC测得电势Nx对应的被测温度电势。
在使用补偿导线延长后的热电偶电路示意图如图4所示。
图 4 热电偶电路示意图
再采用新型两端集成器补偿法,利用高精度单总线数字温度传感器DS18B20测出参考端温度T0,并送回CPU,然后在固件软件中实现补偿。其原理为热电偶的中间温度定律:
EAB(T,T0)=EAB(T,0)-EAB(T0,0),
(5)
式中,EAB(T,T0)为ADC实际测得的电势,EAB(T0,0)可根据DS18B20测出的T0在热电偶分度表中查出,由此可以计算出EAB(T,0 ),再通过查表即可得到工作端温度T。经查阅资料得K型热电偶0~600 ℃的温度曲线采用四次多项式拟合效果最好,其拟合方程如下:
T=α4E4+α3E3+α2E2+α1E+α0,
(6)
式中,系数α4,α3,α2,α1,α0由K型热电偶的分度表和最小二乘法求得,分别为:0,-0.001 8,-0.008 8,24.852 6,-0.575 8,在处理时,为提高运算速度,可将公式 改写为:
T={[(α4E+α3)E+α2]E+α1}E+α0;
(7)
用同样的方法求得:
E={[(β4T+β3)T+β2]T+β1}T+β0,
(8)
式中,系数β4,β3,β2,β1,β0由K型热电偶的分度表和最小二乘法求得,分别为:0,0,0,0.040 2,0.025 4。最后按照图5所示流程图处理传感器数据,求得所测温度值。
图 5 数据拟合流程图
3 无线数据传输
设置模块的工作模式[13]:
WiFi_set_opmode(0x01); //设置WiFi模块的工作模式为Station。
配置WiFi的接口参数:
user_set_station_config(void) //设置WiFi Station的接口配置参数
{
char ssid[32] = "TP-LINK_28DB06"; //设置连接路由器的ssid
char password[64] = "fanren008"; //设置连接路由器的无线接入密码
struct station_config my_config; //定义接口参数结构体
my_config.bssid_set = 0; //设置为不检查AP的MAC
os_memcpy(&my_config.ssid,ssid,32);
os_memcpy(&my_config.password,password,64);
WiFi_station_set_config(&my_config);
}
4 数据显示、分析软件设计
本软件是在基于Linux的Ubuntu桌面操作系统上搭建Qt开发平台。信号与槽式Qt的核心机制,本软件设计中大量使用。
信号指当对象改变其状态时,该对象发送的消息。并且对象本身不需要知道谁接收这个信号。槽用于接收信号,只是普通的对象成员函数。槽也不知道是否有任何信号与自己连接,同时对象也不了解具体的通信机制。信号与槽的连接是通过QObject 的connect() 成员函数来实现的,当信号发射时,调用连接的槽。
为使改软件能与传感节点通信,采用了TCP/IP通信协议,SERVER的搭建,基于面向连接的socket编程,其服务器端的搭建方法为:创建套接字(socket),将套接字绑定到一个本地地址和端口,并设置为监听模式准备接收客户端的请求,当请求到来后,接收连接请求,用返回的套接字和客户端进行通信[14-16]。其代码实现如下所示:
tcpServer = new QTcpServer;
tcpServer->listen(QHostAddress::LocalHost,8989);
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(connect_slot()));
tcpSocket = tcpServer->nextPendingConnection();
在MySQL数据库下创建数据库system,然后在system数据库下创建表data,该表主要用于存储传感器上传的数据,设计字段包括:
Id:主键,类型int;
Condition:存储传感器状态,类型Boolean;
Number:存储传感器编号,类型int;
Temperature:存储温度值,类型double;
Time:存储数据上传时间,类型datetime;
Address:存储传感器地址,类型string;
Isno:存储传感器的状态,类型Boolean。
通过c++相应的模块来连接数据库,当TCP服务端接收到客户端的信息,先对数据进行判断,然后再把数据存储到数据库。在前端展示数据时,只需要调用api在数据库里查询符合条件的数据并显示出来。如最新数据,是按照时间来查找,找到时间最近的一条数据显示出来。数据分析功能可以按照时间和传感器来筛选数据,可以计算出不同时间段和不同传感器温度的均值、方差和范围等,也可以实现对所有传感器温度的数据分析。图6是在计算机软件中呈现的是传感器上传的最新数据,并根据预警阈值显示警报状态(其中绿色为正常,红色为高温)。后续版本中可对传感器进行激活和休眠控制,并显示工作状态,详情如图6所示。
图6 计算机软件显示实验结果
5 温度数据“云”
向云服务器POST数据,与IP为42.96.164.52端口为80的服务器建立TCP/IP连接[17-18],最后得到如图7所示云服务器数据展示。
图7 云服务器数据展示图
按照以下格式向该端口发送数据(注意相邻数据上传间隔必须大于等于10 s,过于频繁会收到406错误):
POST /v1.0/device/
Host: api.yeelink.net
U-ApiKey:0609d9ef2b260cc2032c4441694ac8c8
Content-Length:data_length注释:数据长度
{
"timestamp":"2012-03-15T16:13:14",
"value":294.34
}注释:timestamp和value 为数据索引
6 系统功能测试结果
同步所有时钟,将测温探头与二等标准水银温度计放入实验室可调恒温烘箱或者冰水混合物,调节烘箱温度,传感节点数据变化为延时基准,水银温度计温度显示数据稳定为温度误差基准。系统功能性测试显示界面如图6、图7所示,能实现本地和云端的数据采集显示、存储,本地数据分析等功能;性能测试结果如表1与表2所示。从实验测试数据可以看出,该多路温度采集系统的误差和延迟较小。
表1 系统温度采集误差测试(单位:℃)
标准读数0.7523.5684.45111.24193.51272.14351.63433.78509.93597.25系统采集读数2.5424.2384.89111.64193.88272.45351.76433.58509.55596.79误差1.790.670.440.400.370.310.13-0.20-0.38-0.46
表2 系统采集时延测试(单位:s)
测试编号12345678910本地PC延迟0.70.30.50.90.50.60.41.20.60.5云服务器延迟3.21.42.45.31.61.71.41.51.61.4
7 结束语
在大量查阅有关温度测量、无线数据传输相关资料的基础上,设计了一种基于K型热电偶和WiFi的多路温度采集系统。该系统由传感节点、上位机软件、云服务平台组成。完成了硬件电路设计、印制电路板制作、电路焊接、固件程序编写调试、上位机软件设计、数据推送到云平台等工作。由系统测试结果可知,该系统具有搭建容易、扩展简单、稳定性好、精度高等特点,能满足普通工业智能和智慧城市的实际应用。