En aquesta ocasió, parlarem d'un dels sensors que s'utilitza més en projectes d'Arduino relacionats amb la navegació i l'orientació: el GY-271. Aquest mòdul incorpora el sensor HMC5883L, que és un magnetòmetre de tres eixos capaç de detectar camps magnètics i, per tant, donar-nos l'orientació respecte del nord magnètic.
Si estàs pensant a integrar-lo en un projecte amb Arduino, al llarg d'aquest article t'explicarem tots els detalls: des de les característiques, com connectar-lo i programar-lo, fins a exemples d'ús i consells per obtenir la millor precisió. Així que segueix llegint i descobreix com crear una brúixola digital amb Arduino!
Què és el sensor GY-271?
el sensor GY-271 és un mòdul que integra el magnetòmetre HMC5883L. Aquest xip és capaç de mesurar el camp magnètic als tres eixos (X, Y i Z) i, amb aquestes dades, és possible conèixer l'orientació respecte al camp magnètic terrestre. Aquest sensor té una gran precisió i és àmpliament utilitzat en projectes de navegació en robots o vehicles autònoms.
La comunicació entre aquest mòdul i l'Arduino es realitza a través del bus I2C, cosa que facilita enormement l'obtenció de les dades mesurades. L'HMC5883L compta amb un rang de mesura que va de ±0.88 Gauss a ±8.1 Gauss, depenent de la configuració, cosa que permet abastar un ampli rang d'aplicacions.
Connexions i muntatge amb Arduino
Connectar el GY-271 al teu Arduino és realment senzill, només necessites alguns cables i seguir l'esquema bàsic:
- Connecta el pin GND del mòdul amb el pin GND de l'Arduino
- El pin VCC del GY-271 s'ha de connectar als 5V de l'Arduino
- Connecta el pin SDA del GY-271 amb el pin A4 de l'Arduino (o SCL en alguns models com el Mega)
- El pin SCL ha d'anar al pin A5 de l'Arduí (o SDA en alguns casos)
Quan tens tot connectat, el mòdul estarà llest per començar a funcionar. Si el teu objectiu és obtenir dades del camp magnètic i crear una brúixola digital, ja tens allò bàsic. No obstant això, tingues en compte que el Entorn on col·loquis el sensor ha d'estar lliure de interferències magnètiques, ja que metalls propers o dispositius electrònics poden alterar els mesuraments.
Exemples de codi amb Arduino
A continuació, us mostrem un exemple bàsic de com llegir els valors X, Y i Z del camp magnètic utilitzant la llibreria adequada. Aquesta llibreria et facilitarà la comunicació I2C i les lectures del sensor:
#include <Wire.h>
#include <HMC5883L.h>
HMC5883L compass;
int16_t mx, my, mz;
void setup() {
Serial.begin(9600);
Wire.begin();
compass.initialize();
}
void loop() {
compass.getHeading(&mx, &my, &mz);
Serial.print("X: ");
Serial.print(mx);
Serial.print(" Y: ");
Serial.print(my);
Serial.print(" Z: ");
Serial.println(mz);
delay(500);
}
Aquest codi és ideal per obtenir les components del camp magnètic als tres eixos. Un cop tens aquests valors, pots calcular l'orientació del sensor respecte al nord magnètic utilitzant la funció atan2, que ens permetrà convertir els eixos X i Y en un angle.
Càlcul de l'angle respecte del nord
Ja que tens les lectures del camp magnètic, el pas següent és calcular l'orientació respecte al nord magnètic. Per fer-ho, pots utilitzar la fórmula següent:
float angulo = atan2(my, mx) * (180 / PI);
Aquest càlcul ens proporcionarà un angle en graus que representa la direcció cap al nord magnètic. No obstant això, has de tenir en compte la declinació magnètica, que és la diferència entre el nord magnètic i el nord geogràfic. Depenent de la vostra ubicació geogràfica, aquest valor pot variar, i és important corregir-lo per obtenir una brúixola més precisa.
Configuracions addicionals i modes de funcionament
El GY-271 ofereix diverses configuracions que et permetran ajustar-ne el funcionament segons les teves necessitats. Per exemple, pots optar per dos modes de funcionament:
- Mode continu: El magnetòmetre realitza mesuraments contínuament i actualitza els registres corresponents (X, Y, Z).
- Mode de mesura única: El sensor només realitza una lectura quan l'Arduino ho sol·licita, cosa que pot ser útil si vols estalviar energia.
A més, pots ajustar la sensibilitat del sensor, modificant el rang de meditació. Els rangs disponibles van des de ±0.88 Ga fins a ±8.1 Ga, cosa que et permet adaptar el sensor a diferents entorns i condicions de treball.
Recordeu que, per canviar el rang de mesurament, heu d'utilitzar la funció setGain de la llibreria, la qual permet establir el guany del sensor en funció del rang magnètic que vulguis mesurar.
Aplicacions del GY-271
El sensor GY-271 té nombroses aplicacions al camp de la robòtica i la navegació. Com que és un dispositiu relativament barat i fàcil d'implementar, és utilitzat en projectes com:
- Rovers autònoms: Permet als robots saber en quina adreça estan orientats.
- Quadricòpters: Ajuda a mantenir l'orientació del dron respecte al nord en vol.
- Sistemes de navegació: Qualsevol vehicle que necessiti conèixer la seva posició i orientació es pot beneficiar d'aquest mòdul.
Un dels detalls més curiosos és que, encara que el GY-271 té una gran precisió en condicions controlades, el seu mesurament es pot veure afectat per interferències, com la presència de metalls o camps electromagnètics propers. Això es pot corregir mitjançant tècniques de calibratge combinades amb acceleròmetres o giroscopis (IMU), cosa que és típica en sistemes de navegació més avançats.
La combinació d'aquest sensor amb acceleròmetres, per exemple, permet construir dispositius més precisos i resistents al soroll magnètic, cosa que obre un ventall de possibilitats d'ús en projectes amb Arduino i altres microcontroladors.