2016-05-12 47 views
0

我試圖計算使用加速計傳感器的設備掉落的高度,但沒有運氣。Android:如何使用加速計計算從哪個設備跌落的高度?

我能夠檢測到設備跌落。

請分享問題的想法或解決方法,如果你們中的任何人嘗試相同。

下面是我試過的代碼。

「私人無效handleSensorChanged(SensorEvent事件){ 如果(event.sensor.getType()== Sensor.TYPE_ACCELEROMETER){

 double gvt=SensorManager.STANDARD_GRAVITY; 

     //int sensor=event.sensor.getType(); 
     double xx=event.values[0]; 
     double yy=event.values[1]; 
     double zz=event.values[2]; 

     double aaa=Math.round(Math.sqrt(Math.pow(xx, 2) 
             +Math.pow(yy, 2) 
             +Math.pow(zz, 2))); 




     if (aaa<=6.0) { 
      min=true; 
      mintime=System.currentTimeMillis(); 
      minXx = zz; 

      Log.d(TAG,"Min: xx, yy, zz = "+xx+", "+yy+", "+zz); 
     } 

     if (min==true) { 
      acc+=aaa; 
      count++; 
      i++; 
      if(aaa>=13.5) { 
      max=true; 
      maxtime = System.currentTimeMillis();    
      maxXx = zz; 
      Log.d(TAG,"Max: xx, yy, zz = "+xx+", "+yy+", "+zz); 
      } 
     } 

     if (min==true && max==true) { 
      double time = (maxtime - mintime); 
      //double distance = (minXx-maxXx)* Math.pow(time,2)/1000; 
      double maxVelocity = (aaa/count)*time; 
      double avgVelocity = maxVelocity/2; 
      double distance = (avgVelocity * time)/1000; 

      String msg = "FALL DETECTED!!!!! Duration = "+time + " milli secs, distance = "+ distance +" cms mtrs"; 
      Toast.makeText(this, msg,Toast.LENGTH_LONG).show(); 
      Log.d(TAG, msg); 
      v.vibrate(75); 
      resetValues(); 
     } 

     if (i>4) { 
      resetValues(); 
     } 
     } 

}' 

在此先感謝。

+0

請提供您已經嘗試過的內容,並根據需要概述什麼不起作用。 – dharms

+0

@dharms,我已經添加了代碼,請幫助我,如果你知道。 – Pampapathi

回答

1

加速計給你速度的變化。這可能包括在秋季結束時突然停止。有技術可以使用這些數據來計算遍歷。下面是一些閱讀材料:

https://en.wikipedia.org/wiki/Dead_reckoning https://en.wikipedia.org/wiki/Inertial_navigation_system

但是消費級設備設計用於基本手勢的解釋不會是準確的,你就會有假陽性和假陰性,因爲這將是很難將這些動作與設備可能發生的其他事情區分開來。所以管理你的期望。

+0

我需要同意你的看法,如果設備開始移動,嘗試了很多算法之後,我加入了使用加速度計來啓動服務,我發現即使放在桌子上,某些加速度計也會產生大量誤報。所以你需要一個算法來「更正」這些值,不記得這個算法的名字......使用從0到1的一個alpha值(如果有人可以幫忙) – AxelH