Zum Hauptinhalt springen

💥 MPU


⭐Grunverständnis für den MPU6050 Bewegungssensor​

Hier lernst du den MPU6050 Bewegungssensor kennen – den "Gleichgewichtssinn" deines Shuttles für Lage und Bewegung. Er erkennt, wie dein Shuttle geneigt oder beschleunigt wird – ähnlich wie die Sensoren in einem Smartphone oder einer Drohne.


💎 Ziel​

  • Du verstehst, wie der MPU6050 Ăźber den I²C-Bus kommuniziert.
  • Du kannst seine Sensordaten auslesen.
  • Du beobachtest, wie sich die Messwerte beim Bewegen des Shuttles verändern.

1. Hintergrund​

Der MPU6050 enthält zwei Sensoren:

SensorAufgabe
BeschleunigungssensorMisst Bewegung entlang der Achsen X, Y, Z
GyroskopMisst Drehgeschwindigkeit um die Achsen

Die Kommunikation läuft ßber I²C (Inter-Integrated Circuit). Dabei gibt es immer einen Master (hier: Arduino) und einen Slave (hier: MPU6050). Beide sind ßber zwei Leitungen verbunden:

  • 🟢 SDA – Datensignal
  • 🟡 SCL – Taktsignal

Der Arduino fragt regelmäßig Werte vom Sensor ab.


2. Code: Sensor auslesen​

#include <Wire.h>
#include <MPU6050_tockn.h>

MPU6050 mpu(Wire);

void setup() {
Serial.begin(9600);
Wire.begin();
mpu.begin();
mpu.calcGyroOffsets(true); // Kalibrierung beim Start
}

void loop() {
mpu.update();

Serial.print("Acc X: "); Serial.print(mpu.getAccX());
Serial.print(" | Acc Y: "); Serial.print(mpu.getAccY());
Serial.print(" | Acc Z: "); Serial.println(mpu.getAccZ());

delay(200);
}

3. Erklärung zum Code​

  • Wire.begin() aktiviert die I²C-Kommunikation.
  • mpu.begin() startet den Sensor.
  • mpu.calcGyroOffsets(true) kalibriert das Gyroskop – halte das Shuttle dabei ruhig.
  • mpu.update() liest aktuelle Werte vom Sensor ein.
  • Über den Serial Monitor kannst du die Messwerte in Echtzeit sehen.

4. Aufgabe​

Bewege dein Shuttle vorsichtig in verschiedene Richtungen:

  • Kippe es nach vorne, hinten, links oder rechts
  • Beobachte, wie sich die Werte von Acc X, Acc Y und Acc Z verändern
  • Was passiert, wenn du das Shuttle umdrehst oder schĂźttelst?

Notiere deine Beobachtungen – das hilft dir, die Sensorachsen zu verstehen.


✨ Aufgabe: Lagewinkel berechnen und anzeigen​

In dieser Aufgabe lernst du, wie man mit dem MPU6050 Bewegungssensor die Lage des Shuttles im Raum bestimmt. Wir berechnen dafĂźr die sogenannten Winkelachsen:

  • Roll (X) – Kippen nach links/rechts
  • Pitch (Y) – Neigung nach vorne/hinten

💎 Ziel​

  • Du liest die Neigungswinkel vom MPU6050 aus.
  • Du gibst die Werte im Serial Monitor aus.
  • Du beobachtest, wie sich die Zahlen bei Bewegungen verändern.

1. Erklärung​

Der MPU6050 kombiniert ein Gyroskop (erkennt Drehungen) und einen Beschleunigungssensor (fĂźhlt Schwerkraft). Damit kann er berechnen, wie stark dein Shuttle geneigt ist.

Die Bibliothek MPU6050_tockn liefert fertige Funktionen dafĂźr:

FunktionBedeutung
getAngleX()Roll (Neigung nach links/rechts)
getAngleY()Pitch (Neigung nach vorne/hinten)

2. Code​

#include <Wire.h>
#include <MPU6050_tockn.h>

MPU6050 mpu(Wire);

void setup() {
Serial.begin(9600);
Wire.begin();
mpu.begin();
mpu.calcGyroOffsets(true); // Kalibrierung
}

void loop() {
mpu.update();

Serial.print("Roll (X): ");
Serial.print(mpu.getAngleX());
Serial.print("° | Pitch (Y): ");
Serial.print(mpu.getAngleY());
Serial.println("°");

delay(300);
}

3. Experiment-Tipp​

  • Lege das Shuttle flach auf den Tisch: Die Winkel sollten nahe 0° liegen.
  • Kippe es leicht nach links/rechts – beobachte die Roll-Achse (X).
  • Kippe es nach vorne/hinten – beobachte die Pitch-Achse (Y).
  • Wie ändert sich das Vorzeichen (+/–)?

🌟 Aufgabe: LEDs mit Bewegung steuern​

In dieser Aufgabe lernst du, wie du Sensordaten nutzt, um LEDs zu steuern. Dein Shuttle reagiert auf Neigung – wenn du es nach links oder rechts kippst, leuchtet die entsprechende Navigations-LED! 🚀


💎 Ziel​

  • Du liest Neigungswerte (Winkel) vom MPU6050 aus.
  • Du nutzt diese Werte, um LEDs gezielt ein- oder auszuschalten.
  • Du siehst direkt, wie dein Code auf Bewegungen reagiert.

1. Aufbau​

Verwende die vorhandenen LEDs:

  • 🔴 Port (links): Pin 7
  • 🟢 Starboard (rechts): Pin 8

2. Code​

#include <Wire.h>
#include <MPU6050_tockn.h>

MPU6050 mpu(Wire);

const int portLedPin = 7; // linke LED (rot)
const int starboardLedPin = 8; // rechte LED (grĂźn)

void setup() {
Serial.begin(9600);
Wire.begin();
mpu.begin();
mpu.calcGyroOffsets(true); // Sensor kalibrieren

pinMode(portLedPin, OUTPUT);
pinMode(starboardLedPin, OUTPUT);
}

void loop() {
mpu.update();

float angleY = mpu.getAngleY(); // Neigung nach links/rechts
float angleX = mpu.getAngleX(); // Neigung nach vorne/hinten

// LEDs basierend auf der Neigung einschalten
digitalWrite(portLedPin, angleY < -5); // nach links kippen → linke LED
digitalWrite(starboardLedPin, angleY > 5); // nach rechts kippen → rechte LED

// Ausgabe im Serial Monitor
Serial.print("Roll (X): ");
Serial.print(angleX);
Serial.print("° | Pitch (Y): ");
Serial.println(angleY);

delay(100);
}

3. Erklärung​

  • mpu.getAngleX() → misst, wie stark das Shuttle nach vorne/hinten geneigt ist
  • mpu.getAngleY() → misst, wie stark das Shuttle nach links/rechts geneigt ist
  • Je nach Winkel werden die Navigationslichter aktiviert
  • Der Grenzwert Âą5° verhindert, dass die LEDs bei kleinen Bewegungen ständig flackern

☄️ Bonus-Ideen​

  • Passe den Schwellwert (Âą5°) an, um die Empfindlichkeit zu verändern.
  • Lasse die Beacon-LED pulsieren, wenn das Shuttle „fliegt“ (stark bewegt wird).
  • Miss, ob sich die X/Y-Achsen ändern, wenn du das Shuttle anders herum montierst.