El magnetómetro HMC5883L es un sensor ampliamente utilizado en proyectos de Arduino por su capacidad para medir campos magnéticos en tres ejes. Esto lo convierte en una excelente opción para la creación de brújulas digitales, sistemas de navegación para drones y otros vehículos autónomos. Además de ser asequible, su integración es sencilla gracias a su interfaz I2C, lo que lo hace ideal para principiantes.
En este artículo vamos a profundizar en las características principales del HMC5883L, su conexión con diversas placas de Arduino y ejemplos prácticos para su uso. Al final, podrás implementar tu propio proyecto de brújula digital con Arduino, aprovechando todo el potencial de este potente sensor.
¿Qué es el HMC5883L y cómo funciona?
El HMC5883L es un magnetómetro de tres ejes que mide las componentes del campo magnético terrestre en los ejes X, Y y Z. Esto no solo permite detectar la presencia de campos magnéticos, sino que también permite determinar la orientación mediante cálculos basados en las mediciones obtenidas. Estas características lo convierten en el sensor ideal para hacer sistemas de orientación, como una brújula digital.
El sensor se suele encontrar en módulos como el modelo GY-273 que, además, incluye la electrónica necesaria para facilitar su conexión directa con placas Arduino u otros microcontroladores. Su alimentación es flexible, pudiendo ser alimentado tanto con 3.3V como con 5V, lo que lo hace muy versátil en términos de compatibilidad con diferentes sistemas.
Conexiones con Arduino
La conexión del HMC5883L con Arduino es realmente sencilla gracias a la interfaz I2C que emplea. Esta comunicación solo requiere dos pines: SDA y SCL, que deben conectarse a los pines correspondientes en la placa Arduino.
- Para Arduino Uno, Nano y Mini: SDA se conecta al pin A4 y SCL al A5.
- Si utilizas un Arduino Mega o Due: SDA debe conectarse al pin 20 y SCL al pin 21.
- En el caso del Arduino Leonardo: SDA va al pin 2 y SCL al pin 3.
No olvidemos que el magnetómetro trabaja con una dirección I2C fija de 0x1E, por lo que no es posible cambiarla. Esta dirección es única para este tipo de sensor, lo que significa que no podemos conectar múltiples dispositivos HMC5883L en un mismo bus I2C.
Lectura del Campo Magnético
El método principal de operación del HMC5883L es la lectura de los valores del campo magnético en los tres ejes. Para obtener estos valores en un Arduino, empleamos una librería desarrollada por Jeff Rowberg. Puedes encontrar esta librería en su repositorio de GitHub y descargarla para su uso en el IDE de Arduino.
Una vez instalada la librería, se puede inicializar el sensor y comenzar a leer los valores del campo magnético. A continuación, se muestra un ejemplo simple en el que se hace precisamente esto:
#include "Wire.h"
#include "I2Cdev.h"
#include "HMC5883L.h"
HMC5883L magnetometro;
int16_t mx, my, mz;
void setup() {
Serial.begin(9600);
Wire.begin();
magnetometro.initialize();
}
void loop(){
magnetometro.getHeading(&mx, &my, &mz);
Serial.print("mx: "); Serial.print(mx);
Serial.print(" my: "); Serial.print(my);
Serial.print(" mz: "); Serial.println(mz);
delay(100);
}
En este código, se inicializa el magnetómetro y se lee en bucle los valores en los tres ejes. Cada vez que ejecutemos el `loop()`, se mostrará en el monitor serial los valores del campo magnético en X, Y y Z.
Configuración del rango y ganancia
El HMC5883L permite ajustar el rango de medida del campo magnético entre ±0.88 Gauss y ±8.1 Gauss con diferentes niveles de ganancia. El rango predeterminado es de ±1.3 Gauss, y puedes modificarlo para adaptarlo a las necesidades de tu proyecto. Esto puede hacerse utilizando la siguiente línea dentro del código:
magnetometro.setGain(value);
Donde value es un número entero entre 0 y 7, que seleccionará el nivel de ganancia. A continuación te mostramos una tabla con los valores correspondientes:
Valor | Rango | Ganancia (LSB/Gauss) |
---|---|---|
0 | ±0.88 Ga | 1370 |
1 | ±1.3 Ga | 1090 |
2 | ±1.9 Ga | 820 |
3 | ±2.5 Ga | 660 |
4 | ±4.0 Ga | 440 |
5 | ±4.7 Ga | 390 |
6 | ±5.6 Ga | 330 |
7 | ±8.1 Ga | 230 |
Construyendo una brújula digital
Uno de los usos más comunes del HMC5883L es la construcción de una brújula digital. Para ello, necesitamos calcular el ángulo entre el sensor y el Norte magnético utilizando las lecturas de los ejes X e Y. Esto se consigue mediante la fórmula:
float angulo = atan2(my, mx) * 180 / M_PI;
Este valor te dará el ángulo de orientación respecto al Norte magnético. Para ajustar este ángulo al Norte geográfico, deberás tener en cuenta la declinación magnética de tu ubicación, que puedes consultar en diferentes páginas web como www.ign.es o www.ngdc.noaa.gov.
Corregir la declinación magnética
Una vez que tengas la declinación magnética de tu posición, solo tienes que restarla del ángulo obtenido. Por ejemplo:
angulo -= declinacion;
Cuando el ángulo es negativo, puedes sumarle 360 grados para obtener siempre un valor positivo ajustado entre 0 y 360 grados:
if (angulo < 0) angulo += 360;
Este ajuste te proporcionará una brújula que siempre apuntará hacia el Norte geográfico de forma precisa.
En la práctica, con este sensor y algunas librerías puedes tener una brújula en pocos minutos. Sin embargo, ten en cuenta que el HMC5883L es un sensor sensible a interferencias externas, como metales cercanos o campos generados por corrientes elevadas, lo que puede alterar las lecturas.