Paso 1: teoría
No me meteré en detalles sobre cómo calcular los ángulos de inclinación, o cómo intentar filtrar a gravedad matemáticas. Sin embargo, aquí es un resumen general de la teoría detrás de mi código.
El acelerómetro que utiliza detecta la aceleración en 3 ejes, X, Y y Z. Como comentamos en el anterior instructable las lecturas de estos ejes representan vectores componentes. Cuando el dispositivo está sentado en una mesa, gravedad está alineada con su eje Z para que el eje Z Lee aproximadamente 1. Los ejes X e Y en este caso ambos leer 0. Al girar la gravedad Junta caerá en algún lugar entre los ejes X Y y Z. Se trata de vectores de componente de la gravedad se extienden entre los ejes. Cierre que el vector gravedad es alineando con un eje, más cerca de la lectura de dicho eje será 1. Para que podamos usar algunos trigonometría para calcular el ángulo de inclinación, basado en las magnitudes en los ejes X Y y Z. En mi código que me refiero a estos ángulos como los ángulos de Euler, desde ángulos que representan la orientación 3d de un objeto se denominan ángulos de Euler.
Más sobre ángulos de Euler aquí: http://en.wikipedia.org/wiki/Euler_angles
En mi código he incluido también un filtro de gravedad. Utiliza los ángulos de Euler para calcular los vectores componentes causados por la gravedad. Reste estos vectores componente calcula hacia fuera para obtener valor libre gravedad final. Otra vez este enfoque sólo funciona mientras el dispositivo está inmóvil.