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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben