Haben Sie sich schon einmal gefragt, woher Ihr Telefon weiß, in welche Richtung Sie blicken? Dank eines Magnetometers! Ihre CodeCell ist mit einem 3-Achsen-Magnetometer BNO085 ausgestattet, das Magnetfelder in drei Richtungen erkennt. So können Sie die Richtung messen, magnetische Störungen erkennen und sogar einen einfachen digitalen Kompass erstellen!
Ein Magnetometer misst das Magnetfeld der Erde entlang dreier Achsen:
Mithilfe dieser Werte können wir die Kompassrichtung (0° bis 360°) berechnen und bestimmen, in welche Richtung CodeCell zeigt.
Beginnen wir mit der Initialisierung des Magnetometers und dem Ablesen der Rohwerte des Magnetfelds.
#include <CodeCell.h>
CodeCell myCodeCell;
float x = 0.0; // Magnetic field on X-axis
float y = 0.0; // Magnetic field on Y-axis
float z = 0.0; // Magnetic field on Z-axis
void setup() {
Serial.begin(115200);
myCodeCell.Init(MOTION_MAGNETOMETER); // Initialize the magnetometer
}
void loop() {
if (myCodeCell.Run(10)) { // Read at 10Hz (every 100ms)
myCodeCell.Motion_MagnetometerRead(x, y, z); // Get magnetometer readings
Serial.print("Mag X: "); Serial.print(x);
Serial.print(" Y: "); Serial.print(y);
Serial.print(" Z: "); Serial.println(z);
}
}
Sobald Sie den Code hochgeladen und den seriellen Monitor geöffnet haben, werden Werte wie die folgenden angezeigt:
Mag X: 12.4 Y: -7.8 Z: 35.2
Was bedeuten diese Werte?
Um einen digitalen Kompass zu bauen, müssen wir X- und Y-Werte mit der Funktion atan2() in einen Winkel umwandeln.
#include <CodeCell.h>
#include <math.h> // Needed for atan2 function
CodeCell myCodeCell;
float x = 0.0, y = 0.0, z = 0.0;
void setup() {
Serial.begin(115200);
myCodeCell.Init(MOTION_MAGNETOMETER); // Initialize the magnetometer
}
void loop() {
if (myCodeCell.Run(10)) { // Read at 10Hz
myCodeCell.Motion_MagnetometerRead(x, y, z); // Read magnetometer values
// Kurs berechnen (Winkel in Grad)
Float-Überschrift = atan2(y, x) * (180,0 / M_PI);
// Stellen Sie sicher, dass der Kurs im Bereich von 0° bis 360° liegt
wenn (Überschrift < 0) {
Überschrift += 360;
}
Serial.print("Kompassrichtung: ");
Serial.println(heading); // Überschrift in Grad drucken
}
}
Der Kurswert (0° bis 360°) gibt an, in welche Richtung CodeCell zeigt:
Kurs (°) | Richtung |
---|---|
0° (oder 360°) | Norden ↑ |
90° | Osten → |
180° | Süden ↓ |
270° | Westen ← |
Versuchen Sie, CodeCell zu drehen und beobachten Sie, wie sich die Überschrift ändert!
Wir können die LED jetzt je nach Richtung in verschiedenen Farben leuchten lassen:
#include <CodeCell.h>
#include <math.h>
CodeCell myCodeCell;
float x = 0.0, y = 0.0, z = 0.0;
void setup() {
Serial.begin(115200);
myCodeCell.Init(MOTION_MAGNETOMETER); // Initialize the magnetometer
}
void loop() {
if (myCodeCell.Run(10)) { // Read at 10Hz
myCodeCell.Motion_MagnetometerRead(x, y, z); // Read magnetometer values
// Calculate heading
float heading = atan2(y, x) * (180.0 / M_PI);
if (heading < 0) heading += 360;
Serial.print("Heading: ");
Serial.println(heading);
// Change LED color based on heading
if (heading >= 315 || heading < 45) {
myCodeCell.LED(0, 0, 255); // Blue for North
} else if (heading >= 45 && heading < 135) {
myCodeCell.LED(0, 255, 0); // Green for East
} else if (heading >= 135 && heading < 225) {
myCodeCell.LED(255, 0, 0); // Red for South
} anders {
myCodeCell.LED(255, 255, 0); // Gelb für Westen
}
}
}
Nachdem Sie nun Magnetometerdaten lesen und die Richtung berechnen können, versuchen Sie Folgendes:
Erfahren Sie als Erster von neuen Projekten und sichern Sie sich spannende Angebote!
© 2025 Microbots.