刘林真
(阳光学院电子信息工程系,福建福州 350015)
在中国传统节日中,人们往往会燃放烟花爆竹为节日增添喜庆气氛.然而烟花爆竹易燃易爆,其在生产、经营、运输、燃放过程中都应注意安全.烟花溯源系统是分析目前烟花爆竹行业现状,结合当前先进物联网技术,建立一套由烟花爆竹生产商、批发商、零售商、安全监管人员、消费者共同参与数据建立、维护和查询的烟花爆竹安全溯源系统,用以规范烟花爆竹安全监督以及管理工作,实现烟花爆竹产品的可溯源性[1].系统将利用物联网中先进的RFID技术并依托 .NET平台、网络技术、嵌入式技术、多媒体技术、数据库技术,对烟花产品生命周期的每一个阶段(包括生产、仓储、运输、流通)提供合理决策.通过建立一个完整的烟花爆竹产品安全控制体系,实现烟花爆竹产品的源头追踪.本研究主要针对烟花爆竹在仓库存储过程中的温、湿度监控模块进行阐述.
相关条例指出,烟花必须储存在专用仓库,储存方式须符合国家标准,并由专人管理,设置相应的监控系统,使用场所应设置通讯、报警装置,并保证在任何情况下处于正常适用状态.为此,利用先进的电子通讯技术对烟花仓库的温度、湿度等环境参量的自动检测和智能化监控,是实现烟花存储安全的一个重要手段.本系统设计基于STM32和nRF2401的烟花仓库温湿度监控系统.系统以STM32F103处理器为控制中心,通过温、湿度传感器,采样环境信息,采用嵌入式μC/GUI设计图形用户界面,提高用户操作性;移植嵌入式μC/OS操作系统,简化程序设计,提高系统实时性.
系统主要由三部分组成:温、湿度采集模块,数据接收模块及PC端监控模块.温、湿度采集器分布于监测环境的各位置,自动进行温、湿度数据采集.当温度或者湿度超过阈值时,系统报警(灯闪烁,蜂鸣器响起),并将数据传输至数据接收模块.数据接收模块接收到环境参数信息后,通过串口通信方式将采集的温湿度数据信息以及对应的监测位置上报给PC端监测模块.监测模块对数据进行分析、处理并进行实时显示.系统总体框图如图1所示.
图1 系统总体框图Fig.1 Block diagram of overall system
温、湿度采集分站在嵌入式设备上实现,硬件平台采用STM32F103处理器为控制器,外接电源、串口、JTAG接口、LCD触摸屏,温、湿度传感器采用DHT11,无线通信模块采用nRF2401无线收发器芯片.
硬件重点考虑主控模块、无线通信模块、温湿度采集模块.主控模块采用技术较为成熟且功能强大的ARM Cortex-M3T体系的STM32单片机[2].考虑用STM32,主要是因为其实时性能出色,具有较大的集成性,易于开发,性价比远高于51单片机,能移植μC/OS操作系统.要使STM32能工作起来,至少分别需要几部分电路,包括供电电源、晶振电路、复位电路、BOOT电路等.
无线通信模块采用nRF24L01.nRF24L01是一款工作在2.4 GHz全球开放ISM频段的无线射频收发芯片,具有自动应答及自动重发功能.STM32通过SPI接口、IO口外部中断与nRF2401连接[3],SPI为数据通信,IO口控制模块的使能端,当发送或者接收到数据通过外部中断引脚进入中断处理程序.图2为nRF2401与STM32连接图.
温、湿度传感器采用DHT11.DHTll作为一种新型的单总线数字温湿度传感器,不再需要外置的A/D转换模块,而且体积小、功耗低、响应速度快、抗干扰能力强.湿度测量范围为20%~90% ,温度测量范围为0~+50℃,湿度测量精度为±5.0% ,温度测量精度为±1.0℃[4].DHTll与STM32通信只需要一个IO口,固将其DATA线连接到STM32的IO口上,通过IO口模拟单总线时序.系统硬件如图3所示.
图2 nRF2401与STM32连接图Fig.2 Connection diagram between nRF2401 and STM32
图3 系统硬件实物图Fig.3 System hardware diagram
软件平台为嵌入式μC/OS操作系统,版本为V2.86,移植μC/GUI 3.9设计图形界面[5].开发环境为RealView MDK-ARM3.80a,采用STM32标准库3.5.0.开发流程具体包括:① μC/OS内核裁剪移植;②μC/GUI移植;③ 编写多任务;④ 代码测试.
系统的程序主要包括这几部分:多任务创建、无线NRF2401数据发送接收、DHT11温湿度数据采集、μC/GUI界面显示、串口数据接收发送、系统与运行及报警指示灯等.
系统的流程为:系统上电复位后,首先对系统的各部分硬件进行初始化.初始化后μC/OS完成6个任务的创建,分别包括界面任务APP_TASK_USER_IF、触屏任务APP_TASK_KBD、DHT11温湿度采集任务APP_TASK_THC、LED灯闪烁任务APP_TASK_LED、蜂鸣器报警任务 APP_TASK_BEE、nRF2401发送数据任务APP_TASK_NRF.然后,系统开始执行第一个已经就绪的并且任务优先级最高的任务.系统中,界面任务和触屏任务启动,两个任务都调用延时函数 OSTimeDlyHMSM(0,0,0,100)延时100 ms,然后刷新屏幕.温湿度采集任务每500 ms采集一次DHT11的温、湿度数据,并根据数据的结果决定是否启动灯闪烁任务、蜂鸣器报警任务以及nRF2401发送数据任务.基于μC/OS操作系统应用程序的主函数流程如图4所示.
图4 系统程序总流程图Fig.4 Flow diagram of system program
μC/OS是一个可移植、可固化的、可裁剪的、可剥夺的多任务实时内核,它适用于多种微处理器、微控制器和数字处理芯片(已经移植到超过100种以上的微处理器应用中)[6].同时,该系统源代码开放,有详细的注释,适合系统开发[6].
μC/OS是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的[7].CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,便于移植到任意CPU上.用户只要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS嵌入到开发的产品中[8].μC/OS具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2 kB.μC/OS已经移植到了几乎所有知名的CPU上[9].
消息邮箱是μC/OS内核中用来实现任务间通信的一种机制,它能使一个任务或中断服务向另一个任务发送一个指针型的变量,这个指针指向一个包含特定消息的数据结构[10].μC/OS内核提供了与消息邮箱相关的7个函数:OSMboxCreate()-创建消息邮箱、OSMboxDel()-删除消息邮箱、OSMboxPend()-请求消息邮箱、OSMboxAccept()-无等待地请求消息邮箱、OSMboxPostOpt()-可选择发送方式的发送消息邮箱、OSMboxPost()-发送消息邮箱和OSMboxQuery()-查询消息邮箱.
系统要求温度或者湿度高于给定阈值的情况下能唤醒3个任务:LED灯闪烁任务、蜂鸣器报警任务、nRF2401发送数据任务,所以采用可选择的广播方式发送邮箱.考虑到温度值或者湿度值都可唤醒以上3个任务,可设计2个消息邮箱,分别用来监控两类数据.同时,较大面积的仓库中需多个点同时采集温、湿度值,为了记录每个点的具体位置,设计一个结构体专门用来存储每个点的温、湿度值以及对应的位置,结构体定义如下:
如此,只要将消息邮箱中的指针指向该结构体,当报警时能实时读出具体的位置,对后续的处理争取了更多的时间.
μC/OS具有源代码开放的特性,从μC/OS关于发送消息邮箱相关函数得到一个结论:如果消息邮箱中已有消息,则返回错误代码.说明消息邮箱已满,立即返回调用者,并丢弃新消息.从实际应用角度考虑,如果消息邮箱中已经存放有相关的超值信息,但还未处理,此时如果有新的消息进来,不能简单屏蔽新消息或者旧消息,而应该根据实际保留数值较高的那个消息,目的是可以保证实时同步,也能第一时间监控到更危险区域.这样就需要对μC/OS中OSMboxPostOpt()函数进行修改.
OSMboxPostOpt()函数中对已有消息的处理为:
监控主站通过串口与数据的接收总站进行通信,考虑到现在的PC机较少提供串口,而在下位机端串口是较普遍、简单的通信方式,于是在PC端利用USB接口虚拟串口,及安装USB虚拟串口驱动.
监控总站在启动监控之前可以根据需要修改默认的下位机报警阈值,启动监控后从下位机接收超过阈值的温湿度数据以及对应的位置,将报警数据通过特殊颜色标注出来,提醒监控人员.系统还具有停止监控、清除警报、历史查询等功能.PC端软件基于.NET平台设计,采用C#语言进行开发,开发工具使用Visual Studio 2013.
系统在11 m×8 m的实验室环境下进行了测试.
实验设备包括4个温湿度监控模块,放置于实验室4个角落.一个无线数据接收模块(STM32+nRF2401接收模块)以及一台PC机(STM32与PC机通过USB转虚拟串口连接),放置于实验室教师机位置(与其中两个监控模块较近,与另外两个监控模块距离较远).设置温度阈值为28℃,相对湿度阈值为75%.系统开启后,4个监控模块开始作业,每500 ms采集一次温、湿度.当温、湿度超过阈值时,会产生声光报警,同时,PC机的调试串口终端会显示报警的位置以及当前的温、湿度值.结果如图5所示.
图5 PC端系统主界面Fig.5 Main interface of PCterminal system
实验过程采集多组温度以及湿度的数据,并将这些数据与标准温湿度进行对比,测量数据以及对比结果如表1所示.
由表1的对比结果可以看出,测量温度与标准温度的偏差小等于1.0℃ ,测量湿度和标准湿度的偏差小于等于3.0%,满足烟花温湿度监控系统的应用设计要求.
实验结果表明,该套系统能完成既定目标、反应时间以及传输速率基本能达到实时的特性,PC端能实时且不遗漏地显示温、湿度超过阈值的位置,性价比较高,适合推广.系统的特色有如下几点:
①采用STM32控制器,STM32控制器性价比高,低端的51或52单片机无法移植μC/OS、μC/GUI,高端的ARM处理器价格却高于STM32较多,而且学习难度较大;STM32有官方提供的库函数,开发速度快,周期短,而且系统稳定性较高.
②移植μC/OS操作系统,μC/OS操作系统实现了多任务,而且通过消息邮箱、消息队列实现了多任务的通信.系统为保证能不丢失地显示温湿度超过阈值的位置,选择了消息队列机制,消息队列能存取多则消息,适合多个发送者和接收者之间复杂的交互操作[10].
表1 测量分析数据Tab.1 Analysis of measurement data
结合嵌入式技术、无线通信技术、μC/OS操作系统、μC/GUI图形界面软件,综合设计了烟花仓库温湿度监测系统.经过方案的选择和比较、方案的设计、芯片的选型、原理图的设计,设计出基于STM32和nRF2401无线报警的硬件系统和软件系统.主机硬件系统设计规范,实现液晶显示控制、温湿度采集、无线发送、报警信息和串口通信控制等功能.主机软件系统设计合理,其中软件移植μC/OS操作系统,简化了程序设计.各模块相互独立,提高任务的并行性.改进消息邮箱算法,使消息邮箱中广播发送函数更适合本系统.μC/OS操作系统的开源特性得到具体应用,提高系统的可靠性和可扩展性.移植μC/GUI,使整个界面更加整洁,并且有相对较好地交互性.实验证明:该系统能实时对烟花温湿度进行监测,能实现一定的报警装置.当超过上限时能进行声光报警,并将数据传到服务器进行相应处理,整个系统具有较高的性价比.
[1]刘晓青.基于物联网的烟花爆竹流通安全监管系统的设计[J].电脑知识与技术,2012,8(29):6 921-6 923.
[2]陈志旺.STM32嵌入式微控制器快速上手[M].北京:电子工业出版社,2012:58-60.
[3]李庆山,戴曙光,穆平安.nRF2401无线模块在测控系统中的应用[J].电测与仪表,2006(8):58-59.
[4]曹昌勇,贾伟建.基于AT89C52和DHT11数字式粮库温湿度监控系统设计[J].齐齐哈尔大学学报:自然科学版,2014,30(1):32-34.
[5]王兰英.基于STM32嵌入式系统的uCGUI移植与实现[J].四川理工学院学报:自然科学版,2012,25(1):56-58.
[6]严明贵.嵌入式轴承故障诊断系统中基于ARM S3C2410A的Linux平台设计与实现[D].杭州:浙江大学,2006.
[7]李正军.基于NiosII软核CPU的TCP/IP协议实现[D].西安:西安电子科技大学,2006.
[8]任玉帅.SD存储方案的研究与实现[D].大连:辽宁师范大学,2009.
[9]王庆,季振洲,刘涛.基于嵌入式eCos多核平台的OpenMP并行算法的研究[J].黑龙江大学学报:自然科学版,2010,27(1):69-72.
[10]吴永忠.嵌入式实时操作系统μC/OS-II教程[M].西安:西安电子科技大学出版社,2007:36;139-162.