Joystick

  • Inhalte: Potentiometer , Taster , Joystick , Active-Low-Schaltung
  • Niveau: Fortgeschritten

Joysticks werden bekanntermaßen für Spielecontroller oder auch zur Steuerung von Maschinen genutzt. Mit dem Calliope lassen sich einfache Versionen davon nachbauen.

Joystick.
Joystick.

Ein Joystick besteht im Wesentlichen aus zwei Potentiometern, die über einen gemeinsamen Hebel variiert werden können. Wie im Schaltbild zu sehen, teilen sich beide den 5V- und GND-Anschluss; der mittlere Anschluss muss natürlich jeweils einzeln ausgelesen werden. Zusätzlich wird durch Drücken des Joysticks ein angebrachter Taster gedrückt, dessen Status am SW-Pin ausgelesen werden kann (sw von engl. “switch”). Da das elektrische Potential am SW-Pin normalerweise schwankt, sollte ein Pullup-Widerstand angebracht werden (als externer Widerstand oder als interner Widerstand - im Folgenden wird der interne Pullup-Widerstand durch entsprechende Programmierung aktiviert).

Verbindung mit der Pinleiste

Schaltung

Die Signalkabel der Potentiometer(VRx und VRy, in der Schaltskizze grün und blau eingezeichnet) müssen mit einem Pin verbunden werden, der ein analoges Signal lesen kann. Dafür kommen folgende Pins in Frage: P0, P1, P2, C4, C10, C16, C18. Achtung: Die Pins können schon an anderer Stelle verwendet worden sein, z. B. über die Ringpads (P0, P1, P2) oder den Grove-Anschluss A1 (betrifft C16).

Das Signalkabel des Tasters (SW, in der Schaltskizze orange eingezeichnet) muss mit einem Pin verbunden werden, der digital lesen kann. Das können alle Pins.

Weitere Informationen finden sich in der Pin-Übersicht des Calliope.

Programmierung

Zum Auslesen des Joysticks lässt man sich aus der Kategorie "Pins" die analogen Werte bzw. den digitalen Wert der entsprechenden Pins (hier P0, P1, P2) anzeigen.

Für das Auslesen der Werte bietet es sich an, den analogen Wert über die serielle Schnittstelle (USB-Kabel) an den Computer schicken zu lassen und dort visualisieren zu lassen. Der Befehl dazu findet sich in der Kategorie "Seriell". Nach dem Übertragen des Programms kann man im linken Fensterbereich auf "Daten anzeigen Calliope mini" auswählen und bekommt die unten abgebildete Ansicht.

mc-joystick-seriell-ausgeben

mc-serieller-monitor

Zum Auslesen des Potentiometers muss man zunächst die Konfiguration der Signalpins der Potentiometer (VRx und VRy) als analoger Sensor vornehmen. Der SW-Pin des Tasters wird als digitaler Sensor konfiguriert und zusätzlich wird hier der Pullup-Widerstand aktiviert.

orl-conf-joystick
Konfiguration der Pins des Joysticks.

Bei der Konfiguration als analoger Sensor stehen nicht alle oben aufgezählten Pins zur Auswahl. Dies ist ein Bug im Open Roberta Lab (Stand: 01.04.26). Insbesondere ist auch der Pin P0 nicht als analoger Sensor auswählbar, weshalb anders als in oben dargestellten Schaltskizze der Pin P1 als analoger Sensor ausgewählt wird. Stattdessen wird Pin P0 als digitaler Sensor für den Taster konfiguriert. Dementsprechend muss auch die Verkabelung geändert werden.

Für das Auslesen der Werte bietet es sich an, die Werte über die serielle Schnittstelle (USB-Kabel) an den Computer schicken zu lassen, um den Verlauf besser nachzuvollziehen. Nach dem Übertragen des Programms kann man im Open Roberta Connector die Verbindung mit dem Calliope herstellen und den Seriellen Monitor starten (siehe Abbildung). Um die Werte zu visualisieren, kann man sie optional in eine Tabellenkalkulation kopieren und dort ein Diagramm erstellen.

orl-joystick-auslesen
Senden der Werte über die serielle Schnittstelle (USB-Kabel) an den Computer.
serial-monitor-starten
Öffnen des seriellen Monitors im Open Roberta Connector.

Zum Auslesen der Potentiometer und des Tasters lässt man sich aus die analogen Werte bzw. digitalen Werte des entsprechenden Pins anzeigen. Dabei bietet es sich an, die Wert über die serielle Schnittstelle (USB-Kabel) an den Computer schicken zu lassen, um den Verlauf besser nachzuvollziehen. Nach dem Übertragen des Programms kann man direkt im Python Editor den Seriellen Monitor öffnen. Um die Werte zu visualisieren, kann man sie optional in eine Tabellenkalkulation kopieren (alles markieren und STRG + UMSCHALT + C drücken) und dort ein Diagramm erstellen.

# Imports go at the top
from calliopemini import *

# Pin 1 mit einem Pullup-Widerstand versehen
# dadurch ist der Zustand im Fall "nicht gedrückt" 1 (HIGH)
pin1.set_pull(pin1.PULL_UP)

# Code in a 'while True:' loop repeats forever
while True:
    # Pin P0 analog auslesen, Ergebnis in String umwandeln und Ausgabe auf dem seriellen Monitor
    print("x: " + str(pin0.read_analog()) )

    # Pin P2 analog auslesen, Ergebnis in String umwandeln und Ausgabe auf dem seriellen Monitor
    print("y: " + str(pin2.read_analog()) )  

    # Pin P1 digital auslesen, Ergebnis in String umwandeln und Ausgabe auf dem seriellen Monitor
    print("sw: " + str(pin1.read_digital()) ) 
    print("--------------------")
    sleep(500)

Ausgabe des Analogwerts des Potentiometers auf dem seriellen Monitor.

Aufgaben

Erste Experimente

  1. Bewege den Hebel des Joystick-Moduls und beobachte, wie sich dabei die Potentiometer an den Seiten mitbewegen.
  2. Schließe das Joystick-Modul wie oben beschrieben an den Calliope an. Lies die Werte der Potentiometer aus, während du sie bewegst. Notiere, welche Bewegungsrichtung die X-Richtung und welche die Y-Richtung darstellt. Notiere außerdem, welches der beiden Potentiometer (ggü. von Taster oder ggü. der Pins) für die X-Richtung bzw. Y-Richtung verantwortlich ist.
  3. Mit dem Pullup-Widerstand wird eine sogenannte Active-Low Schaltung aufgebaut. Teste die Funktionsweise des Tasters und beschreibe, was mit dem Begriff Active-Low gemeint ist.

Joystick-Steuerung für RGB-LEDs

Entwickle eine Steuerung der drei RGB-LEDs des Calliope mit Hilfe des Joysticks.

Joystick-Motor-Steuerung

Steuere mit dem Joystick-Modul einen Motor!