De HMC5883L-magnetometer is een sensor die veel wordt gebruikt in Arduino-projecten vanwege zijn vermogen om magnetische velden in drie assen te meten. Dit maakt het een uitstekende keuze voor het maken van digitale kompassen, navigatiesystemen voor drones en andere autonome voertuigen. De integratie is niet alleen betaalbaar, maar ook eenvoudig dankzij de I2C-interface, waardoor het ideaal is voor beginners.
In dit artikel gaan we dieper in op de belangrijkste kenmerken van de HMC5883L, de verbinding met verschillende Arduino-boards en praktische voorbeelden voor het gebruik ervan. Uiteindelijk kunt u uw eigen digitale kompasproject met Arduino implementeren, waarbij u profiteert van het volledige potentieel van deze krachtige sensor.
Wat is de HMC5883L en hoe werkt deze?
De HMC5883L is een drie-assige magnetometer die de componenten van het aardmagnetisch veld in de X-, Y- en Z-as meet. Hierdoor kan niet alleen de aanwezigheid van magnetische velden worden gedetecteerd, maar kan ook de oriëntatie worden bepaald door middel van berekeningen op basis van de verkregen metingen. Deze eigenschappen maken het de ideale sensor voor het maken van oriëntatiesystemen, zoals een digitaal kompas.
De sensor wordt meestal aangetroffen in modules zoals het GY-273-model, dat ook de nodige elektronica bevat om de directe verbinding met Arduino-boards of andere microcontrollers te vergemakkelijken. De voeding is flexibel en kan zowel op 3.3 V als op 5 V worden gevoed, waardoor hij zeer veelzijdig is wat betreft compatibiliteit met verschillende systemen.
Verbindingen met Arduino
Het verbinden van de HMC5883L met Arduino is heel eenvoudig dankzij de I2C-interface die hij gebruikt. Voor deze communicatie zijn slechts twee pinnen nodig: SDA en SCL, die moet worden aangesloten op de overeenkomstige pinnen op het Arduino-bord.
- naar Arduino Uno, Nano en Mini: SDA wordt aangesloten op pin A4 en SCL op A5.
- Als je een Arduino Mega of Due gebruikt: SDA moet op pin 20 worden aangesloten en SCL op pin 21.
- In het geval van de Arduino Leonardo: SDA gaat naar pin 2 en SCL naar pin 3.
Laten we niet vergeten dat de magnetometer werkt met een vast I2C-adres van 0x1E, dus het is niet mogelijk om dit te wijzigen. Dit adres is uniek voor dit type sensor, wat betekent dat we niet meerdere HMC5883L-apparaten op dezelfde I2C-bus kunnen aansluiten.
Magnetische veldmeting
De belangrijkste werkwijze van de HMC5883L is het uitlezen van magnetische veldwaarden in alle drie de assen. Om deze waarden op een Arduino te verkrijgen, gebruiken we een bibliotheek ontwikkeld door Jeff Rowberg. Je vindt deze boekwinkel op uw GitHub-repository en download het voor gebruik in de Arduino IDE.
Zodra de bibliotheek is geïnstalleerd, kan de sensor worden geïnitialiseerd en beginnen met het lezen van de magnetische veldwaarden. Hier is een eenvoudig voorbeeld waarin precies dit wordt gedaan:
#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);
}
In deze code wordt de magnetometer geïnitialiseerd en worden de waarden op alle drie de assen in een lus gelezen. Elke keer dat we de `loop()` uitvoeren, worden de waarden van het magnetische veld in X, Y en Z weergegeven op de seriële monitor.
Bereik- en versterkingsinstellingen
Met de HMC5883L kunt u de meetbereik van magnetisch veld tussen ±0.88 Gauss en ±8.1 Gauss met verschillende versterkingsniveaus. Het standaardbereik is ±1.3 Gauss en u kunt dit aanpassen aan uw projectbehoeften. Dit kan gedaan worden met behulp van de volgende regel in de code:
magnetometro.setGain(value);
waarin waarde is een geheel getal tussen 0 en 7, dat het versterkingsniveau selecteert. Hieronder laten we u een tabel zien met de bijbehorende waarden:
waarde | Rango | Versterking (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 |
Een digitaal kompas bouwen
Een van de meest voorkomende toepassingen van de HMC5883L is het bouwen van een digitaal kompas. Om dit te doen, moeten we de hoek tussen de sensor en het magnetische noorden berekenen met behulp van de waarden van de X- en Y-assen. Dit wordt bereikt met behulp van de formule:
float angulo = atan2(my, mx) * 180 / M_PI;
Deze waarde geeft u de oriëntatiehoek ten opzichte van het magnetische noorden. Om deze hoek aan te passen geografische noordenmoet u rekening houden met de magnetische declinatie van uw locatie, deze kunt u raadplegen op verschillende websites zoals www.ign.es of www.ngdc.noaa.gov.
Correcte magnetische declinatie
Zodra je de magnetische declinatie van je positie hebt, hoef je deze alleen maar af te trekken van de verkregen hoek. Bijvoorbeeld:
angulo -= declinacion;
Als de hoek negatief is, kunt u 360 graden optellen om altijd een positieve waarde te verkrijgen, aangepast tussen 0 en 360 graden:
if (angulo < 0) angulo += 360;
Met deze instelling krijgt u een kompas dat altijd nauwkeurig naar het geografische noorden wijst.
In de praktijk kun je met deze sensor en enkele bibliotheken binnen een paar minuten over een kompas beschikken. Houd er echter rekening mee dat de HMC5883L een sensor is die gevoelig is voor externe interferentie, zoals nabijgelegen metalen of velden gegenereerd door hoge stromen, die de metingen kunnen veranderen.