关志艳,赵一龙,边皖佳,冯喜喜,黄泽欣
(1.山西工程科技职业大学信息工程学院,山西 太原 030060;2.山西大学商务学院信息学院,山西 太原 030001)
我们国家对于生命特征的监测技术和相关产品的研究大多在体育、医疗等领域,或者是用于个人的功能型手环等,而针对于消防员作战时的生命特征监测领域的研究还处在初级阶段,并没有成熟的产品。大多数的产品存在携带不方便的问题,甚至影响消防员在战斗时做专业性的动作,或者是当消防员遇到了危险,但是报警系统不能及时传达到指挥端,通信能力差,使用这些设备很有可能会造成一些不必要的牺牲[1]。
针对上述情况,本设计提出的基于ZigBee的消防员生命特征监测系统,感知层采用CC2530单片机、心率传感器PulseSensor、温度传感器DS18B20和OLED显示屏实现数据采集;网络层采用ZigBee模块实现数据传输;应用层通过协调器串口将数据传输到PC机并显示。整体上可以实现心率及体温的监测、数据远程传输和报警的功能,可以为消防员指挥端提供有效数据支持。
系统的整体结构如图1所示。ZigBee终端控制心率传感器和温度传感器,获取消防员的心率和体温。ZigBee终端通过预设阈值来实现报警功能,如果所监测的数据出现异常,终端的蜂鸣器报警提示消防员,同时终端采集到的数据会同步传输到ZigBee协调器,并且通过串口将数据显示在PC端,供指挥端查看,当接收到的数据不在所设阈值的情况下蜂鸣器报警。
图1 系统整体结构图
1) 通过心率传感器和温度传感器采集消防员的心率和体温数据。
2) 采集到的数据通过ZigBee终端接收和处理在OLED液晶显示屏上显示。
3) 相关数据通过网络传输到ZigBee协调器并且在PC端实时查看数据。
4) 当所测得的数据高于或低于阈值时通过蜂鸣器报警。
本设计的电路是在Aultium Designer软件下进行绘制与设计的,整个设计主要包括最小单片机系统、显示模块、心率采集模块、体温采集模块、报警模块,如图2所示。
图2 感知层电路
在本次设计中,首先终端部分使用了CC2530的并行I/O口,如图2所示,其中P0_4连接心率传感器Pulse Sensor; P0_5连接蜂鸣器;P0_7连接温度传感器DS18B20;P0_0、P1_2、P1_3、P1_7连接OLED显示屏;协调器部分的P0_7连接蜂鸣器;P0_2、P0_3进行串口通信。其次使用了CC2530单片机的硬件定时器T3。最后使用SPI总线用于OLED显示屏的显示。
在心率采集模块使用Pulse Sensor传感器,它可以测量人体的心率,测量的时候是通过发光二极管对动脉血和血红蛋白具有选择性的波长进行测量,将得到的信号进行滤波和放大,再由CC2530单片机将采集到的模拟信号值转换为数字信号,再通过对应的计算得到心率数值[2]。
如图2所示,心率传感器的S端是脉搏信号输出端,需要接在CC2530单片机的AD接口P0_4;“+”需要接在3.3V电源接口,“-”接在GND接口。当手指放在传感器上的时候,检测脚就会随着心率的变化,输出对应波形,ZigBee使用ADC周期(2ms采样一次)去采样,分析数据,即可得到心率。
在环境温度采集模块使用DS18B20温度传感器,它的电源端接在单片机的3.3V电源接口,如图2所示,信号线接在P0_7接口,负极接在单片机的GND端口,在使用DS18B20时切记不可将电源端与负极反接,否则会造成传感器的损坏。
在显示模块采用OLED液晶显示屏,其显示数据的方式为SPI总线传输,如图2所示,SPI时钟接在P1_2引脚,SPI数据接在P1_3引脚,复位脚接在P1_7引脚,数据和命令选择接在P0_0引脚,高电平获取数据,低电平是命令。
在主程序中,首先ZigBee终端要对心率传感器、温度传感器以及串口定时器等进行初始化工作,随后与ZigBee协调器建立连接,进行数据的传输,协调器通过串口通信功能将监测到的数据显示在PC端。如图3所示为感知层主程序的流程图。
图3 感知层主程序流程
ZigBee协议是统一标准,是为了实现两个设备之间的通信。协议栈是在协议的基础上所做的一个集合,通过协议栈就可以实现两个设备之间的无线通信功能了。ZigBee协议分为两个部分。IEEE 802.15.4开发了有关PHY和MAC的相关标准。ZigBee联盟已经为NWK,APS和APL开发了相关标准。如图4所示。
图4 ZigBee协议架构
用户自己添加的应用任务程序在Zstack中的调用过程[3]:
main()—> osal_init_system()—> osalInitTasks()—> SampleApp_Init()
1) 程序入口
main函数的功能:首先执行初始化任务,包括硬件,网络层和任务初始化。然后运行osal_start_system()函数运行操作系统。
2) 系统初始化[4]
osal_init_system();函数是系统的初始化功能。osalInitTasks();函数是任务初始化功能。SampleApp_Init();函数是使用协议栈所需的函数,用户通常在其中初始化自己的协议栈。
3) 运行操作系统
4) 用户应用任务初始化
SampleApp_Init()函数是用于用户应用程序任务的初始化函数。
5) 应用任务事件处理函数
SampleApp_ProcessEvent()函数是事件处理功能,用于用户应用程序任务。
6) 应用层无线消息处理
应用程序层无线消息处理在函数SampleApp_MessageMSGCB中。
7) 周期发送数据
SampleApp_SendPeriodicMessage()周期发送信息函数,内部调用了函数AF_DataRequest进行无线消息发送[5]。
PC端的数据显示功能通过ZigBee协调器的串口与PC连接,使用sscom串口调试软件实现数据的显示与监测供指挥端作出进一步的指示。串口通信的流程:终端入网成功后,上传自己的短地址到协调器,终端串口输出“parent:0,xxxx”,其中“xxxx”为终端的短地址。协调器收到设备的短地址时,会将其保存在SerialApp_TxAddr中,协调器将其用于将数据发送到设备。在这一系列的准备工作完成之后就可以实现数据的发送接收功能。
该设计是基于ZigBee的消防员生命体征监测系统。该系统分为两部分,一部分是终端,可以通过携带的方式监测到消防员的生命特征,提前设置好阈值起到报警的功能;另一部分是协调器,可以通过ZigBee与终端建立网络连接,接收到终端传回的数据,并通过串口将数据显示在PC端。