Si aún no eres usuario, puedes crear una cuenta o entrar
Tutorial Arduino: Brújula digital con HMC6352

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 <Wire.h>
#include <LibCompass.h>
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

 


Comparte esto con tus amigos!

Si te ha gustado, quizás también te interese...
Robot jugador de billar
Publicado el 03/06/2011
Dia oficial del software Libre!
Publicado el 19/09/2010

Comentarios:


Damián Fernández
Enviado el 05/08/2011 (23:07)
Otro tutorial estupendo como siempre! Da gusto ver tus vídeos!! muy bien explicado todo!

José Miguel Lineros De Haro
Enviado el 06/08/2011 (14:27)
Toda la razón Damián!! por que hay churrotutoriales......y Tutogeek!! mi enhorabuena.

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 06/08/2011 (15:43)
Haha, tutogeek, me encanta! :)

Miguel ngel de Frutos Carro
Enviado el 07/08/2011 (12:44)
GENIAL! (cómo siempre!...)

Jonathan Calabrano
Enviado el 12/08/2011 (07:53)
Excelente tutorial, ahora nos queda comprar los materiales :-D.

Matias Frith
Enviado el 14/08/2011 (23:29)
Excelente tutorial, una consulta podrías decirme si puedo usar la librería Libcompass para un compás es un GY-26? Muchas Gracias!

Alfonso Pinto Morón
Enviado el 19/10/2011 (06:58)
gracias por ese excelente tutorial, necesito por favor si alguien me puede ayudar con un ejemplo de manejo del la brújula HMC6352 pero con picbasic, muchas gracias de antemano, y quiero felicitarlo por grandiosa pagina, saludos desde Venezuela

Javier García López
Enviado el 06/03/2012 (18:06)
Buenas!

estamos probando el compás HMC6352 con un Arduino Duemilanove y con un ChipKit UNO32 de Digilent y nos da problemas al compilar ya que no reconoce la librería. Alguien tiene alguna idea de por qué puede pasar??Nos sería de gran ayuda!


Enviar comentario

Debes disponer de una cuenta de usuario para publicar un comentario.

Si aún no dispones de una cuenta, únete a la comunidad de BricoGeek.com y registrate ahora, te llevará tan solo un minuto y es gratis. También puedes identificate si ya dispones de una cuenta de usuario.
rss

Conecta con BricoGeek.com

Canales sociales

Nos gusta mucho estar en contacto con nuestros lectores y saber más acerca de sus proyecto e inventos.


También puedes sugerir una noticia en el blog
Tienda de Electrónica DIY y Arduino

Lo que se cuece...

Comentarios recientes Más comentado Top noticias
Feed de novedades

Tienda BricoGeek.com

Electrónica para tus proyectos!

Estás preparando un proyecto o quieres iniciarte en la electrónica? Encuentra todo lo que necesitas en la tienda.

Visita la tienda BricoGeek!

La familia de BricoGeek.com

Conoce toda la gente que hace que BricoGeek.com sea posible cada día:

Alejandro Mallo
Colaborador
Manuel Jiménez
Colaborador
Pablo Toimil
Colaborador
Puedes hacer click sobre un autor para ver todas sus noticias


Etiquetas más populares:

Descubre todo el contenido de bricogeek.com con las etiquetas más populares:

Páginas amigas:

Aqui tienes una selección de las páginas que más nos gusta visitar


© BricoGeek.com 2005-2012

Demuestra lo que sabes hacer!