Rotationssensor MPU-6050 mit WebGL am Raspberry Pi visualisieren

Der Raspberry Pi ist zu vielem in der Lage, so können einfach Rotations- und Beschleunigugnswerte mittels eines Sensors, wie dem MPU-6050, ausgelesen werden. Das Ergebnis sind jedoch einfache Zahlen, worunter man sich im Normalfall nicht all zu viel vorstellen wird. Jedoch ist es sehr einfach diese Zahlen zu visualisieren. Dies geht in modernen Browsern ganz einfach mittels WebGL, womit man 2D und 3D Objekte im Browser rendern kann.

Dazu lassen wir einen Node.JS Webserver auf dem Raspberry Pi laufen, der die Daten sowohl abruft, als auch visualisiert. Der Beispielcode dafür ist am Ende des Tutorials angehängt.

Dieses Tutorial ist aufgrund einer der vielen Tutorial-Wünsche für den Raspberry Pi entstanden.

 

Zubehör

Neben einem Computer mit Browser, benötigst du folgendes Zubehör, um zu beginnen:

Bei diesem Modul sind 2 unterschiedliche Pin Header anbei, wovon einer gebogen ist. Lötet man den gebogenen Pin Header an, spart man ein wenig Platz und die Bewegung später ist intuitiver.

Rotationssensor MPU 6050

Rotationssensor MPU 6050

Aufbau und Anschluss des MPU 6050 Sensors am Raspberry Pi

Um den Rotationssensor auslesen zu können, nutzen wir den sog. I2C Bus. Damit lassen sich verschiedene Sensoren mit lediglich einer Datenleitung (SDA) und einer „Clock“ (SCL) auslesen. Dies funktioniert mittels der Hardware Adresse eines Sensors (in unserem Fall 0x68). Der Vorteil von I2C ist, dass man nicht viele GPIO Pins belegen braucht und dennoch viele Daten auslesen kann.

Wir schließen die Jumper Kabel also an den MPU 6050 Sensor und an den Raspberry Pi wie folgt an:

Raspberry Pi MPU 6050
Pin 1 (3.3V) VCC
Pin 3 (SDA) SDA
Pin 5 (SCL) SCL
Pin 6 (GND) GND

Schematisch sieht das ganze folgendermaßen aus. Wie du siehst, werden die unteren vier Anschlüsse nicht benötigt und können frei bleiben.

GY-521_accelerometer_Gyroscope_Steckplatine

 

 

Installation der benötigten Raspberry Pi Bibliotheken

Standardmäßig ist I2C am Raspberry Pi nicht aktiviert. Dies ist der erste Schritt, den wir durchführen. Öffne eine SSH Konsole und gib folgendes ein:

sudo raspi-config

Navigiere unter „Advanced Options“ und anschließend unter „Interfacing Options“. Hier findet sich u.a. ein Eintrag zu „I2C“. Diesen wählen wir aus und aktivieren es. Danach kannst du das Tool mit „Finish“ beenden.

Zeit für einen ersten Test! Wir orüfen, ob der Sensor erkannt wurde. Dazu geben wir folgendes ein und erhalten die untere Ausgabe:

sudo i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -

Genaueres zur Installation (z.B. falls du Probleme dabei hast) findest du hier.

An Adresse 0x68 (Hexadezimal) befindet sich also ein I2C Gerät – in unserem Fall ist es das MPU 6050 Gyroskop.

Nun können wir auch bereits bestimmte Adressen des Sensors auslesen, wie bspw:

sudo i2cget -y 1 0x68 0x75

Die Registerdaten sind hierbei im Datenblatt definiert. Je nach Position, wirst du hier einen anderen Wert finden. Da wir mit den Hexadezimalen Ergebnissen nicht all zu viel anfangen können, gehen wir vorerst weiter zum nächsten Punkt.

Node.JS und Pakete installieren

Bevor die den Server starten können, müssen wir zunächst Node.JS und den Package Manager npm installieren (wer lieber yarn als Paketmanager nutzen möchte, kann das natürlich auch tun). Davor aktualisieren wir noch die Paketquellen:

sudo apt-get update
curl -sL https://deb.nodesource.com/setup_13.x | bash -
sudo apt-get install git nodejs npm -y

Anschließend klonen wir uns das Projekt aus Github, in dem der gesamte Code enthalten ist, gehen in das Verzeichnis und laden die benötigten Bibliotheken herunter:

git clone https://github.com/tutRPi/Raspberry-Pi-WebGL-Gyroscope
cd Raspberry-Pi-WebGL-Gyroscope
npm install

Der Vorgang dauert ein paar Minuten, aber sollte sich ohne weitere Probleme abschließen.

 

Node.JS Server starten und Rotation im Browser testen

Um den Server zu starten, reicht es folgendes Befehl einzugeben:

node index.js

Dadurch wird nun unter http://raspberrypi:3000/ verfügbar (ggf. musst du „raspberrypi“ mit der internen IP Adresse deines Pi’s ersetzen). Im Browser sieht das ganze dann so aus:

Zunächst einmal wird eine HTML Seite ausgegeben, die folgenden Inhalt hat und sich die Rotationsdaten unter http://raspberrypi:3000/api/data holt und diese visualisiert.

Unter dem Endpunkt /api/data befindet sich ein Controller, der nichts weiter tut, als den Sensor mittels I2C Adresse auszulesen und die Werte im JSON Format auszugeben:

Das hier gezeigt Demo Projekt ist natürlich sehr einfach gehalten. Es können dementsprechend noch sehr viel komplexere Projekte und Visualisierungen mit WebGL und dem Raspberry Pi erstellt werden. Falls du ein ähnliches Projekt umgesetzt hast, oder dieses dir als Grundlage dient, kannst du es auf Github gerne forken und/oder hier für andere verlinken.

 

PS: Solltest auch du einen Tutorial-Wunsch haben, kannst du diesen natürlich gerne mit einer kleinen Beschreibung äußern 🙂

6 Kommentare

  1. Für ein Projekt in der Uni hab ich etwas ähnliches gemacht. Eine quasi Fernbedienung mit der etwas auf dem Schirm gezeigt bzw. gezeichnet werden kann und Gesten erkannt werden können. Umgesetzt ist das mit ThreeJS. Ist dann jetzt mit Dokumentation auf Github hochgeladen 🙂
    https://github.com/FelixSchuermann/imu-remote

    Antworten
      • Das mach ich gerne! Im moment schreibe ich allerdings meine Masterthesis, daher würde es wohl etwas dauern, bzw. muss ich dann gucken wie ich die Zeit finde. Ich melde mich bei dir, wenn ich etwas habe.
        Lieben Gruß

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!