In diesem Tutorial lernst du, wie du den HSCDTD008A 3-Achsen-Magnetometer mit einem Arduino verwendest. Der HSCDTD008A ist im Grunde ein elektronischer oder digitaler Kompass, mit dem du die Stärke des Erdmagnetfelds (und anderer magnetischer Quellen) entlang drei Achsen messen kannst.
Magnetometer können in vielen verschiedenen Anwendungen eingesetzt werden. Sie helfen Navigationssystemen, Richtung und Orientierung zu finden. In der Robotik verbessern sie das räumliche Bewusstsein und halten Roboter auf Kurs. Smartphones nutzen sie für Kompassfunktionen und Augmented Reality. Drohnen verwenden sie zur Stabilisierung und Navigation. Wearables wie Fitness-Tracker und Smartwatches nutzen Magnetometer ebenfalls zur Aktivitätsverfolgung und Navigation.
Benötigte Teile
Für dieses Projekt benötigst du einen HSCDTD008A Magnetsensor und einen Mikrocontroller. Ich habe einen Arduino Uno verwendet, aber jeder andere Arduino oder ein ESP32/ESP8266 Board funktioniert ebenfalls.

HSCDTD008A 3-Achsen-Magnetometer

Arduino Uno

USB-Kabel für Arduino UNO

Dupont-Kabelset

Breadboard
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Eigenschaften des HSCDTD008A
Der HSCDTD008A ist ein winziger Sensor (1,6×1,6×0,65mm), der die Stärke magnetischer Felder entlang drei Achsen mit einer Genauigkeit von 0,15μT / LSB (T = Tesla) messen kann. Das Bild unten zeigt den eigentlichen IC – nur ein winziger quadratischer Baustein.

Die drei Achsen des Sensors sind wie unten gezeigt ausgerichtet, und der Ausgangswert jeder Achse ist positiv, wenn er nach magnetisch Norden zeigt.

Je nach Ausrichtung des IC relativ zu einem Magnetfeld (z. B. dem Erdmagnetfeld) ändert sich der Ausgangswert jeder Achse. So kannst du beispielsweise navigieren, da du die Orientierung des Sensors im Raum bestimmen kannst.
Interner Blockschaltplan des HSCDTD008A
Das folgende Bild zeigt den internen Blockschaltplan des HSCDTD008A. Du kannst leicht den 3-Achsen-Magnetsensor, den Multiplexer (MUX) zum Auslesen der 3 Achsen, den Analog-Digital-Wandler (AD) für den Temperatursensor und die I2C-Schnittstelle erkennen.

Der Temperatursensor ist notwendig, da die Ausgangsspannung eines Magnetsensors sich mit der Temperatur deutlich ändern kann. Der HSCDTD008A hat daher einen eingebauten Temperatursensor, um Änderungen der Umgebungstemperatur zu kompensieren.
Die IO-Pins des HSCDTD008A sind wie folgt: AVDD ist die analoge Versorgungsspannung, DVDD die digitale Versorgungsspannung, VSS ist Masse, SDA und SCL sind die Leitungen der I2C-Schnittstelle, DRDY ist ein Interrupt-Pin, der signalisiert, dass Daten bereitstehen, und TEST1 sowie TEST2 sind interne Testpunkte während der Chipproduktion.
Für weitere Details siehe das Datenblatt des HSCDTD008A, das unten verlinkt ist:
Breakout-Board für den HSCDTD008A
Der HSCDTD008A ist zu klein, um direkt an einen Arduino angeschlossen zu werden, und funktioniert auch nicht mit 5V. Daher benötigt man typischerweise ein Breakout-Board wie das unten gezeigte. Der kleine quadratische Chip in der Mitte ist der HSCDTD008A. Das Board hat außerdem einen Spannungsregler, sodass du es an 5V- oder 3,3V-Mikrocontroller anschließen kannst.

Abgesehen von der Stromversorgung sind die Pins im Wesentlichen die gleichen wie im internen Blockschaltplan beschrieben. VCC ist die Versorgungsspannung, GND ist Masse, SDA und SCL sind die Leitungen der I2C-Schnittstelle, DRY ist der Datenbereit-Pin, und T0 und T1 sind Testpunkte, die du nicht benötigst.
Der Stromverbrauch des Moduls liegt typischerweise bei 60μA im aktiven Betrieb und nur 3μA im Standby-Modus. Wie bereits erwähnt, liegt die Versorgungsspannung bei +3,3V bis +5V und das Kommunikationsniveau bei 3,3V.
Anschluss des HSCDTD008A an Arduino
Dank der I2C-Schnittstelle des HSCDTD008A ist der Anschluss an einen Arduino einfach. Verbinde zuerst die SCL- und SDA-Pins des HSCDTD008A Breakout-Boards mit den entsprechenden Pins am Arduino-Board wie unten gezeigt. Verbinde dann Masse mit GND und 3,3V (oder 5V) mit VCC des HSCDTD008A – und das war’s.

Als Nächstes schreiben wir etwas Code, um die Funktion des HSCDTD008A Sensors zu testen.
Code zum Messen des Magnetfelds mit HSCDTD008A
Bevor du mit dem HSCDTD008A Sensor Magnetfelder messen kannst, musst du eine Bibliothek installieren. Im Folgenden verwenden wir die HSCDTD008A Library von Bob Veringa. Um sie zu installieren, suche einfach nach HSCDTD008A im Library Manager, finde die von Bob Veringa und klicke auf „INSTALL“. Das Bild unten zeigt, wie das aussieht:

Mit installierter Bibliothek testen wir den Sensor. Der folgende Code liest die Stärke des Magnetfelds entlang der drei Achsen (X, Y und Z) und gibt sie alle halbe Sekunde im Serial Monitor aus.
#include "hscdtd008a.h"
HSCDTD008A geomag;
void setup() {
Serial.begin(9600);
geomag.begin();
hscdtd_status_t status = geomag.initialize();
if (status != HSCDTD_STAT_OK) {
Serial.println("Can't initialize sensor!");
}
geomag.temperatureCompensation();
}
void loop() {
hscdtd_status_t status = geomag.startMeasurement();
if (status == HSCDTD_STAT_OK) {
Serial.print("X:");
Serial.println(geomag.mag.mag_x);
Serial.print("Y:");
Serial.println(geomag.mag.mag_y);
Serial.print("Z:");
Serial.println(geomag.mag.mag_z);
}
delay(500);
}
Lass uns den Code in seine Bestandteile zerlegen, um ihn besser zu verstehen.
Bibliothek einbinden
Die erste Zeile bindet die notwendige Bibliothek für den HSCDTD008A Magnetometer ein. Diese Bibliothek enthält die Funktionen und Definitionen, die für die Kommunikation mit dem Sensor benötigt werden.
#include "hscdtd008a.h"
Instanz erstellen
Hier erstellen wir eine Instanz der HSCDTD008A Klasse mit dem Namen geomag. Diese Instanz ermöglicht uns den Zugriff auf die in der Bibliothek definierten Funktionen, um mit dem Magnetometer zu interagieren.
HSCDTD008A geomag;
Setup-Funktion
In der setup() Funktion initialisieren wir die serielle Kommunikation mit einer Baudrate von 9600. So können wir Daten zum Serial Monitor für Debugging und Überwachung senden.
Serial.begin(9600);
Anschließend rufen wir die begin() Methode der geomag Instanz auf, um das Magnetometer zu initialisieren. Danach prüfen wir den Status der Initialisierung mit der initialize() Methode. Wenn der Status nicht HSCDTD_STAT_OK ist, geben wir eine Fehlermeldung im Serial Monitor aus.
geomag.begin();
hscdtd_status_t status = geomag.initialize();
if (status != HSCDTD_STAT_OK) {
Serial.println("Can't initialize sensor!");
}
Zum Schluss rufen wir die temperatureCompensation() Methode auf, um sicherzustellen, dass die Messwerte des Sensors basierend auf der Umgebungstemperatur angepasst werden, da diese die magnetischen Messungen beeinflussen kann.
geomag.temperatureCompensation();
Loop-Funktion
In der loop() Funktion starten wir eine Messung durch Aufruf der startMeasurement() Methode. Wir prüfen erneut den Status dieser Operation. Wenn der Status HSCDTD_STAT_OK ist, lesen wir die Magnetfeldwerte aus.
hscdtd_status_t status = geomag.startMeasurement();
if (status == HSCDTD_STAT_OK) {
Dann geben wir die Magnetfeldwerte für die X-, Y- und Z-Achsen im Serial Monitor aus. Die Werte werden über die mag Eigenschaft der geomag Instanz abgerufen und sind in Mikro-Tesla (µT):
Serial.print("X:");
Serial.println(geomag.mag.mag_x);
Serial.print("Y:");
Serial.println(geomag.mag.mag_y);
Serial.print("Z:");
Serial.println(geomag.mag.mag_z);
Zum Schluss fügen wir eine Verzögerung von 500 Millisekunden ein, bevor der nächste Messzyklus beginnt, um eine gut lesbare Ausgabe im Serial Monitor zu ermöglichen.
delay(500);
Code ausführen
Wenn du den Code hochlädst und ausführst, solltest du beginnen, Magnetfeldmessungen ähnlich den unten gezeigten im Serial Monitor zu sehen:

Wenn du den Sensor nun kippst und drehst, kannst du die sich ändernden Werte der Magnetfeldmessungen für die drei Achsen im Serial Plotter beobachten:

Und das war’s! Dieses Tutorial sollte dir einen guten Startpunkt für deine eigenen Anwendungen geben.
Fazit
In diesem Tutorial hast du gelernt, wie man den HSCDTD008A 3-Achsen-Magnetometer mit einem Arduino verwendet. Häufige Anwendungen für Magnetometer sind als digitaler Kompass und zur Verbesserung der Genauigkeit bei der Navigation von Robotern oder Drohnen.
Beachte, dass Magnetometer zwar Hall-Effekt-Sensoren ähneln, aber normalerweise nicht für dieselben Anwendungen geeignet sind, wie z. B. Strommessung oder berührungslose Geschwindigkeitsmessung rotierender Objekte. Siehe unser Tutorial Read Fan Speed Signal with Arduino und ACS712 Current Sensor And Arduino, wenn du mehr darüber lernen möchtest.
Viel Spaß beim Tüfteln ; )

