三轴加速度传感器在跌倒检测中的应用
利用ADXL345简化跌倒检测算法
本节将给出以上解决方案的具体算法实现。表1中简要说明了每个寄存器的作用以及在本算法中的设置值。对于各个寄存中每一位的具体含义,请参考ADXL345的数据手册。
需要指出的是,表1给出的设置值中,某些寄存器会给出两个数值,这说明在算法中会切换使用这两个数值,来达到不同的检测目的。算法的流程图如图6所示。
图6 算法流程图
算法中,关于各种中断的门限以及时间参数的设置如下所述。
1. 初始化后,系统等待Free_Fall中断(失重),这里把THRESH_FF设为0.75g,把TIME_FF设为30ms。
2. Free_Fall中断产生之后,系统开始等待Activity中断(撞击),这里把THRESH_ACT设为2g,Activity中断为DC coupled工作模式。
3. Free_Fall中断(失重)与Activity中断(撞击)之间的时间间隔设置为200ms。如果超过200ms,则认为无效。200ms计时需要通过MCU中的定时器来实现。
4. Activity中断产生之后,系统开始等待Inactivity中断(撞击后的静止),这里把THRESH_INACT设为0.1875g,把TIME_INACT设为2s,Inactivity中断为AC coupled工作模式。
5. 在Activity中断产(撞击)生之后的3.5s时间之内,应该有Inactivity中断(撞击后的静止)产生。如果超时,则认为无效。3.5s计时需要通过MCU中的定时器来实现。
6. 如果Inactivity中断之后的加速度值与初始状态(假设已知)下数值的矢量差超过0.7g,则说明检测到一次有效的跌倒,系统会给出一个报警。
7. 当检测到跌倒状态之后,为了判断是否在跌倒之后人体有长时间的静止不动。需要继续检测Activity中断和Inactivity中断。这里把THRESH_ACT设为0.5g,Activity中断为AC coupled工作模式。把THRESH_INACT设为0.1875g,把TIME_INACT设为10s,Inactivity中断为AC coupled工作模式。也就是说,如果在10s之内,人体一直没有任何动作,则会产生Inactivity中断,使系统给出一个严重报警。而在此期间一旦人体有所动作,则会产生Activity中断,从而结束整个判断过程。
8. 本算法还可以检测出人体从较高的地方跌落。如果Free_Fall中断连续产生且之间的间隔小于100ms,可以认为,人体处于连续的跌落状态。如果Free_Fall中断(失重)连续发生300ms,则说明人体是从超过0.45m的高度跌落,系统会给出一个跌落的报警。
本算法已在ADuC7026微控制器中以C语言实现(见附录)。本文设计了一个实验方案对算法进行验证。实验对向前跌倒,向后跌倒,向左、右两侧跌倒等不同跌倒姿势以及跌倒后是否有长时间静止状态的情况分别进行了10次测试,表2中给出的是相关测试结果。
表2 测试结果
跌倒姿势 | 跌倒后长时间静止 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
向前跌倒 | 否 | P | P | P | P | P | P | P | P | P | P |
是 | P* | P* | P* | P* | P* | P* | P* | P* | P* | P* | |
向后跌倒 | 否 | P | P | P | P | P | P | P | P | P | P |
是 | P* | P* | P* | P* | P* | P* | P* | P* | P* | P* | |
向左侧跌倒 | 否 | P | P | P | P | P | P | P | P | P | P |
是 | P* | P* | P* | P* | P* | P* | P* | P* | P* | P* | |
向右侧跌倒 | 否 | P | P | P | P | P | P | P | P | P | P |
是 | P* | P* | P* | P* | P* | P* | P* | P* | P* | P* | |
注:符号√表示检测到跌倒,符号*表示检测到跌倒后的长时间静止。 |
注:符号√表示检测到跌倒,符号*表示检测到跌倒后的长时间静止。
从这个实验中可以看出基于ADXL345的解决方案能够有效地对跌倒状态进行检测。当然,这里只是一个简单的实验方案,仍需要进行更加全面、有效和长期的实验来验证该解决方案的可靠性。
结论
ADXL345是ADI公司的一款功能强大的加速度传感器产品。本文利用ADXL345内部的多种运动状态检测功能和灵活的中断功能,提出一种新的跌倒检测解决方案。经验证,该解决方案具有算法复杂度低,检测准确度高的优点。
评论