Определить, упал ли человек

Я создаю приложение на android, где мне нужно определить, упал ли человек. Я знаю, что этот вопрос был задан и ответил как использовать векторную математику на других форумах, но я не получаю точных результатов из этого.

Ниже приведен мой код для определения падения:

@Override
public void onSensorChanged(SensorEvent arg0) {
  // TODO Auto-generated method stub
  if (arg0.sensor.getType()==Sensor.TYPE_ACCELEROMETER) {
    double gvt=SensorManager.STANDARD_GRAVITY;

    float vals[] = arg0.values;
    //int sensor=arg0.sensor.getType();
    double xx=arg0.values[0];
    double yy=arg0.values[1];
    double zz=arg0.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();
    }

    if (min==true) {
      i++;
      if(aaa>=13.5) {
        max=true;
      }
    }

    if (min==true && max==true) {
      Toast.makeText(FallDetectionActivity.this,"FALL DETECTED!!!!!" ,Toast.LENGTH_LONG).show();
      i=0;
      min=false;
      max=false;
    }

    if (i>4) {
      i=0;
      min=false;
      max=false;
    }
  }
}

Чтобы объяснить вышеприведенный код, я использовал векторную сумму и проверял, если значение достигло меньше или равно 6 (при падении) и внезапно больше 13.5 (при приземлении), чтобы подтвердить падение.

На форумах мне сказали, что если устройство неподвижно, то векторная сумма вернет значение 9.8. Во время падения она должна быть близка к 0, а во время приземления должна достигнуть примерно 20. В моем случае этого не происходит. Пожалуйста, кто-нибудь может подсказать, может я где-то ошибаюсь?

5
задан Marvin Pinto 11 January 2012 в 03:16
поделиться