verificar usando studio sensores programacion móviles estado desarrollo curso como celular aplicaciones acelerometro android

usando - sensores android studio



Cómo contar el paso usando el acelerómetro en Android (3)

No encontrará aquí un código simple para simplemente contar los pasos (es demasiado complejo). Pero hay información por ahí si estás interesado:

Necesito contar no de pasos al caminar. de modo que estoy utilizando acelerómetro. en la codificación anterior obtengo los valores x, y, z del sensor del acelerómetro. esto es lo que he hecho hasta ahora. Mis problemas son x, y, z, ¿cómo contar los pasos al caminar? Obtengo el siguiente código del enlace.

http://pedometer.googlecode.com/svn/trunk/src/name/bagi/levente/pedometer/Pedometer.java

mi código:

import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class Accelerometer extends Activity implements AccelerometerListener { private static Context CONTEXT; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CONTEXT = this; } protected void onResume() { super.onResume(); if (AccelerometerManager.isSupported()) { AccelerometerManager.startListening(this); } } protected void onDestroy() { super.onDestroy(); if (AccelerometerManager.isListening()) { AccelerometerManager.stopListening(); } } public static Context getContext() { return CONTEXT; } /** * onShake callback */ public void onShake(float force) { Toast.makeText(this, "Phone shaked : " + force, 1000).show(); } /** * onAccelerationChanged callback */ public void onAccelerationChanged(float x, float y, float z) { ((TextView) findViewById(R.id.x)).setText(String.valueOf(x)); ((TextView) findViewById(R.id.y)).setText(String.valueOf(y)); ((TextView) findViewById(R.id.z)).setText(String.valueOf(z)); } }

por favor, ayúdame.


Para la detección de pasos, uso la derivada aplicada a la señal suavizada del acelerómetro. Cuando la derivada es mayor que el valor de umbral, puedo sugerir que fue un paso. Puede que no sea la mejor práctica pero funciona para mí :)

El siguiente código se utilizó en esta aplicación https://play.google.com/store/apps/details?id=com.tartakynov.robotnoise

@Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER){ return; } final float z = smooth(event.values[2]); // scalar kalman filter if (Math.abs(z - mLastZ) > LEG_THRSHOLD_AMPLITUDE) { mInactivityCount = 0; int currentActivity = (z > mLastZ) ? LEG_MOVEMENT_FORWARD : LEG_MOVEMENT_BACKWARD; if (currentActivity != mLastActivity){ mLastActivity = currentActivity; notifyListeners(currentActivity); } } else { if (mInactivityCount > LEG_THRSHOLD_INACTIVITY) { if (mLastActivity != LEG_MOVEMENT_NONE){ mLastActivity = LEG_MOVEMENT_NONE; notifyListeners(LEG_MOVEMENT_NONE); } } else { mInactivityCount++; } } mLastZ = z; }


Puede estimar la fuerza de gravedad en el teléfono usando los valores x, y, z ...

float g = (x * x + y * y + z * z) / (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);

... aquí un valor de 1 = normal (1g es normal)

El podómetro en bruto se puede construir con bastante facilidad simplemente contando cuántos picos por encima de un valor g especificado en un período de muestra determinado (por ejemplo, 6 segundos y múltiplo por 10 por pasos por minuto)

Digamos, por ejemplo, registre el tiempo en ms que se registra una ag de> 2 ... luego el pico continuará subiendo ... y volverá a bajar por debajo de 2 ... probablemente a 0.5 o algo ... luego subirá otra vez> 2 ... en este punto detén el reloj.

... entonces tienes un ciclo completo cronometrado!

Para estabilizar el resultado es mejor contar unos pocos ciclos.