Analogowe joysticki do sterowania mechaniką i elektroniką

Do sterowania różnymi urządzeniami, jak np. serwomechanizmami, czy silnikami przydają "pokrętła", suwaki i temu podobne interfejsy wykorzystujące potencjometry. Żeby było łatwiej sterować np. wspomnianymi silnikami wymyślono joysticki łączące funkcjonalność dwóch lub więcej potencjometrów. Proste "analogowe" joysticki to nic innego jak dwa potencjometry pracujące w dwóch prostopadłych osiach. Pozwala to jednym kontrolerem sterować płynnie dwoma parametrami na raz. W przypadku prostego samochodu zabawki oś Y odpowiadałaby za prędkość i kierunek (na przód, do tyłu), a oś X za kierunek prawo-lewo.

Na rynku dostępnych jest masa płytek z takimi joystickami. Oprócz dwóch potencjometrów zazwyczaj mają też wbudowany przycisk uruchamiany przez wciśnięcie gałki joysticka. Bardzo łatwo wykorzystać je w układach elektroniczno-mechanicznych i w tym artykule pokaże jak to zrobić.

Joysticki analogowe do amatorskich projektów

Podłączanie Joysticka

Tak zwane analogowe Joysticki, o których tutaj mowa mają pieć pinów: GND (-), VCC (+), jeden dla osi X, jeden dla osi Y i ostatni dla przycisku. W zależności od modelu ich kolejność i oznaczenia mogą się różnić (np. oznaczenie pinu przycisku). Warto poszukać opisu producenta jeżeli nie jesteś pewien który jest który. W dwóch modelach jeden ma: GNC, +5V, VRx, VRy, SW, a drugi już: +, X, R, Y, G (gdzie G to GND, R to przycisk).

Piny osi X i Y łączymy do analogowych pinów mikrokontrolera. Pin przycisku do pinu cyfrowego.

Piny na płytce Joysticka

Odczytywanie pozycji z joysticka

Osie X, Y to potencjometry, więc na pinach analogowych będziemy odczytywać różne wartości w zależności od ustawionej rezystancji potencjometrów - a ta będzie się zmieniać wraz ze zmianą położenia gałki joysticka. Pin przycisku musi być w stanie wysokim. Wciśnięcie przycisku na płytce spowoduje że przejdzie on w stan niski.

Oto przykładowy kod obsługujący analogowy joystick:
from time import sleep

import pymcu

BUTTON_DIGITAL_PIN = 1
X_AXIS_ANALOG_PIN = 1
Y_AXIS_ANALOG_PIN = 2

mb = pymcu.mcuModule()
mb.digitalState(BUTTON_DIGITAL_PIN, 'input')
mb.pinHigh(BUTTON_DIGITAL_PIN)

while True:
    print mb.analogRead(X_AXIS_ANALOG_PIN), mb.analogRead(Y_AXIS_ANALOG_PIN)
    if not mb.digitalRead(BUTTON_DIGITAL_PIN):
        print 'button pressed'
    sleep(0.1)

Na początku ustawiam cyfrowy pin przycisku jako cyfrowe wejście (input) i ustawiam jego stan na wysoki. Po tej konfiguracji mogę już w pętli odczytywać stan potencjometrów i przycisku. W pozycji spoczynkowej (gałka pośrodku joysticka) otrzymamy na osiach jakieś wartości pośrednie. W moim przypadku jedna sztuka dawała 498 i 491, a druga 507 i 517. Minimalna wartość to 1, a maksymalna to nieco ponad 1000 (dla pinów analogowych pyMCU) - choć to ponad 1000 osiągnąłem tylko z jednym z joysticków.

Chcąc wykorzystać dany joystick w jakimś bardziej złożonym układzie trzeba sprawdzić jakie wartości daje w stanie spoczynkowym (i dodać plus/minus kilka punktów marginesu) i jakie przy granicznych wychyleniach. Mając dokładnie określony zakres można go zmapować na potrzebną nam skalę - np. prędkości silnika, czy położenia serwomechanizmu.

RkBlog

Elektronika i Python, 21 September 2013

Comment article
Comment article RkBlog main page Search RSS Contact