王纪章 茆 寒 王 旭 周 静
(江苏大学农业工程学院,镇江 212013)
我国是农业大国,同时也是农业废弃物产量大国,以17.29%的占比居于全球产量第一位[1],为解决废弃物资源再利用问题,废弃物的基料化、肥料化处理是农业废弃物资源化利用的重要手段,而堆肥发酵是肥料化、基料化处理的关键技术[2],温度是评价堆置发酵过程的一个重要指标,可以实现为翻抛作业和发酵腐熟度的评价提供依据。为了检测堆体温度,通常采用探针式温度计或传感器实现温度检测[3],为了检测堆体温度的分布,需要使用不同长度的探针传感器进行检测,这种检测方式不仅操作繁琐、检测效率低下,而且无法做到对发酵堆温度变化的连续监测。因此,能够对发酵堆温度进行便捷、有效、多位置的自动监测系统研究十分必要。
为了实现多点位温度的同步测量,文献[4-6]通过在系统中加入多路温度采集模块实现温度监测,文献[7]采用主从分布式设计思想解决了传统温度监测系统可扩展性差、数据查看不便等缺点,但该系统在进行多点位监测时存在线路较多、铺设麻烦等缺点。针对以上缺点,文献[8-10]提出地下无线传感网络,将各个传感器采集模块以节点形式通过无线局域网与数据汇聚模块交互,再由数据汇集模块处理数据并上传至服务器。文献[11-12]依据此概念设计出无线监测装置,使其具备高隐藏性、易铺设性、易升级等优点。但文献[13-14]也发现,在与数据汇集节点进行数据交互式时,掩埋物会干扰装置的信号强度,使数据传输出现丢包等现象,丢包造成数据缺失会对监测对象研究带来一定负面影响。为保证节点数据传输的稳定性、准确性,文献[15-16]使用空心探杆将传感器采集模块封装在内部指定位置处,使用内置有线式数据总线与数据汇聚模块交互,这种设计方式线路数量少、占空间小、封装简单,有效减小线路铺设的繁琐程度,但这种监测装置在设计上不具备灵活性,无法自由更改监测点位置,当需要对传感器采集模块进行更新维护时,数据汇聚模块与远程服务器无法做到自适应同步更新。文献[17-18]针对上述问题以传感器节点和数据传输为研究点设计了监控界面可生成的监测系统框架,但此系统框架服务端数据存储方面的开发还有待完善。
针对上述问题,本文根据堆肥发酵堆内部环境及其堆置特点,设计具备防水、耐酸、耐高温特性的模块化、可组合的监测系统,将传感器采集功能模块与数据处理功能模块进行分离设计,基于CAN总线实现模块之间的配置与通信;开发面向多层监测需求的自适应数据服务系统和人机接口系统;针对运行功耗需求进行电源管理电路设计,以提升系统续航时间。
为了实现监测系统的可组合特性,将监测系统的机械结构进行模块化处理。如图1所示,系统包括主机模块、延长杆、检测杆模块、尖头4部分,其中主机模块以单片机系统为核心,内部配备数据接口、充电电池及充电口,顶部配备太阳能充电板确保系统的续航效果;配备低能耗型OLED显示屏幕实现监测数据的实时查看,数据接口采用CAN总线,实现与检测杆模块之间的供电与数据通信。检测杆模块为独立的采集单元,内部配备DS18B20型温度传感器、采集电路以及数据总线口,为了减少检测过程中堆料中的水分和化学物质对传感器的性能影响,通过导热陶瓷片覆盖温度传感器探头;检测模块顶部和底部分别为四线航空插头的插头和插座,其中两根为电源线,两根为数据线。不同长度的延长杆可以满足检测杆模块在不同深度测量的需求;尖头安装在最底端用于辅助组合后的杆体插入发酵堆物料中。为了防止水分进入检测杆模块内部,检测杆模块与延长杆、尖头之间采用可旋转螺母连接,旋转螺母接口截面部分采用耐高温耐腐蚀的氢化丁腈橡胶材料制作密封胶圈来密封。同时,由于发酵堆内部温度较高,为了减小环境温度对整个电路的影响,各模块和延长杆采用聚四氟乙烯材料制作外壳用以抗高温抗腐蚀,采用玻璃纤维材料覆盖内壁达到隔热效果。
图1 监测系统结构图
监测系统架构图如图2所示,监测系统硬件架构分为检测杆模块和主机模块两部分,检测杆模块电路主要由STM32L5低功耗芯片和CAN总线接口芯片以及温度传感器组成,温度传感器采用DS18B20型温度传感器,根据发酵堆温度变化范围(0~80℃)选择量程为-10~100℃,分辨率为0.1℃;主机模块部分由STM32F103芯片作为核心电路,4G模块、通信总线接口、触摸屏、存储卡接口组成外设电路,由电源管理模块对核心电路、外设以及检测杆模块进行供电;主机模块与检测杆模块通过TJA1050 CAN总线模块实现一对多通信,监测系统和云服务器通过4G模块进行网络通信,将各个检测杆模块监测数据进行汇聚和封装后同步至云服务器数据库中。
图2 监测系统架构图
如图3所示,主机模块采用STM32F103芯片作为主控核心,各外置功能模块有4G模块、OLED模块、TF卡接口、CAN总线接口以及检测杆模块;4G模块的型号为EC20CEHDLG-128-SNNS,可通过USART串口进行网络数据交互;CAN总线接口芯片选择TJA1050数据收发芯片,实现USART串口数据转换成CAN总线H与L端口的电压差信号;电源管理模块管控所有外设的电源通断,由STM32F103芯片上PB1到PB4引脚控制。
图3 主机模块电路原理图
为了实现监测系统的低功耗运行,设计了基于2N7002的电源管理模块,如图4所示。该电路由前置图腾柱电路与后端开关驱动电路组合而成[19],前置图腾柱电路用来保护集成电路并加速MOS管的关断时间,后置开关驱动电路通过将系统地和外设地进行隔离,在不需要指定外设工作时切断外设接地接口,使外设模块电路无法构成电流回路,从而降低系统休眠功耗。
图4 电源管理电路
图5为检测杆模块硬件电路原理图。检测杆模块主控部分选用STM32L5低功耗芯片,芯片外部晶振选用8 MHz的无源晶振,在晶振两端并联两个22 pF的电容作为负载电容。PA9引脚连接DS18B20信号线,PB10、PB11两个引脚连接CAN总线收发芯片,CAN总线接口芯片选择恩智浦半导体公司(NXP)生产的TJA1050数据收发芯片,该芯片用于将USART串口数据转换成CAN总线H与L端口的电压差信号,实现协议转换。STM32L5、DS18B20以及TJA1050的接地端共地。
图5 检测杆模块电路原理图
监测系统软件包括主机模块、检测杆模块软件系统和云服务器端软件系统。主机模块和检测杆模块采用FreeRTOS实时操作系统开发,并部署FAT32文件系统用于采集数据的存储与管理[20];服务器端采用阿里云服务器,并部署MySQL数据库实现数据存储与管理[21],主要包括基于CAN总线的检测模块自适应识别、基于JSON封装与关系数据库的配置信息同步与自适应匹配,以及系统现场端、服务器端、微信小程序端人机界面自适应生成等功能。
为了实现检测模块添加和删除操作后监测系统的模块识别,基于CAN总线方式实现了检测模块的自适应识别方法,其过程如图6所示。在主机模块进入配置模式,主机模块通过CAN总线向所有检测杆模块发送配置请求命令。检测杆模块接收到配置请求命令后查询自身配置状态标志位,若标志位为“1”则表示已配置并不参与配置,若标志位为“0”则为未配置状态;需要进配置的检测杆模块将自身ID进行封装并向CAN总线发送,取得总线竞争权的检测杆模块发送消息成功后,主机模块接收到配置成功消息后将检测杆模块ID进行保存并处理下一个配置请求。同时将接收到的检测杆模块ID进行封装并加上校验码进行消息回应,检测杆模块接到消息回应后将检测模块中的配置状态标志位标记为“1”。当所有检测杆模块均为已配置状态时,主机模块将所有保存的配置信息进行JSON格式封装并上传至服务器中,实现配置信息的同步。
图6 基于CAN总线的检测模块自适应识别与处理过程
由于不同监测节点的检测杆模块数量有差异,为了实现多个监测节点的系统管理与数据存储需求,利用JSON实现了监测节点配置信息和采集数据的数据封装与传输,利用关系数据库实现监测节点的配置信息、采集信息的数据同步与数据管理。
2.2.1基于JSON的数据封装
在监测系统的数据封装中,主要包括每个监测节点的配置信息以及实时采集的检测数据。针对本系统中的数据特点,考虑JSON具有资源占用小、数据执行速度快、跨平台兼容性高等特点,采用JSON实现配置信息和采集信息的封装[22]。其结构如图7所示。其中配置信息包括监测节点ID及其包含的检测杆模块ID。数据采集JSON包括监测节点ID、数据采集时间以及各检测模块ID和采集数据。
图7 JSON文本字符串
2.2.2基于关系数据库的数据库自适应生成
为了满足监测系统的配置信息和采集数据的数据管理。如图8所示,利用关系数据库实现配置信息表和采集数据的存储和管理[23]。其中配置信息表(EquipSetupTable)包括监测节点ID、检测模块ID、监测节点修改时间、检测深度和采集数据信息表名。在每次修改监测节点配置信息后,系统自动生成新的采集数据信息表,采集数据信息表名命名规则为监测节点ID和修改时间;采集数据信息表包括数据ID、采集时间、各个检测模块数据。系统对监测节点传输的配置信息和采集数据JSON文件进行解析后存储在数据库中对应的数据表中。
图8 数据库自适应配置功能设计
2.2.3配置信息与采集数据同步
在系统配置和数据采集过程中,为了保证现场采集节点和服务器端的配置信息一致,需要进行数据同步。另外,在系统运行过程中需要进行采集数据的同步,以减少由网络中断、数据丢包等问题导致的数据异步问题。在本系统中数据同步主要由监测系统节点发起。
配置信息的同步为单次同步,即当监控系统主机模块出现检测杆模型信息修改时发起信息同步指令,将新生成的配置信息JSON文件传输至服务器端;服务器端对所接收的JSON文件进行解析,并与系统中响应的监测系统配置信息进行匹配与分析,并对数据库中的配置信息表和采集数据信息表结构进行相应的修改。为了避免由数据表结构变化导致的数据丢失问题,在每次修改配置信息表时,都会新生成一个采集数据信息表进行采集数据的存储。相应地,在配置信息表中也新生成一条新的记录来描述监测系统节点的相关信息。
采集数据的同步是根据采集节点所设置的采样间隔进行周期性数据同步,同步传输过程为监测节点根据所设定的数据同步频率周期性发起数据同步,将采集数据JSON文件传输至数据服务器中,数据服务器根据协议进行数据解析,并将数据存储至服务器中,并返回同步成功指令至监测节点。监测节点清空JSON文件中的数据记录,开始新的数据采样周期。当数据同步过程中由于网络中断、数据丢包等问题导致出现数据异步时,监测节点则将采集数据进行累积,在系统同步通信恢复正常后将累积的数据与服务器进行同步。
2.2.4系统异常处理
系统在进行初始化或通信期间容易出现程序出错等故障,因此在系统中加入看门狗复位和超时时间判定的方法加强运行期间的稳定性。具体方法为:在主机模块向检测杆模块节点发送数据请求时,会同步开启5s超时时间判定,当检测杆模块节点发生故障无法响应主机模块的请求时,超时时间结束时主机模块将发生故障的检测杆模块ID挂入异常模块队列中,并执行下一个检测杆模块的数据请求。
在系统与运行过程中,由于掉电、重启、丢包等意外因素而导致服务器得到的温度值出现瞬间变大、变小等现象,因此在服务器中加入异常数据过滤功能。考虑到发酵温度属于大滞后变量,以移动时间窗为基础,对时间窗时段内的温度值进行线性拟合得出当前时段的变化趋势,对温度跳变过大的温度值进行剔除,采用上一时间点的温度值进行填补[24]。
2.3.1现场端显示人机界面
每个监测节点的现场端显示人机界面采用OLED显示,主要显示监测系统中各检测杆模块信息,便于用户查看监测系统是否运行正常。OLED左侧显示区域显示检测模块采集深度,由解析服务器返回的包含该部分配置信息的JSON文件得到;右侧显示区域显示对应采集深度的温度数据,当主机模块对检测杆模块数据汇聚完成时,OLED显示子程序将所汇聚数据以数据队列形式进行管理,并通过匹配检测模块ID的方式,确定温度数据对应的采集深度,再将温度数据信息存储在OLED对应的显示缓冲区中,将信息显示在OLED显示屏上,如图9所示。
图9 监测系统设备OLED显示
2.3.2远程监控界面
远程监控显示界面采用QT内置的GUI服务系统进行设计[25]。如图10所示,显示界面内包含服务器IP地址、端口,数据库IP地址、端口等绑定信息,以及当前所连接的监测系统参数信息(包括监测系统设备ID、运行地点、系统所带检测杆模块监测的数据结果)。并可以通过历史数据查询页面对各个监测节点的历史数据进行查询,以曲线和数据表格形式显示,并提供数据导出功能以满足用户的数据分析需求。
图10 服务器端显示界面
2.3.3微信小程序显示
微信小程序采用Stable Build进行开发,使用JSON配置信息,CSS+XML实现视图层,通过JavaScript实现逻辑层结构。如图11所示,主要包含设备信息和监测数据两个区域,设备信息区域包括“监测系统设备ID”、“模块个数”,监测数据区域为“当前设备ID”以及对应“温度”、“所在深度信息”,当检测杆模块数量发生变化时页面会自动根据数量对监测数据区域所包含的显示块进行增减。
图11 微信小程序页面动态显示
为检验系统的实际工作效果,在江苏省镇江市江苏培蕾基质科技有限公司5号发酵池内进行了系统的信息测试(图12),该发酵池长约150 m、宽度为3.5 m、发酵堆堆高为1 m,检测杆模块分别位于与发酵堆表层距离0.1、20、60 cm处,每隔10 min监测系统上传一次温度数据。
图12 实际测试实验
采用主机模块带载4个检测杆模块进行。监测系统通过加入基于2N7002的电源管理电路对系统外设进行开断从而降低系统运行功耗。为测试其效果,分别从非低功耗处理、软件低功耗处理、软硬件协同低功耗处理3方面进行4个周期的休眠唤醒测试。如图13所示,非低功耗处理下所有外设全部打开,处理任务状态下峰值电流超过160 mA,非处理任务时电流维持在137 mA;软件低功耗状态下休眠STM32F103、关闭OLED,峰值电流降至150 mA,休眠状态下平均电流维持在100 mA,相比非低功耗处理,功耗降低26%;软硬件协同低功耗处理下,通过电源管理模块对所需功能的外设进行控制,当监测系统执行任务时峰值电流为110 mA,相比前两种方式电流分别降低31%和26%,而待机模式下电流仅为0.6 mA。
图13 3种处理方式下系统总电流变化曲线
温度采集精度测试通过恒温水浴对发酵堆堆料进行加热的方式进行,加热器型号为威研-258,实验过程中将温度在10~80℃内进行调节,通过DeltaTRAK11050型工业实验室高精度温度计与检测模块进行同步测量,将温度计测量值作为实际值与采集模块测量值进行对比。测试结果如图14所示,监测系统在不同温度下的测量值与实际值回归分析结果显示其决定系数R2为0.999 7,相对标准偏差均不超过2.34%,满足发酵堆监测要求。
图14 检测模块采集精度测试结果
在系统运行期间同时使用TF卡和云服务器两种方式对数据进行保存,测试服务器数据异常处理功能的性能。图15a为主机模块在检测杆模块数据汇聚后存储到TF卡的数据,图15b为主机模块通过异常数据过滤后上传至服务器中的数据。从数据采集效果可以看出,0.1 cm处的温度呈现周期性起伏变化,白天由于太阳辐射的原因最高温度可达到55℃,夜晚由于自然降温的原因下降到32℃左右;监测系统在20 cm处采集到的温度最高,并且可以达到65℃以上,随着发酵堆深度的增加,温度整体下降5℃左右,这是因为上层的发酵堆透气性好、微生物活性强,进而产生的热量更多。从异常数据处理效果看,不同层的检测模块在进行数据汇聚时总计出现了5次数据丢失的情况,丢失的具体表现为数值骤降,但经过2.2.4节所设计的系统异常处理后所有异常数据均被清除。总体上,监测系统所采集的数据结果真实有效,没有出现数据失真的现象,符合发酵堆温度的实际变化,并且整个监测过程中服务器端对数据进行了异常处理,有效剔除了异常温度数据,为后期数据处理提供便利。
图15 模块异常数据过滤
(1)提出了一种可组合式的多层温度监测系统。该系统具备无线网络数据传输能力,且配备本地数据存储的冗余设计,可实现对发酵堆内部温度便捷、稳定地进行实时监测以及记录,在农业废弃物发酵过程温度变化及其过程控制领域具有较大意义。
(2)针对温度监测系统需具备抗恶劣环境、长续航要求高的特点,本文对检测系统的外围电路进行了设计并且加入了电源管理电路。通过软件、硬件协调控制的方法使系统在运行过程中电流峰值降低且休眠状态下静态电流仅为0.6 mA,大幅度降低了能源消耗,实现监测系统长时间稳定运行。
(3)在发酵堆实际应用测试中表明,杆体中检测杆模块增减后无需人工再配置,监测显示页面可自动适配,且系统在长时间工作下数据传输及时准确,具备较高的可靠性。