Я разрабатываю приложение для Android, которое должно проверять, остается ли устройство неподвижным. Это должно работать, когда я кладу устройство на ровную поверхность. Это также должно работать, когда устройство лежит по обеим сторонам устройства. Пока я держу устройство очень тихо в руке, проверка должна завершиться неудачей. Потому что небольшое движение от руки/руки должно быть достаточным для обнаружения движения.Устройство обнаружения акселерометра Android, лежащее неподвижно
Я пробовал это снова и снова, но я все еще, похоже, терпит неудачу. Обычно случается так, что данные, которые я получаю от SensorEventListener
, всегда сильно колеблются. Ниже приведены данные, которые я возвращаю с устройства, находясь неподвижно на ровной поверхности.
0.07366191
0.056904275
0.034122672
0.047471035
0.080519415
0.07816742
1.2434766
0.34602648
0.25965866
0.52344894
0.14806636
Я попытался следующим:
- 10 секунд калибровки, лежа на столе, хранение, что калиброванное значение и использовать его в качестве порогового значения.
- Исправлено пороговое значение на основе
Math.sqrt(ax * ax + ay * ay + az * az)
результатов. - Использование либо
TYPE_LINEAR_ACCELERATION
, либо обычного типа. - Использование силы тяжести (9.8) в качестве порога.
На данный момент я не знаю, что делать дальше. Я действительно надеюсь, что кто-то может мне помочь. Заранее спасибо.
Спасибо за предложение. Я сделал следующее. Кэширование 100 образцов оси X, Y и Z 'Math.sqrt (ax * ax + ay * ay + az * az)' output. То, что происходит, составляет средние значения около 9,67 на плоской поверхности. Удерживая устройство рядом с моей головой или очень сильно в моей руке, он идет от 9.60 до 9.75. Очень трудно различать их. Есть идеи? Также почему я хочу проверить ось z для принятия решения? – Jeroen
Скважирование выходных значений, их суммирование и получение квадратного корня дает вам величину правильного ускорения. Это может помочь вам решить, движется ли устройство, но это не поможет вам определить ориентацию устройства. Предполагая, что ось z перпендикулярна плоскости экрана устройства, это интересующая вас координата. Если устройство не ускоряется, он не может испытывать больше одного G в направлении z. (Попробуйте распечатать только показания az, и вы увидите, что они находятся на максимуме, когда устройство находится параллельно земле и неподвижно.) –
Вы также можете попытаться вычислить углы наклона и наклона устройства. Если устройство разбито вперед или назад или свернуто из стороны в сторону, оно не сидит ровно. Вот статья с формулами для тангажа и ролла: http://theccontinuum.com/2012/09/24/arduino-imu-pitch-roll-from-accelerometer/ –