Arduino Nano ESP32 - Joystick

In diesem Tutorial werden wir lernen, wie man einen Joystick mit dem Arduino Nano ESP32 verwendet. Im Detail werden wir lernen:

Joystick-Pinbelegung

Erforderliche Hardware

1×Arduino Nano ESP32
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Joystick
1×Breadboard
1×Verbindungskabel
1×(Optional) DC-Stromanschluss
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über Joystick-Sensor

Du siehst den Joystick wahrscheinlich irgendwo, zum Beispiel in einem Spielcontroller, in einem Spielzeugcontroller oder sogar in einer großen echten Maschine wie einer Baggersteuerung.

Der Joystick besteht aus zwei Potentiometern, die zueinander gegenüberliegen, und einem Taster. Daher liefert er die folgenden Ausgänge:

  • Ein analoger Wert (von 0 bis 4095), der der horizontalen Position entspricht (X-Koordinate genannt)
  • Ein analoger Wert (von 0 bis 4095), der der vertikalen Position entspricht (Y-Koordinate genannt)
  • Ein digitaler Wert eines Tasters (HIGH oder LOW)

Die Kombination zweier analoger Werte kann zweidimensionale Koordinaten erzeugen, deren Mittelpunktwerte auftreten, wenn der Joystick in der Ruheposition ist. Die reale Richtung der Koordinaten lässt sich einfach identifizieren, wenn Sie einen Testcode ausführen (im nächsten Teil).

Einige Anwendungen verwenden alle drei Ausgänge. Einige Anwendungen verwenden einige der drei Ausgänge.

Pinbelegung

Ein Joystick hat fünf Pins:

  • GND-Pin: muss mit GND (0 V) verbunden werden
  • VCC-Pin: muss mit VCC (3,3 V) verbunden werden
  • VRX-Pin: liefert einen analogen Wert, der der horizontalen Position entspricht (X-Koordinate genannt)
  • VRY-Pin: liefert einen analogen Wert, der der vertikalen Position entspricht (Y-Koordinate genannt)
  • SW-Pin: ist der Ausgang des Druckknopfs im Joystick. Er ist normalerweise offen. Wenn wir an diesem Pin einen Pull-up-Widerstand verwenden, hat der SW-Pin einen HIGH-Pegel, wenn er nicht gedrückt ist, und einen LOW-Pegel, wenn er gedrückt ist
Joystick-Pinbelegung

Wie es funktioniert

  • Wenn Sie den Joystick nach links/rechts drücken, ändert sich die Spannung am VRX-Pin. Der Spannungsbereich reicht von 0 bis 3,3 V (0 links, 3,3 V rechts). Der Spannungswert ist proportional zur Position des Joysticks ⇒ Der Messwert am analogen Pin des ESP32 liegt im Bereich von 0 bis 4095.
  • Wenn Sie den Joystick nach oben/unten drücken, ändert sich die Spannung am VRY-Pin. Der Spannungsbereich reicht von 0 bis 3,3 V (0 oben, 3,3 V unten). Der Spannungswert ist proportional zur Position des Joysticks ⇒ Der Messwert am analogen Pin des ESP32 liegt im Bereich von 0 bis 4095.
  • Wenn Sie den Joystick in eine beliebige Richtung drücken, ändern sich die Spannungen an VRX- und VRY-Pins proportional zur Projektion der Position auf jeder Achse.
  • Wenn Sie den Joystick von oben nach unten drücken, schließt sich der Drucktaster im Inneren des Joysticks. Wenn wir am SW-Pin einen Pull-up-Widerstand verwenden, ändert sich der Pegel am SW-Pin von 3,3 V zu 0 V ⇒ Der Messwert am digitalen Pin des ESP32 ändert sich von HIGH zu LOW.

Verdrahtungsdiagramm

Arduino Nano ESP32 Joystick-Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wie man Joysticks programmiert

Der Joystick besteht aus zwei Teilen: analog (X- und Y-Achsen) und digital (Druckknopf).

  • Für die analogen Teile (X- und Y-Achsen) muss lediglich der Wert vom analogen Eingangspin mithilfe der Funktion analogRead() gelesen werden.
int valueX = analogRead(A0); int valueY = analogRead(A1);
  • Für den digitalen Teil (Pushbutton): Es handelt sich um einen Knopf. Der einfachste und bequemste Weg ist die Verwendung der ezButton-Bibliothek. Diese Bibliothek unterstützt die Entprellung von Tastern und aktiviert außerdem einen internen Pull-Up-Widerstand. Weitere Informationen zum Button finden Sie im Arduino Nano ESP32 - Button-Tutorial. Der Code wird im nächsten Abschnitt dieses Tutorials vorgestellt.

Nachdem wir die Werte von den Analogeingängen gelesen haben, müssen wir sie möglicherweise in steuerbare Werte umwandeln. Der nächste Teil wird dazu Beispielcodes bereitstellen.

Arduino Nano ESP32 Code

Dieser Abschnitt wird die folgenden Arduino Nano ESP32-Beispielcodes bereitstellen:

  • Beispielcode: liest analoge Werte vom Joystick
  • Beispielcode: liest den Knopfzustand vom Joystick
  • Beispielcode: wandelt analoge Werte in die Befehle MOVE_LEFT, MOVE_RIGHT, MOVE_UP und MOVE_DOWN um
  • Beispielcode: wandelt analoge Werte in Winkel um, um zwei Servomotoren zu steuern (z. B. in Pan-Tilt-Kamera)

Liest analoge Werte vom Joystick

/* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-nano-esp32/arduino-nano-esp32-joystick */ #define VRX_PIN A0 // The Arduino Nano ESP32 pin connected to VRX pin #define VRY_PIN A1 // The Arduino Nano ESP32 pin connected to VRY pin int valueX = 0; // to store the X-axis value int valueY = 0; // to store the Y-axis value void setup() { Serial.begin(9600); // Set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } void loop() { // read X and Y analog values valueX = analogRead(VRX_PIN); valueY = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(valueX); Serial.print(", y = "); Serial.println(valueY); delay(200); }

Schnelle Schritte

Um mit dem Arduino Nano ESP32 zu beginnen, befolgen Sie diese Schritte:

  • Wenn Sie neu bei Arduino Nano ESP32 sind, lesen Sie das Tutorial darüber, wie Sie die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichten: wie man die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichtet.
  • Verdrahten Sie die Bauteile entsprechend dem bereitgestellten Diagramm.
  • Schließen Sie das Arduino Nano ESP32-Board über ein USB-Kabel an Ihren Computer an.
  • Öffnen Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das Arduino Nano ESP32-Board und den entsprechenden COM-Port aus.
  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
  • Klicken Sie auf die Upload-Schaltfläche in der Arduino IDE, um den Code auf das Arduino Nano ESP32 hochzuladen.
  • Drücken Sie den Joystick maximal bis zum Anschlag und drehen Sie ihn anschließend in einer Kreisbewegung (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
  • Prüfen Sie das Ergebnis im seriellen Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Während du den Daumen am Joystick drehst, beobachte weiterhin den Serial Monitor
    • Wenn der X-Wert 0 ist, markiere oder merke die aktuelle Position als Linksrichtung – die entgegengesetzte Richtung ist rechts
    • Wenn der Y-Wert 0 ist, markiere oder merke die aktuelle Position als Richtung nach oben – die entgegengesetzte Richtung davon ist Richtung nach unten

    Sie haben möglicherweise bemerkt, dass der analoge Wert nicht proportional zur Joystick-Bewegung ist. Dieses Problem liegt nicht am Joystick selbst, sondern am ADC des Arduino Nano ESP32. Am Ende dieses Tutorials wird erklärt, warum das passiert.

    Liest analoge Werte und den Knopfzustand eines Joysticks aus

    /* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-nano-esp32/arduino-nano-esp32-joystick */ #include <ezButton.h> #define VRX_PIN A0 // The Arduino Nano ESP32 pin connected to VRX pin #define VRY_PIN A1 // The Arduino Nano ESP32 pin connected to VRY pin #define SW_PIN D2 // The Arduino Nano ESP32 pin connected to SW pin ezButton button(SW_PIN); int valueX = 0; // to store the X-axis value int valueY = 0; // to store the Y-axis value int bValue = 0; // To store value of the button void setup() { Serial.begin(9600); // Set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read X and Y analog values valueX = analogRead(VRX_PIN); valueY = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(valueX); Serial.print(", y = "); Serial.print(valueY); Serial.print(" : button = "); Serial.println(bValue); }

    Schnelle Schritte

    • Öffne den Bibliotheks-Manager, indem du auf das Bibliotheks-Manager-Symbol in der linken Navigationsleiste der Arduino IDE klickst
    • Suche „ezButton“, dann finde die Button-Bibliothek von ArduinoGetStarted.com
    • Klicke auf die Installieren-Schaltfläche, um die ezButton-Bibliothek zu installieren.
    Arduino Nano ESP32 Button-Bibliothek
    • Kopiere den obigen Code und öffne ihn mit der Arduino IDE
    • Klicke auf die Upload-Schaltfläche in der Arduino IDE, um den Code auf den Arduino Nano ESP32 hochzuladen
    • Drücke den Joystick-Knopf nach links/rechts/oben/unten
    • Drücke den Joystick-Knopf von oben
    • Schau dir das Ergebnis im Serial Monitor an.
    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Konvertiert einen analogen Wert in Bewegungsbefehle nach links/rechts/oben/unten

    /* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-nano-esp32/arduino-nano-esp32-joystick */ #define VRX_PIN A0 // The Arduino Nano ESP32 pin connected to VRX pin #define VRY_PIN A1 // The Arduino Nano ESP32 pin connected to VRY pin #define LEFT_THRESHOLD 1000 #define RIGHT_THRESHOLD 3000 #define UP_THRESHOLD 1000 #define DOWN_THRESHOLD 3000 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int valueX = 0 ; // to store the X-axis value int valueY = 0 ; // to store the Y-axis value int command = COMMAND_NO; void setup() { Serial.begin(9600); // Set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } void loop() { // read X and Y analog values valueX = analogRead(VRX_PIN); valueY = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (valueX < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (valueX > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (valueY < UP_THRESHOLD) command = command | COMMAND_UP; else if (valueY > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS // print command to serial and process command if (command & COMMAND_LEFT) { Serial.println("COMMAND LEFT"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

    Schnelle Schritte

    • Kopiere den obigen Code und öffne ihn mit der Arduino IDE.
    • Klicke auf die Upload-Schaltfläche in der Arduino IDE, um den Code auf den Arduino Nano ESP32 hochzuladen.
    • Bewege den Joystick nach links/rechts/oben/unten oder in eine beliebige Richtung.
    • Schau dir das Ergebnis im Serial Monitor an.
    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    ※ Notiz:

    Zu einem Zeitpunkt kann es keinen Befehl, einen Befehl oder zwei Befehle geben (z. B. UP und LEFT gleichzeitig)

    Konvertiert analoge Werte in Winkel, um zwei Servomotoren zu steuern

    Die Details werden im Tutorial Arduino Nano ESP32 - Joystick-Steuerung des Servo-Motors vorgestellt.

    ※ Notiz:

    Dieses Tutorial verwendet die Funktion analogRead(), um Werte von einem ADC (Analog-Digital-Wandler) zu lesen, der an einen Sensor oder eine Komponente angeschlossen ist. Der ADC des Arduino Nano ESP32 eignet sich für Projekte, die keine hohe Genauigkeit erfordern. Für Projekte, die präzise Messungen erfordern, beachten Sie Folgendes:

    • Der ADC des Arduino Nano ESP32 ist nicht perfekt genau und muss möglicherweise kalibriert werden, um korrekte Ergebnisse zu liefern. Jedes Arduino Nano ESP32-Board kann sich leicht unterscheiden, daher ist für jedes einzelne Board eine Kalibrierung notwendig.
    • Die Kalibrierung kann herausfordernd sein, insbesondere für Anfänger, und liefert möglicherweise nicht immer die exakten Ergebnisse, die Sie wünschen.

    Für Projekte mit hoher Präzision ziehen Sie in Erwägung, einen externen ADC (z. B. ADS1115) mit dem Arduino Nano ESP32 zu verwenden oder einen anderen Arduino zu nutzen, wie zum Beispiel den Arduino Uno R4 WiFi, der über einen zuverlässigeren ADC verfügt. Wenn Sie den ADC des Arduino Nano ESP32 dennoch kalibrieren möchten, lesen Sie den ESP32 ADC Calibration Driver.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!