Menü
Microbots
0
  • Machen
    • Erste Schritte
    • Maker-Builds
    • Ausbildung
  • Geschäft
    • Maker-Module
    • Maker-Pakete
    • Werkzeuge und Ausrüstung
    • Roboter & Displays
  • Um
    • Unsere Geschichte
    • Kontakt
    • FAQs
  • Deutsch
  • Ihr Warenkorb ist leer
Microbots
  • Machen
    • Erste Schritte
    • Maker-Builds
    • Ausbildung
  • Geschäft
    • Maker-Module
    • Maker-Pakete
    • Werkzeuge und Ausrüstung
    • Roboter & Displays
  • Um
    • Unsere Geschichte
    • Kontakt
    • FAQs
  • Sprache

  • 0 0

CodeCell: Mit dem Magnetometer einen digitalen Kompass bauen

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!

Was ist ein Magnetometer?

Ein Magnetometer misst das Magnetfeld der Erde entlang dreier Achsen:

  • X-Achse → Misst die magnetische Feldstärke von links nach rechts.
  • Y-Achse → Misst die Vorwärts-Rückwärts-Magnetfeldstärke.
  • Z-Achse → Misst die magnetische Feldstärke nach oben und unten.

Mithilfe dieser Werte können wir die Kompassrichtung (0° bis 360°) berechnen und bestimmen, in welche Richtung CodeCell zeigt.

Schritt 1: Magnetometerdaten aus CodeCell lesen

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?

  • Wenn Sie CodeCell drehen , ändern sich die X- und Y-Werte je nach Richtung.
  • Wenn Sie CodeCell neigen , ändert sich der Z-Wert .
  • Wenn Sie CodeCell in die Nähe eines Magneten bringen, schwanken alle Werte erheblich.

Schritt 2: Konvertieren Sie Magnetometerdaten in eine Kompassrichtung

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!

Schritt 3: Richtung mit der integrierten LED anzeigen

Wir können die LED jetzt je nach Richtung in verschiedenen Farben leuchten lassen:

  • 🔵 Norden (0° - 45° & 315° - 360°) → Blaue LED
  • 🟢 Osten (45° - 135°) → Grüne LED
  • 🔴 Süd (135° - 225°) → Rote LED
  • 🟡 Westen (225° – 315°) → Gelbe LED
 #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
 }
 }
 }

Experimentieren Sie mit Ihren eigenen Ideen!

Nachdem Sie nun Magnetometerdaten lesen und die Richtung berechnen können, versuchen Sie Folgendes:

  • Anzeige der Himmelsrichtung (N, O, S, W) auf einem OLED-Bildschirm .
  • Erkennen magnetischer Felder in der Nähe von Spulen oder Magneten .
  • Kombination mit anderen Sensoren

  • Teilen:

Sozial

Github

  • Um
  • Software
  • Ausbildung
  • Kontakt
  • FAQs
  • Bedingungen
  • Rückerstattung-Politik
  • Datenschutzrichtlinie

Erfahren Sie als Erster von neuen Projekten und sichern Sie sich spannende Angebote!

© 2025 Microbots.