基于STM32室内空气质量检测系统的设计与实现
2022-11-22朱菊香罗丹悦权海洋朱雨恒
朱菊香,谷 卫,潘 斐,罗丹悦,权海洋,朱雨恒
(南京信息工程大学 自动化学院,江苏 南京 210000)
0 引 言
近年来,人们越来越直观地感受到环境所发生的变化,对空气中有害气体排放量的检测也引起人们的足够重视。这些有害气体已经极大地影响了人们的身体健康和生活,因此气体检测工作也在市场上受到了极大的认同[1]。随着人们对健康问题越来越重视,居家环境的质量也更加受到人们的关注。现如今,室内环境的检测已经成为保障居家健康的一种重要手段,大多数国内传统的室内空气质量检测仪器功能单一,只能监测某一气体含量或者环境数值,无法全面地保障室内环境安全;另外还忽略了气体检测中的噪声问题,难以达到较高的检测精度[2]。随着物联网技术的快速发展,为了解决以上问题,本项目设计一款基于气体传感器阵列的室内空气检测系统,该系统采用卡尔曼滤波算法提取噪声下的有效信号,提高检测精度,大大降低了检测的复杂性和成本,对居家环境检测有重要的作用和意义[3-4]。
1 系统总体设计
基于STM32平台,在综合考虑实时性、准确性、经济性等因素的前提下,设计并搭建一套居家环境的气体检测系统,系统结构如图1所示。
图1 气体环境检测系统结构示意图
环境检测系统可以分为传感器阵列模块、MCU、显示模块和通信模块。根据设计的整体思路,首先需要根据检测气体及环境的目标,选择合适的传感器模块,根据各传感器的通信方式及参数选择合适的引脚并进行软件设计[5]。最终传感器输出信息在经过处理后能够在LCD屏幕上实时显示。监测终端部署了卡尔曼滤波算法,因此可以将算法处理前后的数据显示在屏幕上进行对比。通过气体传感器阵列获取室内空气的质量参数,传输到单片机中进行处理;把处理后的室内各个空气质量参数,通过NB-IoT无线传输模块参数输到云平台上,并且可在手机APP上远程查看居家环境情况,当室内某一参数值超过一定值时,监测终端会进行实时告警[6-7]。
2 系统硬件设计
选用温湿度传感器、氧气传感器、甲烷传感器、二氧化碳传感器和粉尘传感器共五种,构成传感器阵列。系统硬件框图如图2所示。
图2 系统硬件
为了选择合适的传感器,需要考虑选择包括灵敏度、响应时间、选择性、稳定性和成本在内的一些因素。设计传感器阵列时主要考虑是否能够全面全方位地检测居家环境中的气体含量和环境数值,全面地保障室内环境安全[8]。电化学传感器以电化学电极为敏感元件,在采样电路控制下实现气体浓度的检测,具有良好的稳定性、选择性;催化燃烧甲烷传感器内部带有高精度放大、去噪声处理、温度补偿处理功能,同时传感器都经过标准气体标定处理,保证了传感器模组直接输出可用和准确的气体浓度信息[9-10];粉尘传感器输出的数据是模拟电压正比于测得的粉尘浓度,敏感性为0.5 V/0.1(mg/m3);温湿度传感器是湿温度一体化的数字传感器;MG-812低功耗二氧化碳传感器是采用固体电解质电池原理来检测CO2的半导体氧化物化学传感器。
3 系统软件设计
软件设计主要包括数据采集系统软件设计和信息监控软件设计。
3.1 数据采集系统软件设计
数据采集系统由传感器阵列模块、STM32F4微处理器模块、显示模块和通信模块组成。该数据采集系统的软件设计部分涉及多个方面,主要包括下位机(STM32F4单片机)框架的搭建、LCD显示屏显示设计、云平台设计和手机APP设计四个部分。数据采集系统软件设计框架如图3所示。
图3 数据采集系统软件设计框架
3.2 信息监控软件设计
主程序开启后,先对STM32单片机和NB-IoT模块进行初始化设置以及端口配置,检测单片机与各个模块是否连接成功,连接成功后开始接收传感器阵列采集的室内环境数据;经过卡尔曼滤波算法处理后,若检测到的CO2、甲烷和PM2.5超标,则蜂鸣器报警,提醒用户开窗通风,并将室内环境数据通过NB-IoT发送至云平台,通过手机APP可以远程查看。软件系统流程如图4所示。
图4 软件系统主流程
4 卡尔曼滤波算法设计
只有保证数据采集的精准度,才能保证后续显示的正确性。由于市面上购买的传感器都有一定的误差,同一种传感器在相同环境下测得的数据也不一定是相同的。为了提高数据采集的准确性,加入了卡尔曼滤波算法,该算法是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法[11]。它能去除噪声还原真实数据,估计动态系统的状态,并且能够对现场采集的数据进行实时更新和处理,该算法是目前应用最为广泛的滤波方法[12]。
详细的设计步骤参考如下:
(1)预测状态方程
目的:由系统状态变量k-1时刻的最优值和系统输入计算出k时刻的系统预测值。方程如下:
式中:Xk|k-1是在k-1时刻预测的当前状态结果;Xk-1|k-1是k-1时刻的最优值;Fk是作用在Xk-1|k-1状态下的变换矩阵,它是算法对状态变量进行预测的依据;Bk是作用在控制量上的变换矩阵,在大多数实际情况下并没有控制增益;uk是当前状态的控制增益,一般没有这个变量,可以设为0。
(2)预测协方差方程
目的:根据k-1时刻的系统协方差预测k时刻的系统协方差。方程如下:
式中:Pk|k-1是k时刻系统的协方差矩阵;Pk-1|k-1是k-1时刻系统的协方差矩阵;Qk是系统过程噪声的协方差。只要确定了初始协方差矩阵P0,后面都可以递推出来,而且只要初始协方差矩阵P0不为0,它的取值对滤波效果影响很小,都能很快收敛。
(3)卡尔曼增益方程
目的:根据k时刻协方差矩阵的预测值计算卡尔曼增益。方程如下:
式中:Kg是卡尔曼增益,是滤波的中间结果;Hk是对象的预测矩阵;Rk是对象测量噪声的协方差矩阵,它是一个数值,作为已知条件输入滤波器,注意此值过大过小都会使滤波效果变差,且Rk取值越小收敛越快,所以可以通过实验手段寻找合适的Rk值,再利用它进行真实滤波。
(4)更新最优值方程(卡尔曼滤波的输出)
目的:根据状态变量的预测值和系统测量值计算出k时刻状态变量的最优值。方程如下:
式中:Xk|k是k时刻状态变量的最优估计值;Zk是对象的测量值。
(5)更新协方差方程
目的:求k时刻的协方差矩阵,为得到k+1时刻的卡尔曼输出值做准备。方程如下:
式中:Pk|k为k时刻协方差矩阵;I为单位矩阵。
根据上述方程式,总结卡尔曼滤波算法的核心思想就是依据传感器当前的测量值和上一时刻的预测值与误差计算得到当前的最优值。为了更好地体现卡尔曼滤波算法的优越性能,用MATLAB仿真温度在24 ℃情况下的输出结果,如图5所示。
图5 卡尔曼滤波模拟温度在24 ℃情况下的效果
从图5中可以看出,采用MATLAB仿真所得结果是在24 ℃附近添加高斯噪声后的模拟测量值,其中添加高斯噪声是为了模拟各传感器在自身及外在因素影响下产生的系统噪声以及同类型传感器之间的测量偏差,也就是说加入高斯噪声的测量值就是模拟传感器的测量值。通过与卡尔曼滤波值进行比较,可以看出卡尔曼滤波能很好地抑制噪声误差,使得测量值更接近真实值。
5 系统测试结果与分析
在实验室用专业检测仪器分别检测出空气中氧气、甲烷、二氧化碳、PM2.5浓度以及温湿度的真实值,并与本系统检测到的未加卡尔曼滤波算法、加入卡尔曼滤波算法的数值进行比较。
图6为电化学氧气传感器的输出,氧气传感器在大气中的输出值应当稳定在20%左右,未加入卡尔曼滤波算法的检测值波动较大,加入卡尔曼滤波算法的检测值波动较小,更接近真实值。
图6 氧气浓度对比
图7为催化燃烧甲烷的传感器输出值对比情况。从图中可以看出,加入卡尔曼滤波算法处理后的值较好地跟踪了真实值的变化过程。
图7 甲烷浓度对比
图8为半导体二氧化碳的传感器输出值。可以看出,加入算法后更接近真实值。
图8 二氧化碳浓度对比
本设计实现了对空气中甲烷、氧气、二氧化碳、粉尘和温湿度的实时检测,能够在LCD屏和上位机查看检测信息,手机APP可以远程监控室内环境信息,达到预期目标。通过检测实验可以验证电化学氧气传感器的检测浓度范围在0~25%之间,催化燃烧甲烷的传感器检测浓度在0~100%之间,氧气和甲烷浓度的检测精度达到满量程的3%,远高于市面上已有的家用检测设备。
对比算法加入前后的数据采集结果,可以验证在非环境因素的影响下,加入算法后的数据波动不会超过±0.5,加入算法前数据采集结果波动较大。验证了卡尔曼滤波算法对MCU模块采集数据滤波处理的有效性,实物如图9所示。
图9 系统实物
6 结 语
本文设计了一种基于气体传感器阵列的室内空气质量检测系统。实验结果表明,该系统简单、高效、低成本,并且能实时有效地监控室内空气质量,有利于提高室内空气质量,降低一氧化碳中毒、天然气泄漏等意外事故造成的人身伤害和室内空气污染对人体健康的潜在威胁,改善健康状况和提高人们的生活质量,此系统适合在家庭、办公室以及人群聚集的公共场所应用。