In deze sessie gaan we een joystick koppelen met Raspberry Pi. Joystick wordt voornamelijk gebruikt om verschillende spellen te spelen. Hoewel joysticks van het USB-type gemakkelijk aan te sluiten zijn, maar vandaag gaan we de joystick aansluiten via Raspberry Pi GPIO-pinnen, zal dit in veel gevallen van pas komen.
Raspberry Pi en joystickmodule:
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 hebben we AVR Microcontroller met Joystick gebruikt.
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.
Zoals we weten heeft de Raspberry Pi geen intern ADC- mechanisme (Analog to Digital Converter). Deze module kan dus niet rechtstreeks op de Pi worden aangesloten. We zullen op-amp-gebaseerde comparators gebruiken om de spanningsuitgangen te controleren. Deze OP-Amps leveren signalen aan Raspberry Pi en Pi schakelt de LED's in afhankelijk van de signalen. Hier hebben we vier LED's gebruikt om de beweging van de joystick in vier richtingen aan te geven. Bekijk de demonstratievideo aan het einde.
Elk van de 17 GPIO-pinnen kan geen spanning hoger dan + 3.3V aan, dus de Op-amp-uitgangen kunnen niet hoger zijn dan 3.3V. Daarom hebben we gekozen voor op-amp LM324, deze IC heeft een quad operationele versterker die op 3V kan werken. Met dit IC hebben we geschikte uitgangen voor uitgangen voor onze Raspberry pi GPIO-pinnen. Lees hier meer over GPIO-pinnen van Raspberry Pi. Bekijk ook onze Raspberry Pi Tutorial-serie samen met enkele goede IoT-projecten.
Vereiste componenten:
Hier gebruiken we Raspberry Pi 2 Model B met Raspbian Jessie OS. Alle basis hardware- en softwarevereisten zijn eerder besproken, je kunt het opzoeken in de Raspberry Pi Introductie en Raspberry PI LED Knipperend om aan de slag te gaan, behalve dat we nodig hebben:
- Condensator van 1000 µF
- Joystick-module
- LM324 Op-amp IC
- 1KΩ weerstand (12 stuks)
- LED (4 stuks)
- 2.2KΩ weerstand (4 stuks)
Schakelschema:
Er zijn vier OP-AMP-comparators in de LM324 IC voor het detecteren van vier richtingen van de joystick. Hieronder ziet u het diagram van de LM324 IC uit het gegevensblad.
De verbindingen die zijn gemaakt voor de Interfacing Joystick-module met Raspberry Pi worden weergegeven in het onderstaande schakelschema. U1: A, U1: B, U1: C, U1: D geeft de vier comparatoren in LM324 aan. We hebben elke comparator in het schakelschema met de bijbehorende pennr. van LM324 IC.
Werkende uitleg:
Voor het detecteren van de beweging van de joystick langs de Y-as hebben we OP-AMP1 of U1: A en OP-AMP2 of U1: B, en voor het detecteren van de beweging van de joystick langs de X-as hebben we OP-AMP3 of U1: C en OP-AMP4 of U1: D.
OP-AMP1 detecteert de neerwaartse beweging van de joystick langs de Y-as:
Negatieve pool van comparator U1: A is voorzien van 2,3V (met spanningsdelercircuit van 1K en 2,2K) en positieve terminal is verbonden met Ry. Als de joystick langs zijn Y-as omlaag wordt bewogen, neemt de Ry-spanning toe. Zodra deze spanning hoger wordt dan 2,3 V, levert OP-AMP + 3,3 V output aan de output Pin. Deze HOGE logische output van OP-AMP wordt gedetecteerd door Raspberry Pi en Pi reageert door een LED om te schakelen.
OP-AMP2 detecteert de opwaartse beweging van de joystick langs de Y-as:
De negatieve pool van comparator U1: B is voorzien van 1,0 V (met een spanningsdelercircuit van 2,2 K en 1 K) en de positieve pool is verbonden met Ry. Als de joystick langs zijn Y-as omhoog wordt bewogen, neemt de Ry-spanning af. Zodra deze spanning lager is dan 1,0 V, wordt de OP-AMP-uitgang laag. Deze LAGE logische output van OP-AMP wordt gedetecteerd door Raspberry Pi en Pi reageert door een LED om te schakelen.
OP-AMP3 detecteert de beweging naar links van de joystick langs de X-as:
De negatieve pool van comparator U1: C is voorzien van 2,3V (met behulp van een spanningsdelercircuit van 1K en 2,2K) en de positieve pool is verbonden met Rx. Als de joystick langs zijn x-as naar links wordt bewogen, neemt de Rx-spanning toe. Zodra deze spanning hoger wordt dan 2,3 V, levert OP-AMP + 3,3 V output aan de output Pin. Deze HOGE logische output van OP-AMP wordt gedetecteerd door Raspberry Pi en Pi reageert door een LED om te schakelen.
OP-AMP4 detecteert de beweging van de joystick naar rechts langs de X-as:
De negatieve pool van comparator U1: 4 is voorzien van 1,0 V (met een spanningsdelercircuit van 2,2 K en 1 K) en de positieve pool is verbonden met Rx. Door de joystick naar rechts langs zijn x-as te bewegen, neemt de Rx-spanning af. Zodra deze spanning lager is dan 1,0 V, wordt de OP-AMP-uitgang laag. Deze LAGE logische output van OP-AMP wordt gedetecteerd door Raspberry Pi en Pi reageert door een LED om te schakelen.
Op deze manier worden alle vier de logica's, die de vier richtingen van de joystick bepalen, verbonden met Raspberry Pi. Raspberry Pi neemt de uitgangen van deze comparatoren als ingang en reageert dienovereenkomstig door de LED's om te schakelen. Hieronder staan de resultaten getoond op de Raspberry Pi-terminal, aangezien we ook de richting van de joystick op de terminal hebben afgedrukt met behulp van onze Python-code.
Python-code en video worden hieronder gegeven. Code is eenvoudig en kan worden begrepen door de opmerkingen in de code.