
HMC5883L-magnetometern är en sensor som används ofta i Arduino-projekt för sin förmåga att mäta magnetiska fält i tre axlar. Detta gör den till ett utmärkt val för att skapa digitala kompasser, navigationssystem för drönare och andra autonoma fordon. Förutom att vara prisvärd, är integrationen enkel tack vare dess I2C-gränssnitt, vilket gör den idealisk för nybörjare.
I den här artikeln kommer vi att fördjupa oss i huvuddragen hos HMC5883L, dess koppling till olika Arduino-kort och praktiska exempel för dess användning. I slutändan kommer du att kunna implementera ditt eget digitala kompassprojekt med Arduino och dra nytta av den fulla potentialen hos denna kraftfulla sensor.
Vad är HMC5883L och hur fungerar det?
HMC5883L är en magnetometer med tre axlar som mäter komponenterna i jordens magnetfält i X-, Y- och Z-axlarna. Detta gör det inte bara möjligt att detektera närvaron av magnetiska fält, utan även att orienteringen kan bestämmas genom beräkningar baserade på de mätningar som erhållits. Dessa egenskaper gör den till den idealiska sensorn för att skapa orienteringssystem, såsom en digital kompass.
Sensorn finns vanligtvis i moduler som GY-273-modellen, som även innehåller den nödvändiga elektroniken för att underlätta dess direkta anslutning till Arduino-kort eller andra mikrokontroller. Dess strömförsörjning är flexibel, och kan drivas med både 3.3V och 5V, vilket gör den mycket mångsidig när det gäller kompatibilitet med olika system.
Anslutningar till Arduino
Att ansluta HMC5883L till Arduino är väldigt enkelt tack vare I2C-gränssnittet som den använder. Denna kommunikation kräver bara två stift: SDA och SCL, som måste anslutas till motsvarande stift på Arduino-kortet.
- till Arduino Uno, Nano och Mini: SDA ansluts till stift A4 och SCL till A5.
- Om du använder en Arduino Mega eller Due: SDA måste anslutas till stift 20 och SCL till stift 21.
- I fallet med Arduino Leonardo: SDA går till stift 2 och SCL till stift 3.
Låt oss inte glömma att magnetometern fungerar med en fast I2C-adress på 0x1E, så det går inte att ändra den. Denna adress är unik för den här typen av sensorer, vilket innebär att vi inte kan ansluta flera HMC5883L-enheter på samma I2C-buss.
Magnetfältsavläsning
Den huvudsakliga driftmetoden för HMC5883L är att läsa magnetfältsvärden i alla tre axlarna. För att få dessa värden på en Arduino använder vi ett bibliotek utvecklat av Jeff Rowberg. Du hittar denna bokhandel på ditt GitHub-arkiv och ladda ner den för användning i Arduino IDE.
När biblioteket är installerat kan sensorn initieras och börja läsa magnetfältsvärdena. Här är ett enkelt exempel som gör just detta:
#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 denna kod initieras magnetometern och värdena på alla tre axlarna läses i en slinga. Varje gång vi kör "loop()", kommer värdena för magnetfältet i X, Y och Z att visas på den seriella monitorn.
Inställningar för avstånd och förstärkning
HMC5883L låter dig justera mätområde för magnetfält mellan ±0.88 Gauss och ±8.1 Gauss med olika förstärkningsnivåer. Standardintervallet är ±1.3 Gauss, och du kan ändra det för att passa dina projektbehov. Detta kan göras med hjälp av följande rad i koden:
magnetometro.setGain(value);
var värde är ett heltal mellan 0 och 7, vilket kommer att välja förstärkningsnivån. Nedan visar vi en tabell med motsvarande värden:
| valor | Rango | Vinst (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 |
Bygga en digital kompass
En av de vanligaste användningsområdena för HMC5883L är att bygga en digital kompass. För att göra detta måste vi beräkna vinkeln mellan sensorn och den magnetiska norden med hjälp av avläsningarna av X- och Y-axlarna. Detta uppnås med formeln:
float angulo = atan2(my, mx) * 180 / M_PI;
Detta värde ger dig orienteringsvinkeln med avseende på magnetisk nord. För att justera denna vinkel till geografiska norr, måste du ta hänsyn till den magnetiska deklinationen av din plats, som du kan konsultera på olika webbplatser som www.ign.es eller www.ngdc.noaa.gov.
Korrigera magnetisk deklination
När du har den magnetiska deklinationen av din position, måste du bara subtrahera den från den erhållna vinkeln. Till exempel:
angulo -= declinacion;
När vinkeln är negativ kan du lägga till 360 grader för att alltid få ett positivt värde justerat mellan 0 och 360 grader:
if (angulo < 0) angulo += 360;
Den här inställningen ger dig en kompass som alltid pekar exakt mot det geografiska norr.
I praktiken kan du med den här sensorn och vissa bibliotek ha en kompass på några minuter. Observera dock att HMC5883L är en sensor som är känslig för yttre störningar, såsom närliggande metaller eller fält som genereras av höga strömmar, vilket kan ändra avläsningarna.