- Materiaal vereist
- Schakelschema
- Joystick-module
- Code en uitleg
- LED's bedienen met behulp van joystick met Arduino
Het eerste dat bij ons opkomt als we naar het woord Joystick luisteren, is de gamecontroller. Ja, het is precies hetzelfde en kan worden gebruikt voor gamingdoeleinden. Afgezien van gamen, heeft het vele andere toepassingen in doe-het-zelf-elektronica. Deze joystick is niets anders dan een combinatie van twee potentiometers voor respectievelijk X- en Y-vlak. Het leest de spanning door de potentiometer en geeft analoge waarde aan de Arduino, en de analoge waarde verandert als we de joystick-as verplaatsen (wat gewoon de potentiometerwijzer is).
In dit circuit koppelen we joystick aan Arduino door simpelweg vier LED's te besturen volgens de beweging van de joystick. We hebben 4 LED's zo geplaatst dat deze de richting van de joystick-asbeweging weergeven. Deze joystick heeft ook een drukknop die voor verschillende andere doeleinden kan worden gebruikt of inactief kan blijven. Een enkele LED is ook bevestigd aan de schakelaar van de joystick, als de joystickknop wordt ingedrukt, gaat die enkele LED AAN.
Materiaal vereist
- Arduino UNO
- Joystick-module
- LED's-5
- Weerstand: 100ohm-3
- Draden aansluiten
- Breadboard
Schakelschema
Joystick-module
Joysticks zijn er in verschillende soorten en maten. Een typische joystickmodule wordt weergegeven in de onderstaande afbeelding. Deze joystickmodule biedt typisch analoge uitgangen en de uitgangsspanningen die door deze module worden geleverd, blijven veranderen volgens de richting waarin we hem verplaatsen. En we kunnen de bewegingsrichting bepalen door deze spanningsveranderingen te interpreteren met behulp van een microcontroller. Eerder koppelden we Joystick aan AVR en Raspberry Pi.
Deze joystickmodule heeft twee assen zoals u kunt zien. Ze zijn X-as en Y-as. Elke as van JOYSTICK is gemonteerd op een potentiometer of pot. De middelpunten van deze potten worden verdreven als Rx en Ry. Dus Rx en Ry zijn variabele punten voor deze potten. Als de joystick in stand-by staat, werken Rx en Ry als spanningsdeler.
Wanneer de joystick langs de horizontale as wordt bewogen, verandert de spanning op de Rx-pin. Evenzo, wanneer het langs de verticale as wordt bewogen, verandert de spanning op de Ry-pin. We hebben dus vier richtingen van joystick op twee ADC-uitgangen. Wanneer de stick wordt verplaatst, wordt de spanning op elke pin hoog of laag, afhankelijk van de richting.
Hier verbinden we deze Joystick-module met de Arduino UNO die wordt geleverd met een ingebouwd ADC-mechanisme (Analog to Digital Converter), zoals te zien is in de video aan het einde. Lees hier meer over het gebruik van Arduino's ADC.
Code en uitleg
De volledige Arduino-code wordt aan het einde vermeld.
In onderstaande code hebben we de X- en Y-as van de joystickmodule gedefinieerd voor respectievelijk analoge pin A0 en A1.
#define joyX A0 #define joyY A1
Nu, in de onderstaande code, initialiseren we PIN 2 van Arduino voor de schakelaar (drukknop) van de joystickmodule en de waarde van buttonstate en buttonstate1 zal in het begin 0 zijn.
int knop = 2; int buttonState = 0; int buttonState1 = 0;
In de onderstaande code stellen we de baudrate in op 9600 en definiëren we pin 7 als een outputpin en een button pin als een inputpin. Aanvankelijk blijft de knoppen hoog totdat de schakelaar wordt ingedrukt.
void setup () {pinMode (7, OUTPUT); pinMode (knop, INPUT); digitalWrite (knop, HIGH); Serial.begin (9600); }
Hier, in deze code lezen we de waarden van de analoge pin A0 en A1 en printen we serieel.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); Serial.print (xValue); Serial.print ("\ t"); Serial.println (yValue);
De voorwaarden voor het in- en uitschakelen van de LED volgens de beweging van de joystickas, worden gedefinieerd in de onderstaande code. Hier nemen we alleen analoge waarden van spanning op pin A0 en A1 van Arduino. Deze analoge waarden veranderen als we de joystick bewegen en de LED gaat branden volgens de beweging van de joystick.
Deze voorwaarde is voor beweging van de joystickas in de Y-asrichting
if (xValue> = 0 && yValue <= 10) {digitalWrite (10, HIGH); } else {digitalWrite (10, LOW);}
Deze voorwaarde is voor beweging van de joystickas in -X-asrichting
if (xValue <= 10 && yValue> = 500) {digitalWrite (11, HIGH); } anders {digitalWrite (11, LOW);}
Deze voorwaarde is voor beweging van de joystickas in de richting van de + X-as
if (xValue> = 1020 && yValue> = 500) {digitalWrite (9, HIGH); } else {digitalWrite (9, LOW);}
Deze voorwaarde is voor beweging van de joystickas in de richting van de + Y-as
if (xValue> = 500 && yValue> = 1020) {digitalWrite (8, HIGH); } anders {digitalWrite (8, LOW);}
Wanneer we de joystickas diagonaal verplaatsen, komt er een positie wanneer de analoge waarde van X en Y respectievelijk 1023 en 1023 zal zijn, zowel pin 9 als pin 8 LED zal oplichten. Omdat het voldoet aan de conditie van de led. Dus om die mismatch te verwijderen, hebben we een voorwaarde gegeven dat als de waarde van (X, Y) (1023, 1023) is, beide LED's in de UIT-toestand blijven
if (xValue> = 1020 && yValue> = 1020) {digitalWrite (9, LOW); digitalWrite (8, LOW); }
De onderstaande voorwaarde wordt gebruikt om de LED te bedienen die is aangesloten op de drukknopschakelaar. Terwijl we op de joystickschakelaar drukken, gaat de LED AAN en vergrendelen totdat de knop loslaat. Het is optioneel om de drukknopschakelaar op de joystickmodule te gebruiken.
if (buttonState == LOW) {Serial.println ("Switch = High"); digitalWrite (7, HIGH); } anders {digitalWrite (7, LOW);}
LED's bedienen met behulp van joystick met Arduino
Na het uploaden van de code naar de Arduino en het aansluiten van de componenten volgens het schakelschema, kunnen we nu de LED's aansturen met Joystick. We kunnen de vier LED's in elke richting inschakelen volgens de beweging van de joystick-as. De joystick heeft twee potentiometers erin, een is voor X-as beweging en een andere is voor Y-as beweging. Elke potentiometer krijgt 5v van de Arduino. Dus als we de joystick bewegen, verandert de spanningswaarde en de analoge waarde op analoge pinnen A0 en A1 verandert ook.
Dus vanaf de Arduino lezen we de analoge waarde voor de X- en Y-as en schakelen we de LED's in volgens de asbeweging van de joystick. Een drukknopschakelaar op de joystickmodule wordt gebruikt om de enkele LED in het circuit te bedienen, zoals weergegeven in de onderstaande video.