Arduino Nano - Joystick

Deze tutorial legt uit hoe u een joystick gebruikt met de Arduino Nano. We leren in detail:

Arduino Nano joystick

Hardware Vereist

1×Official Arduino Nano
1×Alternatief: DIYables ATMEGA328P Nano Development Board
1×USB A naar Mini-B USB kabel
1×Joystick
1×Jumper Draden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Breakout Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Stromsplitter voor Arduino Nano

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over 2-assige Joystick

U bent waarschijnlijk een joystick tegengekomen op verschillende plekken, zoals een gamecontroller, speelgoedbesturing of zelfs een groot apparaat zoals het bedieningspaneel van een graafmachine.

De joystick bestaat uit twee potentiometers die loodrecht op elkaar staan en een drukknop. Daardoor levert hij de volgende outputs:

  • Een analoge waarde van 0 tot 1023 (uitgelezen door Arduino) die overeenkomt met de horizontale positie (bekend als de X-coördinaat)
  • Een analoge waarde van 0 tot 1023 (uitgelezen door Arduino) die overeenkomt met de verticale positie (bekend als de Y-coördinaat)
  • Een digitale waarde van de drukknop (HIGH of LOW)

Daarom:

  • Twee analoge waarden kunnen gecombineerd worden om 2D-coördinaten te creëren.
  • Het midden van het 2D-coördinatenstelsel is de rustpositie van de joystick.
  • Om de richting van de joystick te bepalen, kunt u testcode uitvoeren die deze informatie in de volgende sectie toont.

Sommige toepassingen gebruiken alle drie de outputs, andere gebruiken er slechts een deel van.

De Joystick Pinout

Een joystick heeft 5 pinnen:

  • GND pin: Moet worden aangesloten op GND (0V).
  • VCC pin: Moet worden aangesloten op VCC (5V).
  • VRX pin: Levert een analoge waarde die correspondeert met de horizontale positie (X-coördinaat).
  • VRY pin: Levert een analoge waarde die correspondeert met de verticale positie (Y-coördinaat).
  • SW pin: Dit is de output van de drukknop in de joystick. Normaal gesproken is deze open. Als u een pull-up weerstand gebruikt op deze pin, is de SW pin HIGH als hij niet is ingedrukt en LOW als hij wel is ingedrukt.
joystick pinout

Hoe Het Werkt

  • Wanneer u de joystickknop naar links of rechts beweegt, varieert de spanning op de VRX pin van 0 tot 5V, met 0V links en 5V rechts, wat resulteert in een analoge uitlezing tussen 0 en 1023 op de Arduino.
  • Wanneer u de joystickknop omhoog of omlaag beweegt, varieert de spanning op de VRY pin van 0 tot 5V, met 0V boven en 5V onder, wat resulteert in een analoge uitlezing tussen 0 en 1023 op de Arduino.
  • Wanneer u de joystickknop in een willekeurige richting beweegt, verandert de spanning op zowel VRX als VRY pins evenredig met de projectie van de positie op elke as.
  • Wanneer u de joystickknop indrukt (van boven naar beneden duwt), wordt de drukknop in de joystick gesloten. Met een pull-up weerstand aan de SW pin verandert de uitgang van deze pin van 5V (HIGH) naar 0V (LOW), wat zich vertaalt in een digitale input op de Arduino van HIGH naar LOW.

Aansluitschema

Arduino Nano Joystick wiring diagram

This image is created using Fritzing. Click to enlarge image

Hoe te Programmeren voor Joystick

De joystick bestaat uit twee onderdelen: analoog (X, Y as) en digitaal (drukknop):

  • Voor de analoge delen (X, Y as) leest u simpelweg de waarde uit de analoge ingangen met de analogRead() functie.
int value_X = analogRead(A6); int value_Y = analogRead(A7);
  • Voor het digitale deel (drukknop): dit is een knop. De eenvoudigste en meest handige manier om hem te gebruiken is met de ezButton library. Deze bibliotheek ondersteunt debounce voor knoppen en heeft een interne pull-up weerstand. Meer informatie over knoppen vindt u in de Arduino Nano - Button tutorial. De code hiervoor wordt in de volgende sectie van deze tutorial gepresenteerd.

Nadat u de waarden van de analoge pinnen hebt verkregen, kunt u deze omzetten in aansturingswaarden. De volgende sectie geeft voorbeeldcodes hiervoor.

Arduino Nano Code

Deze sectie geeft voorbeeldcodes voor de Arduino Nano voor:

  • Voorbeeldcode: analoge waarden uitlezen van de joystick
  • Voorbeeldcode: analoge waarden en knopstatus uitlezen van de joystick
  • Voorbeeldcode: analoge waarde omzetten naar MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN commando’s
  • Voorbeeldcode: analoge waardes omzetten naar hoeken om twee servo motoren aan te sturen (bijv. bij een pan-tilt camera)

Leest analoge waarden van joystick

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(value_X); Serial.print(", y = "); Serial.println(value_Y); delay(200); }

Snelle stappen

  • Kopieer de code en open deze in de Arduino IDE.
  • Klik op de Upload knop om de code naar de Arduino Nano te sturen.
  • Beweeg de joystickknop helemaal en draai deze in een cirkelvormige beweging (met of tegen de klok in).
  • Bekijk het resultaat op de Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Let tijdens het draaien van de joystickknop goed op de Serial Monitor.

Als de X-waarde 0 is, noteer dan of onthoud dat de huidige positie links is, en de tegenovergestelde positie is rechts.

Als de Y-waarde 0 is, noteer dan of onthoud dat de huidige positie boven is, en de tegenovergestelde positie is onder.

Leest analoge waarden en knopstatus van joystick

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-joystick */ #include <ezButton.h> #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin #define SW_PIN 2 // The Arduino Nano pin connected to SW pin ezButton button(SW_PIN); int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis int bValue = 0; // The variable to store value of the button void setup() { Serial.begin(9600) ; button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = 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(value_X); Serial.print(", y = "); Serial.print(value_Y); Serial.print(" : button = "); Serial.println(bValue); }

Snelle stappen

  • Klik op het Libraries icoon in de linkerbalk van de Arduino IDE.
  • Zoek naar “ezButton” en selecteer de button library van ArduinoGetStarted.com.
  • Klik daarna op de Install knop om de ezButton library te installeren.
Arduino Nano button library
  • Kopieer de code en open deze met de Arduino IDE.
  • Klik op de Upload knop om de code naar de Arduino Nano te sturen.
  • Beweeg de joystickknop naar links, rechts, boven en onder.
  • Druk de joystickknop van boven in.
  • Bekijk de resultaten op de Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Zet analoge waarde om naar MOVE LEFT/RIGHT/UP/DOWN commando’s

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin #define LEFT_THRESHOLD 400 #define RIGHT_THRESHOLD 800 #define UP_THRESHOLD 400 #define DOWN_THRESHOLD 800 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int value_X = 0 ; // The variable to store value of the X axis int value_Y = 0 ; // The variable to store value of the Y axis int command = COMMAND_NO; void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (value_X < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (value_X > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (value_Y < UP_THRESHOLD) command = command | COMMAND_UP; else if (value_Y > 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 } }

Snelle stappen

  • Kopieer de code en open die in de Arduino IDE.
  • Klik op de Upload knop in de IDE om de code naar de Arduino Nano te versturen.
  • Beweeg de joystickknop in alle richtingen met uw duim.
  • Bekijk de resultaten in de Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

Op elk gegeven moment kunnen er geen, één of twee commando’s actief zijn (bijvoorbeeld UP en LEFT tegelijkertijd).

Zet analoge waarden om in hoeken voor aansturing van twee servo motoren

De details vindt u in de tutorial Arduino Nano - Joystick controls Servo Motor.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u stap voor stap door het proces.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!