Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie tiefer in die Welt von Raspberry Pi, Arduino und ESP32 ein, gemeinsam mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezielle Rabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Verlosungen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu erkunden und zu kreieren? Klicken Sie auf [hier] und treten Sie heute bei!
6.3 Daten aus dem MPU-6050 auslesen
In dieser Lektion erforschen wir, wie man den MPU-6050 6-Achsen-Bewegungssensor mit dem Raspberry Pi Pico 2 verwendet. Der MPU-6050 kombiniert ein 3-Achsen-Gyroskop und einen 3-Achsen-Beschleunigungsmesser und stellt rohe Sensordaten über das I2C-Kommunikationsprotokoll bereit.
Was Sie benötigen
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
Name |
ITEMS IN THIS KIT |
LINK |
|---|---|---|
Newton Lab Kit |
450+ |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
SN |
COMPONENT |
QUANTITY |
LINK |
|---|---|---|---|
1 |
1 |
||
2 |
Micro-USB-Kabel |
1 |
|
3 |
1 |
||
4 |
Mehrere |
||
5 |
1 |
Verständnis des MPU-6050 Sensors
Der MPU-6050-Sensor wird häufig in Projekten eingesetzt, die Bewegungserfassung und Orientierungsdetektion erfordern, wie z. B. Drohnen, Robotik und Gaming-Geräte.
Beschleunigungsmesser: Misst Beschleunigungskräfte entlang der X-, Y- und Z-Achsen. Dies umfasst die Gravitationsbeschleunigung, wodurch Sie die Neigung oder Orientierung des Sensors bestimmen können.
Gyroskop: Misst die Rotationsgeschwindigkeit um die X-, Y- und Z-Achsen und liefert Informationen darüber, wie schnell der Sensor sich dreht.
Schaltplan

Verdrahtungsplan

Schreiben des Codes
Wir werden ein Programm schreiben, das den MPU-6050 Sensor initialisiert, Beschleunigungs- und Gyroskopdaten liest und die Werte auf dem Seriellen Monitor ausgibt.
Bemerkung
Sie können die Datei
6.3_6axis_motion_tracking.inoausnewton-lab-kit/arduino/6.3_6axis_motion_trackingöffnen.Oder kopieren Sie diesen Code in die Arduino IDE.
Wählen Sie das Raspberry Pi Pico 2-Board und den richtigen Port, dann klicken Sie auf „Upload“.
Die Bibliothek
Adafruit MPU6050wird hier verwendet, Sie können sie aus dem Library Manager installieren.
#include <Adafruit_MPU6050.h>
#include <Wire.h>
// Create an MPU6050 object
Adafruit_MPU6050 mpu;
void setup(void) {
// Initialize Serial Communication
Serial.begin(115200);
Serial.println("Adafruit MPU6050 test!");
// Try to initialize the MPU6050
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 Found!");
// Set accelerometer range
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
Serial.print("Accelerometer range set to: ");
switch (mpu.getAccelerometerRange()) {
case MPU6050_RANGE_2_G:
Serial.println("+-2G");
break;
case MPU6050_RANGE_4_G:
Serial.println("+-4G");
break;
case MPU6050_RANGE_8_G:
Serial.println("+-8G");
break;
case MPU6050_RANGE_16_G:
Serial.println("+-16G");
break;
}
// Set gyroscope range
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
Serial.print("Gyro range set to: ");
switch (mpu.getGyroRange()) {
case MPU6050_RANGE_250_DEG:
Serial.println("+-250 deg/s");
break;
case MPU6050_RANGE_500_DEG:
Serial.println("+-500 deg/s");
break;
case MPU6050_RANGE_1000_DEG:
Serial.println("+-1000 deg/s");
break;
case MPU6050_RANGE_2000_DEG:
Serial.println("+-2000 deg/s");
break;
}
// Set filter bandwidth
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.print("Filter bandwidth set to: ");
switch (mpu.getFilterBandwidth()) {
case MPU6050_BAND_260_HZ:
Serial.println("260 Hz");
break;
case MPU6050_BAND_184_HZ:
Serial.println("184 Hz");
break;
case MPU6050_BAND_94_HZ:
Serial.println("94 Hz");
break;
case MPU6050_BAND_44_HZ:
Serial.println("44 Hz");
break;
case MPU6050_BAND_21_HZ:
Serial.println("21 Hz");
break;
case MPU6050_BAND_10_HZ:
Serial.println("10 Hz");
break;
case MPU6050_BAND_5_HZ:
Serial.println("5 Hz");
break;
}
Serial.println("");
delay(100);
}
void loop() {
// Get new sensor events with the readings
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Print acceleration values
Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(" m/s^2, Y: ");
Serial.print(a.acceleration.y);
Serial.print(" m/s^2, Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");
// Print gyroscope values
Serial.print("Rotation X: ");
Serial.print(g.gyro.x);
Serial.print(" rad/s, Y: ");
Serial.print(g.gyro.y);
Serial.print(" rad/s, Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");
delay(500); // Adjust delay as needed
}
Nach dem Hochladen des Codes sollte der Serielle Monitor kontinuierlich die Beschleunigungs- und Rotationswerte anzeigen.
Adafruit MPU6050 test!
MPU6050 Found!
Accelerometer range set to: +-8G
Gyro range set to: +-500 deg/s
Filter bandwidth set to: 21 Hz
Acceleration X: 0.00 m/s^2, Y: 0.00 m/s^2, Z: 9.81 m/s^2
Rotation X: 0.02 rad/s, Y: -0.01 rad/s, Z: 0.00 rad/s
Acceleration X: 0.10 m/s^2, Y: 0.05 m/s^2, Z: 9.76 m/s^2
Rotation X: 0.15 rad/s, Y: -0.05 rad/s, Z: 0.02 rad/s
Drehen oder bewegen Sie vorsichtig das MPU-6050-Sensormodul. Beobachten Sie die Veränderungen in den Beschleunigungs- und Rotationswerten, die den Bewegungen entsprechen.
Verständnis des Codes
Einbinden von Bibliotheken und Definieren von Konstanten:
Adafruit_MPU6050.h: Bindet die MPU6050-Bibliothek für eine einfachere Schnittstellensteuerung ein.Wire.h: Bindet die I2C-Kommunikationsbibliothek ein.mpu: Erstellt ein MPU6050-Objekt zur Interaktion mit dem Sensor.
Setup-Funktion:
MPU6050-Initialisierung:
Versucht, den MPU6050-Sensor zu initialisieren. Bei einem Misserfolg wird eine Fehlermeldung ausgegeben und das Programm wird angehalten.
Serial.println("Adafruit MPU6050 test!"); // Try to initialize the MPU6050 if (!mpu.begin()) { Serial.println("Failed to find MPU6050 chip"); while (1) { delay(10); } } Serial.println("MPU6050 Found!");
Beschleunigungsmesserbereich:
Stellt den Beschleunigungsmesserbereich auf ±8G ein und gibt den aktuellen Bereich aus.
mpu.setAccelerometerRange(MPU6050_RANGE_8_G); Serial.print("Accelerometer range set to: "); switch (mpu.getAccelerometerRange()) { case MPU6050_RANGE_2_G: Serial.println("+-2G"); break; ... case MPU6050_RANGE_16_G: Serial.println("+-16G"); break; }
Gyroskopbereich:
Stellt den Gyroskopbereich auf ±500 Grad pro Sekunde ein und gibt den aktuellen Bereich aus.
mpu.setGyroRange(MPU6050_RANGE_500_DEG); Serial.print("Gyro range set to: "); switch (mpu.getGyroRange()) { case MPU6050_RANGE_250_DEG: Serial.println("+-250 deg/s"); break; ... case MPU6050_RANGE_2000_DEG: Serial.println("+-2000 deg/s"); break; }
Filterbandbreite einstellen:
Stellt die Filterbandbreite auf 21 Hz ein, um Rauschen zu reduzieren, und gibt die aktuelle Einstellung aus.
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); Serial.print("Filter bandwidth set to: "); switch (mpu.getFilterBandwidth()) { case MPU6050_BAND_260_HZ: Serial.println("260 Hz"); break; ... case MPU6050_BAND_5_HZ: Serial.println("5 Hz"); break; }
Loop-Funktion:
Sensordaten lesen:
sensors_event_t a, g, temp;: Erstellt Ereignisobjekte, um Beschleunigungs-, Gyroskop- und Temperaturdaten zu speichern.mpu.getEvent(&a, &g, &temp);: Ruft die neuesten Sensordaten ab.
sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp);
Sensordaten ausgeben:
Beschleunigung: Gibt Beschleunigungswerte entlang der X-, Y- und Z-Achsen in Metern pro Sekunde zum Quadrat (m/s²) aus.
Rotation: Gibt Gyroskopwerte (Rotationsgeschwindigkeit) um die X-, Y- und Z-Achsen in Radiant pro Sekunde (rad/s) aus.
// Print acceleration values Serial.print("Acceleration X: "); Serial.print(a.acceleration.x); ... Serial.print(g.gyro.y); Serial.print(" rad/s, Z: "); Serial.print(g.gyro.z); Serial.println(" rad/s");
Fehlerbehebung
Keine Anzeigen:
Überprüfen Sie alle Verkabelungen, insbesondere die I2C-Leitungen (SCL und SDA).
Stellen Sie sicher, dass der MPU6050-Sensor mit Strom versorgt wird (VCC- und GND-Verbindungen).
Überprüfen Sie, ob die richtigen GPIO-Pins im Code definiert sind.
Falsche Messwerte:
Stellen Sie sicher, dass der MPU6050-Sensor richtig im Steckbrett sitzt.
Überprüfen Sie, ob die Bereichs- und Filtereinstellungen des Sensors der gewünschten Anwendung entsprechen.
Überprüfen Sie auf lose Verbindungen oder Kurzschlüsse in der Verkabelung.
Sensorinterferenzen:
Platzieren Sie den Sensor nicht in der Nähe anderer elektronischer Geräte, die Störungen verursachen könnten.
Stellen Sie sicher, dass keine physischen Hindernisse die Bewegung des Sensors blockieren.
Weitere Erkundungen
Kombination mit anderen Sensoren:
Integrieren Sie den MPU6050 mit GPS-Modulen, Magnetometern oder anderen Sensoren, um umfassende Tracking-Systeme zu erstellen.
Bau eines bewegungsbasierten Spielcontrollers:
Verwenden Sie den MPU6050, um Bewegungen und Orientierungen zu erkennen, was die Erstellung von bewegungsgesteuerten Spielgeräten ermöglicht.
Erstellung eines selbstbalancierenden Roboters:
Nutzen Sie die Daten des Beschleunigungsmessers und Gyroskops, um Balance und Stabilität in Roboteranwendungen zu gewährleisten.
Implementierung von Sensor-Fusion-Algorithmen:
Kombinieren Sie Beschleunigungs- und Gyroskopdaten, um Orientierungswinkel mit Algorithmen wie dem Kalman-Filter oder dem Komplementärfilter zu berechnen.
Fazit
In dieser Lektion haben Sie gelernt, wie man den MPU6050 6-Achsen-Bewegungssensor mit dem Raspberry Pi Pico verwendet. Durch die Nutzung der Adafruit MPU6050-Bibliothek können Sie einfach Beschleunigungs- und Gyroskopdaten abrufen und interpretieren, was eine Vielzahl von Bewegungs- und Orientierungsanwendungen ermöglicht. Die optionale LED-Anzeige bietet eine einfache Möglichkeit, visuelles Feedback basierend auf den Sensordaten zu geben und die Interaktivität Ihrer Projekte zu erhöhen.