------ 去年本科毕业设计的工作,一直想着整理,今天心血来潮,整理如下。。。-------
随着人口老龄化进程的加快,老年人监护和医疗问题正成为一个重大的社会问题。老年人意外受伤害的首要原因就是跌倒,因此,研究助老产品——跌倒检测器,将大大改善老年人的健康品质,对构建和谐社会的意义重大。
本课题设计了一种基于多传感器的老年人跌倒检测报警系统,依托嵌入式单片机STM32F101R8T6,利用普通的加速度传感器,对人体的空间三个方向的加速度值进行采集,倾角传感器采集人体的前后和左右倾角值,并且脚底压力传感器感知脚部的压力值。
在分析了传感器使用电路之后,本课题设计出了腰部和脚底的硬件电路图,完成了普通行为事件和跌倒事件实验。传感器数据经过MATLAB处理后,确定了多阈值判断跌倒算法中的加速度强度矢量SMV,区域加速度强度SMA,压力以及倾角的阈值,并在样机上进行了多人跌倒测试,对该设计的准确性和鲁棒性进行了验证。
关键词:跌倒检测,多传感器,加速度传感器,倾角传感器,阈值算法
1.1 课题研究背景
21世纪的来临,使全世界范围内人口老年化的进程加快,在这种全球趋势的情形下,中国也不例外,随着我国人口老年化进程的加剧,社会对这一群体的健康保障将承担越来越艰巨的责任。年龄的增长,身体解剖组织结构和生理代谢发生变化,由于自身疾病或者外界的影响,老年人常会发生意外跌倒,有时候甚至是健康的老年人也会发生,据国外研究机构统计,约有的超过65岁的老人平均每年发生一次跌倒,且随着年纪的增加,概率也增加,而本身身体有病痛或者伤害的老人,就更容易发生意外的跌倒。而跌倒次数巨大的背后,是由跌倒带来的辅助治疗所需消耗的高昂费用,以及照顾跌倒人群消耗的巨额社会资源,有研究表明,社会支付的医疗费用超过50万亿元,而付出的代价则为160-800万亿元人民币。
然而,跌倒造成的伤害不仅体现在身体的即时受伤,还体现在未得到及时的帮助而造成的所有后续恶劣影响。所以,针对跌倒问题,除了做好事先防范工作之外,如安全教育等,还应该在发生跌倒时,最快的将受伤人员送往医院进行救治,所以发明一个能够实时监测到跌倒并通知医护人员救治的产品很重要。
1.2研究目的和意义
当前计算机、通信、集成电子等科学技术的飞速发展,以及社会对保健产品的关注,都推动了家庭看护产业的发展,而其中针对老年人的跌倒探测领域的探索深入,对保证老年人生活的安全健康,意义重大。一般的跌倒检测器通过分析反映人体姿势的加速度值和能量变化,一旦出现异常情况时,可以及时告知医院进行救治,跌倒检测器可随身佩戴,不影响老年人的日常生活,可以让老年人不再畏惧跌倒,让他们更放心的去享受屋外的世界,丰富晚年生活趣味;另一方面也减轻了跌倒带来的对子女和社会的压力,响应了我国的建设以人为本的和谐社会的号召。
1.3国内外研究现状
目前对老年人跌倒检测技术相关研究主要的研究成果是利用加速度传感器检测装置,监测在跌倒事件发生时人体各方向加速度值,利用阈值检测或者模式识别的方法,对老年人的身体姿势状态进行实时检测,算法判断到处于跌倒状态后,再利用远程无线报警系统进行报警,通知护理人员进行救治,实现老年人的远程监护。
国外的“基于PDA的临床护理仪器”,帮助医护人员进行血压、身体温度以及其他日常信息的记录,能够极大地减小医院对病人的日常信息进行测试的开销,并且保证了数据记录的正确性等;另外中则是将收集的反映人体加速度信息的传感器信号通过无线发送的通信方式,传递到PC终端进行最后数据的融合。而跌倒检测之于国内主要是自动化机器人,已发布的塔米(Tami)的主要功能之一就是看护老人,塔米能够24小时不间断的对老年人的血压和脉搏进行监测,在异常情况下进行报警并联系医护人员;另外国家十一五期间将服务类机器人列为了国家高科技制造术的领头计划,指出将开发出一批实用性产品,旨在凭借现代技术改善老年人和残障人士的生活品质。
目前应用最普遍的跌倒检测技术有三类:(1)第一种为基于图像视频的方法,摄像头拍摄人体的活动图像,经过算法分析后确定人体状态,较为准确,但用户隐私是个待解决的问题;(2)基于音频信号的分析,分析跌倒冲击导致振动的频率,但适应性和正确性较差,且开销较大,一般作为其他检测方法的辅助手段;(3)基于穿戴式的检测装置,在穿戴设备中包含了微小的传感器装置和单片机处理器,能够随时监测人体各种状态,单片机利用感知到的传感器数据,再结合跌倒检测的相关算法进行跌倒判断。
1.4 本文内容安排
文章的六部分介绍如下:
第一部分是绪论,主要介绍了目前老年人跌倒检测研究背景,剖析了跌倒带来的严重社会问题,阐述了本课题探讨的原因,还介绍了国内外的跌倒研究现状。
第二部分在理论上对老年人跌倒检测算法进行了探讨,详细阐述了目前的跌倒检测主流方法,并详细介绍了本课题使用的跌倒检测算法。
第三部分完成了跌倒检测系统的硬件方案设计,其中硬件模块包括腰间中央处理器和腰间传感器采集模块,脚底压力传感器压力值采集和Zigbee紧随其后的无线数据发送模块,最后是可以收发短信和电话报警的GPRS模块的设计。
第四部分完成了跌倒检测系统的软件方案设计,包括单片机的下位机软件编写,完成多传感器数据实时采集和脚底与腰间的Zigbee无线通信,C语言实现跌倒检测算法,以及STM32嵌入式单片机控制GPRS模块短信收发和电话通信的程序设计。
第五部分对本系统进行了联机调试,做了真实的跌倒实验验证,并对采集回来的传感器数据进行了MATLAB分析,验证了跌倒检测算法的正确性,并测试了跌倒检测的性能。
第六部分总结了本文所做的工作,提出了本研究的不足之处和对课题以后的前景做了展望。
1.5本人的工作
作为项目的主要设计人员之一,本人主要的工作有:根据跌倒检测的功能需求,参与跌倒检测系统整体设计规划,在宏观上将该系统分成了传感器采集模块、中央处理器分析模块和GPRS无线通信模块。在项目组的其他人员设计好硬件电路的基础上,本人完成了脚底压力传感器数据的采集,脚底单片机与腰间中央跌倒处理器之间的Zigbee通信软件设计,腰间中央跌倒处理器的传感器数据采集程序编写,基于多阈值的跌倒检测算法的设计与实现等工作。
目前主流的跌倒检测方法大体上分为:通过设置阈值来判断和通过模式识别的方法来检测跌倒。相比较而言,阈值判断的算法比较直观,实现的软件开销较小,是目前最普遍的方法,其不足之处就是阈值的选取对实验结果影响较大,一般的方法是通过经验或者实验数据选取阈值,若是通过经验的方法,则不知道阈值选取的准确度;而若是通过实验数据求阈值,则存在逼真性的问题,因为实验数据基本都是通过健康的年青人来模拟跌倒,这就会出现跌倒者的身体健康和心理状况差异,而且有意识和无意识的跌倒存在着差异,影响了阈值选取的准确性,因此如何选取阈值是值得探讨的问题之一。
而基于模式识别的方法,是利用复杂问题简单化的思想来处理跌倒问题,利用一些如SMA(Signal Magnitude Area)、SMV(Signal Magnitude Vector)、谱熵等特征值,建立统计分类模型,对跌倒与否等行为作出分类,这种算法的适应性较强,但是算法的复杂度较高,对于普通的嵌入式单片机而言,有较大困难。
2.1基于阈值判断的方法
跌倒是人无意识的失去平衡的行为,因此在发生跌倒时人体很难控制身体的倾倒,跌倒事件发生得很快,与人体的正常动作(如蹲下、躺下、坐下或者弯腰等)相比,时间更短动作更剧烈,持续的时间通常为1-3秒,身体会瞬间向某一个方向倾倒,以至于身体的重心会跟着瞬间向倾斜方向移动,这样的身体动作产生的结果是在倾倒的方向上出现很大的加速度变化,产生很大的加速度值,通过三轴加速度传感器即可实时获得身体X,Y,Z三个方向的加速度值,与事先设定的各方向的阈值比较,再结合其他加速度值以及身体的角度信息即可判定是否发生跌倒。
人体体位的另一个重要特征就是身体的倾角,调查显示,人体处于直立状态时,躯干与重心方向的倾角小于60度;而人体处于水平状态时,倾角接近90度;人体在跌倒时,躯干从直立状态变为接近水平的状态。所以可以将人体倾角值是否大于60度来作为辅助判断跌倒的特征,倾角值可通过倾角传感器获得。
另外,人站立和平躺时,对鞋底的压力值不同,可以通过置于鞋底的压力传感器值来辅助判断人体是否处于跌倒状态。
2.2基于模式识别的方法
基于模式识别的跌倒检测算法主要是采用了最新的单类支持向量机(One-class SupportVector Machine)理论,简称为SVM。这是一种有着较强的理论基础的学习方法,与概率测度的定义及大数定理都基本不相关,因此和传统的统计方法有本质上不同。
数量很少的支持向量确定了SVM的决策函数,正是由于数量较少,从而消除了大量的冗余,并且该决策还拥有较好的鲁棒性。
数据的线性可分就是指某个线性函数能够将已有的数据完全分开,否则就是线性不可分。线性函数在一维平面中即为点,对于二维平面来说就是直线,三维空间里就是平面了,以此类推,不关注空间的维数,超越平面(Hyper Plane)就是线性函数的广义的代表。现在我们假设待识别对象的特征因子数值为
最后就通过实验采集大量的传感器跌倒样本,并对样本进行SVM训练,计算出最优分类超平面,再利用训练好的模型对实际的样本进行检测,从而检测出跌倒事件。
2.3本课题跌倒检测算法
为了准确的区分跌倒事件与日常行为事件(ADL),我们小组利用三轴加速度传感器、倾角传感器和压力传感器的信息融合来实现人体的实时跌倒检测。日常生活中人体几种静态姿势有:靠左躺下(Left lying)、靠右躺下(Right lying)、仰躺(Lying supine)、俯躺(Lying prone)、站直(Standing straight)、往后仰站(Standing supine)、往前倾站(Standing prone)、坐直(Sitting Straight)、往后仰坐(Sitting supine)、往前倾坐(Sitting prone)等等;几种运动模型有:躺下(Lying down)、跌倒(Falling)、跳跃(Jumping Up)、起立(Standing Upx)、坐下(Sitting down)、步行(Walking)、上下楼(Stairs up/down)以及跑动(Running)等,本课题的跌倒检测算法就是要将跌倒事件从以上生活事件(ADL)中区分开来,并且尽量将误报概率降到很小。
分析传感器采集回来的三轴加速度信息,我们使用了区域加速度强度SMA和加速度强度矢量SMV这两个特征值,其定义式如下
由于跌倒时间的随机性,更无法预测跌倒时的方向,单独的对各方向加速度变化进行分析,由于各方向的加速度变化不一,且加速度轴向变化算法较复杂,不利于微处理器的移植,所以这样来判断跌倒是不合适的。如果采用SMA和SMV来进行加速度的处理,就忽略了加速度的空间分量,具有更强的适应性。其中,SMA是归一化的区域信号强度,是一小段时间窗内的加速度值之和,在发生剧烈运动和跌倒时的SMA明显比普通轻微运动时的SMA大得多,基于这个考虑,这样就可以利用阈值算法来对跌倒等剧烈运动与普通轻微运动进行区别。另外,SMV是信号强度矢量,实时反映了当前人体活动的加速度矢量强度,在人体剧烈运动时,信号的强度矢量较大,而轻微运动时的加速度强度矢量较小,同样可以通过设置阈值,对剧烈运动与普通轻微运动进行区分。
SMA和SMV的阈值选取都是经过多次的实验获得,利用工具MATLAB和EXCEL对采集回来的三轴加速度传感器三个方向的加速度值进行分析,绘制出了图2.2所示的三轴加速度传感器值与实验采集点数的关系。
图2.2 加速度传感器值与实验采集点数的关系
由于每秒钟对传感器采集50次,相当于每秒50组X.Y.Z方向的传感器值,也就将横坐标映射成了实验采集点数,图2.2显示的大约200s左右的数据,图2.2分别为三轴加速度传感器的三个方向加速度输出,单位为重力加速度g。在进行SMA计算时,计算的周期是0.5s,而计算的时间窗长度为1s,由于采样频率为50Hz,且前后窗有50%的点重合,故重合点的个数为25个,单个窗的长度为50个点,见图2.2的矩形框图所示。
进一步利用定义式(2.10),计算出SMA和SMV,绘出图形如图2.3所示,大约有12000点数据(也就是240s的数据)。图2.3显示的数据依次为静止、小跑、步行、大跑、上下楼梯、跌倒和跳跃等一系列动作组成,从图形中不难看出,在跑动和跳跃时的SMV值较大,其他情况下的SMV值较小,于是可以设置恰当的阈值区分开跳跃等剧烈运动。而从SMA这个图形中可以看出,在跌倒和大跑,以及跳跃时SMA值较大,其中,跌倒时的SMA值尤其大,可以设置相关的阈值更准确的区分出跌倒状态。
图2.3 SMA和SMV与实验采集点数的关系
在人体发生跌倒的时候,人体的躯干倾角会发生剧烈变化,佩戴在人体腰部的倾角传感器值也会发生变化,这样可以通过采集倾角传感器的值对人体是否跌倒进行辅助判断。利用MATLAB对采集回来的倾角传感器值进行分析,得到日常活动的倾角变化范围不超过30度,倾角1表示左右倾斜的角度,倾角2表示前后
图2.4 倾角度数与实验采集点数的关系
倾斜的角度。如图2.4所示,同样可以设定合适的倾角阈值对跌倒状态做进一步的区分。
此外,由于人体在不同的日常活动中,由于身体重力的影响,左右两只脚底所承受较大压力,而当人体跌倒后,人体处于躺着状态,身体的重力由其他部分承受,脚掌离开地面,脚底的承受压力较小。这样,我们可以采集脚底的压力传感器数据对跌倒检测进行辅助判断,能够区分出快速弯腰这种与跌倒很相近的活动,利用串口调试助手查看返回的压力值,可以很容易的设置判断阈值,效果非常明显。
终上所述,本课题的跌倒检测算法首先判断区域加速度强度SMA,当超过阈值TH1时,则认为有疑似跌倒事件发生(其中可能有某些剧烈运动同跌倒时的SMA相似),然后进一步检测加速度强度矢量SMV,当小于阈值TH2时,则更进一步认为有疑似跌倒事件发生(可排除部分跳跃等剧烈运动),然后判断人体倾角是否大于倾角阈值TH3(可排除部分跳跃、急速坐下和起立等剧烈运动),如果大于则进一步判断压力数据值是否小于TH4,如果上述条件均满足,则判定人体发生跌倒。
依据上述方法建立的多阈值判断跌倒算法流程方框图如图2.5所示:
图2.5 多阈值判断跌倒算法流程方框图
2.4本章小结
本章详细讨论了目前跌倒检测的主流方法,介绍了阈值判断的原理和方法,对SVM分类的跌倒检测方法进行了理论推倒,最后重点介绍了本课题使用的跌倒检测方法,做了基本的采集实验,得到了SMA和SMV以及倾角的部分实验数据,有力的佐证了算法的正确性。
3老年人跌倒检测系统硬件设计
本课题设计的跌倒检测装置主要结构包括腰间的中央处理器模块,左右脚的压力采集模块以及通信报警模块。系统运行时,脚部的CC2430微处理器通过左右脚的压力传感器采集模块得到人体脚部压力值,经过数据调整后,利用Zigbee无线通信的技术将数据传给人体腰间的嵌入式核心处理器模块STM32F101R8T6,利用腰间采集到的三轴加速度传感器值和倾角传感器值。综合分析,从而判断跌倒事件是否发生,并实时的利用GPRS通信模块向监护中心或者家人报告老人的情况,硬件总体设计框图如图3.1所示:
3.1腰间中央处理器模块硬件设计
由跌倒检测器硬件总体设计框图可知,腰间设备主要由嵌入式处理单元、电源模块、Zigbee接收数据模块、身体加速度值收集模块、身体姿态角度收集模块和最后的远距离报警通信模块组成。
下面将对各模块硬件设计进行详细介绍,其中Zigbee模块将在脚底压力采集模块设计中进行更详细介绍,此处将不再鳌述。
3.2嵌入式处理单元
跌倒检测器中,嵌入式处理单元是核心处理器,负责对收集到的传感器信息进行加工处理。
嵌入式微处理系统的三个特点就是:(1)嵌入性:在对象中包含本设备,对环境有一定的要求;(2)专用性:以计算机技术为平台,软硬件按开发对象的要求可自由增减;(3)计算机:利用专用计算机系统,实现对象的智能化控制功能。
本课题选取的嵌入式处理芯片为STM32F101R8T6,以ARM Cortex-M3为内核的32位微型处理器,支持最大的总线频率为36Mhz,128kflash存储器,6kSRAM,拥有多个系统时钟源,支持倍频,支持睡眠,断电和待机等多种低功耗模式,还支持串口调试和JTAG下载,拥有1个16转换通道的12位ADC转换器,支持DMA,拥有丰富的定时器资源,支持标准的通信接口(两个IC,两个SPI接口,3个串口),本课题的STM32F101R8T6电路图见图3.2所示。
图3.2 嵌入式系统电路图
3.3电源模块
由于本课题开发的跌倒检测器为便携式设备,如果直接使用大容量的锂电池来供电,便能够提供持续稳定和抗干扰能力较强的电压,但是随着电池使用时间的增长,电池输出的电压会有所下降,影响到电子器件的稳定工作。为了提供一个持续和稳定的电压值输出,本课题讨论决定采用TI德州仪器公司产的TPS63001和TPS60110这两种稳压芯片。
作为升压型电荷泵的TPS60110,拥有2.7伏到5.4伏(三节镍镉电池;一节锂电池或锂离子电池)的电压输入范围,能够产生稳定的5伏输出,TPS60110的单端电荷泵使用推挽输出来以及采用恒定开关频率共同保证了很低的电压纹波值。另外,TPS60110的开关频率为300 kHz,逻辑关闭功能可以使供电的电流减小到1μA以下,且特殊的电流控制电路也可以防止启动时从电池吸收过多的电流。
本课题使用的5V电源的供电电路如下面的图3.3所示:
图3.3 TPS60110供电模块电路图
TPS63001是可极其稳定的输出3.3伏电压,其特点有:具有高效率、成本便宜、从降压到升压模式的无缝及时转换技术。另外,TPS63001明显高于传统变
图3.4 TPS63001供电模块电路图
压模式效率,实现了功耗的再次降低;TPS63001还包含了静态条件下极低的电流,轻负载条件下高效的用户可选节电模式,有利于最小化系统噪声的外部同步技术等集成特性,可极大地增强便携式应用中的使用体验。
本课题使用的3.3V供电电路如上图3.4所示。
3.4三轴加速度传感器模块
我们使用的是三轴加速度传感器,可以采集人体三个空间方向的加速度信息。它基于普通加速度传感器的原理来工作,由于加速度是空间矢量,所以如果要想确定事物的活动情况,而且在事先不清楚方向的情况下,应用三个轴的加速度传感器来感知各方向加速度值是不二之选。本课题选取的Freescale公司的三轴加速度传感器MMA7360L,该芯片具有三轴方向检测的功能,具有极高的灵敏度读取各方向的加速度信息,该传感器的物理模型主要由一对挠性轴、极板和极板上面的质量检测块组成,见图3.5所示:
图3.5 加速度传感器简化物理模型
MMA7360L的可选灵敏度范围是1.5g-6g,采用的封装,比常规的QFN封装的体积小得多,在对空间要求苛刻的手持设备中应用广泛。
图3.6 MMA7360L的功能框图
MMA7360L的功能框图见图3.6所示,G-Cell传感单元得到加速度信息后,经过后面的容压转换、增益滤波,以及三个方向的温度补偿之后通过三个管脚通过电压值的形式输出。
本课题使用的MMA7360L的采集电路如图3.7所示:
图3.7 MMA7360L的采集电路
3.5倾角传感器模块
本课题另外一个重要的传感器就是倾角传感器,能够给出水平面与物体之间的角度值,它是通过惯性的原理工作,内部的重力竖直轴与该传感器灵敏轴之间的夹角就是我们想要的倾斜角了。
SCA60C倾角传感器由信号整合与硅体传感芯片组成,拥有有8个芯片管脚。由一个单5V电源供电,低电流消耗,输出电压与倾角值成比例关系,具有存储器奇偶校验和自测能力。本课题的SCA60C倾角传感器电路设计如图3.8所示:
3.6无线通信模块
本课题的无线通信报警模块使用的核心芯片是Simcom制造,我们的使用电路如图3.9所示,SIM300有三种的使用频率,还可实现多类编码方案,此外,SIM300设计精细,外官小,几乎可以达到任何工业级别的应用对元件大小的要求,如手提式便携终端等。
图3.9 SIM300无线报警通信电路图
3.7脚底压力传感器模块硬件设计
在日常生活的不同状态下,人体脚底所承受的压力大小不同,特别是在跌倒事件发生后,人体的脚掌离开地面,使脚底得到的压力很小,这同大多数的日常生活状态下脚底所承受的压力值不同,所以可以通过采集脚底的压力传感器信息对跌倒进行辅助判断。
本课题的脚底压力传感器模块主要由电源模块、压力采集模块和无线的单片机模块组成,由于脚底压力传感器和中央处理器模块的3.3V电源模块相同,此处不在鳌述。
3.8压力传感器模块
压力传感器模块最重要的部分就是压力传感器,这是市面上使用最多的一种传感器。传统的压力传感器主要是以机械结构为主,通过弹性元件的形变情况来表示压力的大小,逐渐被现代的体积小巧、质量轻盈、精确度高的半导体式的压力传感器所取代。本课题使用的压力传感器为电阻型的压力传感器,通过将非电量映射成电阻值,再通过测量电阻实现对非电量的检测目的。
本课题使用的压力传感器型号是FSR402,脚底压力传感器电路如图3.10所示:
图3.10 压力传感器电路
3.9无线收发模块
跌倒检测系统的脚底压力传感器采集是通过集成了射频功能的CC2430无线单片机实现,再通过领先的Zigbee技术无线发送给中央处理单元。CC2430是CC2420的升级版,包含了Zigbee的射频通信前端,一颗8051微处理器,模拟与数字转换单元,看门口定时器,普通定时器,以及复位电路和掉电自检电路等等,拥有众多的可编程管脚,根据内部存储区域大小的不同,分为了F32、F64、F128;此外,CC2430使用的是先进的CMOS技术,达到了国际领先的0.18 μm,通信时候的功耗极低,特别适合于对能耗敏感的便携式设备使用。
本课题使用的电路见下图3.11所示:
图3.11 CC2430电路原理图
3.10本章小结
本章主要概括了跌倒检测器的硬件设计部分,对腰间和脚底的硬件的组成框图做了详细的介绍,给出了跌倒检测器的硬件顶层总框图,后面分别对每个模块的硬件设计原理图和对模块使用的主要芯片以及外围电路进行了详细的介绍,通过本章的描写,对跌倒检测器的硬件部分有了深入的认识,为下一章跌倒检测器软件部分的编写打下了坚实的基础。
4 老年人跌倒检测系统软件设计
老年人跌倒检测系统的软件部分主要是下位机单片机程序和嵌入式程序。下位机单片机程序部分是基于是IAR EW7.3B软件环境开发的,由于硬件平台为CC2430无线单片机,所以此部分代码是基于TI Zigbee 2006 协议栈来开发的,在协议栈中添加脚底压力数据采集程序,并利用协议栈提供的发送API函数,进行数据的发送;而腰间的程序部分是基于Keil uVision4软件环境开发的,以STM32F101R8T6为设计的硬件平台,实现对三轴加速度数据采集、倾角加速度数据采集,控制外挂的GPRS通信模块、定时器控制多通道A/D转换并DMA传输,I/O控制以及嵌入式单片机和CC2430之间的串口传递压力数据,运行跌倒检测算法等功能,软件总体设计框图见图4.1所示:
图4.1 软件总体设计框图
(a)脚底设备软件框图 (b)腰间设备软件框图
4.1腰间中央处理器模块软件设计
老年人跌倒检测系统的腰间中央处理器模块软件设计主要由:身体的加速度数据收集机制,传感器信号的预处理,FAT文件系统,多阈值判断跌倒算法,GPRS部分的远程通信和Zigbee部分的近距离通信组成,由于GPRSSIM300的硬件还未实现,所以GPRS通信部分的程序没有编写;由于脚底压力传感器部分软件设计将对Zigbee的无线通信做详细阐述,本部分不再鳌述。
4.2数据采集机制
有资料表明:“人体所有活动的加速度信号99%的能量集中于15Hz以下”,也就是说我们要检测的人体活动的加速度频率一般低于20Hz,根据奈奎斯特采样定律,只要我们的采样信号的频率高于被抽样信号最高频率的两倍以上,就可实现对原始信号的无失真表示。
因此,本课题中,我们选取的采样频率为50hz,通过定时器定时20ms,在定时器中断里触发传感器数据的A/D单次转换,为了进一步节省CPU资源,AD转换完成之后直接利用DMA传输给内存单元,跌倒检测算法直接操作内存单元进行判断。
20ms定时器初始化程序为:
void TIM3_Config(void)
{ RCC->APB1ENR|=1<<1;//TIM3时钟使能
TIM3->ARR=1200/2; //设定计数器自动重装值
TIM3->PSC=2398/2; //预分频器1200,得到30Khz的计数时钟
TIM3->DIER|=0x41; //允许更新中断/触发中断
}
由于需要采集的传感器数据有三轴加速度传感器数据3个,倾角传感器数据2个,电压数据1个,芯片温度数据1个,所有共有7个数据,且STM32F101R8T6拥有一个16通道的模数转换器,所以配置相应的初始化程序即可使用,部分程序如下:
void sysGetAdcResult(void)
{ ADC1->SQR1&=~(0XF<<20);
ADC1->SQR1|=6<<20; //7个转换在规则序列
ADC1->SQR3 = 0;
ADC1->SQR3|=0X12620c42;
ADC1->SQR2=0;
ADC1->SQR2|= 0X00000010;
ADC1->SMPR2&=~(0X3F1C7FC0);
Tongdao=(7<<9||7<<6||7<<12||7<<18||7<<24||7<<27);
ADC1->SMPR2|= Tongdao;
}
DMA进行的数据传输不需要处理器的直接参与,而直接通过硬件开辟的从外部设备到内部存储器的通道进行大量数据的传输,很容易发现DMA的优势,由于没有CPU的控制,使DMA的速度直接由硬件决定,这大大提高了单片机对数据的读取能力,同时也减轻了CPU对数据频繁操作带来的延时问题。STM32中的DMA控制器拥有多个通道,每个通道对应外设对访问内存的请求。我们使用的DMA初始化程序如下:
void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx)
{ u32 DR_Base;
u8 DMA_fuzhi;
RCC->AHBENR|=1<<0;
DMA_CHx->CPAR= ADC1_DR_Address;
DMA_CHx->CMAR=(u32)ZXS_A_to_D_value;
DMA_CHx->CNDTR=0x07;
DMA_CHx->CCR=0X00000000;
DMA_fuzhi=0<<4||0<<5||0<<6||0x80||0x100||0x400||0x1000||0<<14;
DMA_CHx->CCR|= DMA_fuzhi;
}
4.3信号预处理
因为加速度传感器的输出一般都是微弱的电压信号,所以对输出信号进行抗干扰处理是很有必要的,信号预处理效果的好坏决定了整个系统的鲁棒性,一般的抗干扰预处理可以从软硬两方面来进行,抗干扰处理之于硬件就是针对系统电路板的布线、元器件的布局以及芯片供电电源的滤波等;而抗干扰处理之于软件主要指利用各种滤波手段对采集到的信号进行滤波处理,消除随机噪声对传感器信号的影响。鉴于此,在按照硬件设计思路设计好硬件电路之后,我们利用工具Matlab进行了20Hz低通滤波器的设计,利用设计好的滤波器再对倾角值进行处理,主要的程序如下:
zxs_wp=0.4; %通带截止频率
zxs_ws=0.7; %阻带截止频率
zxs_Ap=0.5; %通带最大衰减
zxs_As=50; %阻带最小衰减
[zxs_N1, zxs_Wc1]=buttord(zxs_wp,zxs_ws, zxs_Ap, zxs_As);
[zxs_b1, zxs_a1]=butter(zxs_N1, zxs_Wc1); %计算巴特沃斯系数
[zxs_H1,F1]=freqz(zxs_b1, zxs_a1,50); %计算频率响应
f=(0:length(F1)-1)'*70/length(F1);
figure(13);grid on;
plot(abs(zxs_H1)); %画出巴特沃斯幅频响应图
利用Matlab计算出的低通滤波器的幅频响应图如图4.2所示:
图4.2本课题设计的巴特沃斯低通滤波器幅频响应图
由Matlab计算出的巴特沃斯系数可得到巴特沃斯滤波器的系统函数为:
图4.3巴特沃斯低通滤波前后的倾角数据对比
(a)原始数据 (b)滤波之后的数据
由于三轴加速度的信号经过了滑窗积分处理,对噪声信号进行了平滑滤波,所以将不再对三轴加速度信号应用巴特沃斯低通滤波。
4.4文件系统
由于在试验阶段,需要采集大量的传感器数据,并对数据进行分析,考虑到跌倒检测器的穿戴性,如何对实时数据的保存是一个重要问题。经过讨论,我们最终选择了File Allocation Table文件保存系统,即FAT,利用SD卡,对数据进行保存,在获取足够的数据之后,取出SD卡,对保存的数据进行读取分析。
FAT其实就是一张对文件所处位置进行记录的表格,在硬盘中的文件分配表可以对硬盘上的数据进行有效地定位,一旦丢失,那么硬盘的存取功能将无法实现,其中,FAT根据文件分配表中链接的数据的bit数不同则分为了共有三种不同的类型。
SD卡与STM32F101R8T6的通信是通过四线SPI的方式,分别是MOSI、SCLK、NSS以及MISO,SPI接口可以给CPU和外围低速器件之间提供速度达到几兆赫兹的数据传输服务,并且这是同步串行全双工通信。部分SPI配置程序如下所示:
void MMC_SPI_Config(void)
{SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitStructure.SPI_Direction= SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode= SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize= SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL= SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA= SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS= SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler= SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit= SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial= 7;
SPI_Init(SPI2, &SPI_InitStructure);
}
4.5多阈值判断跌倒算法
本课题提出的算法,是采取了区域加速度强度SMA、加速度强度矢量SMV、倾角、以及压力等多个阈值共同组成的多阈值跌倒检测算法,由于每个样本点采集的时间间隔为20ms,且SMA的当前计算窗口与下一计算窗口有50%的点重合,经过多次实验,在每个SMA计算窗口共含有50个样本点时,计算出来的SMA值最能反映跌倒的特征,故我们将SMA的计算周期设为了0.5S;计算出SMA之后,用相似的方法,对SMV和倾角值以及压力传感器值进行了处理,算法的伪代码如下:
4.6脚底压力传感器模块软件设计
作为腰间中央嵌入式处理模块的重要辅助模块设计,脚底压力传感器模块负责采集人体的脚部压力数据,由于人体在跌倒和其他日常活动状态时对脚底的压力不同,所以可以通过采集脚底的压力数据对人体跌倒进行辅助判断,本模块主要软件组成部分是协议栈Zigbee2006,以及在协议栈里添加传感器数据采集事件。
4.7Zigbee2006协议栈
Zigbee是一种IEEE的低速率并且短距离的无线网络协议,五层协议分别为物理子层、媒体访问控制子层、运输子层、网络子层和应用子层,这是一种功耗很低、成本很低、速率不高、可拥有大量节点、安全可靠的网络,主要部件由整合数据的协调器部分、转发传感器数据分组的路由器节点和收集信息的传感器终端节点构成。经历最初的Zigbee V1.0版本,几年的发展,现在已经相继推出了Zigbee-2006,Zigbee-PRO,Zigbee-RF4CE等最新的协议栈,我们本实验考虑到经济性,选择了比较便宜的CC2430作为脚底与腰间的通信主芯片,相应使用的协议栈就是Zigbee2006。
Zigbee2006协议栈由多个子层完成任务来实现,协议栈中的各层向上提供服务,向下屏蔽了处理的细节,各层通过服务接口实现层与层之间的通信。
4.8数据采集机制
脚底压力传感器的压力值是作为腰间跌倒算法的一个辅助判断,由于腰间跌倒检测算法0.5s执行一次,所以我们设计了在腰间判断为疑似跌倒后,利用腰间的CC2430给脚部的CC2430发送采集压力数据的命令,再由脚底CC2430采集好数据后发送给腰间中央处理器,满足跌倒条件才判断为真正跌倒,这样可以节省脚部CC2430芯片的耗电量,在未接收到腰间的压力采集命令时,可以保持在低功耗状态,对于便携式电子产品来说很重要,这也是我们设计的独特之处。
脚底压力传感器数据的采集利用单次ADC转换,由于对脚底压力传感器的数据要求不高,我们选择8位ADC转换,部分ADC配置程序如下:
ADC_ENABLE_CHANNEL(input_channel);//输入频道使能;
ADCCON1=0x30|0x0c|0x03;ADC_SINGLE_CONVERSION(cankao_v|cankao_bit|shuru_guanjiao);
ADC_SAMPLPING_BEGIN(); //启动单次采样;
while(!ADC_SAMPLING_READY()); //等待转换完成
ADC_DISABLE_CHANNEL(input_channel); //关闭采样通道
Zxs_AD_value=(((Uint16)ADCH)<<8)|ADCL; //读取转换结果数据;
4.9Zigbee无线通信
脚底压力传感器模块最重要的莫过于如何实现接收采集命令、以及将采集到的压力数据发送给腰间的中央处理器,在脚底与腰间的1m范围内的通信,最经济有效地方式就是利用Zigbee进行无线传输,搭建好硬件平台后,利用TI公司提供
图4.4(a)脚底CC2430 Zigbee软件流程框图
(b)腰间CC2430 Zigbee软件流程框图
的Zigbee2006协议栈,就能够实现自动组网,建立起自己的数据传输网络,利用Zigbee2006协议栈建立的脚底压力传感器采集流程以及腰间接收压力传感器数据的协调器流程如图4.4所示。
由于Zigbee组播之间相互传输数据,为了对接收到的不同数据进行区分,我们设计了自己的数据包格式,如表4.1所示:
表4.1本实验Zigbee数据包格式
|
设备类型 |
左右脚标识 |
压力值 |
电压值 |
协调器 |
0x0c |
|
|
|
左脚终端 |
0x0d |
0x0a |
36 |
127 |
右脚终端 |
0x0d |
0x0b |
34 |
126 |
该数据包由4个字节组成,第一个字节存放的是发送该数据包的设备类型:0x0c表示协调器,0x0d表示左右脚采集终端;第二个字节存放的是左右脚采集终端标识符:0x0a表示左脚,0x0b表示右脚;第三个字节存放的是压力传感器的AD转换寄存器的值;第四个字节存放的是脚底电源电压AD转换寄存器的值。
4.10本章小结
本章对跌倒检测系统的软件部分进行了详细的设计,包括脚底CC2430程序和腰间STM32F101R8T6程序的编写工作,完成了老年人跌倒的实时检测软件工程,详细阐述了、腰间中央处理器处理软件过程、以及FAT文件保存系统的工作流程,介绍了本课题使用的跌倒检测算法流程,以及Zigbee通信过程等内容。
5实验及结果分析
根据跌倒检测器的硬件设计思路设计好了本课题的跌倒检测器的实验样机:包括腰间的中央处理器设备和脚底的压力采集设备,以及嵌入了压力传感器的鞋垫;利用跌倒检测算法对日常生活中的各种状态进行了分析,对腰间设备和脚底设备进行了联机调试,由于项目时间较紧,我们最后的无线远程报警设备没有实现,只用了一个蜂鸣器鸣声来表示跌倒。
5.1跌倒检测器实物
跌倒检测器的实际样机主要两部分组成,即腰间的中央处理器和脚底压力采集设备组成,脚底压力采集设备采集压力信息,利用无线发送给腰间的中央处理器设备进行信息的处理,下面将对这两部分设备进行介绍。
5.1.1腰间设备
腰间中央处理器设备采用了实验室找到的普通手机锂电池供电,经过电压模块的稳压控制,达到各模块所需的电压要求,下图5.1为腰间中央处理器设备的实物图
图5.1 腰间设备的实物图
5.1.2脚底设备
脚底的压力传感器数据采集设备如图5.2所示,也是由普通的手机锂电池经过电压模块变压稳压后供电,该设备尺寸为;另外一个配套的鞋垫潜入了FSR压力传感器,内置于鞋内,采集设备绑在脚跟处,经过实验分析得到,传感器采集单脚或者双脚的压力数据对我们实验的影响不大,故我们只安装了单脚的压力采集设备。
图5.2 本课题使用的脚底压力采集设备的物理图
5.1.3系统安装架构
将腰间中央处理器设备佩戴在腰间的手机卡套里,将压力传感器鞋垫放置在鞋里,将脚底设备绑在小腿根部,整个系统配戴在实验人员身体上如图5.3所示:
图5.3 跌倒检测系统安装图
5.2实验数据分析
按照上述佩带方法佩戴好跌倒检测器之后,打开腰间设备和脚底设备的开关,为了研究人体处于日常生活中的各种状态时的区域加速度强度SMA、加速度强度矢量SMV、前后倾角、左右倾角以及压力值的变化情况,分别进行了比较典型的跌倒事件分析、日常其他事件分析以及脚底压力值的辅助分析。
5.2.1跌倒事件分析
在进行跌倒事件分析的时候,我们进行了前后、左右各10次跌倒和5次跳跃的实验,下图5.4所示为向前跌倒时的三轴加速度各方向的加速度值变化情况:
图5.4 向前10次跌倒5次跳跃时的三轴加速度值变化
从图5.4中可以大概看出在向前跌倒发生时,acc_Y和acc_Z值较大,而在跳跃时,acc_Z值会出现-1g上下的骤变,所以可以容易分析出发生了10次跌倒事件,但是利用阈值检测的算法时,区分度还不够明显。
利用我们算法中的SMA和SMV公式,对前后左右各10次跌倒和5次跳跃的数据做进一步处理得到SMA和SMV,以及倾角传感器输出的角度值,经过IIR巴特沃斯滤波之后得到倾角1(左右倾角)、倾角2(前后俯仰角),下面图5.5中显示了前后左右四个方向的各10次跌倒事件以及各5次跳跃事件的对应SMV、SMA、倾角1、倾角2的变化情况。
从图5.5中可以知道,在进行跌倒的时候,利用三轴加速度值计算出来的区域加速度强度SMA、SMV、倾角值都能够很好的反映出跌倒事件的发生,特别是SMA
图5.5跌倒与跳跃时各参量的变化
(上左图)向前10次跌倒和5次跳跃情况(上右图)向后10次跌倒和5次跳跃情况
(下左图)向左10次跌倒和5次跳跃情况(下右图)向右10次跌倒和5次跳跃情况
和倾角2的值,向前、向后、向右跌倒均可通过对SMA设置-1g的阈值来进行区分;向左跌倒的情况,由于其倾角2(前后俯仰角)的值反应得很剧烈,可通过设置倾角2的阈值为120度来进行区分;从图5.5中可以看到,不管什么情况下跌倒,SMV的值相对其他状态都有明显的变化,而跳跃时的SMV值达到最大,可以设置恰当的SMV的阈值小于20,区分开跳跃运动状态,设置SMV的阈值大于3,区分开日常活动的其他状态。
5.2.2日常其他事件分析
在进行日常生活中其他事件的分析的时候,我们穿戴好跌倒检测器,依次进行了静止、弯腰(3次)、坐下(3次)、起立(3次)、步行、跑步、上下楼梯以及3次跌倒实验,利用SD卡将采集回来的传感器数据导入电脑,通过MATLAB软件画出如图5.6所示的日常生活事件与跌倒时的参量变化情况:
图5.6 日常生活事件与跌倒时的参量变化情况
从5.6中分析可知,日常生活中的事件只有在剧烈运动如跑步、上下楼梯时的SMV值较大,通过SMV就可以区分出如静止、步行、弯腰、坐下起立等小幅度的日常活动;从SMA可知,只有在跌倒事件和坐下时候的SMA值较大,也可以设置阈值很明显的区分出跌倒与坐下这两种状态,再通过SMV可以进行区分了;从倾角值的情况可以看出,弯腰和坐下起立以及跌倒时候的变化最为明显,再结合SMA和SMV的值可以对这些状态进行区分。
5.2.3脚底压力值的辅助分析
另外,人体在处于不同的日常生活状态时,对脚底的压力值不同,在跌倒事件发生时,人体的脚一般不会接触地面,也就是对脚底的压力值很小,我们可以利用脚底反馈回来的压力传感器值进行辅助判断。
利用设计好的脚底压力采集设备,对脚底的压力值进行实时采集,得到图5.7所示的不同生活状态时的脚底压力传感器值情况:
图5.7不同生活状态时的脚底压力传感器值
从图5.7可知,人体在跌倒时,脚部未踩踏地面,所以对脚底的压力值较小,平均在33左右,而正常踩踏地面的情况下,对脚底的压力值较大,平均在127左右,所以,很容易设置适当的阈值对跌倒与否进行很有用的辅助判断。
5.2.4测试结果分析
|
在本文最后,我们邀请了4名实验室的师兄师姐进行了跌倒的真实检测实验,按照本文的多阈值判断跌倒算法,进行跌倒事件的实时检测。由于设计之初的跌倒后GPRS远程报警系统还未完成,所以利用了蜂鸣器进行检测到跌倒后的辅助报警。
4名实验者分别进行了前后左右各30次跌倒,以及30次弯腰、坐下起立以及跳跃动作,并分别进行了5分钟左右的步行、跑步、上下楼梯等实验,统计实验的结果见表5.1所示。
表5.1 跌倒实验结果统计表
事件 |
实验次数 |
报警次数 |
漏报次数 |
识别率 |
漏报率 |
误报率 |
向前跌倒 |
30 |
29 |
1 |
96% |
4% |
0 |
向后跌倒 |
30 |
27 |
3 |
90% |
10% |
0 |
向左跌倒 |
30 |
28 |
2 |
93% |
7% |
0 |
向右跌倒 |
30 |
29 |
1 |
96% |
4% |
0 |
弯腰 |
30 |
0 |
- |
- |
- |
0 |
步行 |
5分钟 |
0 |
- |
- |
- |
0 |
坐下、起立 |
30 |
3 |
- |
- |
- |
10% |
跑步 |
5分钟 |
0 |
- |
- |
- |
0 |
上下楼梯 |
5分钟 |
0 |
- |
- |
- |
0 |
跳跃 |
30 |
0 |
- |
- |
- |
0 |
从表5.1中可知,本课题设计的跌倒检测器对跌倒检测达到了94%的平均准确率,对日常生活的其他状态与跌倒事件达到了完全的区分,对普通日常其他事件的跌倒误报率很低,只有坐下、起立时会出现10%的误报,所以实验证明了本跌倒检测系统具有很好的效果,系统具有不错的可靠性,达到了本课题的设计要求。
5.3本章小结
本章介绍了本课题设计的跌倒检测实际样机,并采集了不同跌倒情况和生活中其他生活状态的SMA、SMV、倾角以及脚部压力等参量的情况,利用MATLAB软件对数据进行了分析;对4名实验人员的跌倒以及其他生活状态进行了测量和统计,验证了本课题设计的跌倒检测器的可靠性和正确性。
6总结
本文主要讲解了老年人跌倒检测器的设计目的,设计方案,并从解决老年人跌倒检测的算法和硬件出发进行了详细的论述。算法上探讨了主流的跌倒检测算法,并基于单片机可实现性,提出了我们的基于多阈值的跌倒检测算法;硬件上,我们查阅相关资料,最终选取了MMA7360L三轴加速度传感器和SCA60C有效测量倾角的传感器来进行人体姿态的特征提取,在选取腰间的主芯片处理器的时候,经过讨论选取了功能齐全,价格适中的STM32F101R8T6单片机,在脚底部分使用了性价比很高的CC2430无线单片机对压力数据进行采集和无线发送,设计之初想在跌倒后进行GPRS远程报警,但由于项目时间较紧,未能完成,而用了一个蜂鸣器来进行跌倒的显示,最后的真实跌倒实验验证了我们跌倒检测器设计的正确性和可靠性。
http://www.shutien.org.tw/0199_029.asp
林涛,王声涌,老年人跌倒的疾病负担与危险因素,中华流行病学杂志,2001,22:262--264
李国正,王猛,曾华军译,支持向量机导论,北京:电子工业出版社,2000
苏亚,孙以材,李国玉,压力传感器热零点漂移补偿各种计算方法的比较,传感技术学报,2004,3:375-378
林生荣,张辉,三轴加速度传感器校正方法研究,传感器与微系统,2011年11期
文耀锋,一种实时的跌倒姿态检测和心率监护系统的研究[D].浙江大学,2008年12月
http://baike.baidu.com/view/1471744.htm
http://www.ti.com.cn/product/cn/tps60110?DCMP=CN_HPA_BSE&HQS=PM-888&247SEM
http://www.ti.com.cn/product/cn/tps63001?DCMP=CN_HPA_BSE&HQS=PM-879&247SEM
孙新香,基于三轴加速度传感器跌倒检测技术的研究与应用[D].上海交通大学,2008
http://www.witlink.cn/cpzx/Column_184.htm
http://baike.baidu.com/view/10434143.htm
高守玮,吴灿阳,Zigbee技术实践教程,北京:北京航空航天大学出版社,2009.6
E.K.AntonssonandR.W.Mann,“TheFrequenceContentOfGait”[J],J.Biomechvol,18,no.1:39-47,1985
成都无线龙公司,CC2430/CC2431中文使用说明手册,2008年6月
www.it.com.cn/market/hhht/mobile/200