基于物联网的疫情防控监测系统设计
2022-07-08申海洋王德喜
申海洋 霍 魁 王德喜
(1. 巢湖学院 电子工程学院, 合肥 238024;2. 山西大学 物理电子工程学院, 太原 030000;3. 科大智能科技股份有限公司, 合肥 230094)
0 前 言
新冠(COVID-19)疫情对全球经济发展带来了巨大的冲击和影响。在党中央的坚强领导和全国人民的共同努力下,我国疫情防控工作取得了重大胜利。然而,新冠病毒具有很强的传染性,零星的感染病例报告时有出现,疫情防控形势依然严峻。目前我国已进入常态化疫情防控阶段,各地普遍采用体温监测打卡的方式,要求防控对象进行自我体温监测,并每日上报体温信息[1-3]。但这种方式存在很大的隐患:首先,防控对象可能会因为遗忘而漏报体温信息;此外,个别人员可能会因为各种动机而虚报体温信息;更有甚者,可能存在代替他人检测体温的现象。不如实汇报、伪造他人信息的行为,给疫情管控带来了巨大的风险[4]。因此,必须通过技术手段来实现对防控对象的精准体温监测和身份核实。
针对疫情防控要求和新冠病毒高传染性的特点,本次研究基于ESP8266[5]网络模块集成的NodeMCU开发板,采用IOT技术设计疫情防控监测系统。首先,采用AS60x指纹识别模块进行人员身份识别,并利用GY - 906红外测温传感器获取当前人员体温数据;然后,使用MQTT协议通过ESP8266模块将当前人员的身份信息和体温数据一并传输至阿里云平台和MySQL服务器[6-7]。为防止作弊,设计了特殊监测装置,以实现无接触式的人员身份识别和体温数据获取。开发了Web应用服务平台,管理人员可登录服务器批量处理防控对象的身份、体温信息[8-9],及时获取有效、准确的数据支持。
1 系统结构设计
疫情防控监测系统包括感知层、网络层、应用层等3层结构,如图1所示。
图1 疫情防控监测系统构架
(1) 感知层中,系统将以ESP8266微处理器为核心的NodeMCU开发板作为核心控制器,以实现用户身份识别及体温采集、处理、传输等功能。首先,通过AS60x指纹识别模块识别用户身份,使用 GY-906红外测温传感器来采集用户体温数据;其次,采用结合多维度特征的自适应均值滤波温度补偿算法得出当前用户的体温数据;然后,使用MQTT协议将用户身份和体温数据传输至阿里云平台[10]。将OLED显示屏作为人机交互的显示终端,引导用户正确使用疫情防控监测系统。
(2) 网络层是感知层连接应用层的枢纽,感知层和应用层的数据交互通过网络层完成。网络的覆盖范围、传输速率对系统性能的影响较大。针对疫情防控监测系统数据量大、实时性要求高等特点,采用无线局域网连接方式。无线局域网具有覆盖范围广、普及率高、传输速率高等优势。以某高校为例,该校校园已实现WiFi全域覆盖,可以在教室、实验室、宿舍等场合通过校园WiFi连接互联网来部署疫情防控监测系统。
(3) 应用层中,接收、处理用户的身份、体温数据。首先,采用MQTT协议与感知层进行数据交互,将感知层采集到的数据编辑成Json格式。其次,将数据通过互联网传输到物联网平台。考虑到疫情防控的重要性,系统对物联网服务器的稳定性、安全性要求较高。阿里云平台已经在工业和家用物联网等领域得到了广泛应用,系统可靠性、安全性较高。然后,在应用层架设MySQL服务器,以存储用户的身份、体温数据。用户体温数据库的建立,既为自适应均值滤波温度补偿算法提供了历史数据,也为疫情防控管理提供了依据。MySQL数据库的建立同样依附于阿里云平台[11]。最后,开发Web应用服务平台[12],通过浏览器登录系统,实现用户身份和体温数据的可视化监测和管理。
2 系统硬件设计
系统硬件设计包括硬件电路设计和物理结构设计等2个部分。
2.1 硬件电路设计
系统硬件电路由电源电路、指纹传感器、红外温度传感器、OLED液晶显示模块、ESP8266微控制器等构成,各节点工作原理如图2所示。
图2 系统电路节点原理图
2.1.1 电源电路设计
采用USB接口的供电方式,电路输出3.3 V/5 V直流电源为整个系统供电,电源电路原理如图3所示。
图3 电源电路原理图
2.1.2 指纹传感器设计
采用ATK-AS608指纹识别模块,该模块最多可以存储200条指纹信息,错误接受率低于0.001%,错误拒绝率低于1.000%,具备活体检测能力,在疫情防控监测系统中用于指纹采集、登记、检索和匹配,以实现防控对象身份录入和识别。ATK-AS608指纹识别模块的工作电压为3.3 V,采用串口通信协议与ESP8266模块进行通信。指纹传感器原理如图4所示,其引脚功能如表1所示。
图4 指纹传感器原理图
表1 指纹传感器引脚功能
2.1.3 红外温度传感器设计
采用GY-906红外测温传感器,以MLX81101红外热电堆传感器和MLX90614信号处理专用集成芯片为核心,响应速度快,测量距离为10 cm,测温分辨率为0.1 ℃,理论精度达± 0.1 ℃。GY-906红外测温传感器通过I2C总线与ESP8266模块进行数据传输。红外温度传感器原理如图5所示,其引脚功能如表2所示。
图5 红外温度传感器原理图
表2 红外温度传感器引脚功能
2.1.4 OLED液晶显示模块设计
为了更好地进行身份识别和体温检测,采用128 mm×32 mm的OLED显示屏,工作电压为3.3~5 V,由SSD1306驱动,通过I2C总线与ESP8266模块连接,可显示汉字、ASCII、图形等信息,具有良好的显示效果。OLED液晶显示模块原理如图6所示。
图6 OLED液晶显示模块原理图
2.1.5 微控制器设计
ESP8266模块配置了USART和I2C接口,集成了32位Tensilica处理器,主频达160 MHz,支持WiFi协议栈,具有功耗低、计算能力强、组网灵活等优点。
2.2 物理结构设计
为避免用户在触摸指纹时恶意规避体温测量,设计了一个半封闭空间装置,如图7所示。系统物理模型为长方体结构,除检测入口外,对其他5个面进行封闭,其中顶部采用透明亚克力材料。用户将手从检测入口伸进装置内,用手指触摸指纹传感器进行指纹识别,温度传感器对用户体温进行采集。
图7 系统物理模型
3 系统软件设计
3.1 系统流程设计
基于IOT的疫情防控监测系统流程图如图8所示。首先,系统初始化后连接无线网络,连接成功后依次连接阿里云平台和MySQL服务器;然后,进入指纹和温度采集流程;接着,进入指纹识别和温度补偿修正算法流程;最后,将用户身份和体温数据发送至阿里云平台和MySQL服务器。
图8 疫情防控监测系统流程图
本系统使用Arduino IDE开发环境,软件开发调用的部分库文件如表3所示。
表3 系统软件开发调用的库文件
3.2 部分核心代码设计
3.2.1 网络连接
(1) 定义所连接的网络名和密码:
char ssid[] = "HUAWEI-F7GM6R";∥WiFi名
char pass[] = "18715383861";∥WiFi密码
(2) 通过WiFi.begin(ssid, pass)连接无线网络。
3.2.2 阿里云平台连接
(1) 登录阿里云平台,创建设备(见图9)。
图9 阿里云设备创建示例
(2) 定义阿里云三元组(因保护用户隐私需要,三元组最后2位用**代替):
# define PRODUCT_KEY "a13R0OREr5**"
# define DEVICE_NAME "room**"
# define DEVICE_SECRET
"b8613679d9edf3eea6eb8ac4fbdb9ef**"
(3) 连接阿里云平台:
connectAliyunMQTT(MQTTClient,PRODUCT_KEY,DEVICE_NAME,DEVICE_SECRET);∥连接阿里云平台
3.2.3 MySQL服务器连接
(1) 定义数据库账号、密码、服务器IP地址:
char user[] = "root";∥MySQL的用户名
char password[] = "****";∥真实密码已经隐去
IPAddress server_addr(47,103,110,****);∥设置MySQL服务器IP地址
(2) 连接数据库:
conn.connect(server_addr, 3306, user, password)
3.2.4 指纹识别
(1) 通过指纹录入程序将用户信息存入模块闪存中。指纹信息的录入,主要通过Adafruit_Fingerprint.h中的getFingerprintEnroll()函数来实现。
(2) 为了提高指纹和温度采集的准确性,防止用户过早离开,采用finger.image2Tz()函数对指纹图像进行不间断采集,直到持续时间达到20 s。手指一旦离开传感器触摸屏则计时归零,并通过OLED显示屏提示检测失败、重新采集指纹。
(3) 使用getFingerprintID()函数进行指纹匹配。
3.2.5 温度采集
(1) 例化实体:
Adafruit_MLX90614 mlx = Adafruit_MLX90614()
(2) 调用mlx.readObjectTempC()函数来采集用户体温。
LIU Cheng-ling, LIU Xing-chen, HU Xing-ye, YANG Chao
(3) 温度补偿修正。对20 s内多次采集到的体温数据进行加权平均。由于人体体表温度易受环境温度的影响,因此红外温度传感器在不同温度下有一定的波动,应根据环境温度的不同对体温进行多尺度补偿,如式(1)所示:
(1)
式中:Tave—— 最终输出体温,℃;
Ti—— 第i次采集的体温,℃;
N—— 体温采集总次数;
TΔ—— 不同环境温度(T)下的补偿值,℃。
当T<15 ℃时 ,TΔ=0.25 ℃; 15 ℃≤T<25 ℃时,TΔ=0.15 ℃; 25 ℃≤T<30 ℃时,TΔ=0.10 ℃;T≥ 30 ℃时,TΔ=0 ℃。
3.2.6 数据传输模块MQTT
PubSubClient MQTTClient(espClient)
(2) 定义属性上报Topic:
# define ALINK_BODY_FORMAT"{"id": "123","version":"1.0","method":"%s", "params":%s}"
(3) 发送数据:
void MQTTIntervalPost(float x, int i)
{
char param [256];
char jsonBuf [512];
switch (i)
{
case 1: {
sprintf(param, "{"CurrentTemperature":%f}", x);
sprintf(jsonBuf, ALINK_BODY_FORMAT, ALINK_METHOD_PROP_POST, param);
……
}
3.2.7 发送数据至MySQL服务器
(1) 创建WiFiClient实例:
WiFiClient client
MySQL_Connection conn(& client)
MySQL_Cursor* cursor
(2) 将用户身份编号和体温数据放入buf:
sprintf(buff,INSERT_SQL,finger.fingerID,sensors.getTempCByIndex(0),NO,buf)
(3) 发送数据至MySQL服务器:
MySQL_Cursor *cur_mem = new MySQL_Cursor (& conn)
cur_mem->execute(buff)
delete cur_mem
4 系统测试
以某高校宿舍疫情防控为背景,部署疫情防控监测系统,并进行实际测试。宿舍区域已实现无线校园网全覆盖,为系统的部署提供了便利。以2个宿舍共计12名学生为对象进行多次测试。
(1) 首先,录入12名学生的指纹信息;然后,对学生进行身份识别和体温检测,同时使用水银体温计对其体温进行测量,作为参照值。测试结果显示,系统能准确识别用户身份信息,并输出体温数据。疫情防控监测系统测试结果,如表4所示。
表4 疫情防控监测系统测试结果
(2) 通过本次研究基于阿里云平台开发的Web应用服务平台,直观地查看用户体温信息,其界面如图10所示。
图10 Web应用服务平台
(3) 用户数据存档。将用户的身份和体温信息同步传输至MySQL服务器,分别使用ID、体温、检测编号和检测时间等关键词进行索引,实现数据归档。
5 结 语
本次研究提出基于IOT的疫情防控监测系统,可准确识别用户身份、精准测量用户体温,同时将数据传输到云端数据库,以便于管理人员远程管控防控对象。测试结果表明,系统的准确性和稳定性能满足设计需求。本系统有效地解决了防控对象可能恶意规避体温检测和篡改体温信息的漏洞,同时降低了人员接触的风险。本次设计的疫情防控监测系统,可用于高校宿舍、工厂宿舍和政府集中隔离场所等区域的日常防控,实现了人员的身份识别和体温监测,以及网络化的精准管理和防控。