Tutorial Arduino: Brújula digital con HMC6352

Publicado por en Tutoriales el 05/08/2011

La semana pasada os enseñábamos como utilizar un acelerómetro. Esta semana le toca el turno a un compás, el HMC6352.

En realidad este sensor es un magnetómetro, ya que mide la fuerza de los campos magnéticos, pero también se le suele llamar compás o brújula digital.

En el tutorial de hoy montaremos una brújula que nos indicará el Norte tanto gráficamente como numericamente ofreciéndonos mucha mas precisión. Para ello utilizaremos el HMC6352, un Arduino UNO, la pantalla gráfica serial y un servo que también nos indicará la posición de nuestro montaje.

¡No os perdáis el resto del tutorial con el vídeo del montaje!

Los magnetómetros nos permiten saber la dirección hacia la que se encuentra el Norte del campo magnético mas fuerte. Se suelen utilizar para obtener la orientación respecto al Norte magnético terrestre. Tienen mucha utilidad en robots, cuadricópteros o similares, para la navegación autónoma o para devolver datos de orientación a distancia.

Los hay de dos y tres ejes, estos últimos se suelen utilizar para dispositivos voladores. 

Revisemos las características del HMC6352:

  • Interfaz I2C por lo que solo necesitamos 2 pines para obtener los datos
  • Alimentación 2.7 - 5.2V. Lo recomendable es utilizar el mínimo por consumo, en este caso lo alimentaremos con el pin de 3v del Arduino
  • Refresco ajustable de 1 a 20Hz
  • Resolución 0.5 grados. Con pedir datos a nivel de grado tendremos una buena precisión.
  • Consumo: 1mA (3V)
  • Dimensiones: 15x15mm
  • Permite calibrado

Para la realización de este tutorial me he basado en la librería Libcompass. Es una librería que no viene integrada en el entorno de desarrollo de Arduino, por lo que tendremos que incluirla para utilizarla.

Nos la bajamos (al final del artículo) y metemos todos los archivos en una carpeta que se debe llamar Libcompass. A continuación la copiaremos dentro de la carpeta libraries del entorno Arduino.

Abrimos el IDE de Arduino y veremos que en examples ya tenemos un par de ejemplos para utilizar. 

GetHeadingSerial nos devolverá por el puerto serie el ángulo del sensor respecto del norte y CalibrateCompass nos permite calibrar el sensor.

Esto último es muy importante. Debemos subir este sketch al arduino y nos indicará a través del puerto serie que giremos el sensor 720º (dos vueltas). De esta manera el sensor mide los campos magnéticos de alrededor y se calibra para obviarlos respecto al terrestre. Por ejemplo, si incluimos este sensor en un robot, este tendrá motores, que tienen imanes. Por lo que debemos calibrarlo ya instalado en el robot para que nos apunte al campo magnético terrestre y no incorrectamente a los motores u otra perturbación magnética.

Empecemos a montar, este es el circuito que os he preparado:

Como podéis ver, alimentamos el sensor con 3v y los pines i2C, SDA y SCL van conectados a los pines analógicos A4 y A5 respectivamente. La razón de esto es que a parte de la funcionalidad de E/S analógica, estos dos pines son el puerto i2C de los Arduino UNO o Duemilanove. En el caso del Arduino Mega estos están localizados en los pines 20 y 21. En el diagrama el sensor va hacia arriba, pero para realizar el montaje yo lo coloqué hacia abajo, con los pines conectados como en la imagen.

La parte del conexionado del servo podéis no tenerla en cuenta si solo queréis tener la brújula con la pantalla.

Una vez instalada la librería podríamos utilizar este es código simple para recibir por serie el angulo.

#include 
#include 
LibCompass compass = LibCompass(0);
void setup() {
 Serial.begin(9600);
}
void loop() {
 Serial.print("Angulo: ");
 Serial.print(compass.GetHeading(),0);
 Serial.println(" degrees");
 delay(10);
}

Como véis es tan fácil como llamar a compass.GetHeading().

Para el ejemplo que os he preparado (podéis descargaroslo al final del artículo) y que se ve en funcionamiento en el vídeo quería no solo ver numéricamente el dato que nos proporciona el sensor, sino también mostrarlo en la pantalla gráfica, aquí aparece una dificultad. El sensor nos da el ángulo hacia el norte, pero para orientar una línea en la pantalla, necesitamos darle dos puntos, el centro ya lo sabemos(el centro de la brújula), pero el extremo necesitamos acudir a la trigonometría.

Es tan sencillo como utilizar las siguientes fórmulas:

x= radio * coseno(angulo)

y= radio * seno(angulo)

Para trabajar con senos y cosenos en Arduino tenemos que darle los ángulos en radianes. Para convertirlos:

anguloRAD = ((anguloDEG)*2*PI)/360;

Ahora tendríamos una brújula en pantalla que nos indicaría el norte, pero los cero grados nos quedarían apuntando hacia la derecha por lo que cambiando todos los terminos seno por coseno y viceversa ya tenemos bien orientada nuestra brújula en la pantalla.

Toda esta trigonometría es simplemente para la implementación grafica, pero aun así, con estas dos fórmulas sencillas tenemos todo el trabajo hecho.

Un círculo por aquí, un par de letras por allá y ya tenemos todo listo. Os dejo con el vídeo del resultado. ¡Espero que os guste!

Librería LibCompass

Código ejemplo

Trigonometría en wikipedia

En la tienda

Arduino UNO Pantalla Serial LCD 128x64  Compás HMC6352Servomotor miniatura HD-1160A

 

Si te ha gustado, compártelo con tus amigos!

Artículos relacionados

Si te ha gustado, quizás también te interese...

Ver comentarios antiguos...

Uso de Cookies

Utilizamos cookies propias y de terceros para optimizar tu visita. No utilizamos cookies para recoger información de carácter personal.

Puedes permitir su uso o rechazarlo y cambiar su configuración cuando lo desees.

Cerrar

Más información en nuestra Política de Cookies.