GPIO, Projekte

Joystick am Raspberry Pi benutzen (mit MCP3008)

Für einige Anwendungen wie Spiele kann ein Joystick sinnvoll oder gar nötig erscheinen. Da diese aber meist rein analog funktionieren muss das Signal umgewandelt werden, was wir mittels des MCP3008 Bausteins machen. Der Aufbau und das auslesen eines Joysticks wird in diesem Tutorial gezeigt.



 

Diese analogen Joysticks haben zwei Achsen, welche durch zwei Potentiometer (verstellbarer Widerstand) eine gewisse Spannung durchlassen. Damit die Position auch digital am Raspberry ausgelesen werden kann wird der MCP3008 benötigt. Das Schema dieses Bausteins ist folgendermaßen:

mcp3008-e1397762478714

Auf der linken Seite sind 8 analoge Eingänge, wovon wir allerdings nur 3 brauchen.

Auf der rechten Seite sind die digitalen Ausgänge, wobei die Übertragung über DIN und DOUT stattfindet.

Der MCP3008 Baustein ist ein 10 Bit Anlog-Digital Wandler. Das bedeutet, dass er maximal 2^10 also 1024 Bitkombinationen erreichen kann, also die Werte von 0 bis 1023. Bei einer Eingangsspannung von 3.3V sind das ca. 3.2mV Schritte, die verwertet werden können (3.3V / 1024).

 

Zubehör

 

Aufbau

Obwohl auf dem Joystick 5V Eingangsspannung steht, funktioniert es auch ohne Probleme mit 3.3V, was bei der Nutzung des MCP3008 sogar wichtig ist. Die Bezeichnung SW ist für den Button, der betätigt wird, wenn man den Joystick drückt. Damit dieser entweder 0 oder 1023 ist (gedrückt oder nicht gedrückt) wird ein 10kΩ Widerstand an VCC gehängt. Ohne diesen Widerstand werden ungültige Zahlen ausgegeben, die nicht eindeutig zuzuweisen sind.

 

joystick_Steckplatine
 

Die Pin Belegung des Raspberrys sieht folgendermaßen aus:

RaspberryPiMCP3008
Pin 1 (3.3V)Pin 16 (VDD)
Pin 1 (3.3V)Pin 15 (VREF)
Pin 6 (GND)Pin 14 (AGND)
Pin 23 (SCLK)Pin 13 (CLK)
Pin 21 (MISO)Pin 12 (DOUT)
Pin 19 (MOSI)Pin 11 (DIN)
Pin 24 (CE0)Pin 10 (CS/SHDN)
Pin 6 (GND)Pin 9 (DGND)

Folgend noch der Anschluss an den Joystick:

RPi/MCP3008Joystick
 Raspberry Pin 6 (GND) GND
 Raspberry Pin 1 (3.3V) +5V
 Pin 1 (CH0) SW
 Pin 2 (CH1) VRx
 Pin 3 (CH2) VRy

 

Testen

In meinem Skript benutze ich die SpiDev Bibliothek. Falls du diese noch nicht installiert hast, solltest du das tun, bevor du den Joystick testest.

Wie bereits erwähnt wird durch den MCP3008 ein Wert zwischen 0 und 1023 zurückgegeben. Ist der Joystick im „Ruhezustand“, also mittig, wird ungefähr 512 zurückgegeben. Am einen Ende einer Achse wird 0 zurückgegeben, am anderen 1023 (an welchem Ende ist abhängig, wie man auf den Joystick schaut).

Du kannst die Testdatei runterladen

wget http://www.tutorials-raspberrypi.de/wp-content/uploads/scripts/joystick_test.py

oder selbst erstellen:

Anschließend kannst du mittels

sudo python joystick_test.py

das Skript starten und den Joystick bewegen. Du wirst feststellen, dass 1024 Schritte höchstwahrscheinlich zu viel sind, da so eine Genauigkeit mit dem Finger auf einem kleinen Joystick kaum erreicht werden kann. Daher würde ich dazu raten in einer Anwendung Bereiche festzulegen und nicht auf einzelne Werte (abgesehen von 0 / 1023) zu testen.



, , , , , ,


6 Kommentare

  1. Wilhelm sagt:

    Wenn ich das Tutorial für „MCP3008 Analog-Digital Wandler“ anklicke lande ich hier beim Joysticktutorial. Kannst Du bitte den Link reparieren um auch dieses Tutorial einsehbar zu machen 🙂
    Vielen Dank

  2. Johannes sagt:

    Hey Felix,
    beim Versuch, SpiDev zu installieren, fragt er beim letzten Schritt immer nach einer Readme und einem Changelog, und bricht dementsprechend den Prozess ab. Also hab ich die Zeile einfach mal auskommentiert, danach lief der Prozess durch, aber wenn ich dann das Joystick Script starten will, kann er die SpiDev nicht importieren, weil er sie nicht findet…
    Hast du ne Idee, was das sein könnte?
    Danke schonmal, und deine Seite ist echt großartig 😀
    Johannes

    • Felix sagt:

      Das klingt danach, dass SpiDev nicht richtig installiert ist. Kannst du mal die genaue Fehlermeldung posten?

    • Johannes sagt:

      Hey Felix, danke für die schnelle Antwort, hab ich gar nicht gesehen.
      Wenn ich das Script ausführen will, gibt er folgenden Fehler aus:

      Traceback (most recent call last):
      File „joystick.py“, line 3, in
      import spidev
      ImportError: No module named ’spidev‘

      also ich vermute mal, dass bei der Installation ein Fehler war, aber ich weis nicht, wie ich es lösen könnte.

      Danke für die Hilfe, Johannes

    • Felix sagt:

      Hast du all Schritte aus dem Handbuch ausgeführt? Kamen da Fehlermeldungen? SpiDev muss natürlich korrekt installiert sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!