
HMC5883L-magnetometeret er en sensor som er mye brukt i Arduino-prosjekter for sin evne til å måle magnetiske felt i tre akser. Dette gjør det til et utmerket valg for å lage digitale kompass, navigasjonssystemer for droner og andre autonome kjøretøy. I tillegg til å være rimelig, er integreringen enkel takket være I2C-grensesnittet, noe som gjør den ideell for nybegynnere.
I denne artikkelen skal vi fordype oss i hovedtrekkene til HMC5883L, dens forbindelse med forskjellige Arduino-kort og praktiske eksempler på bruken. Til slutt vil du kunne implementere ditt eget digitale kompassprosjekt med Arduino, og dra nytte av det fulle potensialet til denne kraftige sensoren.
Hva er HMC5883L og hvordan fungerer det?
HMC5883L er en treakset magnetometer som måler komponentene i jordas magnetfelt i X-, Y- og Z-aksene Dette gjør at tilstedeværelsen av magnetiske felter ikke bare kan detekteres, men også at orienteringen kan bestemmes gjennom beregninger basert på målingene som er oppnådd. Disse egenskapene gjør den til den ideelle sensoren for å lage orienteringssystemer, for eksempel et digitalt kompass.
Sensoren finnes vanligvis i moduler som GY-273-modellen, som også inkluderer nødvendig elektronikk for å forenkle dens direkte forbindelse med Arduino-kort eller andre mikrokontrollere. Strømforsyningen er fleksibel, og kan drives med både 3.3V og 5V, noe som gjør den svært allsidig når det gjelder kompatibilitet med forskjellige systemer.
Arduino-tilkoblinger
Å koble HMC5883L til Arduino er veldig enkelt takket være I2C-grensesnittet den bruker. Denne kommunikasjonen krever bare to pinner: SDA og SCL, som må kobles til de tilsvarende pinnene på Arduino-kortet.
- Til Arduino Uno, Nano og Mini: SDA kobles til pinne A4 og SCL til A5.
- Hvis du bruker en Arduino Mega eller Due: SDA må kobles til pin 20 og SCL til pin 21.
- I tilfellet med Arduino Leonardo: SDA går til pinne 2 og SCL til pinne 3.
La oss ikke glemme at magnetometeret fungerer med en fast I2C-adresse på 0x1E, så det er ikke mulig å endre det. Denne adressen er unik for denne typen sensor, noe som betyr at vi ikke kan koble flere HMC5883L-enheter på samme I2C-buss.
Magnetfeltavlesning
Hovedmetoden for drift av HMC5883L er å lese magnetiske feltverdier i alle tre aksene. For å få disse verdiene på en Arduino bruker vi et bibliotek utviklet av Jeff Rowberg. Du finner denne bokhandelen på ditt GitHub-lager og last den ned for bruk i Arduino IDE.
Når biblioteket er installert, kan sensoren initialiseres og begynne å lese magnetfeltverdiene. Her er et enkelt eksempel som gjør nettopp 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 koden initialiseres magnetometeret og verdiene på alle tre aksene leses i en sløyfe. Hver gang vi utfører `loop()`, vil verdiene av magnetfeltet i X, Y og Z vises på seriell monitor.
Innstillinger for rekkevidde og forsterkning
HMC5883L lar deg justere måleområde for magnetisk felt mellom ±0.88 Gauss og ±8.1 Gauss med forskjellige forsterkningsnivåer. Standardområdet er ±1.3 Gauss, og du kan endre det for å passe dine prosjektbehov. Dette kan gjøres ved å bruke følgende linje i koden:
magnetometro.setGain(value);
Hvor verdi er et heltall mellom 0 og 7, som vil velge forsterkningsnivået. Nedenfor viser vi deg en tabell med de tilsvarende verdiene:
| Valor | Rango | Gevinst (LSB/Gauss) |
|---|---|---|
| 0 | ±0.88Ga | 1370 |
| 1 | ±1.3Ga | 1090 |
| 2 | ±1.9Ga | 820 |
| 3 | ±2.5Ga | 660 |
| 4 | ±4.0Ga | 440 |
| 5 | ±4.7Ga | 390 |
| 6 | ±5.6Ga | 330 |
| 7 | ±8.1Ga | 230 |
Bygge et digitalt kompass
En av de vanligste bruksområdene til HMC5883L er å bygge en digitalt kompass. For å gjøre dette må vi beregne vinkelen mellom sensoren og magnetisk nord ved å bruke avlesningene til X- og Y-aksene. Dette oppnås ved å bruke formelen:
float angulo = atan2(my, mx) * 180 / M_PI;
Denne verdien vil gi deg orienteringsvinkelen i forhold til magnetisk nord. For å justere denne vinkelen til geografisk nord, må du ta hensyn til den magnetiske deklinasjonen av posisjonen din, som du kan konsultere på forskjellige nettsteder som www.ign.es eller www.ngdc.noaa.gov.
Korriger magnetisk deklinasjon
Når du har den magnetiske deklinasjonen av posisjonen din, må du bare trekke den fra vinkelen som er oppnådd. For eksempel:
angulo -= declinacion;
Når vinkelen er negativ, kan du legge til 360 grader for alltid å få en positiv verdi justert mellom 0 og 360 grader:
if (angulo < 0) angulo += 360;
Denne innstillingen vil gi deg et kompass som alltid peker nøyaktig mot geografisk nord.
I praksis kan du med denne sensoren og noen biblioteker ha et kompass på noen få minutter. Vær imidlertid oppmerksom på at HMC5883L er en sensor som er følsom for ekstern interferens, slik som metaller i nærheten eller felt generert av høye strømmer, som kan endre avlesningene.