Autor: Piotr Rzeszut (Piotrva)
Redakcja: Dondu
Zobacz inne artykułu z cyklu: Arduiono ... czyli prościej się nie da :-)
Wielokrotnie zachodzi potrzeba sterowania różnymi urządzeniami w sposób analogowy na przykład do sterowanie robotami, czy innymi urządzeniami.
Do tego celu idealnie nadaje się joystick, który jest bardzo prostym urządzaniem - mianowicie składa się zwykle (niezależnie od rozmiaru) z 2 potencjometrów połączonych mechanicznie z gałką.
Do tego celu idealnie nadaje się joystick, który jest bardzo prostym urządzaniem - mianowicie składa się zwykle (niezależnie od rozmiaru) z 2 potencjometrów połączonych mechanicznie z gałką.
Czasem dodatkowo joystick wyposażony jest w przycisk (lub kilka). Miniaturowe joysticki zwykle posiadają przycisk aktywowany wciśnięciem całej gałki.
Miniaturowy joystick bez gałki |
Miniaturowy joystick z założoną gałką |
Joystick - złącze |
Joysticki otrzymałem do testów ze sklepu:
Podłączamy do Arduino
Podłączenie joysticka jest banalnie proste - odpowiednio oznaczone piny (+, - lub +5V, GND) podpinamy do zasilania, a pozostałe zgodnie z oznaczeniami do 2 kanałów analogowych (osie X i Y joysticka) i do dowolnego pinu sygnał z przycisku.
Pierwszy program do odczytu danych chyba potrafiłby napisać każdy początkujący:
joy_basic.c
void setup() { Serial.begin(9600);//ustawiamy port szeregowy do komunikacji z komputerem pinMode(A3, INPUT);//ustawiamy pin A3 jako wejście pod przycisk i włączamy podciąganie digitalWrite(A3, HIGH); pinMode(A4, INPUT);//piny A4 i A5 ustawiam jako wejścia - podepniemy tam odpowiednio osie X i Y joysticka pinMode(A5, INPUT); } void loop() { int x=analogRead(A4);//odczytamy wartości napięć dla osi X i Y int y=analogRead(A5); Serial.print(x);//wyświetlamy je Serial.print(" "); Serial.print(y); Serial.print(" "); Serial.println(digitalRead(A3));//i na koniec przycisk }
Do pobrania: joy_basic.c
Drugi program jest już nieco bardziej złożony i uwzględnia fakt, że odczyt joysticka w położeniu neutralnym może nie być stabilny oraz, że niekoniecznie chcemy wykorzystywać około 500 stanów joysticka w wychyleniu w każdą ze stron.
joy_medium.c
//u mnie dla położenia centralnego ADC zwraca 514 i 504 const int x_mid=514; const int y_mid=504; //ustawiamy histerezę - tylko po przekroczeniu tej wartości od centrum będziemy cokolwiek robić const int center_hist=5; void setup() { Serial.begin(9600);//ustawiamy port szeregowy do komunikacji z komputerem pinMode(A3, INPUT);//ustawiamy pin A3 jako wejście pod przycisk i włączamy podciąganie digitalWrite(A3, HIGH); pinMode(A4, INPUT);//piny A4 i A5 ustawiam jako wejścia - podepniemy tam odpowiednio osie X i Y joysticka pinMode(A5, INPUT); } void loop() { int x=analogRead(A4);//odczytamy wartości napięć dla osi X i Y int y=analogRead(A5); if(x>(x_mid+center_hist)||x<(x_mid-center_hist)){//jeśli joystick jest wychylony poza połozenie neutralne x=(x-x_mid)/16;//przeliczmy jego położenie i zmniejszmy liczbę możliwych stanów (512/16=32) //uwaga - z powodu realizacji dzielenia w języku C otrzymamy niesymetryczny zakres - jeśli to nam przeszkadza możemy za pomocą instrukcji if dokonać obcięcia niesymetrycznej wartości) }else x=0; if(y>(y_mid+center_hist)||y<(y_mid-center_hist)){//to samo dla osi Y y=(y-y_mid)/16; }else y=0; Serial.print(x);//wyświetlamy je Serial.print(" "); Serial.print(y); Serial.print(" "); Serial.println(digitalRead(A3));//i na koniec przycisk }
Do pobrania: joy_medium.c
Ostatni z załączonych do tego artykuliku program jest nieco bardziej skomplikowany - zawiera sterowanie 3 serwomechanizmami odpowiadającymi 3 stopniom swobody przykładowego ramienia mechanicznego. Kliknięcie przycisku powoduje przełączenie tego, którym mechanizmem steruje oś Y joysticka.
Cóż, chyba o tak prostym urządzeniu jak joystick nie ma sensu więcej pisać - mam nadzieję, że te parę linijek zainspiruje Was do stworzenia wielu ciekawych urządzeń (np. zdalnie sterowanych)
Nic nie stoi oczywiście na przeszkodzie by taki joystick wykorzystać nie tylko z Arduino :-)
Do pobrania cała paczka: joy.zip
Zobacz inne artykułu z cyklu: Arduiono ... czyli prościej się nie da :-)
Coś jest nie tak z załącznikami: 404 Not found
OdpowiedzUsuńDziękuję za sygnał. Już poprawiłem.
Usuń