Paso 6: Uso de diferente hardware
La misma técnica puede utilizarse con un magnetómetro diferentes y no se limita a un Arduino, pero tendrás que adaptarlo y traducirlo posiblemente desde C a otro idioma.
Si adaptar el código a un magnetómetro diferentes, ten en cuenta que el MPU-9150 utiliza diferentes sistemas de coordenadas para el magnetómetro y acelerómetro. Cambiar de uno a otro requiere que intercambiar los valores de X e Y y Z de negar. Esto se hace en la función readMag() para que el resto del código puede trabajar exclusivamente en el sistema de coordenadas del acelerómetro. Los desplazamientos, una vez calculados, se convierten a coordenadas de magnetómetro para almacenamiento.
Utilizando un magnetómetro diferentes, en principio que sólo necesita reemplazar la función readMag().
Tres matrices, [mx], [mi] y mz [] cada uno de los 5 elementos, mantener las lecturas del magnetómetro en las 5 posiciones, es decir, horizontales, girar 45 grados una forma y luego el otro sobre el eje X y del mismo modo Y. En cada posición (excepto el primero) las salidas del acelerómetro se rotan para que la función displayCal() sólo tiene que calcular las variables de "ángulo" y "up" como el ángulo de la dirección y la orientación deseada (como un flotante número de píxeles de punto) de la mayor pendiente. La magnitud del error se convierte en una escala logarítmica para dar mayor sensibilidad cuando el error es pequeño. La función displayCal() devuelve un valor booleano true cuando el error es dentro de los límites, y una vez que ha hecho así un número determinado de veces en una fila Calibrate() almacena las lecturas de magnetómetro.
El cálculo real de los desplazamientos tomó varias páginas de álgebra y trigonometría para derivar pero se encarna en apenas 4 líneas de código. Podrán reconocer el número mágico 0.7071 como el medio la raíz cuadrada de 2, o cos(45⁰). Restar esto de 1 y obtienes el segundo número de la magia 0.29289 y doble para conseguir la 3ª 0.58579. No de la magia después de todo.
No hay nada especial acerca de la inclinación de 45 grados que se utiliza en la calibración, pero simplifican considerablemente las matemáticas. En principio podría rodar el dispositivo alrededor de la vertical, continuamente lecturas del acelerómetro y magnetómetro y calcular los desplazamientos hasta los valores promedio calculados colocados alrededor de un resultado confiable, pero las matemáticas sería mucho más complicada. La aplicación brújula hace esto, que es donde me vino la idea para la calibración automática.