Raspberry Pi Pico: Position und Lage erkennen mit MPU-6050
Mit dem Raspberry Pi Pico kann man die Sensordaten des MPU-6050 auswerten und die Position bzw. Lage des Sensors ermitteln. Damit kannst du ein elektronisches Gerät realisieren, dass erkennen kann, ob es auf einer bestimmten Seite liegt oder auf dem Kopf steht. Es wäre denkbar, dass das Gerät abhängig von der Position bzw. Lage eine bestimmte Funktion ausführt.
Stelle dir vor, der vorliegende Aufbau wäre in einen Würfel eingebaut. Ein Würfel hat 6 Seiten. Wir wollen feststellen auf welcher Seite der Würfel liegt. Dazu ist im folgenden Programmcode eine Auswertung der Beschleunigungsdaten vorgesehen, aus denen die Lage ermittelt wird.
Vielleicht hast du dann weitere Ideen, wie du aus dem Beschleunigungsdaten innovative Anwendungen entwickeln kannst.
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
Es geht in diesem Programmcode darum, die Lage des MPU-6050 zu erkennen. Der Programmcode liest die Beschleunigungsdaten vom Sensor und ermittelt dann, welche Lage er hat. Das tut er regelmäßig und die Ausgabe erfolgt nur dann, wenn die Lage sich verändert hat.
Damit das funktioniert, sind 6 Positionen definiert. Das entspricht einem Würfel, der 4 Seiten hat und zusätzlich eine Ober- und Unterseite. Zusammen sind das 6 Positionen, die sich vom Programmcode eindeutig identifizieren lassen. Natürlich gibt es dazwischen weitere Positionen, die wir an der Stelle als nicht eindeutig erkennen, weil der Würfel nicht auf einer seiner Flächen steht, sondern zur Seite geneigt ist.
Im Programmcode sind die Positionen von 0 bis 6 definiert. Wobei die Position 0 als nicht eindeutig definiert ist. Das bedeutet, der Würfel würde nicht klar auf einer Seite liegen, sondern nur zu irgendeiner Seite geneigt sein.
# 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: time.sleep(.2) # Messwerte für X, Y und Z acc_x = round(imu.accel.x * 10) acc_y = round(imu.accel.y * 10) acc_z = round(imu.accel.z * 10) # Lage ermitteln if acc_x in range(-2, 2) and acc_y in range (-2, 2) and acc_z >= 8: pos = 1 elif acc_x <= -8 and acc_y in range (-2, 2): pos = 2 elif acc_x >= 8 and acc_y in range (-2, 2): pos = 3 elif acc_x in range (-2, 2) and acc_y <= -8: pos = 4 elif acc_x in range (-2, 2) and acc_y >= 8: pos = 5 elif acc_x in range (-2, 2) and acc_y in range (-2, 2) and acc_z <= -8: pos = 6 else: pos = 0 # Messwerte anzeigen #print('acc_x:', acc_x, "\t", 'acc_y:', acc_y, "\t", 'acc_z:', acc_z, "\t", end = "\r") print('Lage:', pos, end = "\r")
Weitere verwandte Themen:
- Raspberry Pi Pico: MPU-6050 programmieren
- 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
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.