三轴加速度传感器在跌倒检测中的应用
而跌倒过程中的加速度变化则完全不同。图4给出的是意外跌倒过程中的加速度变化曲线。通过图4和图3的比较,可以发现跌倒过程中的加速度变化有4个主要特征,这可以作为跌倒检测的准则。这4个特这在图4中以红色的方框标注,下面将对其逐一进行详细介绍。
图4 跌倒过程中的加速度变化曲线
1. 失重:在跌倒的开始都会发生一定的失重现象。在自由落体的下降过程,这个现象会更加明显,加速度的矢量和会降低到接近0g,持续时间与自由落体的高度有关。对于一般的跌倒,失重现象虽然不会有像自由落体那么明显,但也会发生合加速度小于1g的情况(通常情况下合加速度应大于1g)。因此,这可以作为跌倒状态的第一个判断依据。可以由ADXL345的Free_Fall中断来检测。
2. 撞击:失重之后,人体发生跌倒的时候会与地面或其他物体发生撞击,在加速度曲线中会产生一个很大的冲击。这个冲击可以通过ADXL345的Activity中断来检测。因此,Free_Fall中断之后,紧接着产生Activity中断是跌倒状态的第二个判断依据。
3. 静止:通常,人体在跌倒后,也就是撞击发生之后,不可能马上起来,会有短暂的静止状态(如果人因为跌倒而导致昏迷,甚至可能是较长时间的静止)。表现在加速度曲线上就是会有一段时间的平稳。这可以通过ADXL345的Inactivity中断来检测。因此,Activity中断之后的Inactivity中断是跌倒状态的第三个判断依据。
4. 与初始状态比较:跌倒之后,人体会发生翻转,因此人体的方向会与原先静止站立的姿态(初始状态)不同。这使得跌倒之后的静止状态下的三轴加速度数值与初始状态下的三轴加速度不同(见图4)。假设跌倒检测器固定在被测人体上的某个部位,这样初始状态下的三轴加速度数值可以认为是已知的(本例中,初始状态为:X轴0g,Y轴-1g,Z轴0g)。读取Inactivity中断之后的三轴加速度数据,并与初始状态进行比较。如图4所示,重力加速度方向由Y轴上的-1g变为了Z轴上的1g,这说明人体发生了侧向跌倒。因此,跌倒检测的第四个依据就是跌倒后的静止状态下加速度值与初始状态发生变化,且矢量变化超过一定的门限值(比如0.7g)。
这四个判断依据综合在一起,构成了整个的跌倒检测算法,可以对跌倒状态给出报警。当然,还要注意各个中断之间的时间间隔要在合理的范围之内。比如,除非是从很高的楼顶掉下来,否则Free_Fall中断(失重)和Activity中断(撞击)之间的时间间隔不会很长。同样,通常情况下, Activity中断(撞击)和Inactivity中断(静止)之间的时间间隔也不会很长。本文接下来会通过一个具体实例给出一组合理的取值。当然,相关中断的检测门限以及时间参数也可以根据需要而灵活设置。
另外,如果跌倒造成了严重的后果,比如,导致了人的昏迷。那么人体会在更常的一段时间内都保持静止。这个状态仍然可以通过Inactivity中断来检测。也就是说,如果发现在跌倒之后的很长时间内都保持Inactivity状态,可以再次给出一个严重报警。
典型电路连接
ADXL345和微控制器之间的电路连接非常简单。本文中的测试平台由ADXL345和微控制器ADuC70262组成。图5给出了ADXL345和ADuC70262之间的典型电路连接。ADXL345的CS管脚接高电平,表示ADXL345工作在I2C模式。SDA和SCL是I2C总线的数据线和时钟线,分别连接到ADuC7026相应的I2C总线管脚。ADuC7026的一个GPIO管脚连接到ADXL345的ALT管脚,用来选择ADXL345的I2C地址。ADXL345的INT1管脚连接到ADuC7026的IRQ输入用来产生中断信号。
其他的单片机或者处理器都可以采用与图5类似的电路与ADXL345进行连接。ADXL345还可以工作在SPI模式以获得更高的数据传输速率。关于SPI工作模式的具体描述,请参考ADXL345数据手册。
图5 ADXL345与微控制器之间的典型电路连接
表1 ADXL345寄存器功能说明
地址 | 寄存器名称 | 类型 | 默认值 | 说明 | 设置值 | 设置的功能 |
0 | DEVID | 只读 | 0xE5 | 器件ID | 只读 | |
1-1C | Reserved | 保留,不要操作 | 保留 | |||
1D | THRESH_TAP | 读/写 | 0x00 | Tap的门限 | 不使用 | |
1E | OFSX | 读/写 | 0x00 | X轴失调 | 0x06 | 补偿X轴失调,通过初始化校正获得 |
1F | OFSY | 读/写 | 0x00 | Y轴失调 | 0xF9 | 补偿Y轴失调,通过初始化校正获得 |
20 | OFSZ | 读/写 | 0x00 | Z轴失调 | 0xFC | 补偿Z轴失调,通过初始化校正获得 |
21 | DUR | 读/写 | 0x00 | Tap的持续时间 | 不使用 | |
22 | LATENT | 读/写 | 0x00 | Tap的延迟时间 | 不使用 | |
23 | WINDOW | 读/写 | 0x00 | Tap的时间窗 | 不使用 | |
24 | THRESH_ACT | 读/写 | 0x00 | Activity的门限 | 0x20/0x08 | 设置Activity的门限为2g或0.5g |
25 | THRESH_INACT | 读/写 | 0x00 | Inactivity的门限 | 0x03 | 设置Inactivity的门限为0.1875g |
26 | TIME_INACT | 读/写 | 0x00 | Inactivity的时间 | 0x02/0x0A | 设置Inactivity的时间为2s或10s |
27 | ACT_INACT_CTL | 读/写 | 0x00 | Activity/Inactivity使能控制 | 0x7F/0xFF | 使能X、Y、Z三轴的Activity和Inactivity功能,其中Inactivity为AC coupled模式,Activity为DC coupled 或 AC coupled模式 |
28 | THRESH_FF | 读/写 | 0x00 | Free-Fall的门限 | 0x0C | 设置Free-Fall的门限为0.75g |
29 | TIME_FF | 读/写 | 0x00 | Free-Fall的时间 | 0x06 | 设置Free-Fall的时间为30ms |
2A | TAP_AXES | 读/写 | 0x00 | Tap/Double Tap使能控制 | 不使用 | |
2B | ACT_TAP_STATUS | 只读 | 0x00 | Activity/Tap中断轴指示 | 只读 | |
2C | BW_RATE | 读/写 | 0x0A | 采样率和功耗模式控制 | 0x0A | 设置采样率为100Hz |
2D | POWER_CTL | 读/写 | 0x00 | 工作模式控制 | 0x00 | 设置为正常工作模式 |
2E | INT_ENABLE | 读/写 | 0x00 | 中断使能控制 | 0x1C | 使能Activity、Inactivity、Free-Fall中断 |
2F | INT_MAP | 读/写 | 0x00 | 中断影射控制 | 0x00 | 所有中断影射到Int1管脚 |
30 | INT_SOURCE | 只读 | 0x00 | 中断源指示 | 只读 | |
31 | DATA_FORMAT | 读/写 | 0x00 | 数据格式控制 | 0x0B | 设置为+/-16g测量范围,13bit右对齐模式,中断为高电平触发,使用I2C数据接口 |
32 | DATAX0 | 只读 | 0x00 | X轴数据 | 只读 | |
33 | DATAX1 | 只读 | 0x00 | 只读 | ||
34 | DATAY0 | 只读 | 0x00 | Y轴数据 | 只读 | |
35 | DATAY1 | 只读 | 0x00 | 只读 | ||
36 | DATAZ0 | 只读 | 0x00 | Z轴数据 | 只读 | |
37 | DATAZ1 | 只读 | 0x00 | 只读 | ||
38 | FIFO_CTL | 读/写 | 0x00 | FIFO控制 | 不使用 | |
39 | FIFO_STATUS | 只读 | 0x00 | FIFO状态 | 不使用 |
评论