Raspberry Pi Pico: MPU-6050 programmieren

Der MPU-6050 ist ein Sensor, der sowohl Gyroskop- als auch Beschleunigungsdaten liefert und sich ideal für Projekte eignet, die Bewegungs- und Lageerkennung erfordern. Mit dem Raspberry Pi Pico als vielseitigen Mikrocontroller lassen sich diese Daten erfassen und verarbeiten.

Mit dem MPU-6050 lassen sich viele spannende Dinge machen, wenn man in der Lage ist, die Daten des Sensors richtig zu interpretieren und darauf zu reagieren. Wenn du bisher keine Idee hattest, was du mit dem MPU-6050 machen kannst, dann bist du hier genau richtig.

Beispielsweise lassen sich mit dem MPU-6050 Neigungs- und Rotationsbewegungen ermitteln, um Positions- und Bewegungsmesser zu programmieren und interaktive Spiele zu entwickeln. Denkbar sind auch Steuerungen für Drohnen und Roboter, die auf präzisen Bewegungsdaten basieren.

Bei den folgenden Programmcodes geht es darum, den MPU-6050 zu testen und erste Experimente durchzuführen.

Wenn Du noch keine Erfahrung mit dem MPU-6050 hast, ist es empfehlenswert sich mit den Grundlagen zum MPU-6050 zu beschäftigen.

Aufbau und Bauteile

Raspberry Pi Pico: MPU-6050 programmieren

Raspberry Pi Pico MPU-6050
Pin 38 GND GND
Pin 36 VCC +3,3V VCC
Pin 27 GPIO 21 SCL
Pin 26 GPIO 20 SDA

Hinweis: Man sollte beachten, dass das MPU-6050-Modul nur an einer Seite eine Steckleiste hat. Wenn man es auf einem Steckbrett befestigt, dann besteht die Gefahr, dass es schief steckt. Dadurch können die Werte des Beschleunigungssensors von den erwarteten Werten abweichen.

MicroPython-Bibliothek für MPU-6050

Damit der MPU-6050 programmiert werden kann, müssen zwei externe Bibliotheken auf dem Raspberry Pi Pico geladen und im Verzeichnis lib gespeichert werden.

I2C verbinden und programmieren

Schnell und einfach alle Bauteile zusammen bestellen

Programmcode zum Lesen der Sensordaten des Accelerometers

Mit dem Accelerometer kann man die aktuelle Lage oder Position feststellen. Die Werte in g (Gravitationsbeschleunigung) verändern sich nur, wenn eine Veränderung der Lage oder Position eingetreten ist.

# Bibliotheken laden
import machine
import time
from imu import MPU6050

# I2C-Pins
i2c_sda = machine.Pin(20)
i2c_scl = machine.Pin(21)

# Initialisierung I2C
i2c = machine.I2C(0, sda=i2c_sda, scl=i2c_scl, freq=100000)

# Initialisierung MPU-6050
imu = MPU6050(i2c)
time.sleep(2) # Warten bis Initialisierung fertig ist

# Wiederholung (Endlos-Schleife)
while True:
    # Messwerte für X, Y und Z
    acc_raw_x = round(imu.accel.x, 1)
    acc_raw_y = round(imu.accel.y, 1)
    acc_raw_z = round(imu.accel.z, 1)
    # Werte anzeigen in g (Gravitationsbeschleunigung)
    print('acc_raw_x:', acc_raw_x, "\t", 'acc_raw_y:', acc_raw_y, "\t", 'acc_raw_z:', acc_raw_z, "\t", end = "\r")
    time.sleep(1)

Beispielhafte Datenausgabe bei Ruhelage:

acc_x: 0.0   acc_y: 0.0    acc_z: 1.0

Wenn der MPU-6050 im Steckbrett flach in seiner X/Y-Achse liegt, dann sollten alle Ergebnisse mit Ausnahme der Beschleunigung in der Z-Achse ungefähr Null sein.

Natürlich sind die Daten interpretationswürdig:

  • Die X-Achse eines Accelerometers misst normalerweise die Beschleunigung entlang der Achse, die von links nach rechts verläuft. Wenn man den Aufbau nach links neigt (linke Seite nach unten und rechte Seite nach oben), dann verändert sich der Wert der X-Achse positiv. Wenn man den Aufbau nach rechts neigt (linke Seite nach oben und rechte Seite nach unten), dann verändert sich der Wert der X-Achse negativ. Der Wertebereich verläuft von -1.0 bis 1.0 g.
  • Die Y-Achse eines Accelerometers misst normalerweise die Beschleunigung entlang der Achse, die von hinten nach vorne verläuft. Wenn man den Aufbau vorne nach unten neigt, dann verändert sich der Wert der Y-Achse negativ. Wenn man den Aufbau vorne nach oben neigt, dann verändert sich der Wert der Y-Achse positiv. Der Wertebereich verläuft von -1.0 bis 1.0 g.
  • Die Z-Achse eines Accelerometers misst normalerweise die Beschleunigung entlang der Achse, die von unten nach oben verläuft. Im Normalzustand ist der Wert positiv. Wenn man den Aufbau auf den Kopf dreht, dann verändert sich der Wert negativ. Ob der Wert positiv oder negativ ist, hängt davon ab, zu welcher Seite man gedreht hat. Der Wertebereich verläuft von -1.0 bis 1.0 g.

Hinweis: Beschleunigung bedeutet nicht, dass sich etwas bewegt. Die Beschleunigung ist als Kraft zu verstehen, die auf den Sensor wirkt bzw. messbar ist. Mindestens eine Achse ist immer von einer Kraftwirkung betroffen.

Programmcode zum Lesen der Sensordaten des Gyroskops

Mit dem Gyroskop kann man die aktuelle Bewegung bzw. Drehgeschwindigkeit messen. Die Werte verändern sich, wenn eine Bewegung eintritt und kehren zu nahezu Null zurück, wenn das Objekt in Ruhe ist. Man kann damit die aktuelle Veränderung der Lage oder Position feststellen. Je höher die Drehgeschwindigkeit, desto höher ist der Wert in Grad pro Sekunde (°/s) im positiven bzw. negativen Wertebereich.

# Bibliotheken laden
import machine
import time
from imu import MPU6050

# I2C-Pins
i2c_sda = machine.Pin(20)
i2c_scl = machine.Pin(21)

# Initialisierung I2C
i2c = machine.I2C(0, sda=i2c_sda, scl=i2c_scl, freq=100000)

# Initialisierung MPU-6050
imu = MPU6050(i2c)
time.sleep(1) # Warten bis Initialisierung fertig ist

# Wiederholung (Endlos-Schleife)
while True:
    # Messwerte für X, Y und Z
    gyr_raw_x = round(imu.gyro.x, 1)
    gyr_raw_y = round(imu.gyro.y, 1)
    gyr_raw_z = round(imu.gyro.z, 1)
    # Werte anzeigen in Grad pro Sekunde (°/s)
    print('gyr_raw_x:', gyr_raw_x, "\t", 'gyr_raw_y:', gyr_raw_y, "\t", 'gyr_raw_z:', gyr_raw_z, "\t", end = "\r")
    time.sleep(.2)

Beispielhafte Datenausgabe bei Ruhelage:

gyr_raw_x: -1.6 	 gyr_raw_y: -0.3 	 gyr_raw_z: 0.5

Wenn der MPU-6050 im Steckbrett in Ruhe liegt, dann sollten die Ergebnisse in der Nähe von Null liegen.

  • X-Achse: Wenn man den Aufbau vorne nach unten neigt, dann verändert sich der Wert der X-Achse negativ. Wenn man den Aufbau vorne nach oben neigt, dann verändert sich der Wert der X-Achse positiv. Der Wertebereich verläuft von -251.0 bis 251.0 °/s.
  • Y-Achse: Wenn man den Aufbau nach links neigt (linke Seite nach unten und rechte Seite nach oben), dann verändert sich der Wert der Y-Achse negativ. Wenn man den Aufbau nach rechts neigt (linke Seite nach oben und rechte Seite nach unten), dann verändert sich der Wert der Y-Achse positiv. Der Wertebereich verläuft von -251.0 bis 251.0 °/s.

Programmcode zur Temperaturmessung

Der MPU-6050 enthält einen Temperatursensor, der die Temperatur in Grad Celsius ausgibt.

Anwendungen mit dem MPU-6050

Mit dem Sensor-Modul MPU-6050 und dem Mikrocontroller-Board Raspberry Pi Pico kann man viele spannende Dinge machen. Dabei liegt das Geheimnis gar nicht so sehr in den Messdaten des Sensors, sondern es ist die Kunst diese Daten so zu interpretieren, dass man daraus eine praktische Anwendung realisieren kann.
Die rohen Sensordaten sind meistens nicht sinnvoll zu nutzen. In der Regel muss man sie in eine lesbare Form umrechnen oder sogar miteinander kombinieren. Wenn du bisher keine Idee hattest, was du mit dem MPU-6050 machen kannst, dann bist du hier genau richtig.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren