
El magnetòmetre HMC5883L és un sensor à mpliament utilitzat en projectes d'Arduino per la seva capacitat per mesurar camps magnètics en tres eixos. Això ho converteix en una excel·lent opció per a la creació de brúixoles digitals, sistemes de navegació per a drones i altres vehicles autònoms. A més de ser assequible, la seva integració és senzilla grà cies a la seva interfÃcie I2C, cosa que el fa ideal per a principiants.
En aquest article aprofundirem en les caracterÃstiques principals de l'HMC5883L, la seva connexió amb diverses plaques d'Arduino i exemples prà ctics per al seu ús. Al final, podreu implementar el vostre propi projecte de brúixola digital amb Arduino, aprofitant tot el potencial d'aquest potent sensor.
Què és l'HMC5883L i com funciona?
L'HMC5883L és un magnetòmetre de tres eixos que mesura les components del camp magnètic terrestre als eixos X, Y i Z. Això no només permet detectar la presència de camps magnètics, sinó que també permet determinar l'orientació mitjançant cà lculs basats en els mesuraments obtinguts. Aquestes caracterÃstiques el converteixen en el sensor ideal per fer sistemes dorientació, com una brúixola digital.
El sensor se sol trobar en mòduls com el model GY-273 que, a més, inclou l'electrònica necessà ria per facilitar-ne la connexió directa amb plaques Arduino o altres microcontroladors. La seva alimentació és flexible, podent ser alimentat tant amb 3.3V com amb 5V, cosa que ho fa molt versà til en termes de compatibilitat amb diferents sistemes.
Connexions amb Arduino
La connexió de l'HMC5883L amb Arduino és realment senzilla grà cies a la interfÃcie I2C que empra. Aquesta comunicació només requereix dues pins: SDA i SCL, que han de connectar-se als pins corresponents a la placa Arduino.
- Per a Arduino Uno, Nano i Mini: SDA es connecta al pin A4 i SCL a l'A5.
- Si utilitzeu un Arduino Mega o Due: SDA ha de connectar-se al pin 20 i SCL al pin 21.
- En el cas de l'Arduino Leonardo: SDA va al pin 2 i SCL al pin 3.
No oblidem que el magnetòmetre treballa amb una adreça I2C fixa de 0x1E, per la qual cosa no és possible canviar-la. Aquesta adreça és única per a aquest tipus de sensor, cosa que significa que no podem connectar múltiples dispositius HMC5883L en un mateix bus I2C.
Lectura del Camp Magnètic
El mètode principal d'operació de l'HMC5883L és la lectura dels valors del camp magnètic als tres eixos. Per obtenir aquests valors en un Arduino, fem servir una llibreria desenvolupada per Jeff Rowberg. Pots trobar aquesta llibreria a seu repositori de GitHub i descarregar-la per al seu ús a l'IDE d'Arduino.
Un cop instal·lada la llibreria, es pot inicialitzar el sensor i començar a llegir els valors del camp magnètic. A continuació, es mostra un exemple simple en què es fa precisament això:
#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 aquest codi, s'inicialitza el magnetòmetre i es llegeix en bucle els valors als tres eixos. Cada vegada que executem el `loop()`, es mostrarà al monitor serial els valors del camp magnètic en X, Y i Z.
Configuració del rang i guany
El HMC5883L permet ajustar el rang de mesura del camp magnètic entre ±0.88 Gauss i ±8.1 Gauss amb diferents nivells de guany. El rang predeterminat és de ±1.3 Gauss, i el pots modificar per adaptar-lo a les necessitats del teu projecte. Això es pot fer utilitzant la següent lÃnia dins del codi:
magnetometro.setGain(value);
on valor és un nombre enter entre 0 i 7, que seleccionarà el nivell de guany. A continuació us mostrem una taula amb els valors corresponents:
| Valor | Rang | Guany (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 |
Construint una brúixola digital
Un dels usos més comuns de l'HMC5883L és la construcció d'una brúixola digital. Per això, necessitem calcular l'angle entre el sensor i el Nord magnètic utilitzant les lectures dels eixos X i Y. Això s'aconsegueix mitjançant la fórmula:
float angulo = atan2(my, mx) * 180 / M_PI;
Aquest valor us donarà l'angle d'orientació respecte al Nord magnètic. Per ajustar aquest angle al Nord geogrà fic, hauràs de tenir en compte la declinació magnètica de la teva ubicació, que pots consultar a diferents pà gines web com www.ign.es o www.ngdc.noaa.gov.
Corregir la declinació magnètica
Quan tinguis la declinació magnètica de la teva posició, només has de restar-la de l'angle obtingut. Per exemple:
angulo -= declinacion;
Quan l'angle és negatiu, li pots sumar 360 graus per obtenir sempre un valor positiu ajustat entre 0 i 360 graus:
if (angulo < 0) angulo += 360;
Aquest ajustament us proporcionarà una brúixola que sempre apuntarà cap al Nord geogrà fic de forma precisa.
A la prà ctica, amb aquest sensor i algunes llibreries pots tenir una brúixola en pocs minuts. No obstant això, tingues en compte que l'HMC5883L és un sensor sensible a interferències externes, com ara metalls propers o camps generats per corrents elevats, cosa que pot alterar les lectures.