Joystick-Modul

../_images/19_joystick.png

Einführung

Ein Joystick-Modul ist ein Gerät, das die Bewegungen eines Knüppels in zwei Richtungen messen kann: horizontal (X-Achse) und vertikal (Y-Achse). Es eignet sich zur Steuerung verschiedenster Anwendungen wie Spiele, Roboter, Kameras und mehr.

Funktionsprinzip

Ein Joystick funktioniert auf Basis der Widerstandsänderung zweier Potentiometer (üblicherweise 10 Kiloohm). Durch Veränderung des Widerstands in X- und Y-Richtung empfängt das Arduino Board variierende Spannungen, die als X- und Y-Koordinaten interpretiert werden. Der Prozessor benötigt eine ADC-Einheit, um die analogen Werte des Joysticks in digitale Werte umzuwandeln und die erforderliche Verarbeitung durchzuführen.

Arduino-Boards verfügen über sechs 10-Bit-ADC-Kanäle, was bedeutet, dass die Referenzspannung (5 Volt) des Arduino in 1024 Segmente unterteilt ist. Bewegt sich der Joystick entlang der X-Achse, steigt der ADC-Wert von 0 auf 1023, wobei der Mittelwert bei 512 liegt. Das untenstehende Bild zeigt den ungefähren ADC-Wert in Abhängigkeit von der Position des Joysticks.

../_images/19_joystick_xy.png

Anwendungsbeispiele

Hardware-Komponenten

  • Arduino Uno R4 oder R3 Board * 1

  • Joystick-Modul * 1

  • Jumperkabel

Schaltungsaufbau

../_images/19_joystick_module_circuit.png

Programmcode



Code-Erklärung

  1. Festlegung der Anschlüsse für den Joystick. Hier definieren wir, an welche analogen Pins die X- und Y-Achsen des Joysticks angeschlossen sind.

    const int xPin = A0;
    const int yPin = A1;
    
  2. Initialisierung in der setup()-Funktion. In diesem Abschnitt wird die serielle Kommunikation eingerichtet, die es uns ermöglicht, Nachrichten von und zum Arduino über den seriellen Monitor zu senden und zu empfangen.

    void setup() {
      Serial.begin(9600);
    }
    
  3. Auslesen der Joystick-Werte in der loop()-Funktion. Kontinuierlich liest das Arduino die X- und Y-Werte vom Joystick aus und gibt sie auf dem seriellen Monitor aus. Zwischen den einzelnen Ausgaben gibt es eine kurze Verzögerung, um die Lesungen besser lesbar zu machen und den seriellen Monitor nicht zu überlasten.

    void loop() {
      Serial.print("X: ");
      Serial.print(analogRead(xPin));
      Serial.print(" | Y: ");
      Serial.println(analogRead(yPin));
      delay(50);
    }
    

Weitere Ideen

  • Die Joystick-Werte zur Steuerung eines Servomotors verwenden, der auf die Bewegungen des Joysticks reagiert.