We hebben Joystick eerder gekoppeld aan Arduino UNO om te begrijpen hoe het werkt en hebben vier LED's aangestuurd die links, rechts, omhoog en omlaag bewegen. In dit project zullen we dezelfde joystick gebruiken als de gamepad of gamecontroller om computerspellen te spelen waarvoor links, rechts, op en neer bewegingen nodig zijn. Om spellen te spelen die meer bedieningsopties vereisen, kunnen twee of meer joysticks worden gebruikt. Hier zullen we Arduino Leonardo gebruiken om joystick als gamecontroller te gebruiken. Arduino Leonardo heeft het voordeel ten opzichte van Uno dat we er USB-stuurprogramma's op kunnen installeren en het kan worden gedetecteerd als muis, toetsenbord of joystick door de computer wanneer deze is aangesloten.
Componenten vereist
- Arduino Leonardo
- Dual Axis XY Joystick Module
- Arduino IDE
- Draden aansluiten
Arduino Leonardo
Voor dit project gebruiken we de Arduino Leonardo, het is een microcontroller board gebaseerd op de ATmega32u4. Het heeft 20 digitale input / output-pinnen (waarvan er 7 kunnen worden gebruikt als PWM-uitgangen en 12 als analoge ingangen), een 16 MHz kristaloscillator, een micro-USB-aansluiting, een stroomaansluiting, een ICSP-header en een resetknop. Het bevat alles wat nodig is om de microcontroller te ondersteunen; sluit hem gewoon aan op een computer met een USB-kabel of voorzie hem van stroom met een AC-naar-DC-adapter of batterij om aan de slag te gaan.
De Leonardo verschilt van alle voorgaande kaarten doordat de ATmega32u4 een ingebouwde USB-communicatie heeft, waardoor er geen secundaire processor nodig is. Hierdoor kan de Leonardo op een aangesloten computer verschijnen als een muis en toetsenbord, naast een virtuele (CDC) seriële / COM-poort.
Technische specificaties
Microcontroller | ATmega32u4 |
Werkspanning | 5V |
Ingangsspanning (aanbevolen) | 7-12V |
Ingangsspanning (limieten) | 6-20V |
Digitale I / O-pinnen | 20 |
PWM-kanalen | 7 |
Analoge ingangskanalen | 12 |
DC-stroom per I / O-pin | 40 mA |
DC-stroom voor 3.3V-pin | 50 mA |
Flash-geheugen | 32 KB (ATmega32u4) waarvan 4 KB gebruikt door bootloader |
SRAM | 2,5 kB (ATmega32u4) |
EEPROM | 1 kB (ATmega32u4) |
Kloksnelheid | 16 MHz |
Lengte | 68,6 mm |
Breedte | 53,3 mm |
Gewicht | 20 g |
PIN Out-referentie
Dual Axis XY 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 verschillende microcontrollers:
- Joystick koppelen aan Arduino
- Joystick koppelen aan Raspberry Pi
- Joystick koppelen met PIC-microcontroller
- Joystick-interface met AVR-microcontroller
Deze joystickmodule heeft twee assen zoals u kunt zien. Ze zijn X-as en Y-as. Elke as van JOY STICK 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, fungeren 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.
Schakelschema
Deze Arduino Joystick Game Controller vereist als volgt verbindingen tussen de Arduino en de Joystick:
Code en werkuitleg
Aan het einde wordt de volledige code met een demovideo gegeven; hier leggen we enkele belangrijke delen ervan uit.
Ten eerste moeten we de toetsenbordbibliotheek initialiseren
# omvatten
Vervolgens hebben we in onderstaande code de X- en Y-as van de joystickmodule geïnitialiseerd voor respectievelijk analoge pin A0 en A1.
const int X_pin en const int Y_pin respectievelijk
De analoge waarde van de VRX-pin wordt gelezen en als de waarde 1023 is, wordt het commando voor "omhoog" gegeven en als de waarde 0 is, wordt het commando voor "omlaag" gegeven.
Evenzo wordt de analoge waarde van de VRY-pin gelezen en als de waarde 1023 is, wordt het commando voor "rechts" gegeven en als de waarde 0 is, wordt het commando voor "links" gegeven.
De joystick heeft ook een drukknop aan de bovenkant, dus deze knop (SW) wordt ook gelezen en als de knop wordt ingedrukt, is de waarde 0 en wordt het commando voor "enter" gegeven.
Brand ten slotte de code in Arduino en verbind de Arduino met de computer.
Controleer vervolgens de ' Apparaten en printers' in uw configuratiescherm. U kunt " Arduino Leonardo" zien onder het gedeelte Apparaten, zoals weergegeven in onderstaande afbeelding. Nu ben je klaar om met de joystick te spelen.
We kunnen alle spelbesturingen bedienen met deze joystick. 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. De joystick werkt dus als een gamepad.
Dit is dus hoe een normale joystick kan worden omgezet in een gamecontroller met Arduino Leonardo en kan worden gebruikt om games te spelen met alle bedieningselementen om naar links, rechts, omhoog en omlaag te bewegen. Zoals eerder verteld, kunnen er meer dan één joystick worden aangesloten om meer bedieningselementen te krijgen dan deze vier basisfuncties.