基于Arduino Uno平台的跌倒检测报警系统设计

2020-03-15来源: eefocus关键字:Arduino  Uno平台  跌倒检测  报警系统

本设计将加速度传感器ADXL345、GPS和GSM模块SIM908与Arduino Uno平台结合在一起,通过加速度传感器采集人体三轴加速度值,实时检测人体体态,完成对人体跌倒的检测和报警。整体设计成本低、可靠性高、算法复杂度 低、检测准确度高和可扩展的优点,具有很高的实用性,可以满足对人体跌倒检测报警的需要。


人类生活水平的不断提高,人口老龄化成为一个全球性的发展趋势。目前,我国已经进入了老龄化社会,老年人的身心健康问题得到人们更多的关注。 老年人因生理结构衰老和身体机能减退,发生意外跌倒的概率和频率非常高。跌倒可以导致老年人身体组织挫伤、骨折甚至危及生命,并从心理上给老年人造 成了压力和恐惧感。实际上很多伤亡并不是由于意外跌倒本身造成的,而是由于跌倒发生后,老年人没有得到及时的救治造成的[3]。尤其现在社会上存在很多讹 诈现象,导致人们不敢轻易伸出援助之手。因此,在老年人发生跌倒后,如何尽早被发现,并发出求救信号进行及时救治变得格外重要。为了老年人更健康地生活, 研究设计一个老年人的跌倒检测与报警系统具有十分重要的研究价值和实际意义。目前,研究开发人体跌倒检测系统方面的技术有很多种,最常见的是图像分析和加 速度分析法。文献[4-6]都是基于视频图像分析的室内跌倒自动检测系统,这种技术准确性高,人体动作清晰可见,但需要多部摄像机同时工作,且暴露了用户 的个人隐私,监测范围有限,受环境的影响也很大。另一种加速度分析方法,主要基于微机电系统(Micro-ElectromechaNIcal System,MEMS)传感器。MEMS技术近几年得到了快速发展,广泛应用在跌倒检测、状态检测、运动检测等方面。文献[7-9]都是利用MEMS技 术进行人体跌倒检测的,目前国内一些基于MEMS技术的跌到检测虽可较好实现跌倒检测,但大多计算量较大、设计复杂、价格昂贵,难以得到广泛的应用。


设计一种基于Arduino和三轴加速度传感器的跌倒检测报警系统,实时采集人体加速度参数和地理位置信息,应用于老年人意外跌倒后及时报警,兼具了性价比高、设计简单、实时性高、低功耗、可扩展的特点,实验证明了该系统的可行性和准确性。


1 系统总体设计

跌倒检测报警系统由Arduino最小系统、加速度参数采集模块、GPS定位模块、GSM通信模块组成,其系统框图如图1所示。

 

图1  跌倒检测报警系统框图

图1 跌倒检测报警系统框图


Arduino实时接收加速度参数采集模块传来的人体加速度参数值,单片机通过接收来的加速度值,经过跌倒检测算法来判断穿戴者的体态,如果检测出 跌倒的发生,便触发跌倒报警机制。当跌倒发生时,通过GPS定位模块能捕获到穿戴者的具体地理位置,然后发出包含跌倒位置的报警求救信息,通知佩戴者的监 护人或医疗机构,进行后续的救治。本系统在考虑这些功能需求的前提下,采用Arduino为控制核心,外围连接加速度参数采集模块、GPS定位模块、 GSM通信模块,来完成整个系统的功能。


2 硬件设计

硬件部分主要包括微控制器最小系统的选取、加速度参数采集模块、GPS定位模块、GSM通信模块,以及各个模块之间的连接。


2.1 Arduino平台

Arduino是一款基于开源的电子原型设计平台。Arduino包含两个主要的部分:硬件部分是可以用来做电路设计的电路板,基于AVR系列单片机和ARM微控制器,有丰富的外设接口和硬件资源;软件部分则是Arduino IDE,是在计算机中的程序开发环境[10]。Arduino的模块化设计,大大简化了电子系统的设计过程。


其中,微控制器最小系统选用Arduino Uno,它是基于ATMEL公司的ATmega328P单片机的硬件平台,具有32KB Flash、1KB EEPROM、14路数字输入输出口(其中6路可用于PWM输出)、6路模拟输入接口。同时,Uno预置了Bootloader程序,不需要其他外部烧写器,可以直接通过USB下载程序。


2.2 加速度传感器ADXL345

ADXL345是ADI公司最近推出的基于iMEMS技术的3轴、数字输出加速度传感器。ADXL345具有多种可变的测量范围,高分辨率,高灵敏 度,超小的封装,超低的功耗,标准的I2C或SPI数字接口,32级FIFO存储,以及内部多种运动状态检测和灵活的中断方式等特性[11]。所有这些特 性,使得 ADXL345有助于大大简化跌倒检测算法,使其成为一款非常适合用于跌倒检测器应用的加速度传感器。图2为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(Pin 2),用来产生中断信号。

 

图3  ADXL345和单片机之间的I2C典型连接图

图3 ADXL345和单片机之间的I2C典型连接图


2.3 GPS定位和GSM通信模块SIM908

SIM908是一款集成了高性能GSM/GPRS引擎和GPS引擎的芯片。其中的GSM/GPRS引擎可以工作在GSM 850MHz,EGSM 900MHz,DCS 1800MHz和PCS 1900MHz四个频段;GPS引擎具有一流的采集和跟踪灵敏度、TTFF(Time-To-First-Fix)和准确度[12],这些特性可以很好地 完成跌倒位置定位和发送报警信号的任务。在SIM908芯片上可以同时完成GPS定位和GSM通信功能,可以大大减少系统芯片的数量和功耗。图4为 SIM908的功能框图。SIM908通过UART口与Arduino Uno进行通信,RXD和TXD分别与Uno的TXD和RXD相连,完成跌倒位置的GPS数据的捕获和发送GSM报警短信功能。

 

图4  SIM908功能框图

图4 SIM908功能框图


3算法设计与实验

3.1 跌倒检测算法

对跌倒检测原理的研究主要是找到人体在跌倒过程中的加速度变化特征。图5给出的是加速度在不同运动过程中的变化曲线,包括(a)步行上楼、(b)步行下楼、(c)坐下、 (d)起立。其中红色的曲线是Y轴(垂直方向)的加速度曲线,其正常静止状态下应该为-1g;黑色和黄色的曲线分别是X轴(前后方向)和Z轴(左右方向)的加速度曲线,其正常静止状态下应该为0g;绿色的曲线是三轴加速度的矢量和,其正常静止状态下应该为+1g。

 

图5  不同运动过程中的加速度变化曲线

图5 不同运动过程中的加速度变化曲线


由于老年人的运动相对比较慢,所以在普通的步行过程中,加速度变化不会很大。最明显的加速度变化就是在坐下动作中Y轴加速度(和加速度矢量和)上有 一个超过3g的尖峰,这个尖峰是由于身体与椅子接触而产生的。而跌倒过程中的加速度变化则完全不同。图6给出的是意外跌倒过程中的加速度变化曲线。通过图 6和图5的比较,可以发现跌倒过程中的加速度变化有4个主要特征,这可以作为跌倒检测的准则。这4个特征在图6中以红色的方框标注,下面将对其逐一进行详 细介绍。

 

图6  意外跌倒过程中的加速度变化曲线

图6 意外跌倒过程中的加速度变化曲线


失重:在跌倒的开始都会发生一定的失重现象。在自由落体的下降过程,这个现象会更加明显,加速度的矢量和会降低到接近0g。对于一般的跌倒,也会发 生合加速度小于1g的情况。因此,这可以作为跌倒状态的第一个判断依据。可以由ADXL345的Free_Fall中断来检测。


撞击:失重之后,人体发生跌倒的时候会与地面或其他物体发生撞击,在加速度曲线中会产生一个很大的冲击。这个冲击可以通过ADXL345的Activity中断来检测。因此,Free_Fall中断之后,紧接着产生Activity中断是跌倒状态的第二个判断依据。


静止:人体在跌倒后,也就是撞击发生之后,不可能马上起来,会有短暂的静止状态(如果人因为跌倒而导致昏迷,甚至可能是较长时间的静止)。表现在加 速度曲线上就是会有一段时间的平稳。这可以通过ADXL345的Inactivity中断来检测。因此,Activity中断之后的Inactivity 中断是跌倒状态的第三个判断依据。


与初始状态比较:跌倒之后,人体会发生翻转,因此人体的方向会与原先静止站立的姿态不同。这使得跌倒之后的静止状态下的三轴加速度数值与初始状态下 的不同,如图5所示。因此,跌倒检测的第四个依据就是跌倒后的静止状态下加速度值与初始状态发生变化,且矢量变化超过一定的门限值。


这四个判断依据综合在一起,构成了整个的跌倒检测算法,可以对跌倒状态给出报警。


另外,如果跌倒造成了严重的后果,比如,导致了人的昏迷。那么人体会在更常的一段时间内都保持静止。这个状态仍然可以通过Inactivity中断 来检测。也就是说,如果发现在跌倒之后的很长时间内都保持Inactivity状态,可以再次给出一个严重报警。算法的流程图如图7所示。

 

图7  算法流程图

图7 算法流程图


3.2 实验结果

本文设计了一个实验方案对算法进行验证。实验对向前跌倒,向后跌倒,向左、右两侧跌倒等不同跌倒姿势以及跌倒后是否有长时间静止状态的情况分别进行了10次测试,表1中给出的是相关测试结果。

 

表1  实验结果

表1 实验结果

关键字:Arduino  Uno平台  跌倒检测  报警系统 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic491589.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:四轴飞行器无刷直流电机驱动控制设计的实现
下一篇:基子ATmega103微控制器的家庭信息终端的设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

使用ATmega8L-8PU 在面包板上搭建自己的Arduino ,并闪亮一个LED
第一步:硬件准备1.ATMEGA8L-8PU avr单片机(图1)图12.USBasp(用于烧写bootloader的工具)(图2上)3.USB转TTL串口线(我用的是FT232芯片的,稳定性比较好,用于在arduino下装载程序)(图二下)图24. 16M晶振,面包板,发光二极管等,及若干杜邦线这里可能有疑问:ATMEGA8L-8PU为什么配了16M晶振?原因是这样的:原则上ATMEGA8L-8PU最高用的是8M晶振,但Arduino 中的所用M8平台的bootloader是基于ATMEGA8编译的,并且使用的是16M晶振;而我手头没有ATMEGA8的芯片(注意我用的芯片后面带个“L”),又不会重新编译bootloader,只好
发表于 2020-04-28
使用ATmega8L-8PU 在面包板上搭建自己的Arduino ,并闪亮一个LED
ATMega328P-PU芯片Arduino最小系统实验
业余折腾了一段时间的Arduino,一时兴起想尝试下在面包板上实现一个最小系统,所以从某宝上买了ATMega328P-PU芯片和USBtinyISP编程器。(这个编程器有3.0版本的,当时不懂没注意,买到的是2.0,不过不影响用来做这个实验。卖家给的驱动不灵,最后还是从https://learn.adafruit.com/usbtinyisp/drivers 下载驱动包解决)面包板上按这个图插好元件。虚线的地方暂时先不要接线,面包板上也不要接通任何外部电源!!!然后将编程器6针连接器中的每一根针都引入328p的对应引脚上,千万不能弄错。连接器的VCC直接接入328p的pin7,GND接面包板上布置的地。连接器的RST接pin1
发表于 2020-04-28
ATMega328P-PU芯片Arduino最小系统实验
使用AVR-GCC编程Arduino
Arduino是IDE和硬件平台,IDE以Java编写,并使用Processing语言。这对新手是个好主意,因为简化了开发,但是也比C要弱:C有准确的执行时间,没有隐藏代码,写什么就执行什么C更容易访问硬件和中断便于在多种MCU之间移植本文编译和上传一个简单的纯C程序(使用avr-libc),而不用Arduino IDE。只需要终端、文本编辑器、AVR-GCC工具链。1   闪耀LED例子从让Arduino引脚13的LED闪耀开始(实际是闪耀PORTB的所有位)。创建个文件夹来存放项目,并创建文件 blink.c#include <avr/io.h>#include <util
发表于 2020-04-25
Arduino举办对抗新冠肺炎的硬件开发在线研讨会
Arduino日前举办一场关于对抗covid-19的在线研讨会。目标是帮助在项目中使用Arduino兼容设备来设计和制造呼吸机,呼吸器或其他设备以对抗covid-19,无论是医生,学者,专业公司,专业研究人员还是创新者。该会议的目的是分享想法,并减少Arduino的重复开发:“许多人都在花费宝贵的时间来尝试别人已经解决的困难,目前社群须有许多具有不同优势和技能的团队,我们应该更加联合。”此次会议为参与者提供以下方面的帮助:设计和制作硬件,软件,规模制造,医学专家的指导。Arduino创始人David Cuartielles和Massimo Banzi表示:“我们必须共同努力解决这些问题,从而更高效地开发。”目前已有众多
发表于 2020-04-04
8*8LED点阵显示爱心的Arduino实现
七夕前用树莓派实验了下8*8 LED点阵显示一颗爱心图案。其实这个功能用Arduino更为合适。撇开成本因素,树莓派实现是依赖一个死循环的,我关注了一下CPU使用率,运行期间可能会升到27%的样子,摸了一下CPU散热片,发热还是有一点的。所以决定在Arduino上再来一次。原理不变,可以继续参考树莓派的那篇。地址:http://blog.csdn.net/ki1381/article/details/52134935源代码如下,接线方法在头部的定义中。loop中顺便加了一点循环和延时,实现了闪烁效果。/*   BOTH COL & ROW CHIPS ARE 74HC595 */ 
发表于 2020-03-31
把ATmega128开发板转为Arduino
AVR环境:编译环境: ubuntu + avr-gcc 烧写工具: avrdude+usbasp具体构建步骤查看上一篇博客。avr环境多种多样,在linux下还可以用eclipse集成环境。在window下推荐用WINAVR,其实本质上和linux下一样是用avr-gcc,烧写工具用prgisp.当然有了avr jtag仿真器就更好了,不用usbasp.下载arduino工具:arduino.cc/en/Main/Software我下载的linux 64位版本,下载后解压到主目录下。开发板:BK-AVR128开发板   一、制作属于atmega128的bootloader代码主要是arduino工具
发表于 2020-03-30
把ATmega128开发板转为Arduino
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved