Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Arduino Joystick Shield Basics: Programmierung leicht gemacht für Anfänger

Posted on 14. Februar 20244. Februar 2024 by Stefan Draeger

In diesem Beitrag möchte ich dir das Arduino Joystick Shield vorstellen und zeigen, wie dieses in der Arduino IDE programmiert wird. Du kannst mit diesem einfachen Shield einen Roboterarm oder auch ein kleines Fahrzeug über Bluetooth steuern.

Arduino Joystick Shield Basics: Programmierung leicht gemacht für Anfänger
Dieses Video auf YouTube ansehen.

Das Joystick Shield verfügt über zwei analoge Joysticks, eine separate Schnittstelle für ein Bluetoothmodul sowie eine Stiftleiste für freie digitale Pins vom Mikrocontroller. Der aktive Betrieb des Moduls wird dir über eine 5 mm LED angezeigt.

Joystick Shield für den Arduino UNO R3
Joystick Shield für den Arduino UNO R3
Schnittstellen am Arduino Joystick Shield
Schnittstellen am Arduino Joystick Shield

Inhaltsverzeichnis

  • Bezug des Arduino Joystick Shield
  • Aufbau des Joystick Shields
    • Pinout des Shields
  • Anschluss von Servomotoren an das Joystick Shield
  • Programmieren in der Arduino IDE
    • Auslesen der Werte der analogen Joysticks
  • Steuern eines Servomotors mit dem Joystick Shield
  • Fazit und Ausblick

Bezug des Arduino Joystick Shield

Das hier vorgestellte Shield bekommst du besonders günstig bei aliexpress.com. Auf ebay.de bekommst du andere Shields welche über einen Joystick und ein Tastenkreuz verfügen und ähnlich funktionieren.

Aufbau des Joystick Shields

Das Joystick Shield verfügt wie bereits erwähnt über:

  • zwei analoge Joysticks,
  • eine rote, 5 mm LED,
  • eine separate Schnittstelle für Bluetoothmodule vom Typ HC-05 & HC-06, sowie
  • eine Stiftleiste für Servomotoren
Buchsenleiste für Bluetoothmodule
Buchsenleiste für Bluetoothmodule
Stiftleiste für den Anschluss von Servomotoren
Stiftleiste für den Anschluss von Servomotoren

Das Shield lässt sich auf die bestehenden Buchsenleisten der Arduinos stecken (ausgenommen natürlich dem Nano V3 und den Minis). Beim Arduino Mega 2560 R3 musst du auf die Buchsenbeschriftungen achten, denn dieser hat deutlich mehr Pins zur Verfügung.

Arduino UNO R3 mit Joystick Shield
Arduino UNO R3 mit Joystick Shield
Arduino Mega 2560 R3 mit Joystick Shield
Arduino Mega 2560 R3 mit Joystick Shield

Pinout des Shields

Das Joystick Shield ist wie in der Grafik zu sehen aufgebaut.

Aufbau des Joystick Shields für den Arduino
Aufbau des Joystick Shields für den Arduino
KomponentePin am Arduino
LEDdigitaler Pin D3
Joystick 1 (links)
Xanalog A0
Yanalog A1
Tasterdigitaler Pin D2
Joystick 2 (rechts)
Xanalog A3
Yanalog A2
Tasterdigitaler Pin D4

Auf meinem Shield ist der Taster vom linken Joystick nicht mit dem Shield verbunden.

Anschluss von Servomotoren an das Joystick Shield

Das Shield hat, wie du in der Grafik siehst, 6 paar Stiftenleisten für Servomotoren. An diese kannst du theoretisch den Servomotor direkt anschließen, denn diese sind korrekt dafür ausgelegt.

Joystick Shield mit Servomotoren
Joystick Shield mit Servomotoren

Für die kleinen Servomotoren ist dieses auch voll okay.

Jedoch haben die großen Servomotoren deutlich mehr Kraft und ziehen dadurch auch mehr Leistung, das kann dieses Shield nicht leisten und dein Mikrocontroller würde einen Schaden nehmen!

Für den großen Servomotor vom Typ MG996R benötigst du eine zusätzliche Stromversorgung mit min. 2A bei 5V. Also bevor du deinen Servomotor an dieses Shield anschließt, prüfe zunächst in den technischen Daten des Servomotors wie viel Last / Strom dieser zieht.

Programmieren in der Arduino IDE

Einen Mikrocontroller der Arduino-Familie kannst du am einfachsten in der Arduino IDE programmieren. Diese bringt die meisten Features gleich mit und wenn dir doch eins fehlt, kannst du dieses über die internen Board- /Bibliotheksverwalter nachinstallieren.

Bevor wir jedoch mit der Programmierung beginnen und das Shield auf den Mikrocontroller stecken, spielen wir ein leeres Programm auf den Mikrocontroller auf. Mit diesem leeren Programm stellen wir sicher, dass keine Pins auf HIGH gesetzt werden, welche ggf. das Modul beschädigen kann.

Auslesen der Werte der analogen Joysticks

Bevor wir etwas steuern können, müssen wir erst einmal die Joysticks auslesen und die Werte speichern. Das nachfolgende kleine Programm dient uns auch später als Grundgerüst.

//Koordinaten des linken Joysticks
#define joystick1X_Pin A0 //X
#define joystick1Y_Pin A1 //Y
#define joystick1Button_Pin 4 //Taster
//Koordinaten des rechten Joysticks
#define joystick2X_Pin A3 //X
#define joystick2Y_Pin A2 //Y
#define joystick2Button_Pin 2 //Taster

//rote, 5mm LED am digitalen Pin D3
//angeschlossen
#define led 3

//Felder zum speichern der letzten Werte
//linker Joystick
int lastJ1X = -1; //X
int lastJ1Y = -1; //Y
//rechter Joystick
int lastJ2X = -1; //X
int lastJ2Y = -1; //Y

void setup() {
  //begin der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);

  //Pins der Taster an den Joysticks
  //als Ausgang definieren, zusätzlich
  //werden diese Pins über den internen 10 kOhm
  //Widerstand umgeleitet.
  pinMode(joystick1Button_Pin, INPUT_PULLUP);
  pinMode(joystick2Button_Pin, INPUT_PULLUP);
  //Pin der LED als Ausgang definieren
  pinMode(led, OUTPUT);
}

//Funktion um die Werte eines Joysticks auszugeben.
void printJoyStickValues(String joystick, int valueX, int valueY) {
  Serial.print("Joystick :" + joystick);
  //lesen der X-Position und umwandeln in ein String
  Serial.print(" X: " + String(valueX, DEC));
  Serial.print(", ");
  //lesen der Y-Position und umwandeln in ein String
  Serial.println("Y: " + String(valueY, DEC));
}

void loop() {
  //lesen der aktuellen Position des linken Joysticks
  int joyStick1X = analogRead(joystick1X_Pin);
  int joyStick1Y = analogRead(joystick1Y_Pin);

  //Wenn die gelesenen Werte sich von den zuvor gespeicherten
  //Werten unterscheiden, dann...
  if (joyStick1X != lastJ1X || joyStick1Y != lastJ1Y) {
    lastJ1X = joyStick1X;
    lastJ1Y = joyStick1Y;
    printJoyStickValues("links", joyStick1X, joyStick1Y);
  }

  //lesen der aktuellen Position des rechten Joysticks
  int joyStick2X = analogRead(joystick2X_Pin);
  int joyStick2Y = analogRead(joystick2Y_Pin);

  //Wenn die gelesenen Werte sich von den zuvor gespeicherten
  //Werten unterscheiden, dann...
  if (joyStick2X != lastJ2X || joyStick2Y != lastJ2Y) {
    lastJ2X = joyStick2X;
    lastJ2Y = joyStick2Y;
    printJoyStickValues("rechts", joyStick2X, joyStick2Y);
  } 

  //Wenn der Taster am linken Joystick gedrückt wird, dann...
  if (digitalRead(joystick1Button_Pin) == LOW) {
    Serial.println("Taster Joystick links gedrückt!");
  }

  //Wenn der Taster am rechten Joystick gedrückt wird, dann... 
  if (digitalRead(joystick2Button_Pin) == LOW) {
    Serial.println("Taster Joystick rechts gedrückt!");
  }

  //kleine Pause von 450 ms.
  //Diese wird lediglich benötigt um die Ausgaben im seriellen Monitor
  //der Arduino IDE zu lesen. Im Live betrieb sollte dieser entfernt werden!
  delay(450);
}

Der Code bewirkt, dass die Daten auf der seriellen Schnittstelle ausgegeben werden, jedoch, nur wenn diese sich ändern.

Steuern eines Servomotors mit dem Joystick Shield

Über die bereits gezeigten Stiftleisten kannst du wie erwähnt kleine, einfache Servomotoren anschließen und mit recht wenig Code steuern.

Arduino Joystick Shield mit Servomotor Typ SG90
Arduino Joystick Shield mit Servomotor Typ SG90

Dabei musst du beachten, dass der Joystick sich in der Mittelposition befindet und somit einen ungefähren Wert von 511 liefert.

//Einbinden der Bibliothek 
//zum steuern eines Servomotors.
#include <Servo.h>

//Der Servomotor ist am 
//digitalen Pin D6 angeschlossen.
#define servoPin 6

//Die X Koordinate des linken Joysticks
//ist am analogen Pin A0 angeschlossen.
#define joystickXPin A0

//initialisieren eines Servoobjektes
Servo servo;

void setup() {
  //verbinden des Pins vom Servo zum Objekt
  servo.attach(servoPin);
}

void loop() {
  //auslesen der aktuellen Position der X Koordinate
  //des Joysticks
  int joystickXPos = analogRead(joystickXPin);
  //anlegen einer Variable für den berechneten Wert
  //des Servos
  int servoValue = -1;
  //Der Joystick befindet sich in der Mittelposition,
  //das bedeutet das wir ca. 511 als analogen Wert empfangen.
  if (joystickXPos > 511) {
    //Den Wert der Variable joystickXPos mit dem Gültigkeitsbereich
    // 511 bis 1023 auf die Winkel 90 bis 0 mappen.
    servoValue = map(joystickXPos, 511, 1023, 90, 0);
  } else {
    //Den Wert der Variable joystickXPos mit dem Gültigkeitsbereich
    // 511 bis 0 auf die Winkel 90 bis 180 mappen.
    servoValue = map(joystickXPos, 511, 0, 90, 180);
  }
  //Zuweisen der neuen Position am Servoobjekt
  servo.write(servoValue);
 
}

Damit du den Code nicht abtippen oder kopieren musst, kannst du dir diesen hier als ZIP-Datei herunterladen.

Code – steuern eines Servomotors vom Typ SG90 am Arduino Joystick ShieldHerunterladen

Im nachfolgenden kleinen Video siehst du, dass wenn der linke Joystick nach links bewegt wird, sich das Ruderhorn des Servos ebenso in diese Richtung bewegt und andersherum.

Wenn wir nun diesen Code etwas erweitern, dann können wir einen kleinen Pan-Tilt Bausatz steuern. Dieser Bausatz verfügt über zwei Servomotoren und eine kleine Adapterplatte, wo wir eine Kamera montieren können.

Hier im Bild zusehen der Pan-Tilt Bausatz mit der M5Stack Kamera welche ich dir bereits im Beitrag Kleine Kamera, große Leistung: Vorstellung der ESP32 S3 CAM von M5Stack vorgestellt habe.

Dieser Bausatz hat wie erwähnt zwei Servomotoren, welche wir ebenso an das Joystick Shield anschließen können und mit den beiden Joysticks lässt dieses dich dann super einfach in fast alle Richtungen bewegen.

Code – steuern eines Pan-Tilt Bausatzes mit M5Stack CAM mit dem Arduino Joystick ShieldHerunterladen

Fazit und Ausblick

Ich habe dir nun den Aufbau des Shields gezeigt sowie ein erstes kleines Programm, mit welchen die X/Y Position der Joysticks ausgelesen werden können. Im nächsten Beitrag werde ich dir dann zeigen, wie du mit diesem Shield einen 3DOF Roboterarm steuern kannst.

3DOF Roboterarm / Claw
3DOF Roboterarm / Claw

Ein weiterer Beitrag wird darum gehen, wie du mit diesem Shield ein kleines Fahrzeug mit dem Calliope Mini 3 steuern kannst.

Tinysuperlab MotionKit2 für den Calliope Mini 3
Tinysuperlab MotionKit2 für den Calliope Mini 3

Bleib also dran und erfahre, wie du mit diesem Shield coole Projekte umsetzen kannst.

1 thought on “Arduino Joystick Shield Basics: Programmierung leicht gemacht für Anfänger”

  1. Pingback: Arduino Joystick Shield: Daten per Bluetooth versenden – So geht's! - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}