zurück

3-Achsen Beschleunigungs- und Lagesensor

07.05.2018

Hier geht es um den Sensorchip MPU-6050 verbaut auf dem Modul GY-521. Durch Einsatz dieses 3-Achsen-Gyroskops und 3-Achsen-Beschleunigungssensors sind 6 Freiheitsgrade (DOF = "Degrees Of Freedom") gleichzeitig erkennbar. Zusätzlich kann der Sensor noch die Umgebungstemperatur messen.

Modul GY-521
Abb.: Modul GY-521

Kern-Features des GY-521 (laut Hersteller)

Interner Aufbau des GY-521

Das Modul verfügt über einen I²C-Bus, durch den ein Mikrocontroller -wie ein Arduino- einfach angeschlossen werden kann. Möglicherweise sind 3,3V zum korrekten Betrieb des I²C-Bus nicht genug, es sollte daher -falls möglich- immer 5V als Stromversorgung verwendet werden.
Das Modul besitzt für den I²C-Bus Pullup-Widerstände, welche manchmal 10kΩ und manchmal 2,2KΩ sein können. Letzter Wert ist ziemlich niedrig, was zu Problemen führen kann, wenn noch andere Sensor-Module verwendet werden. Hier sollte dann ein zusätzlicher, externer Pullup-Widerstand Abhilfe schaffen.
Manche der GY-521-Module besitzen einen falschen (oder schlechten) Kondensator, was zu hohem Rauschen in den Messungen führen kann.

2,2KΩ-Pullup-Widerstände des Moduls GY-521
Abb.: 2,2KΩ-Pullup-Widerstände des Moduls GY-521

Der Sensor besitzt zusätzliche ein DMP-Einheit ("Digital Motion Processor"), welcher mit Firmware programmiert werden kann und es ermöglicht komplexere Berechnungen direkt auf dem Sensor-Chip durchzuführen. Anscheinend werden aber nicht genug Spezifikationen dafür von InvenSense herausgegeben, so dass durch Reverse Engineering diese Möglichkeiten doch erschlossen werden konnte.

Interner Schaltplan des Moduls GY-521
Abb.: Interner Schaltplan des Moduls GY-521

Anschlüsse des GY-521

Pin Pin-Funktion Arduino Uno
VCC Stromversorgung (3,3V bis 5V) (interner Spannungsregler) 3,3V bzw. 5V
GND Mass/Ground GND
SCL Serial clock (I²C) A5
SDA Serial data (I²C) A4
XDA Auxiliary data (= I²C master serial data, um das Modul an externe Module anzuschließen) (hier nicht benutzt)
XCL Auxiliary clock (= I²C master serial clock, um das Modul an externe Module anzuschließen) (hier nicht benutzt)
AD0 Änderung der I²C-Adresse:
LOW: 0x68
HIGH: 0x69
GND
INT Interrupt digital output (Optionaler Anschluss, um mehrere Module in Reihe zu schalten) (hier nicht benutzt)

Verwendete Bauteile

Optionale Software-Library: I2Cdevlib und MPU6050-Code

Aufbau

Aufbau auf dem Breadboard
Abb.: Aufbau auf dem Breadboard

Ex. 1: Ausgabe der Rohdaten in der seriellen Konsole

Der folgende Sketch steuert das GY-521-Modul an, liest alle verfügbaren Daten in einem festen Zeitintervall (hier: 1s) und gibt sie anschließend in der seriellen Konsole aus. Diese Rohdaten sind leicht zu lesen. Es muss nur der "sleep-mode" deaktiviert werden und nun können die Sensorwerte des Gyroskops, Beschleunigungssensors und Temperaturfühlers gelesen werden. An der Stelle Wire.requestFrom(MPU6050_ADRESS, 7*2, true) werden 14 Byte der Register ausgelesen. Dies liegt daran, dass alle 7 verfügbaren Sensor-Messwerte 2 Byte (=16 Bits) besitzen.

Sketch-Code von Github laden
Ausgabe der Rohdaten in der seriellen Konsole
Abb.: Ausgabe der Rohdaten in der seriellen Konsole

Ex. 3: Winkel messen mit dem MPU-6050

Der folgende Sketch berechnet nach dem Auslesen der Sensor-Daten die richtigen Winkel des Sensors und gibt diese wiederum in der seriellen Konsole aus.

Sketch-Code von Github laden
Ausgabe der Winkel in der seriellen Konsole
Abb.: Ausgabe der Winkel in der seriellen Konsole

Ex. 2: Grafische Ausgabe in "Processing"

Um die Funktionalität des Sensors besser darzustellen, werden die ermittelten Werte nun in Processing übertragen und dort in Echtzeit visualisiert. Die Sketches stammen von der Website "Geek Mom Projects"

Ausgabe der Daten in der seriellen Konsole
Abb.: Ausgabe der Daten in der seriellen Konsole
Video: Live-Demonstration in Processing