1. 研究背景及意义
随着物联网技术的发展,各种智能概念层出不穷,在人口老龄化不断加剧,“空巢老人”越来越多的大环境背景下,老年人智能健康设备的开发开始引起社会关注,走进社会大众的视野 [1] 。尤其是作为独生子女的年轻人,很难及时顾及家中老年人日常生活的安全保障以及健康状态。人在跌倒后会面临双重危险。首先,跌倒本身可能对人体产生伤害;其次,跌倒后没有及时救援增加对人体的伤害。步入老年阶段的人同青少年、壮年相比,他们的身体十分脆弱,自身免疫力和自我保护能力衰弱,小小的撞击极可能带来无法预料的后果。如果跌倒后无法得到及时救助,往往会引起各种并发症。新闻中曾多次报道“空巢老人”独死家中多日才被发现的案例。当老人摔倒无法依靠自身力量起来,也无法向外界呼救,错过了最佳治疗时间,易造成悲剧的发生。因此开发一款适合老年人群,具有便携性、实时性和自动报警功能的跌倒检测系统,是整个社会的需要 [2] 。
这款系统的主要功能在于,当老年人意外跌倒时,进行预判并第一时间向外界发出报警信息、进行求救,这样既可以让年轻人更加安心的工作,又能保障老年人的健康生活。同时,该系统针对特殊人群、特殊情况也是很有帮助的。比如人们在登山或高空作业时,发生跌倒之后及时报警可以提高事故生还率。
近些年来,Android系统已然成为最受欢迎的电子设备端操作系统。此外Android系统开发附带多种组件,不仅给开发商降低了开发成本和开发难度,还给用户提供了自主选择的权利 [3] 。
2. 当前系统研究分析
跌倒检测系统也称为“一对一的远程监护系统”,它可以有效检测人体是否发生跌倒,并在跌倒之后及时提醒监护人,让监护人日常安心工作。从目前国内外的研究来看,老年人跌倒时的报警的方式主要可以分为以下几类:
2.1. 老年人摔倒后自主启动的摔倒报警系统
在使用时,老年人跌倒之后需要主动点击按钮,完成报警,该类系统需在用户跌倒之后,仍保持清醒的前提下,才可以完成报警。但在某些时候存在较大安全隐患,如:用户由于跌倒后失去自我警报的能力,导致警报按钮不能及时按下,此时系统失效。
2.2. 老年人摔倒后非自主启动的摔倒报警系统
在使用时,可以设置在老年人容易跌倒的区域,例如在床前,浴室等。这类报警系统主要是通过实时捕捉老年人的行为,然后加入人体姿态检测算法,判断老人是否摔倒。同时摄像头还能对家里进行监控,用户对老人在家状态及环境一目了然,当检测到摔倒行为发生时,系统端实现自动报警。这类系统检测精准方便,但在运用时存在空间局限性(无法在户外实现监控),并在特殊情况下易侵犯用户隐私。
本文选用基于Android开发环境下的手机APP,只需在用户的手机上安装该系统APP并且进行相应阀值的设置,就可以实现跌倒监护功能 [4] 。
3. 软件设计及分析
3.1. 总体设计
基于Android环境下的跌倒监护系统主要是用于判断用户是否跌倒,当检测到跌倒时,直接呼叫提前设置好的紧急联系人,当无法联系到紧急联系人时,直接拨通急救电话以此达到双重报警的目的。该系统的主要功能包含:通过公式计算出由重力传感器获得的x,y和z轴的合加速度值,从而计算是否发生跌倒 [5] ,并且实时地动态显示数据,最后通过定位功能来得知用户跌倒时所处的位置。
3.2. 设计环境
开发软件:Android Studio + SQLyog
开发语言:Java + MySQL
运行环境:Android 4.0及以上
3.2.1. 重力传感器简介
重力传感器是一种通过测量由重力引起的加速度,从而计算出设备相对于水平面的倾斜角度的设备 [6] 。另外,通过动态分析加速度,可以了解该装置的运动方向。通常提到的手机重力传感器实际上是加速度传感器,两者可以视为等效的。重力传感器的应用也十分广泛,一般用于跌倒检测、地震检波器设计、车祸报警、游戏控制、图像翻转和防止手抖等众多领域。
3.2.2. 跌倒监护简介
跌倒监护系统包括:手机重力传感器,用于跌倒检测;处理器,通过与设定值比较来分析用户是否已经跌倒。通常情况下,人体在发生跌倒的过程中,身体重心会瞬间移动,伴随着重心的移动会产生一个合加速度。因此,选择合加速度特性作为区分跌倒和其他日常活动的基础。
3.2.3. 定位简介
现在人们能实现的定位的方式很多,高德地图就是其中一个,此外高德地图更新速度较快,定位误差较小,能较好提供的最新地图搜索服务,利用高德地图定位功能实时的了解用户的位置,以及要想到达的地方另外可以提供最优路线选择等信息。
3.2.4. 紧急联系人简介
紧急联系人的设置,一是便于通过短信,将具体定位信息发送给紧急联系人,二是方便直接呼叫紧急联系人,以及报警达到双重保险的目的,以此达到在用户跌倒之后,及时得到处理和救护。
3.3. 系统需求分析
本系统是一个基于Android环境下开发的跌倒监护APP,利用此APP可以快捷的识别出用户是否跌倒,当系统识别跌倒后通过APP端对用户进行定位处理,并将定位信息发送到设置好的的紧急联系人的手机上并且直接呼叫紧急联系人,当无法呼叫时直接拨打急救电话,本系统包括的功能有阀值的设置、GPS定位、跌倒检测的信息显示、短信的发送、电话呼叫等。
3.4. 系统概要设计
3.4.1. 系统功能介绍
系统终端界面见图1所示,主要包括用户管理,短信设置,电话呼叫,阀值设置。
用户管理界面见图2所示,用户可用自己的手机账号注册并登录该系统以便使用该系统的功能。
短信设置,当检测到跌倒的时候,该系统会自动向已经设置好的手机号码发送报警短信以及其定位信息。
电话呼叫,当系统检测到跌倒的时候,系统会自动地向该列表中的联系人拨打紧急电话,达到及时通知紧急联系人的目的。
阈值设置见图3所示,为了确保用户的安全,需要给监控数据的设置安全警告值和设置紧急联系人,此外不同年龄的人的跌倒时加速度不同,需要用户根据自身情况模拟跌倒来进行调整跌倒检测的数值,可当APP端接收到的数据超过设置值后,系统将及时进行定位处理并且通知其紧急联系人和拨打相应紧急电话 [7] 。其中,功能模块结构见图4所示,系统软件架构见图5所示。
3.4.2. 功能模块结构图

Figure 4. Function module structure diagram
图4. 功能模块结构图
3.4.3. 系统架构图

Figure 5. System software architecture diagram
图5. 系统软件架构图
4. 系统详细设计
4.1. 电话呼叫以及短信发送模块
4.1.1. 电话呼叫关键代码
电话呼叫模块部分代码如下:
public class MainActivity extends Activity implements OnClickListener{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = (Button)findViewById(R.id.button1);//设置按钮
btn1.setOnClickListener(this);}
public void call(View v){
EditText editText1 =(EditText)findViewById(R.id.text1);
String number = editText1.getText().toString();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse(tel: + number));
startActivity(intent);}
public void onClick(View v){call(v);}} //拨号
4.1.2. 短信发送关键代码
短信发送模块部分代码如下:
publicclassSMSSender{ privateSmsManagersmsManger=null; privateContextcontext=null; publicSMSSender(Contextcontext) {thiscontext=context;} publicvoidsendSMS(StringsmsContext){ this.smsManger=SmsManager.getDefault();
List
smsInfos=(this.context).getAll();}//获取设置的短信联系人信息 try{ for(intindex=0;index
4.2. 跌倒检测模块
4.2.1. 跌倒检测关键代码
跌倒检测模块部分代码如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView((R.layout.activity_main);
initUI();
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();}
private void initUI() { grivaty = (TextView) findViewById(R.id.grivaty);//获取传感器管理对象 sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);//得到传感器实例 final Sensor sensor =
sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//重力传感器类型
SensorEventListener lsn = new SensorEventListener() { @SuppressWarnings(deprecation)
public void onSensorChanged(SensorEvent e) { x = e.values[SensorManager.DATA_X]; //获取x轴加速度值 y = e.values[SensorManager.DATA_Y]; //获取y轴加速度值 z = e.values[SensorManager.DATA_Z]; //获取z轴加速度值 a = Math.sqrt(x * x + y * y + z * z) ;//求和加速度
if (a > 12.0) {grivaty.setText(x= + x + y= + y + z= + z +\n跌倒);
} else{ grivaty.setText(x= + x + y= + y + z= + z +\n不跌倒);}
public void onAccuracyChanged(Sensor s, int accuracy) {} };}
4.2.2. 运行结果显示
跌倒检测结果显示界面见图6、图7、图8、图9所示:
5. 结论
本文以Android开源环境搭建跌倒监护系统,利用手机自带的重力传感器测算出人体当前的三轴加速度,最后求出合加速度值与阀值比较,实现对跌倒这种异常情形的检测。由上述实验结果可以看出,若使用者突发意外导致跌倒时,手机会通过发送短信将位置信息发送给设置的紧急联系人,并直接呼叫紧急联系人,达到即时通知监护人及时处理的目的。该系统方案使用方便简单,成本低,适用范围广,实时响应快。
基金项目
本篇论文获得项目编号为201911654041武汉商学院2019年度大学生创新创业训练项目《“无忧”银发监护系统》的研究资助。
NOTES
*通讯作者。