




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
高級操作系統期末論文題目基于加速度傳感器的老人跌倒檢測報警系統基于加速度傳感器的老人跌倒檢測報警系統摘要:在社會逐漸走向老齡化的今天,獨自生活的老年人的行動安全已經成為社會的重要問題。以前大多數的報警系統多采用按鍵式的報警方式,實際上,來年人摔倒時,常常失去自我意識,所以單純依靠老年人摔倒后主動觸發報警具備一定的風險。隨著開源的Android平臺移動終端操作系統的推出,這一系統具備廣泛的兼容性,為了減少老年人因跌倒造成的身心傷害,利用當前android手機集成的加速度傳感器進行人體跌倒的檢測,當檢測到人體發生跌倒時對老人當前的位置進行定位并調用SMS將摔倒的信息和位置信息發送到預先設置的緊急聯系人手機,可以提高老年人摔倒報警的準確性。關鍵詞:加速度傳感器;跌到檢測;定位;SMS要在老人的手機上安裝上軟件進行相應簡單的設置,就可以實現檢測和報警。2軟件設計及分析2.1總體設計基于Android平臺開發的老人跌倒檢測報警系統主要用來對人體跌倒進行識別和報警,主要功能包括,通過獲取到的加速度值和角速度值進行判別跌倒是否發生并用折線圖對加速度變化的實時信息進行動態顯示,使用百度地圖定位功能獲取到老人跌倒時所處的位置,用戶需要進行緊急聯系人設置以便檢測到跌倒發生時系統進行自動報警,檢測到跌倒時將用戶位置和摔倒的信息以短信發送到緊急聯系人手機上。該系統中跌倒的識別是一個難點,只進行加速度和角速度閾值設定的方式來判斷摔倒是否發生測試結果會有一定的誤差,要使測試結果更精確則需要使用識別數據庫。即將人體運動時可能發生的各種情況如正常行走、跑步、跌倒等的相關數據保存到數據庫中,判別跌倒是否發生時只需要和數據庫中的數據進行對比即可。2.2設計環境開發軟件:Eclipse開發語言:Java+SQLite運行環境:Android4.1.0及以上2.2.1加速度傳感器簡介加速度傳感器是一種能夠測量加速力的電子設備。通過測量由于重力引起的加速度,你可以計算出設備相對于水平面的傾斜角度。通過分析動態加速度,你可以分析出設備移動的方式。加速度傳感器是一種能夠測量加速力的電子設備。因此其的范圍比重力感應器要大,但是一般在手機被提到的加速度感應器時,其實就是指重力感應器,因此兩者可以看作是等價的。加速度傳感器應用于地震檢波器設計、車禍報警、監測高壓導線舞動、汽車安全、游戲控制、圖像自動翻轉、電子指南針傾斜校正、GPS導航系統死角的補償、計步器功能、防手抖功能、設備或終端姿態檢測等眾多領域。2.2.2跌到檢測簡介跌倒檢測系統,其包括:一個或多個傳感器,所述傳感器用于監測跌倒檢測系統的用戶的運動以及用于生成相應的信號;用于根據用戶身體狀況的一個或多個測量結果確定閾值的模塊;處理器,所述處理器用于分析信號以識別用戶的跌倒、分析信號以識別跌倒。一般情況下,人體跌倒行為通常發生在2秒左右。跌倒過程中身體重心的瞬間移動會產生一個加速度,身體的傾倒也會產生一個偏離豎直方向的角度。在非跌倒狀態如行走過程中,人體上軀干偏離Z軸的傾斜角處于一個相對安全的范圍內,而跌倒后人體多處于俯臥、側臥或仰臥的狀態,軀干方向接近于水平,即偏離豎直方向的傾斜角接近90度。因此我們選取加速度和身體的傾斜角這兩個特征作為判別跌倒與其它日?;顒拥囊罁?。.2.2.3定位簡介現在人們能實現的定位的方式很多百度地圖就是其中一個,百度提供的一項網絡地圖搜索服務,覆蓋了國內近400個城市、數千個區縣。在百度地圖里,用戶可以查詢街道、商場、樓盤的地理位置,也可以找到離您最近的所有餐館、學校、銀行、公園等等。利用百度地圖定位功能實時的知道用戶所處的位置,要想到達目的地可以選擇的路線信息等。2.2.4SMS短信服務是一種存儲和轉發服務。也就是說,短消息并不是直接從發送人發送到接收人,而始終通過短信服務中心進行轉發。如果接收人處于未連接狀態(可能電話已關閉),則消息將在接收人再次連接時發送。SMS具有許多其他的重要功能。它既是一個龐大的直接面對用戶的服務部門,需要位于不同工作點的許多工作人員通過客戶端同時對數據庫進行操作3系統需求分析與概要設計3.1需求分析本系統是一個基于安卓系統的人體跌倒檢測報警系統軟件,通過使用此軟件能夠快捷的識別出人體是否跌倒,利用百度地圖對人所處的位置進行定位,并使用SMS將位置和摔倒的信息發送到家人的手機上,本系統包括的功能有緊急聯系人信息添加,百度地圖定位,跌倒識別的信息用折線圖顯示,短信的發送。3.2系統概要設計3.2.1系統功能模塊介紹(1)添加緊急聯系人信息模塊:用戶點擊聯系人按鈕后可以通過點擊添加按鈕進入緊急聯系人信息頁面進行信息的添加也可以點擊通訊錄從手機通訊錄中選擇添加。該模塊中包含了兩個子模塊自主添加聯系人模塊和從通訊錄選擇添加聯系人模塊,模塊界面如下圖所示:圖3.1系統主界面圖3.2緊急聯系人信息模塊界面(2)百度地圖定位模塊:當老人跌倒需要家人的幫助時就需要能知道老人當時所在的位置,所以利用百度地圖里的定位功能實現實時定位。模塊界面如下:圖3.3百度地圖模塊界面(3)跌倒識別模塊:現在的android手機中都已集成了加速度傳感器,所以利用加速度傳感器的和速度是否超過設定的閾值判定人體是否摔倒,并將信息用折線圖顯示。該模塊中包含了加速度顯示和折線圖顯示加速度值兩個子模塊,界面如下圖所示:圖3.4跌倒識別模塊界面(4)發送短信模塊:當檢測到用戶摔倒時將用戶的當前的所在位置和摔倒的信息發送到指定的緊急聯系人的手機上。模塊的界面如下圖所示:圖3.5發送短息模塊界面3.2.2功能模塊結構圖圖3.6功能模塊結構圖3.2.3系統流程圖圖3.7系統流程圖4系統詳細設計4.1聯系人設置模塊4.1.1代碼設計緊急聯系人設置的xml布局由兩個Button和一個Textview組成,兩個Button分別表示通過系統自己的添加界面添加緊急聯系人和調用手機通訊錄選擇添加緊急聯系人,Textview用來顯示添加的緊急聯系人信息(包括姓名,電話,地址)模塊部分代碼如下:protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_contact_info); show=(TextView)findViewById(R.id.show); Intenti=getIntent(); /* *實現緊急聯系人的添加*/ findViewById(R.id.add).setOnClickListener( newOnClickListener(){ //調用“添加聯系人信息”頁面 @Override publicvoidonClick(Viewv){ IntentjIntent=newIntent(ContactInfoActivity.this, AddContactActivity.class); //jIntent.putExtra("familyInfo",newfamilyInfo("","","")); startActivityForResult(jIntent,0); } }); /* *實現通訊錄中選取聯系人 **/ findViewById(R.id.book).setOnClickListener( newOnClickListener(){ @Override publicvoidonClick(Viewv){ IntentbIntent=newIntent(ContactInfoActivity.this, PhoneActivity.class); startActivityForResult(bIntent,0); } }); } //處理接收的數據 @Override protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ super.onActivityResult(requestCode,resultCode,data); //接收數據:采用Bundle傳值 Bundlebundle=data.getExtras(); Stringname=bundle.getString("name"); Stringtelphone=bundle.getString("telphone"); Stringaddress=bundle.getString("address"); show.setText("聯系人信息:"+"\n姓名:"+name+"\n電話:"+telphone+"\n地址:"+address); show.setTextSize(20); }4.1.2界面設計聯系人設置模塊界面如圖4.1.1所示。圖4.1緊急聯系人信息界面圖4.2自主添加聯系人模塊4.2.1代碼設計自主添加聯系人activity_add_contact.xml布局主要由三個TextView來分別顯示用戶需要添加的姓名、電話和地址信息、三個EditText分別由用戶輸入對應的信息、兩個Button用來實現用戶輸入信息的存儲并返回到另一個Activity將信息顯示出來,取消按鈕用來取消本次添加操作。模塊的部分代碼如下:protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_contact); //接收數據 IntentjIntent=getIntent();//實現“聯系人信息頁”到“添加聯系人信息”頁 name=(EditText)findViewById(R.id.editText1); telphone=(EditText)findViewById(R.id.editText2); address=(EditText)findViewById(R.id.editText3); //返回聯系人信息頁 findViewById(R.id.confirm).setOnClickListener( newOnClickListener(){ @Override publicvoidonClick(Viewv){ Bundlebundle=newBundle(); bundle.putString("name", name.getText().toString()); bundle.putString("telphone", telphone.getText().toString()); bundle.putString("address", address.getText().toString()); Intentintent=newIntent(AddContactActivity.this, ContactInfoActivity.class); intent.putExtras(bundle); setResult(1,intent); finish(); } });4.2.2界面設計自主添加聯系人模塊界面如圖4.2.1和圖4.2.2所示。圖4.2添加聯系人界面圖4.3取消按鈕信息提示界面4.3通訊錄獲取聯系人模塊4.3.1代碼設計通訊錄獲取聯系人activity_phone.xml布局由ListView來顯示從用戶手機通訊錄中讀取出來的聯系人信息,模塊部分代碼如下:publicclassGetNumber{ publicstaticList<PhoneInfo>lists=newArrayList<PhoneInfo>(); publicstaticStringgetNumber(Contextcontext){ Cursorcursor=context.getContentResolver().query(Phone.CONTENT_URI, null,null,null,null); StringphoneNumber; StringphoneName; while(cursor.moveToNext()){ phoneNumber=cursor.getString(cursor.getColumnIndex(Phone.NUMBER));//電話號碼 phoneName=cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));//姓名 PhoneInfoinfo=newPhoneInfo(phoneName,phoneNumber); lists.add(info); System.out.println(phoneName); System.out.println(phoneNumber); } returnnull; }}4.3.2界面設計通訊錄獲取聯系人模塊界面如圖4.3.1所示。圖4.4通訊錄選擇聯系人信息界面4.4百度地圖定位模塊4.4.1代碼設計百度地圖定位activity_locationss.xml布局由一個Button來驅動用戶調用百度地圖API實現百度地圖的定位,在實現百度地圖定位時需要根據所建項目的包和Eclipse中的SHA1fingerprint信息來申請對應的APIkey并在配置文件中配置響應信息,還需要導入baidumapapi的包。模塊的部分代碼如下:publicclassMyLocationListennerimplementsBDLocationListener{ @Override publicvoidonReceiveLocation(BDLocationlocation){ //mapview銷毀后不在處理新接收的位置 if(location==null||mMapView==null) return; MyLocationDatalocData=newMyLocationData.Builder() .accuracy(location.getRadius()) //此處設置開發者獲取到的方向信息,順時針0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); if(isFirstLoc){ isFirstLoc=false; LatLngll=newLatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdateu=MapStatusUpdateFactory.newLatLng(ll); mBaiduMap.animateMapStatus(u); } Stringaddr=location.getAddrStr(); if(addr!=null){ Log.i("Test",addr); }else{ Log.i("Test","error"); } doublelongitude=location.getLongitude(); doublelatitude=location.getLatitude(); if(longitude>0&&latitude>0){ Log.i("Test",String.format("緯度:%f經度:%f",latitude,longitude)); LatLngptCenter=newLatLng(latitude,longitude); //反Geo搜索 mSearch.reverseGeoCode(newReverseGeoCodeOption() .location(ptCenter)); } //停止定位 mLocClient.stop(); } publicvoidonReceivePoi(BDLocationpoiLocation){ } }4.4.2界面設計百度地圖定位模塊界面如圖4.4.1所示。圖4.5百度地圖定位信息界面4.5加速度信息顯示模塊4.5.1代碼設計加速度信息顯示activity_sensor.xml布局由一個TextView顯示通過手機中的加速度傳感器獲取到的人體運動加速度的數據,此處需要計算加速度的合速度并設定相應的閾值,若獲取的合速度a超過了閾值則表示人摔倒否則屬于正常情況。模塊部分代碼如下:/*功能:采集加速度傳感器,得到傳感器從外界采集的數據 */ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_sensor); showTextView=(TextView)findViewById(R.id.showTextView); sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE); accelerometerSensor=sensorManager .getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(this,accelerometerSensor, SensorManager.SENSOR_DELAY_GAME); } //坐標軸都是手機從左側到右側的水平方向為x軸正向,從手機下部到上部為y軸正向,垂直于手機屏幕向上為z軸正向 @Override publicvoidonSensorChanged(SensorEventevent){ if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ //x,y,z分別存儲坐標軸x,y,z上的加速度 floatx=event.values[0]; floaty=event.values[1]; floatz=event.values[2]; //根據三個方向上的加速度值得到總的加速度值a floata=(float)Math.sqrt(x*x+y*y+z*z); System.out.println("和加速度a>"+a); //傳感器從外界采集數據的時間間隔為10000微秒 System.out.println("x軸加速度x>"+x); System.out.println("y軸加速度>"+y); System.out.println("z軸加速度>"+z); Log.d("TAG","x>"+x); Log.d("TAG","y>"+y); Log.d("TAG","z>"+z); showTextView.setText("\t"+"合速度a>"+a+ "\nX軸加速度>"+x+ "\nY軸加速度>"+y+ "\nZ軸加速度>"+z); } //將當前時間賦值給timestamp timestamp=event.timestamp; }4.5.2界面設計加速度信息顯示模塊界面如圖4.5.1所示。圖4.6人體運動加速度信息顯示界面4.6折線圖顯示合速度信息模塊4.6.1代碼設計折線圖顯示合速度activity_chart.xml布局由一個TextView、一個LinearLayout和一個Button組成,TextView反映折線圖的內容,LinearLayout用來顯示折線圖,Button用來返回上一級的Activity頁面。代碼如圖所示:@Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_chart); LinearLayoutlayout=(LinearLayout)findViewById(R.id.linearlayout);//生成圖表 chart=ChartFactory.getTimeChartView(this,getDateDemoDataset(),getDemoRenderer(),"HH:mm:ss"); layout.addView(chart,newLayoutParams(LayoutParams.WRAP_CONTENT,370)); //為TextView添加事件// textview=(TextView)findViewById(R.id.myview);// textview.setOnClickListener(newView.OnClickListener Buttonbutton=(Button)this.findViewById(R.id.button); button.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ Toast.makeText(ChartActivity.this,"加速度",1).show(); Intentintent=newIntent(); intent.setClass(ChartActivity.this,MainActivity.class); startActivity(intent); } }); handler=newHandler(){ @Override publicvoidhandleMessage(Messagemsg){ //刷新圖表 updateChart(); super.handleMessage(msg); }};task=newTimerTask(){ @Override publicvoidrun(){ Messagemessage=newMessage(); message.what=200; handler.sendMessage(message); }};timer.schedule(task,2*1000,1000); }4.6.2界面設計折線圖顯示合速度信息模塊界面如圖4.6.1所示。圖4.7折線圖顯示人體運動加速度信息界面4.7發送短信模塊4.7.1代碼設計短信發送activity_sms.xml布局由兩個TextView和兩個EditView和一個Button組成,TextView用來作為用戶發送短信時輸入信息的提示,EditView用來給用戶進行信息編輯,Button實現短信發送的操作。模塊部分代碼如下:protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_sms); phone_number_editText=(EditText)findViewById(R.id.phone_number_editText); sms_content_editText=(EditText)findViewById(R.id.sms_content_editText); send_sms_button=(Button)findViewById(R.id.send_sms_button); send_sms_button.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewarg0){ Stringphone_number=phone_number_editText.getText().toString().trim(); Stringsms_content=sms_content_editText.getText().toString().trim(); if(phone_number.equals("")){ Toast.makeText(SMSActivity.this,R.string.str_remind_input_phone_number,Toast.LENGTH_LONG).show(); }else{ SmsManagersmsManager=SmsManager.getDefault(); if(sms_content.length()>70){ List<String>contents=smsManager.divideMessage(sms_content); for(Stringsms:contents){ smsManager.sendTextMessage(phone_number,null,sms,null,null); } }else{ smsManager.sendTextMessage(phone_number,null,sms_content,null,null); } Toast.makeText(SMSActivity.this,R.string.str_remind_sms_send_finish,Toast.LENGTH_SHORT).show(); } } }); }4.7.2界面設計短信發送模塊界面如圖4.7.1所示。圖4.8短信發送界面4.8系統開發過程故障排除在整個系統開發的過程中,總會遇到各種各樣的問題,現將部分問題及解決辦法總結如下:在Activity中,獲取被啟動的Activity傳回的信息時報空指針的錯誤,原因是布局文件中有些控件未被綁定組件,所以獲取的值是空的。在利用百度地圖進行定位時報錯:Unabletoexecutedex:Multipledexfilesdefine,原因是重復定義support.v4的支持包,解決辦法:刪掉一個即可。在運行程序時報錯:Pleasechecklogcatoutputformoredetails。原因是測試的手機內存不足,解決辦法:刪除手機上的其他應用。點擊按鈕時程序不響應,但程序不報錯誤。原因是:在頁面布局中,圖片和按鈕的命名相同時。在系統中需要使用折線圖顯示獲取到的加速度值得變化信息,出現錯誤:java.lang.NoClassDefFoundError:org.achartengine.model.XYMultipleSeriesDataset,原因:依賴的Jar包沒有編譯到apk中,解決辦法:選擇工程Project右鍵-->屬性-->JavaBuildPath-->OrderandExport-->將引
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具售后部管理制度
- 家電維修業管理制度
- 應急戰備庫管理制度
- 彩箱包裝廠管理制度
- 律師駐法院管理制度
- 心理測量室管理制度
- 快遞健康碼管理制度
- 快餐廳公司管理制度
- 急診手麻醉管理制度
- 成品庫規章管理制度
- 蔬菜農藥殘留檢測合同
- YY 0117.1-2024外科植入物骨關節假體鍛、鑄件第1部分:Ti6Al4V鈦合金鍛件
- 任務6.4 IBP盤認知與操作課件講解
- 2024年首屆全國“紅旗杯”班組長大賽考試題庫800題(含答案)
- 基于3D打印技術的個性化正畸矯治器設計
- 國際化競爭格局下的動漫游戲行業發展策略
- 河南省鄭州市中原區2023-2024學年八年級下學期期末歷史試卷
- GB/T 44087-2024北斗三號區域短報文通信用戶終端技術要求與測試方法
- GB/T 43868-2024電化學儲能電站啟動驗收規程
- 資本論在中國智慧樹知到期末考試答案2024年
- 傳染病預防控制工作方案醫院
評論
0/150
提交評論