Code zoeken

Les 13/31: Een XY-joystick gebruiken met Arduino en een zoemer laten afgaan met de beweging van de joystick | Robojax

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.

sunfounder-13-JoyStick-2

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
LB-LR0001_Dual-axis_XY_Joystick_Module

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.

Joystick-Module-Internal-Structure

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

sunfounder-13_xy_joystick_wiring_bb

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 GNDArduino GND (zwarte draad)
  • Joystick VCCArduino 5V (rode draad)
  • Joystick VRXArduino A0 (gele draad)
  • Joystick VRYArduino A1 (groene draad)
  • Joystick SWArduino 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 INPUT

De 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

Afbeeldingen

Sunfounder car assembled
Sunfounder car assembled
LB-LR0001_Dual-axis_XY_Joystick_Module
LB-LR0001_Dual-axis_XY_Joystick_Module
sunfounder-13-JoyStick-1
sunfounder-13-JoyStick-1
sunfounder-13-JoyStick-2
sunfounder-13-JoyStick-2
Joystick-Module-Internal-Structure
Joystick-Module-Internal-Structure
sunfounder-13_xy_joystick_wiring_bb
sunfounder-13_xy_joystick_wiring_bb
922-Lesson 13/31: How to read position and values of X-Y Joystick
Taal: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Hulpmiddelen en referenties

Bestanden📁

Arduino-bibliotheken (zip)

Gebruikershandleiding