Arduino - Joystick
In deze handleiding leren we hoe u een joystick gebruikt met Arduino. We behandelen in detail:
- Hoe een joystick werkt
- Hoe u een joystick aansluit op Arduino en programmeert
- Hoe u de waarden van de joystick omzet naar stuurbare waarden zoals XY-coördinaten en motorbewegingen (omhoog/omlaag/links/rechts)

Hardware Benodigd
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Over de Joystick Sensor
U heeft waarschijnlijk een joystick gezien in bijvoorbeeld een gamecontroller, speelgoedcontroller, of zelfs in grote machines zoals een graafmachinebesturing.
De joystick bestaat uit twee potentiometers die loodrecht op elkaar staan en één drukknop. Daarom levert hij de volgende outputs:
- Een analoge waarde (van 0 tot 1023) die overeenkomt met de horizontale positie (X-coördinaat genoemd)
- Een analoge waarde (van 0 tot 1023) die overeenkomt met de verticale positie (Y-coördinaat genoemd)
- Een digitale waarde van een drukknop (HIGH of LOW)
De combinatie van de twee analoge waarden kan 2D-coördinaten creëren waarbij de middenstand de rustpositie aangeeft. De werkelijke richting van de coördinaten is eenvoudig te identificeren bij het uitvoeren van een testcode (in het volgende gedeelte).
Sommige toepassingen gebruiken alle drie de outputs, andere slechts een deel daarvan.
Pinout
Een joystick heeft 5 pennen:
- GND pin: moet worden verbonden met GND (0V)
- VCC pin: moet worden verbonden met VCC (5V)
- VRX pin: geeft een analoge waarde die overeenkomt met de horizontale positie (X-coördinaat)
- VRY pin: geeft een analoge waarde die overeenkomt met de verticale positie (Y-coördinaat)
- SW pin: is de output van de drukknop in de joystick. Deze is normaal open. Als u een pull-up weerstand gebruikt op deze pin, is de SW-pin HIGH wanneer niet ingedrukt en LOW wanneer ingedrukt.

Hoe Werkt Het
- Wanneer u de joystickhendel naar links of rechts duwt, verandert de spanning op de VRX-pin. Het spanningsbereik is van 0 tot 5V (0 aan de linkerkant en 5V aan de rechterkant). De spanning is evenredig met de positie van de hendel ⇒ de uitleeswaarde op de analoge pin van Arduino ligt tussen 0 en 1023
- Wanneer u de joystickhendel naar boven of beneden duwt, verandert de spanning op de VRY-pin. Het spanningsbereik is van 0 tot 5V (0 boven en 5V onder). De spanning is evenredig met de positie van de hendel ⇒ de uitleeswaarde op de analoge pin van Arduino ligt tussen 0 en 1023
- Wanneer u de joystickhendel in elke richting beweegt, veranderen de spanningen op zowel VRX als VRY proportioneel met de projectie van de positie op elke as
- Wanneer u de joystickhendel van boven naar beneden indrukt, sluit de drukknop binnenin de joystick. Als u een pull-up weerstand gebruikt op de SW-pin, verandert de uitgang op SW van 5V naar 0V ⇒ de uitleeswaarde op de digitale pin van Arduino verandert van HIGH naar LOW
Aansluitschema

This image is created using Fritzing. Click to enlarge image
Hoe Te Programmeren Voor Joystick
De joystick bestaat uit twee delen: analoog (X- en Y-as) en digitaal (drukknop)
- Voor het analoge deel (X, Y as) hoeft u alleen maar de waarde van de analoge ingang te lezen met de functie analogRead().
- Voor het digitale deel (drukknop): dit is een knop. De eenvoudigste en handigste manier is het gebruik van de ezButton library. Deze bibliotheek ondersteunt debounce voor knoppen en activeert ook een interne pull-up weerstand. Meer over knoppen vindt u in de Arduino - Button tutorial. De bijbehorende code wordt in de volgende paragraaf van deze handleiding gepresenteerd.
Na het uitlezen van de analoge waarden kan het nodig zijn deze om te zetten naar aanstuurbare waarden. Het volgende deel bevat voorbeeldcodes hiervoor.
Arduino Code
Deze sectie geeft de volgende voorbeelden van Arduino-code:
- Voorbeeldcode: leest analoge waarden van de joystick
- Voorbeeldcode: leest analoge waarden en de knopstatus van de joystick
- Voorbeeldcode: zet analoge waarden om naar MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN commando’s
- Voorbeeldcode: zet analoge waarden om naar hoeken voor aansturing van twee servo motoren (bijvoorbeeld in een pan-tilt camera)
Leest analoge waarden van joystick
Snelstart
- Kopieer bovenstaande code en open deze met de Arduino IDE
- Klik op de knop Upload in de Arduino IDE om de code op de Arduino te laden
- Beweeg de joystickhendel maximaal naar de uiterste positie en draai deze vervolgens in een cirkel (met of tegen de klok in)
- Bekijk het resultaat in de Seriële Monitor
- Houd tijdens het draaien van de joystickhendel de Seriële Monitor in de gaten
- Als de X-waarde 0 is, noteer of onthoud dan deze positie als links ⇒ de tegenovergestelde richting is rechts
- Als de Y-waarde 0 is, noteer of onthoud dan deze positie als boven ⇒ de tegenovergestelde richting is onder
- Ga naar het icoon Libraries in de zijbalk van de Arduino IDE
- Zoek op “ezButton” en vind de button library van ArduinoGetStarted.com
- Klik op de knop Install om de ezButton-bibliotheek te installeren
- Kopieer bovenstaande code en open deze met de Arduino IDE
- Klik op de knop Upload in Arduino IDE om de code in de Arduino te plaatsen
- Druk de joystickhendel naar links/rechts/boven/beneden
- Druk de joystickhendel naar beneden (indrukken knop)
- Bekijk het resultaat in de Seriële Monitor
- Kopieer bovenstaande code en open met Arduino IDE
- Klik op de knop Upload om de code op Arduino te plaatsen
- Beweeg de joystickhendel naar links/rechts/boven/beneden of een willekeurige richting
- Bekijk het resultaat in de Seriële Monitor
Leest analoge waarden en knopstatus van joystick
Snelstart

Zet analoge waarde om naar commando’s MOVE LEFT/RIGHT/UP/DOWN
Snelstart
※ Notiz:
Tegelijkertijd kan er geen, één of twee commando’s actief zijn (bijvoorbeeld UP en LEFT tegelijk).
Zet analoge waarden om naar hoeken voor aansturing van twee servo motoren
De details vindt u in de tutorial Arduino - 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.