Brújula magnética con Arduino y compass digital HMC5883


arduino-brujula-hmc5883-gy273

¿Qué es una brújula digital HMC5883?

Una brújula digital es un sensor que mide el valor del campo magnético en tres ejes. Con esta medición, es posible estimar la orientación del dispositivo respecto al campo magnético de la tierra.

El chip Honeywell HMC5883 es un chip de superficie que incorpora tres sensores de magnetoresistencia, cancelación de desfases, y conversores de 12 bits, lo que le proporciona una precisión de ±2ºC.

La comunicación con el chip Honeywell HMC5833 se realiza a través del bus I2C, por lo que es sencillo obtener los datos medidos. La tensión de alimentación es de bajo voltaje de 1.8 a 3.3V.

Frecuentemente se encuentran integrados en módulos como la GY-273 que incorporan la electrónica necesaria para conectarla de forma sencilla a un Arduino. En la mayoría de los módulos, esto incluye un regulador de voltaje que permite alimentar directamente a 5V.

Anuncio:

Las brújulas magnéticas son dispositivos ampliamente empleados en el uso de sistemas de navegación en robots y otros vehículos, como rovers o cuadricópteros.

Sin embargo, la medición de estos sensores se ve afectada por la presencia de campos magnéticos y metales. Por tanto, para aplicaciones de navegación es necesario combinar estos sensores con acelerómetros y giroscopios, o IMU’s

Precio

La brújula digital Honeywell HMC5883 es un sensor realmente barato. Podemos encontrar placas que lo montan, como el modelo GY273, por 1,10€ en vendedores internacionales de Ebay y AliExpress.

arduino-brujula-hmc5883-gy273-esquema-componente

Esquema montaje

La conexión es sencilla, simplemente alimentamos el módulo desde Arduino mediante GND y 5V y conectamos el pin SDA y SCL de Arduino con los pines correspondientes del sensor.

arduino-brujula-hmc5883-gy273-esquema

Mientras que la conexión vista desde el lado de Arduino quedaría así.

arduino-brujula-hmc5883-gy273-conexion

En Arduino Uno, Nano y Mini Pro, SDA es el pin A4 y el SCK el pin A5. Para otros modelos de Arduino consultar el esquema patillaje correspondiente.
Verificar que vuestra placa es compatible con 5V antes de conectarla a Arduino. Si no, tendréis que usar un adaptador de nivel lógico.

Ejemplos de código

Para realizar la lectura del HMC5883 usaremos la librería desarrollada por Jeff Rowberg disponible en este enlace. También emplearemos la librería I2Cdev desarrollada por el mismo autor, que mejora la comunicación I2C.

La librería proporciona ejemplos de código, que resulta aconsejable revisar. Los siguientes ejemplos son modificaciones a partir de los disponibles en la librería

Obtener la orientación respecto al norte

En este ejemplo empleamos la medición del campo magnético para determinar la orientación del sensor.

La orientación se obtiene en grados respecto al norte magnético. Sin embargo, el norte geográfico no está perfectamente alineado al norte magnético. Esto se denomina declinación, y depende del punto del globo donde estéis ubicados.

Por tanto, si queréis obtener la orientación respecto al norte geográfico deberéis introducir la declinación de vuestra posición. Existen varias páginas donde consultar este valor, como www.ign.es para ubicaciones dentro de España, o www.ngdc.noaa.gov para ubicaciones en todo el mundo.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la seccióntutoriales de Arduino

Anuncio:

Previous Medir presión del aire y altitud con Arduino y barómetro BMP180
Next Usar un acelerómetro ADXL345 con Arduino
1000
1 Comment threads
4 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
newest oldest
Osvaldo

Buenas noches ante todo muy buena la info. Por otra parte ya probe con dos sensores, distintos pensando que no andaban, y me sigue marcando “0”. Que prueba puedo hacer para ver que problema tengo
Desde ya muchas gracias

Adrian

Hola! Probablemente te esté pasando lo mismo que me ha pasado a mí, el chip del módulo es un QMC5883L, en lugar del HMC5883L. Hay bastante escrito por ahí. En mi caso, terminé concluyendo que la dirección I2C que estaba hardcodeada en la libreria no se correspondia con la que tenía que ser… ahora la he hecho andar, pero de ahí a entender que son todos esos números que me da, es otro cantar.
Saludos

Luis J.

Hola , Osvaldo y Adrian: Yo también tengo un problema con el HMC5883L : En todos los sketch, al compilar, me da el mensaje: ‘class HMC5883L’ has no member named ‘initialize’ Yo también pensé que mi HMC5883L estaba averiado, ya he comprado varios sensores con el mismo resultado. También pensé que era por la dirección I2C, pero ese mensaje lo da al compilar el sketch, antes de intentar comunicar con la tarjeta. Creo que lo que dice el mensaje es que no reconoce el comando “initialize” Ye he cargado varias veces la librería (por si estaba mal) e incluso he… Read more »