Les 13/31: Een XY-joystick gebruiken met Arduino en een zoemer laten afgaan met de beweging van de joystick | Robojax
In deze les verkennen we de XY-joystickmodule en hoe we deze kunnen koppelen aan een Arduino om directionele beweging en knopdrukken te detecteren. Dit veelzijdige invoerapparaat bevat twee potentiometers (één voor de X-as en één voor de Y-as) en een drukknop, waarmee je een volledige 360-graden bewegingsbereik kunt vastleggen samen met een klikactie. Naast het simpelweg lezen van ruwe waarden, demonstreren we hoe je acties kunt triggeren—zoals het inschakelen van een zoemer—wanneer de joystick in een specifieke positie wordt bewogen. Dit principe vormt de basis voor talloze interactieve projecten.
Deze handleiding is perfect voor het bouwen van:
- Een twee-assige afstandsbediening voor een robotauto of een pan-tilt cameramount.
- Een aangepaste gamecontroller voor een pc of mobiel apparaat.
- Een menunavigatiesysteem voor een LCD- of OLED-display.
- Een nauwkeurige motor-snelheids- en richtingscontroller voor industriële of hobbytoepassingen.
- Een interactief alarmsysteem waarbij een specifieke joystickpositie een sirene of melding activeert.
Hardware en componenten
Om dit project te volgen, heb je de volgende componenten nodig. De specifieke kit die in de video wordt gebruikt, is de SunFounder 3-in-1 Arduino-kit, maar deze onderdelen zijn ook afzonderlijk breed verkrijgbaar.
- Arduino Uno (of een compatibel bord)
- XY-joystickmodule
- Passieve zoemer
- Jumperdraden
- USB-kabel voor programmeren en voeding
De XY-joystickmodule begrijpen
De XY-joystick is een zelfstandig invoerapparaat. Zoals uitgelegd in de video (in video op 01:20), combineert het twee 10k ohm potentiometers die loodrecht op elkaar zijn geplaatst. Het bewegen van de stick langs de X-as draait één potentiometer, terwijl het bewegen langs de Y-as de andere draait. Hierdoor kan de Arduino een analoge spanning voor elke as lezen, die de precieze positie van de stick vertegenwoordigt. De module bevat ook een drukknop die wordt geactiveerd wanneer de stick recht naar beneden wordt gedrukt.
Hier is een overzicht van de pinnen:
- GND: Verbindt met de ground (0V) van de Arduino.
- VCC: Verbindt met de 5V-voeding van de Arduino.
- VRX: Analoge uitgang voor de X-aspositie.
- VRY: Analoge uitgang voor de Y-aspositie.
- SW: Digitale uitgang voor de drukknop (actief laag).
De video demonstreert ook dat de twee interne potentiometers parallel zijn geschakeld tussen VCC en GND, wat resulteert in een totale weerstand van ongeveer 5k ohm, wat een normale meting is voor deze module (in video op 04:30).
Bekabelingshandleiding
De bekabeling voor dit project is eenvoudig. De video toont een bedradingsschema uit de SunFounder-documentatie, maar we verbinden de joystick direct met de Arduino-pinnen zoals beschreven. De zoemer wordt toegevoegd voor het actiegedeelte van het project.
Hier zijn de verbindingen zoals vastgesteld in de video (in video op 06:24):
- Joystick GND → Arduino GND (zwarte draad)
- Joystick VCC → Arduino 5V (rode draad)
- Joystick VRX → Arduino A0 (gele draad)
- Joystick VRY → Arduino A1 (groene draad)
- Joystick SW → Arduino Pin 8 (blauwe draad)
- Zoemer Positief (lange pin) → Arduino Pin 2
- Zoemer Negatief (korte pin) → Arduino GND
Code-uitleg
De meegeleverde code is ontworpen om de positie van de joystick te lezen en de zoemer te activeren wanneer aan een specifieke voorwaarde wordt voldaan. De belangrijkste onderdelen die je kunt configureren, staan bovenaan de sketch.
Eerst worden de pindefinities ingesteld. Je kunt deze wijzigen zodat ze overeenkomen met jouw specifieke bedrading:
const int xPin = A0; //de VRX is hierop aangesloten
const int yPin = A1; //de VRY is hierop aangesloten
const int swPin = 8; //de SW is hierop aangesloten
const int alarmPin=2;//naar zoemer
Vervolgens worden globale variabelen gedeclareerd om de status van de joystick op te slaan. Deze worden elke keer bijgewerkt wanneer de functie readJoystick() wordt aangeroepen.
int xValue;//om xValue op te slaan
int yValue;//om yValue op te slaan
int swValue;//om de waarde van de schakelaar op te slaan
In de functie setup() wordt de schakelaarpin geconfigureerd met een interne pull-upweerstand. Dit is een cruciale stap omdat het de noodzaak van een externe weerstand elimineert. Door het in te stellen op INPUT_PULLUP, leest de pin standaard HIGH en gaat naar LOW wanneer de knop wordt ingedrukt.
pinMode(swPin, INPUT_PULLUP); //stel de SW-pin in op INPUTDe kernlogica bevindt zich in de loop(). Deze roept de aangepaste functie readJoystick() aan om nieuwe gegevens op te halen. Vervolgens controleert het een voorwaarde: als de X-aswaarde groter is dan 600 en de Y-aswaarde kleiner is dan 300, wordt de zoemer ingeschakeld. Je kunt deze drempelwaarden aanpassen om een andere "actieve zone" voor de joystick te definiëren. De alarmPin wordt op HIGH gezet om de zoemer te activeren en er wordt een bericht naar de Seriële Monitor gestuurd.
if(xValue >600 && yValue <300)
{
digitalWrite(alarmPin, HIGH);
Serial.print("Alarm X:");
Serial.print(xValue);
Serial.print(" Y:");
Serial.println(yValue);
}else{
digitalWrite(alarmPin, LOW);
// ... code om waarden te printen wanneer het alarm uit is
}
Tot slot wordt de aangepaste functie readJoystick() gedefinieerd. Deze functie leest de analoge waarden van de X- en Y-pinnen en de digitale status van de schakelaar, en slaat deze op in de globale variabelen. Deze modulaire aanpak houdt de hoofdloop schoon en georganiseerd.
void readJoystick()
{
xValue =analogRead(xPin);//lees xPin-waarde
yValue =analogRead(yPin);//lees yPin
swValue =digitalRead(swPin);//lees schakelaar
}
Live Project en Demonstratie
Zodra de code is geüpload, kan de Seriële Monitor worden geopend om de ruwe waarden te observeren. In eerste instantie, met de joystick in het midden, zullen de X- en Y-waarden rond de 512 liggen, wat het middelpunt is van het bereik 0-1023. Door de joystick naar beneden te drukken, verandert de schakelwaarde van 1 naar 0 (in video op 10:15).
Door de joystick naar de uitersten te bewegen, wordt het volledige bereik getoond: door hem volledig naar rechts te bewegen, wordt een X-waarde van 1023 weergegeven, en volledig naar links 0. Op dezelfde manier verandert het bewegen van de joystick omhoog en omlaag de Y-waarde tussen 0 en 1023 (in video op 10:37).
De demonstratie toont vervolgens het actiegedeelte van het project. Wanneer de joystick naar de rechterbovenhoek wordt bewogen (waar X > 600 en Y < 300), zal de zoemer klinken en zal de Seriële Monitor een "Alarm"-bericht printen. Door hem weg te bewegen van die zone, wordt de zoemer uitgeschakeld. Dit bewijst dat je de positie van de joystick kunt gebruiken om een uitvoerapparaat te besturen, wat kan worden uitgebreid om relais, LED's of motoren aan te sturen voor verschillende toepassingen.
Hoofdstukken
- [00:00] Introductie tot het XY-joystickproject
- [01:20] Inzicht in de hardware en interne componenten
- [03:33] Moduleschema en weerstandsmeting
- [05:51] De joystick op de Arduino aansluiten
- [07:00] De code instellen en de pull-upweerstand inschakelen
- [09:23] Code uploaden en ruwe waarden testen
- [12:21] Actie ondernemen: een zoemer besturen met de joystickpositie
- [16:02] Live demonstratie van het alarmsysteem
This code has not been parsed yet. Please return to the admin panel to parse it.
Common Course Links
Common Course Files
Dingen die je misschien nodig hebt
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Hulpmiddelen en referenties
-
DocumentatieDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ExternPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Bestanden📁
Arduino-bibliotheken (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB
Gebruikershandleiding
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB