GY-273/HMC5883L – Kompassmodul

Last Updated on 29. März 2020 by sfambach

Der HMC5883L ist ein Kompass welcher über den I2c Bus angesteuert werden kann. Er wird über die Bus-Adresse 0x1E abgefragt und kann die Orientierung eines Gegenstandes, auf dem er montiert ist, feststellen.

Ansicht

Daten

Name GY273 mit Sensor HMC5883L
Sensortyp Kompass – 3 Achs Magnetometer
Betriebsspannung 5V
Sensorspannung 1,8-3,6V
Bus I2c ( 0x1E )
Genauigkeit 1 – 2 Grad
Messbereiche 3 Achsen x, y, z 360°

Grundlagen

Schaltung

Anschluss

GNDMasse
DRDY??
SDAI2C SDA
SCLI2C SCL
VCC5 V

Einsatzzwecke

  • Richtungsbestimmung
  • Orientierung von Roboter
  • Erweiterung von Messdaten mit Orientierungsdaten

Programmierung

Bibliothek

Auch hier gibt es von Adafruit eine Unified Bibliothek. Diese kann wie gewohnt über den „Bibliothekar“ installiert werden.

Nach HMC suchen und die Unified auswählen.

Testprogramm 1

Auch ein kleines Testprogramm ist in der Bibliothek enthalten.

Die magnetische Abweischung muss im Programm auf den aktuellen Standort angepasst werden. Die Daten können auf dieser Seite abgerufen werden. Die Seite ist auch im Beispielquellcode mit zusätzlichen Informationen verlinkt.
Bei mir sind das +2° 25′ für Frankfurt und Umgebung.  Diese müssen noch in Rad umgerechnet werden (hier ein Tool im Internet).  Was bei mir 0,0349066 Rad für die +2° ergibt.  Bei mir im Quellcode steht dann:

float declinationAngle = 0.0349066;

Das Ganze kompilieren und auf den Arduino laden und schon sollte das Programm laufen.

Die ausgegebenen Daten zeigen bei mir erstmal keine verifizierbaren Werte. Sie bewegten sich im Bereich von  200°-356°.

Eine Platzierung des Sensors am Rand des Steckbrettes brachte eine Verbesserung.

Testprogramm 2

Nach einiger Recherche im Internet habe ich ein paar Möglichkeiten zur Kalibrierung gefunden. Parallel habe ich mir die Daten mal Visualsiert und festgestellt, dass der Kreis den der Kompass bei einer vollen Umdrehung beschreibt auf der X und Y Achse verschoben ist. Hieraus hat sich die folgende einfache Kalibrierung ergeben.

Dreht man den Kompass um 360° um die Z-Achse und notiert alle paar Grad die Werte, kann man erkennen, dass sich ein Kreis bildet der auf der X und Y Achse verschoben ist.

Von diesem Kreis kann man den Mittelpunkt errechnen. Der Mittel wird dann von den gemessenen X und Y Werten abgezogen. Dies bewirkt eine Verschiebung des Mittelpunkt auf den Nullpunkt (X= 0, Y=0).

Die Minimal- und Maximalwerte können durch Drehen des Sensors um 360° erhoben werden.

Hier das erweiterte Beispielprogramm. Den Sensor am Anfang mindestens einmal, möglichst auf einer glatten Fläche, um die Z Achse drehen.

Ich habe den Code nur mit meinem Kompass getestet, ich bin mir fast sicher, dass sollte sich die Verschiebung in einem anderen Quardranten bewegen, die Berechnungen angepasst werden müssen.

Fazit

Der HMC58883L kann die Orientierung eines Gegenstgandes bestimmen auf dem er montiert ist. Eine Kalibrierung am Anfang ist unerlässlich zur Verwendung des Moduls. Störfaktoren wie Leiter und Metall können die Werte des Sensors stark beeinflussen.

Probleme

Die Werte des Sensors stimmen nicht

Der Gund hierfü kann eine Ablenkung durch Metallteile und Magnetische Felder sein. Bei mir Reichte das Steckbrett aus, um die Sensordaten komplett zu verfälsche.

Lösung 1 Umgebung bereinigen

Die Umgebung ändern. Den Sensor mal an den Rand des Steckbretts stecken oder nur mit Kabel verbinden. Störende Elemente aus der direkten Umgebung entfernen. Störungen werden durch Magnetfelder oder Metalle erzeugt. Magnetfelder können  von Lautsprechern, Motoren oder allem was eine Strom durchflossene Spule/Leiter enthält, erzeugt werden.  Metallteile können entweder abschirmen oder durch nahe Spannungsquellen können Ströme induziert werden, die wiederum das gemessene Magenetfeld beeinflussen.

EZtech meint das sogar die angelöteten Pins das Magenetfeld ebeinflussen wenn sie aus Eisen bzw. magnetischen Material sind. Somit könnte es hilfreich sein die Pins durch Kufperkabel zu ersetzen.

Lösung 2 Sensor justieren

Den Sensor justieren siehe Beispielprogramm oben.

Der Sensor reagiert nicht

Das auslesen des Sensors funktioniert nicht.

Lösung 1: Tauschen von SDA und SCL Leitung

Evtl. könnten die SDA und die SCL Leitung beim Verdrahten vertauscht worden sein (Das passiert den Besten ;)). Einfach mal die zwei Leitungen tauschen, es sollte eigentlich nichts passieren können.

Lösung 2: I2C/Wire Bus testen

Evtl. hat euer Modul eine andere Adresse oder funktioniert nicht. Deshalb empfiehlt es sich zu Beginn mal den Bus zu scannen. Es gibt Programme hierfür, unter anderem das im folgenden Beitrag gelinkte von mir:

Wire/I2C Scanner

Verwandte Berichte

Quellen

https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf
https://wiki.eprolabs.com/index.php?title=GY-273_Compass_Module
https://www.sparkfun.com/tutorials/301
https://github.com/sleemanj/HMC5883L_Simple

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert