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 | |
---|---|---|
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.
- Download: https://github.com/micropython-IMU/micropython-mpu9x50/blob/master/imu.py unter /lib/imu.py speichern
- Download: https://github.com/micropython-IMU/micropython-mpu9x50/blob/master/vector3d.py unter /lib/vector3d.py speichern
I2C verbinden und programmieren
- Raspberry Pi Pico: Grundlagen zum I2C
- Raspberry Pi Pico: I2C verbinden und programmieren
- Raspberry Pi Pico: Troubleshooting I2C - Fehler, Probleme und Lösungen
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.
- Raspberry Pi Pico: Lage und Postion erkennen mit MPU-6050
- Raspberry Pi Pico: Winkel messen mit MPU-6050
- Raspberry Pi Pico: Bewegung und Erschütterung erkennen mit MPU-6050
- Raspberry Pi Pico: Diebstahl erkennen mit MPU-6050
Weitere verwandte Themen:
- Raspberry Pi Pico: Erschütterung oder Vibration erkennen mit Vibration Sensor KY-002
- Raspberry Pi Pico: Erschütterungsmelder mit Vibration Sensor KY-002 programmieren
- Raspberry Pi Pico: Diebstahlwarner mit Summer und Vibration Sensor KY-002 programmieren
- Raspberry Pi Pico: Temperatur messen
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
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
Online-Workshop: 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.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.