Het toevoegen van een kompasmodule aan uw Arduino-microcontroller opent tal van mogelijkheden voor projecten. Hier leest u hoe u er een aansluit en gebruikt.

In moderne doe-het-zelfprojecten is het vrij gebruikelijk om geavanceerde sensoren zoals versnellingsmeters en magnetometers te vinden die zijn gekoppeld aan microcontrollers. Hoewel je deze sensoren misschien op je telefoon hebt gebruikt, is het moeilijk voor te stellen hoe deze modules werken, maar het is verrassend eenvoudig.

De GY-271 kompasmagnetometersensor maakt oriëntatiedetectie mogelijk voor verschillende toepassingen. Hier zullen we het proces onderzoeken van het koppelen van de GY-271-sensor met een Arduino-microcontroller, hoe deze te kalibreren en kijken naar de problemen die u daarbij kunt tegenkomen.

Wat is de GY-271 kompasmodule?

De GY-271 kompasmodule is een zeer gevoelige magnetometer die magnetische velden in drie dimensies kan meten. Het wordt gebruikt om het magnetische veld van de aarde te detecteren en de richting of oriëntatie van apparaten te bepalen in toepassingen zoals navigatiesystemen, robotica en drones. Zie het als een heel nauwkeurig digitaal kompas. Deze sensor is uitgerust met een compact en stevig ontwerp waardoor hij eenvoudig te installeren en te gebruiken is in een breed scala aan projecten.

Hoe werkt de GY-271 kompasmodule?

De GY-271 HCM5883L-kompasmodule bevat een 3-assige magnetometersensor, die is gebaseerd op anisotrope magnetoresistieve (AMR) technologie. De sensor meet de sterkte en richting van het aardmagnetisch veld door de veranderingen in de weerstand van de interne AMR-elementen te detecteren.

Wanneer de sensor wordt blootgesteld aan een magnetisch veld, verandert de weerstand van de AMR-elementen, waardoor een spanning wordt gegenereerd die evenredig is met de sterkte en richting van het magnetische veld. De digitale signaalprocessor van de sensor zet deze spanning vervolgens om in een digitaal signaal, dat kan worden uitgelezen door een microcontroller. Door de spanning in alle drie de assen te meten, kan de sensor zeer nauwkeurige metingen leveren van de sterkte en richting van het magnetische veld in drie dimensies.

De GY-271 aansluiten op een Arduino Uno

Het aansluiten van deze module op de Arduino is vrij eenvoudig. We hebben ook andere behandeld gebruiksvriendelijke Arduino-modules waarmee u uw project in de toekomst kunt opschalen. De GY-271-module heeft in totaal vijf pinnen, inclusief VCC, GND, en drie signaalpennen (SDA, SCL, En DRDY).

Je hebt de volgende onderdelen nodig:

  • GY-271 HMC5883L kompasmodule
  • Arduino Uno (of ander model)
  • Jumperdraden (man-naar-man en man-naar-vrouw)
  • Breadboard (optioneel)

Sluit eerst de VCC En GND pinnen van de GY-271 module naar de 5V En GND pinnen van de Arduino Uno, respectievelijk.

Sluit vervolgens de SDA En SCL pinnen van de module aan de A4 En A5 analoge pinnen van de Arduino Uno, respectievelijk.

De benodigde bibliotheken installeren

Voordat je aan de slag kunt met de GY-271 kompasmodule en Arduino, moet je de nodige bibliotheken installeren om met de sensor te kunnen communiceren.

De eerste bibliotheek die u in uw schets moet opnemen, is de Wire-bibliotheek, die wordt gebruikt voor I2C-communicatie tussen de Arduino en de sensor. De Wire-bibliotheek is vooraf geïnstalleerd met de Arduino IDE, dus u hoeft deze niet apart te downloaden. Om de tweede te installeren, de HMC5883L bibliotheek, moet u deze stappen volgen:

Open de Arduino IDE en ga naar Schetsen > Inclusief bibliotheek > Bibliotheken beheren.

Zoek in Bibliotheekbeheer naar HMC5883L in de zoekbalk.

Selecteer de HMC5883L bibliotheek specifiek van Adafruit. Zodra de bibliotheek is geïnstalleerd, kunt u deze opnemen in uw Arduino-schets door naar Schetsen > Inclusief bibliotheek > HMC5883L.

De gedragscode begrijpen

Je moet een programma schrijven dat de sensor initialiseert, de gegevens leest en de sterkte en richting van het magnetische veld van de aarde berekent. De volledige code kan worden gedownload van onze officiële GitHub-opslagplaats.

Aan het begin van de code moet u de benodigde bibliotheken opnemen die u zojuist hebt gedownload.

#erbij betrekken
#erbij betrekken
#erbij betrekken

Vergeet niet een unieke ID aan de sensor toe te wijzen. Gebruik hiervoor deze regel:

Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);

Start in de setup-code de seriële monitor en controleer of de sensor reageert. U kunt berichten naar de monitor afdrukken om de status van de sensor bij te werken:

leegteopgericht(leegte)
{
Serieel.beginnen(9600);
Serieel.println("HMC5883 Magnetometertest"); Serieel.println("");

/* Initialiseer de sensor */
als(!mag.beginnen())
{
Serieel.println("Oeps, geen HMC5883 gedetecteerd... Controleer uw bedrading!");
terwijl(1);
}
}

Haal in de lus eerst een nieuwe sensorgebeurtenis op:

sensoren_event_t evenement;
mag.getEvent(&gebeurtenis);

Geef vervolgens de meetwaarden van de sensor weer op de seriële monitor. Vergeet niet de baudrate in te stellen op 9600​​​​.

Serieel.afdrukken("X: "); Serieel.afdrukken(gebeurtenis.magnetic.x); Serieel.afdrukken(" ");
Serieel.afdrukken("J: "); Serieel.afdrukken(gebeurtenis.magnetisch.y); Serieel.afdrukken(" ");
Serieel.afdrukken("Z: "); Serieel.afdrukken(gebeurtenis.magnetic.z); Serieel.afdrukken(" ");Serieel.println("uT");

Houd de module zo vast Z "naar boven" wijst en meet de koers met X En Y. Door dit te doen, kunt u vervolgens de koers berekenen wanneer de magnetometer waterpas staat. Deze regel code helpt daarbij:

vlot rubriek = atan2(event.magnetic.y, event.magnetic.x);

Zodra u uw rubriek, dan moet u uw toevoegen declinatieAngle, wat de fout is van het magnetische veld op uw locatie.

vlot declinatieAngle = 0.663;
 rubriek += declinationAngle;

U kunt de declinatiehoek van uw lokale gebied gemakkelijk vinden op de Magnetische declinatie website. Als je om wat voor reden dan ook je declinatiehoek niet kunt vinden, plaats dan commentaar op de twee regels van je code.

Het uitcommentariëren van de twee coderegels kan resulteren in foutieve sensormetingen. Probeer je best om de sensor voor gebruik te kalibreren.

Druk ten slotte de kop af naar de seriële monitor en voeg een vertraging toe om een ​​halve seconde te wachten voordat u opnieuw leest.

Serieel.afdrukken("Koers (graden): ");
Serieel.println(rubriekGraden);
vertraging(500);

Vanaf hier kunt u de code aanpassen aan de behoeften van uw project en extra functies toevoegen, zoals datalogging.

Als u liever de Adafruit-bibliotheek gebruikt, raden we u aan deze te gebruiken Adafruit's GitHub-repository.

Kompasgegevens lezen en interpreteren

De sensorgegevens die op de seriële monitor worden weergegeven, tonen de vectorwaarden van het magnetische veld gemeten door de magnetometer in microteslas (μT) voor respectievelijk de X-, Y- en Z-as. Deze waarden kunnen worden gebruikt om de oriëntatie en grootte van het magnetische veld te bepalen.

De koerswaarde die wordt weergegeven in graden is ook belangrijk en vertegenwoordigt de richting van de magnetische noordpool ten opzichte van de positie van de sensor. Deze uitlezing kan worden gebruikt in projecten waarbij de richting van een bewegend object moet worden bepaald, zoals in robotica, navigatie en geolocatiesystemen.

Sensorkalibratie

Als u al een andere bibliotheek voor de HMC5883L-module hebt geïnstalleerd, moet u deze verwijderen of verwijderen. Anders kunt u tijdens de kalibratie compileerfouten krijgen of waarschuwingen op uw seriële monitor zien. We raden aan om te gebruiken Jarzebski's bibliotheek beschikbaar op GitHub omdat het de volledige kalibratieresources heeft die nodig zijn voor deze sectie.

Download eerst het zipbestand uit de repository door op te klikken Code > ZIP downloaden.

Open vervolgens de Arduino IDE en klik op Schetsen > Inclusief bibliotheek > Bibliotheek toevoegen.

Selecteer de Arduino-HMC5883 zip-bestand dat u zojuist hebt gedownload, en de Arduino IDE zal de bibliotheek vervolgens automatisch voor u installeren.

Voer de kalibratieschets uit die beschikbaar is in de repository terwijl u de sensor tijdens het uploaden op een plat oppervlak verplaatst. De waarden die van de seriële monitor worden verkregen, zijn de offsetwaarden van uw sensor, die u kunt gebruiken om uw metingen te corrigeren terwijl u het kompas gebruikt tijdens uw projecten.

Problemen waar u tegenaan kunt lopen

Er zijn verschillende fouten die iemand kan tegenkomen bij het koppelen van de kompasmodule met Arduino. Hier zijn een paar voorbeelden en hun oplossingen:

Compilatie fouten: Deze kunnen optreden als de benodigde bibliotheken niet zijn opgenomen of als er syntaxisfouten in de code staan. Om dit op te lossen, moet u ervoor zorgen dat u de juiste bibliotheken hebt geïnstalleerd en uw code controleren op eventuele syntaxisfouten. Zoals we vaak hebben gezien, hebt u mogelijk per ongeluk meerdere HCM5883L-bibliotheken geïnstalleerd.

Compilatiefout: 'Adafruit_HMC5883_Verenigd' doet niet noem een ​​soort

Communicatie fouten: Als u niet kunt communiceren met de kompasmodule, zorg er dan voor dat u deze op de juiste pinnen op uw Arduino hebt aangesloten en dat uw bedrading correct is. Mogelijk moet u ook het I2C-adres van de module in uw code aanpassen als dit afwijkt van de standaardwaarde, namelijk 0x1E.

Fout gebruik makend van hmc5883l/testapparaat (lijn246) Fout bij communicatie met de HMC5883L-sensor. De waarde lezen van ID_A, ID_B En ID_C-registers Doenniet overeenkomen met de verwachte waarden.

Magnetische interferentie: Als de kompasmetingen onstabiel of fluctuerend zijn, kan dit te wijten zijn aan magnetische interferentie van objecten in de buurt. Plaats de module uit de buurt van magneten of andere bronnen van magnetische interferentie om stabielere metingen te krijgen.

Geef uw projecten een boost met de GY-271 Compass-module

Het kunnen gebruiken van de GY-271 HCM5883L-kompasmodule opent de deur naar het bouwen van complexere doe-het-zelfprojecten met behulp van Arduino, zoals GPS-geleide rovers en doe-het-zelf-drones. De mogelijkheden zijn eindeloos, zeker als je nog andere sensoren toevoegt.