Startseite>3-Achsen-Lage- und Beschleunigungssensor MPU6050
Aus Raspberry Pi Geek 08/2017

3-Achsen-Lage- und Beschleunigungssensor MPU6050

© Sergey Galushko, 123RF

Wo bin ich?

Martin Mohr

Gyroskope dienen dazu, Positionsveränderungen wahrzunehmen. Dafür war früher eine recht aufwendige und teure Apparatur erforderlich, heute übernimmt das ein winziger Chip für wenige Euro.

Lage- und Beschleunigungssensoren lassen sich aus dem heutigen Leben gar nicht mehr wegdenken. Es ist uns oft gar nicht bewusst, wie viele der Geräte, mit denen wir täglich in Berührung kommen, über solche Messfühler verfügen. So steuern entsprechende Sensortypen etwa das ESP (Elektronisches Stabilitätsprogramm) oder den Airbag in Ihrem Auto maßgeblich mit. Auch in Kombination mit dem RasPi lassen sie sich nutzen, etwa in Form des 3-Achsen-Lage- und Beschleunigungssensors MPU6050.

Technische Daten

Der MPU6050 kommt in einem für Bastler schwer zu verlötenden QFN-Package. Alternativ gibt es ein fertiges Modul [1], bei dem die wichtigsten Kontakte schon herausführen (Abbildung 1).

Abbildung 1: Pinbelegung und Achsen des MPU6050. Die im Workshop verwendete Variante befindet sich bereits auf einer beschrifteten Platine.

Abbildung 1: Pinbelegung und Achsen des MPU6050. Die im Workshop verwendete Variante befindet sich bereits auf einer beschrifteten Platine.

Der Chip meldet sich am I2C-Bus über die Adresse 0x68h oder 0x69h, je nachdem ob der ADD-Anschluss auf 0 Volt oder auf 3,3 Volt liegt. Das 52 Seiten umfassende Datenblatt [2] beschreibt zwar vieles, lässt aber ausgerechnet die Register des Chips aus. Diese finden sich in einem anderen Dokument [3] mit zusätzlich 46 Seiten. Die Tabelle “Wichtige Register” zeigt eine Übersicht über die interessantesten davon.

Der Chip misst Lage und Beschleunigungswerte mit einer Genauigkeit von 16 Bit, verwendet intern jedoch 8-Bit-Register. Für exakte Messwerte muss man also zwei Register einlesen. Der Chip erzeugt die Werte intern analog und stellt sie über separate A/D-Wandler in den Registern bereit. Zusätzlich enthält der MPU6050 noch einen Temperatursensor, der sich ebenfalls mit einer Genauigkeit von 16 Bit auslesen lässt. Die Lagesensoren sind ab Werk kalibriert.

Der MPU6050 eignet sich für eine ganze Reihe von Anwendungsgebieten, wie etwa zur Lage- und Gestenerkennung in Game-Controllern, Mobiltelefonen oder Technikspielzeug (Drohnen, Roboter), zur Ergänzung von Navigationssystemen, als Sensor im Fitnessbereich oder um bei Kameras das Verwackeln von Bildern und Videos zu verhindern.

Wichtige Register

Register

Funktion

Beschleunigung

0x3Bh

X-Achse High-Byte

0x3Ch

X-Achse Low-Byte

0x3Dh

Y-Achse High-Byte

0x3Eh

Y-Achse Low-Byte

0x3Fh

Z-Achse High-Byte

0x40h

Z-Achse Low-Byte

Temperatur

0x41h

High-Byte

0x42h

Low-Byte

Lage

0x43h

X-Achse High-Byte

0x44h

X-Achse Low-Byte

0x45h

Y-Achse High-Byte

0x46h

Y-Achse Low-Byte

0x47h

Z-Achse High-Byte

0x48h

Z-Achse Low-Byte

sonstiges

0x6Bh

Energiemanagement

Testaufbau

Die Art des Sensors erzwingt einen beweglichen Testaufbau, sonst erhalten Sie ziemlich konstante Messwerte. Der Aufbau aus Abbildung 2 lässt in dieser Hinsicht zu wünschen übrig, genügt aber für erste Versuche. Der Einsatz flexiblerer Leitungen wäre besser. Ein Schaltplan erübrigt sich, da man den Sensor ohne zusätzliche Bauelemente mit dem RasPi verbinden kann. Die Tabelle “Verdrahtung” zeigt, welche Anschlüsse Sie mit welchen Pins des GPIO verbinden müssen.

Abbildung 2: Der Testaufbau nutzt ein etwas schwer zu bewegendes Flachbandkabel, was die Bewegungsfreiheit des Sensors einschränkt.

Abbildung 2: Der Testaufbau nutzt ein etwas schwer zu bewegendes Flachbandkabel, was die Bewegungsfreiheit des Sensors einschränkt.

Verdrahtung

MPU6050

GPIO

VCC1

3,3V

GND9

GND

SCL5

SCL

SDA3

SCA

Aus Teil 9 [4] dieser Reihe (auch auf der Heft-DVD) wissen Sie, wie Sie mithilfe des Pakets i2c-tools eine funktionierende I2C-Testumgebung aufbauen. Dieser Artikel greift auf das darin beschriebene Setup zurück. Mit dem Kommando i2cdetect -y 1 prüfen Sie, ob der Aufbau einwandfrei funktioniert. Der MPU6050 meldet sich unter der Adresse 0x68h am I2C-Bus.

Für einen ersten Test wecken Sie den Chip aus dem Schlafmodus, indem Sie den Wert 0x00h ins Statusregister 0x6Bh schreiben (Listing 1). Danach lesen Sie das High-Byte des Sensors für die X-Achse aus. Die Werte sollten sich ändern, sobald Sie den Sensor um die X-Achse (siehe Aufdruck auf dem Modul) drehen.

Listing 1

 

$ i2cset -y 1 0x68 0x6b 0x00
$ watch -n 0.5 'i2cget -y 1 0x68 0x44'

Testprogramm

Für erste Tests genügt zwar das Kommandozeilenprogramm, doch um alle Sensorwerte gleichzeitig gut zu sehen, eignet sich eine kleine GTK-Anwendung besser. Das Testprogramm soll die Werte aller sieben Sensoren des MPU6050 übersichtlich anzeigen und alle 0,1 Sekunden aktualisieren. Das in C geschriebene, schnelle GTK+ (siehe Kasten “GTK+ installieren”) bietet dafür die passende Lösung.

Listing 2 zeigt Teile des Quellcodes des Testprogramms (Abbildung 3), mit dem Sie den Sensor auslesen. Die vollständige Version finden Sie auf der Heft-DVD. Listing 3 zeigt, wie Sie den Quellcode kompilieren.

Abbildung 3: Das kleine GTK+-Programm informiert Sie übersichtlich über die erhobenen Daten des Gyro-Sensors.

Abbildung 3: Das kleine GTK+-Programm informiert Sie übersichtlich über die erhobenen Daten des Gyro-Sensors.

Die main()-Funktion aus Listing 2 erzeugt nach dem Initialisieren der I2C-Verbindung und des Fensters ein sogenanntes Grid. Dabei handelt es sich um ein tabellenähnliches Layoutelement, mit dem sich sehr einfach kleine Programme erstellen lassen. Ein Blick in die GTK+-Dokumentation [5] zu diesem Thema lohnt sich. Der restliche Teil von main() übernimmt überwiegend den Aufbau des Grids.

Die Funktion refresh() erledigt das Auslesen der Sensorwerte und setzt sie in die entsprechenden Labels. Die Zeile 70 in Listing 2 sorgt dafür, dass das alle 100 Millisekunden erfolgt. Die vorliegende Variante liest jedoch nur die High-Bytes aus. Benötigen Sie die volle Genauigkeit der Sensoren, müssen Sie das Programm entsprechend anpassen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland