引言
随着人类生活水平的不断提高,人口老龄化成为一个全球性的发展趋势。目前,我国已经进入了老龄化社会[1],老年人的身心健康问题得到人们更多的关注。老年人因生理结构衰老和身体机能减退,发生意外跌倒的概率和频率非常高[2]。跌倒可以导致老年人身体组织挫伤、骨折甚至危及生命,并从心理上给老年人造成了压力和恐惧感。实际上很多伤亡并不是由于意外跌倒本身造成的,而是由于跌倒发生后,老年人没有得到及时的救治造成的[3]。因此,在老年人发生跌倒后,如何尽早被发现,并发出求救信号进行及时救治变得格外重要。为了老年人更健康地生活,研究设计一个老年人的跌倒检测报警系统具有十分重要的研究价值和实际意义。
目前,研究开发人体跌倒检测系统方面的技术有很多种,最常见的是图像分析和加速度分析法。参考文献[4]~[6]都是基于视频图像分析的室内跌倒自动检测系统,这种技术准确性高,人体动作清晰可见,但需要多部摄像机同时工作,暴露了用户的个人隐私,而且监测范围有限,受环境的影响也很大。另一种加速度分析方法,主要基于微机电系统(MicroElectromechanical System,MEMS)传感器。MEMS技术近几年得到了快速发展,广泛应用在跌倒检测、状态检测、运动检测等方面。参考文献[7]~[9]都是利用MEMS技术进行人体跌倒检测的,目前国内一些基于MEMS技术的跌到检测虽可较好实现跌倒检测,但大多计算量较大、设计复杂、价格昂贵,难以得到广泛的应用。
设计一种基于Arduino和三轴加速度传感器的跌倒检测报警系统,实时采集人体加速度参数和地理位置信息,应用于老年人意外跌倒后及时报警,兼具了性价比高、设计简单、实时性高、低功耗、可扩展的特点。
1系统总体设计
跌倒检测报警系统由Arduino最小系统、加速度参数采集模块、GPS定位模块、GSM通信模块组成,其系统结构框图如图1所示。
图1 跌倒检测报警系统结构框图
Arduino实时接收加速度参数采集模块传来的人体加速度参数值,单片机通过接收来的加速度值,使用跌倒检测算法来判断穿戴者的体态,如果检测到跌倒的发生,便触发跌倒报警机制。当跌倒发生时,通过GPS定位模块捕获到穿戴者的具体地理位置,然后发出包含跌倒位置的报警求救信息,通知佩戴者的监护人或医疗机构,进行后续的救治。本系统在考虑这些功能需求的前提下,采用Arduino为控制核心,外围连接加速度参数采集模块、GPS定位模块、GSM通信模块,来实现整个系统的功能。
2硬件设计
硬件部分主要包括微控制器最小系统、加速度参数采集模块、GPS定位模块、GSM通信模块,以及各个模块之间的连接。
2.1Arduino平台
Arduino是一款基于开源的电子原型设计平台,包含两个主要的部分:硬件部分是可以用来做电路设计的电路板,基于AVR系列单片机和ARM微控制器,有丰富的外设接口和硬件资源;软件部分则是Arduino IDE,是计算机中的程序开发环境[10]。Arduino的模块化设计,大大简化了电子系统的设计过程。
其中,微控制器最小系统选用Arduino Uno,它是基于Atmel公司的ATmega328P单片机的硬件平台,具有32 KB Flash、1 KB EEPROM、14路数字输入/输出接口(其中6路可用于PWM输出)、6路模拟输入接口。同时,Uno预置了Bootloader程序,不需要其他外部烧写器,可以直接通过USB下载程序。
2.2加速度传感器ADXL345
ADXL345是ADI公司推出的基于iMEMS技术的三轴、数字输出加速度传感器。ADXL345具有多种可变的测量范围且具有高分辨率、高灵敏度、超小封装、超低功耗、标准的I2C或SPI数字接口、32级FIFO存储,以及内部多种运动状态检测和灵活的中断方式等特性[11]。所有这些特性,使得 ADXL345有助于大大简化跌倒检测算法,使其成为一款非常适合用于跌倒检测器应用的加速度传感器。图2为ADXL345功能框图。
图2 ADXL345功能框图
ADXL345标准的I2C数字接口可以和Arduino Uno的I2C接口方便地进行通信,将ADXL345采集到的人体三轴加速度数据传给单片机进行跌倒检测算法处理,图3给出了ADXL345和单片机之间的I2C总线典型连接图。ADXL345的CS引脚接高电平,表示ADXL345工作在I2C模式。SDA和SCL是I2C总线的数据线和时钟线,分别连接到Arduino Uno相应的I2C总线接口(A4和A5)。ADXL345的INT1引脚连接到Arduino Uno的INT0(Pin2),用来产生中断信号。
图3 ADXL345和单片机之间的I2C典型连接图
2.3GPS定位和GSM通信模块SIM908
SIM908是一款集成了高性能GSM/GPRS引擎和GPS引擎的芯片。其中的GSM/GPRS引擎可以工作在GSM 850 MHz、EGSM 900 MHz、DCS 1800 MHz和PCS 1900 MHz四个频段;GPS引擎具有一流的采集和跟踪灵敏度、TTFF(TimeToFirstFix)和准确度[12],这些特性可以很好地完成跌倒位置定位和发送报警信号的任务。在SIM908芯片上可以同时完成GPS定位和GSM通信功能,可以大大减少系统芯片的数量和功耗。图4为SIM908的功能框图,通过UART口与Arduino Uno进行通信,RXD和TXD分别与Uno的TXD和RXD相连,完成跌倒位置的GPS数据捕获和发送GSM报警短信功能。
图4 SIM908功能框图
3算法设计与实验
3.1跌倒检测算法
对跌倒检测原理的研究主要是找到人体在跌倒过程中的加速度变化特征。加速度在不同运动过程中的变化曲线略——编者注,包括步行上楼、步行下楼、坐下、起立。
由于老年人的运动相对比较慢,所以在普通的步行过程中,加速度变化不会很大。最明显的加速度变化就是在坐下动作中Y轴加速度(和加速度矢量和)上有一个超过3g的尖峰,这个尖峰是由于身体与椅子接触而产生的。而跌倒过程中的加速度变化则完全不同,意外跌倒过程中的加速度变化曲线略——编者注。通过比较,可以发现跌倒过程中的加速度变化有4个主要特征,可以作为跌倒检测的准则。
失重:在跌倒的开始都会发生一定的失重现象。在自由落体的下降过程中,这个现象会更加明显,加速度的矢量和会降低到接近0g。对于一般的跌倒,也会发生合加速度小于1g的情况。因此,这可以作为跌倒状态的第一个判断依据,由ADXL345的Free_Fall中断来检测。
撞击:失重之后,人体发生跌倒的时候会与地面或其他物体发生撞击,在加速度曲线中会产生一个很大的冲击,这个冲击可以通过ADXL345的Activity中断来检测。因此,Free_Fall中断之后,紧接着产生Activity中断是跌倒状态的第二个判断依据。
静止:人体在跌倒后,也就是撞击发生之后,不可能马上起来,会有短暂的静止状态(如果人因为跌倒而导致昏迷,甚至可能是较长时间的静止)。表现在加速度曲线上就是会有一段时间的平稳,可以通过ADXL345的Inactivity中断来检测。因此,Activity中断之后的Inactivity中断是跌倒状态的第3个判断依据。
与初始状态比较:跌倒之后,人体会发生翻转,因此人体的方向会与原先静止站立的姿态不同,这使得跌倒之后的静止状态下的三轴加速度数值与初始状态下的不同。因此,跌倒检测的第4个依据就是跌倒后的静止状态下加速度值与初始状态发生变化,且矢量变化超过一定的门限值。
这4个判断依据综合在一起,构成了完整的跌倒检测算法,可以对跌倒状态给出报警。另外,如果跌倒造成了严重的后果(比如,导致了人的昏迷),那么人体会在更长的一段时间内都保持静止,这个状态仍然可以通过Inactivity中断来检测。也就是说,如果发现在跌倒之后的很长时间内都保持Inactivity状态,可以再次给出一个严重报警。算法流程图如图5所示。
图5 算法流程图
3.2实验结果
本文设计了一个实验方案对算法进行验证。实验对向前跌倒、向后跌倒、向左跌倒、向右跌倒等不同跌倒姿势以及跌倒后是否有长时间静止状态的情况分别进行了10次测试,表1中给出的是相关测试结果。
结语
本设计将加速度传感器ADXL345、GPS和GSM模块SIM908与Arduino Uno平台结合在一起,通过加速度传感器采集人体三轴加速度值,实时检测人体体态,完成对人体跌倒的检测和报警。整体设计具有成本低、可靠性高、算法复杂度低、检测准确度高和可扩展的优点,具有很高的实用性,可以满足对人体跌倒检测报警的需要。