
HMC5883L-magnetometeret er en sensor, der er meget brugt i Arduino-projekter for dets evne til at måle magnetiske felter i tre akser. Dette gør det til et fremragende valg til at skabe digitale kompasser, navigationssystemer til droner og andre autonome køretøjer. Ud over at være overkommelig er integrationen enkel takket være dens I2C-grænseflade, hvilket gør den ideel til begyndere.
I denne artikel skal vi dykke ned i hovedfunktionerne ved HMC5883L, dens forbindelse med forskellige Arduino-kort og praktiske eksempler på dens brug. I sidste ende vil du være i stand til at implementere dit eget digitale kompasprojekt med Arduino og udnytte det fulde potentiale af denne kraftfulde sensor.
Hvad er HMC5883L, og hvordan virker det?
HMC5883L er en tre akset magnetometer som måler komponenterne i Jordens magnetfelt i X-, Y- og Z-akserne Dette gør det ikke kun muligt at detektere tilstedeværelsen af ​​magnetiske felter, men også at orienteringen kan bestemmes gennem beregninger baseret på de opnåede målinger. Disse funktioner gør den til den ideelle sensor til fremstilling af orienteringssystemer, såsom et digitalt kompas.
Sensoren findes normalt i moduler som GY-273-modellen, som også indeholder den nødvendige elektronik for at lette dens direkte forbindelse med Arduino-kort eller andre mikrocontrollere. Dens strømforsyning er fleksibel, og kan forsynes med både 3.3V og 5V, hvilket gør den meget alsidig i forhold til kompatibilitet med forskellige systemer.
Forbindelser med Arduino
At forbinde HMC5883L med Arduino er virkelig enkel takket være den I2C-grænseflade, den bruger. Denne kommunikation kræver kun to ben: SDA og SCL, som skal forbindes til de tilsvarende ben på Arduino-kortet.
- til Arduino Uno, Nano og Mini: SDA forbindes til pin A4 og SCL til A5.
- Hvis du bruger en Arduino Mega eller Due: SDA skal forbindes til pin 20 og SCL til pin 21.
- I tilfældet med Arduino Leonardo: SDA går til pin 2 og SCL til pin 3.
Lad os ikke glemme, at magnetometeret arbejder med en fast I2C-adresse på 0x1E, så det er ikke muligt at ændre det. Denne adresse er unik for denne type sensor, hvilket betyder, at vi ikke kan forbinde flere HMC5883L-enheder på den samme I2C-bus.
Magnetisk feltaflæsning
Hovedmetoden til drift af HMC5883L er at læse magnetfeltværdier i alle tre akser. For at opnå disse værdier på en Arduino bruger vi et bibliotek udviklet af Jeff Rowberg. Du kan finde denne boghandel på dit GitHub-lager og download den til brug i Arduino IDE.
Når biblioteket er installeret, kan sensoren initialiseres og begynde at læse magnetfeltværdierne. Her er et simpelt eksempel, der gør netop dette:
#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);
}
I denne kode initialiseres magnetometeret, og værdierne på alle tre akser aflæses i en sløjfe. Hver gang vi udfører `loop()`, vil værdierne af magnetfeltet i X, Y og Z blive vist på den serielle monitor.
Indstillinger for rækkevidde og forstærkning
HMC5883L giver dig mulighed for at justere måleområde for magnetisk felt mellem ±0.88 Gauss og ±8.1 Gauss med forskellige forstærkningsniveauer. Standardområdet er ±1.3 Gauss, og du kan ændre det, så det passer til dine projektbehov. Dette kan gøres ved at bruge følgende linje i koden:
magnetometro.setGain(value);
hvor værdi er et heltal mellem 0 og 7, som vil vælge forstærkningsniveauet. Nedenfor viser vi dig en tabel med de tilsvarende værdier:
| værdi | Rango | Forstærkning (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 |
Opbygning af et digitalt kompas
En af de mest almindelige anvendelser af HMC5883L er at bygge en digitalt kompas. For at gøre dette skal vi beregne vinklen mellem sensoren og den magnetiske nord ved hjælp af aflæsningerne af X- og Y-akserne. Dette opnås ved hjælp af formlen:
float angulo = atan2(my, mx) * 180 / M_PI;
Denne værdi vil give dig orienteringsvinklen i forhold til magnetisk nord. For at justere denne vinkel til geografisk nord, skal du tage højde for den magnetiske deklination af din placering, som du kan konsultere på forskellige websteder såsom www.ign.es eller www.ngdc.noaa.gov.
Korrekt magnetisk deklination
Når du har den magnetiske deklination af din position, skal du bare trække den fra den opnåede vinkel. For eksempel:
angulo -= declinacion;
Når vinklen er negativ, kan du tilføje 360 ​​grader for altid at opnå en positiv værdi justeret mellem 0 og 360 grader:
if (angulo < 0) angulo += 360;
Denne indstilling giver dig et kompas, der altid peger præcist mod det geografiske nord.
I praksis kan du med denne sensor og nogle biblioteker have et kompas på få minutter. Bemærk dog, at HMC5883L er en sensor, der er følsom over for ekstern interferens, såsom nærliggende metaller eller felter genereret af høje strømme, som kan ændre aflæsningerne.