生理参数采集是指对人在特定环境下静止或活动时的某些生理参数进行测量、处理和传送。该技术应用领域广泛,如医疗、保健、体育、军事和服装舒适性评价等。生理参数采集的实现方法是将传感器置于人体相应部位,以有线或无线方式将传感器采集到的数据传送到终端进行处理。在使用中有线传输的方式有时会受到限制,所以有必要研究采用无线方式传输数据的方法。如在服装舒适性评价应用中,主要方法有:在真实环境下对人体表温湿度的测量;在模拟环境(人工气候室)下对真人或假人体表温湿度的测量,根据测量值给出主客观评价。在进行真实环境下人体穿着动态实验时,无线数据采集传输方式会带来很大方便。无线传感器网络技术发展迅速,将这一技术应用于人体生理参数采集在国内已有相关应用,如参考文献[2]提出基于Zigbee技术的无线传感器网络在远程家庭监护中的应用,参考文献[3]提出了无线传感器技术在医疗监护中的应用。本文将结合具体应用,从无线传感器网络节点软硬件平台选择、网络体系结构、MAC层协议、节点低功耗设计等方面分析和设计人体参数采集。
1 系统设计
1.1 网络体系结构及协议
网络拓扑结构主要描述网络节点的连接模式。人体生理参数采集范围小,传感器节点集中,各节点间一般不需要通信。根据这些特点,可以使用星型网络拓扑结构。在星型拓扑结构中,每个分支节点以点到点的方式连接到中心节点上,当在中心节点与分支节点间大量通信时,采用星型拓扑结构是最有效的。其优点在于能够将资源集中、网络易于管理、覆盖范围集中、路由算法相对简单,有问题的节点很容易在不影响其他节点性能的情况下被中心节点隔离掉。
在无线传感器网络中,MAC(Medium Access Control)协议决定无线信道的使用方式,在传感器节点之间分配有限的无线通信资源,对传感器网络的性能有较大影响,是保证无线传感器网络低功耗工作的关键网络协议之一。人体生理参数采集应用中,传感器节点周期性采集数据,供电常采用小型纽扣电池,而中心节点一般供电充足,所以采用CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)控制协议。中心节点不关闭射频模块,持续接收。传感器节点定时采样、发送数据,在需要发送数据时打开射频模块,首先对信道进行侦听,若信道被占用,则退避一段随机时间后再继续侦听,若此时信道没有被占用,则发送数据,得到确认后关闭射频模块,MCU进入睡眠模式,等待下一次定时触发。
1.2 射频收发器件及网络操作系统
传感器节点要求体积小、功耗低、能够进行数据处理和无线收发,这里采用TI/Chipcon公司CC2430EM评估板作为无线收发模块,传感器电路根据需要自行设计。CC2430评估板的P0.1~P0.7、P1.0~P1.7及P2.0~P2.2口线,可与传感器电路连接进行控制。芯片CC2430内嵌CC2420射频收发器和8051 MCU,内含12 bit模/数转换器、4个定时器、32 kHz晶振的休眠模式定时器,硬件支持CSMA/CA,供电电压2.0 V~3.6 V,在掉电模式下电流消耗仅0.5 μA,可通过外部中断或实时时钟唤醒。无线传感器网络可以被视为由多个能量、存储空间和处理能力有限的CPU组成的计算机系统,这些CPU相互独立,又协同工作。为便于软件开发与维护,提高软件开发效率,采用TinyOS嵌入式操作系统。TinyOS是一种专门为嵌入式系统设计的基于组件的操作系统,主要应用于无线传感器网络,由nesC语言实现,它采用轻量级线程技术、主动消息通信技术、事件驱动模式、组件化编程方式。使用该操作系统能够提高CPU使用率,在TinyOS的调度下,所有与通信事件相关联的任务在事件产生时可以迅速进行处理。在处理完毕且没有其他事件的情况下,CPU将进入睡眠状态。
1.3 节点设计
图1为人体生理参数采集网络结构示意图。为提高便携性能,可以将其中的PC机用嵌入式设备替换。图中各传感器节点定时采样、发送数据,中心节点收到数据后通过串口送至PC机,进行显示和处理。
节点有两类:传感器节点和中心节点。在TinyOS环境下编程语言为nesC,为支持组件化编程模式,nesC语言引入了接口和组件的概念。接口是一些功能类似或相关的函数声明,根据调用方向不同命名为命令或事件,具体实现在提供或使用该接口的组件中。组件包括配件和模块,配件负责把不同组件通过接口连接起来,模块提供程序所需的代码实现。对于传感器节点,需要针对不同的传感器设计硬件驱动组件,结合已有的中间组件(如系统组件、电源管理组件、A/D转换组件、定时器组件、射频组件等),设计应用层的配置组件和模块组件。下面以温湿度传感器节点为例说明设计方法,温湿度传感器采用瑞士SENSIRION公司的SHT10。
温湿度传感器节点的组件连接如图2所示。小矩形框内是各组件使用和提供的接口,箭头方向表示命令调用的方向。因为所有传感器节点都具有定时采样、数据处理、按协议数据收发、射频模块和MCU电源管理等功能,所以这里将与传感器有关的操作单独设计一个组件SHT10_C,在顶层配件中通过与不同类型传感器组件连接,实现各传感器节点功能。将与传感器操作无关、与应用相关的其他功能组合设计一个中间组件SensorNet_C,通过与下层配件McuSleepC、CsmaC和CC2430ActiveMessageC连接,实现MCU电源管理、CSMA协议及射频模块控制。配件SHT10_C和SensorNet_C仅提供组件间连接关系,其实现分别由SHT10_M和SensorNet_M完成。在调用命令Send.send()发送数据时,首先进行清洁信道评估,如果信道被占用,则需要退避一段时间。退避时间由随机函数产生一个1~31之间的随机数,与一个给定初始值(这里设为160 μs,即10 symbols)相乘而得。初始值可以根据网络中节点数量进行调整,节点少则初始值小,反之则适当加大。温湿度传感器节点的顶层配置组件程序如下:
[pagebreak]
configuration SensorNodeSHT_C {
}
implementation {
components MainC; /*TinyOS2主模块,这里用于关联系统启动*/
components new TimerMilliC() as TimerC;
components SensorNet_C; /*射频模块、CSMA协议及MCU电源管理控制配置组件*/
components SHT10_C; /*温湿度传感器SHT10配置组件*/
components SensorNodeSHT_M; /*顶层模块组件*/
SensorNodeSHT_M.Boot->MainC.Boot;
SensorNodeSTH_M.Timer->TimerC;
SensorNodeSTH_M.RFControl->SensorNet_C;
SensorNodeSTH_M.AMPacket->SensorNet_C;
……
SensorNodeSTH_M.Send->SensorNet_C;
SensorNodeSTH_M.SHT->SHT10_C; /*实现接口STH的连接*/
}
在配件SensorNet_C中,通过连接配件CC2430ActiveMessageC使用模块组件CC2430ActiveMessageP中提供的射频功能。CC2430ActiveMessageP是射频堆栈中的顶层组件,提供单跳通信实现方法。通过连接配件McuSleepC使用模块组件McuSleepP中的MCU电源管理功能,实现MCU睡眠、定时和启动等功能,以降低节点功耗。需要在使用McuSleepP组件的上层组件SensorNet_M中实现事件McuSleepControl.beforeSleep()和McuSleepControl.afterWakeup(),以保护和恢复睡眠前后的状态。
温湿度传感器SHT10具有两线制串行接口,输出已校准数字信号。这里定义SHT10的接口SHT如下,需要在模块组件SHT10_M中实现接口所定义的命令。
interface SHT{
command error_t read(); /*在传感器模块组件STH10_M中实现*/
event void readDone(error_t result,uint16_t temperature,uint16_t humidity); /*在顶层模块组件SensorNodeSHT_M中实现*/
}
中心节点实现射频数据接收,然后通过串口将数据送给PC机。其顶层配置文件如下:
configuration CenterNode_C{
}
implementation{
components CenterNode_M; /*顶层模块组件*/
components MainC;
components CC2430ActiveMessageC as ActiveMessageC;
components ABSC; /*串口通信控制组件*/
CenterNode_M.Boot->MainC.Boot;
CenterNode_M.RFControl->ActiveMessageC;
CenterNode_M.AMPacket->ActiveMessageC;
CenterNode_M.Packet->ActiveMessageC;
CenterNode_M.Receive->ActiveMessageC.Receive;
CenterNode_M.ABS->ABSC;
}
2 传感器节点功耗计算
对人体生理参数进行采集,尤其在室外应用中,低功耗对于电池供电的传感器节点来说非常重要。以下应用参考文献[6]中的方法对本设计中的传感器节点的功耗进行计算。采用3.3 V直流电源供电,将一个1%精度的10 Ω电阻与CC2430EM串联,通过测量电阻两端的电压降来计算一个采样周期中各个时间段的电流。设采样周期T=10 s,CC2430射频输出功率设置为100%,图3为使用示波器TPS2024在传感器节点发送数据时获取的电阻两端电压变化波形图,水平方向2.50 ms/div,垂直方向100 mV/div。表1为活动期间的电流消耗。
一个采样周期T内低功耗模式时间(A段、G段,CC2430在PM2模式下):
TPM2=T-Ton=10000 ms-20.45 ms=10 451.65 ms
低功耗模式下(CC2430在PM2模式下)电流消耗:
0.000 5 mA×10 451.65 ms=5.225 8 mA·ms
一个采样周期T内总电流消耗:
472.1 mA·ms+5.225 8 mA·ms)/(3 600 000 ms/h)=1.326×10-4 mAh/10 s
每小时消耗电流:1.326×10-4×360=0.047 74 mA
假设使用60 mAh的纽扣电池,则可以使用时间为:60 mAh/0.047 74 mA=1 256 h≈52 天
本文采用nesC语言设计了基于TinyOS的中心节点和传感器节点程序,实现了使用CSMA/CA协议的星型无线传感器网络,并以温湿度数据采集为例,设计了采用温湿度数字传感器SHT10的传感器节点。当采样周期为10 s、使用60 mAh电池供电时,传感器节点可持续工作52天。本设计能够满足无线、便携、低功耗地采集人体生理参数的需要。使用模块化编程语言nesC,提高了开发效率,便于扩展。本文介绍的研究和设计方法可在相关应用中使用。