piątek, 1 kwietnia 2011

Arduino Joystick analogowy


Autor: Piotr Rzeszut (Piotrva)
Redakcja: Dondu

Zobacz inne artykułu z cyklu: Arduiono ... czyli prościej się nie da :-)


Arduino Joystick
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ą.

Czasem dodatkowo joystick wyposażony jest w przycisk (lub kilka). Miniaturowe joysticki zwykle posiadają przycisk aktywowany wciśnięciem całej gałki.


Arduino: Miniaturowy joystick bez gałki
Miniaturowy joystick bez gałki


Arduino: Miniaturowy joystick z założoną gałką
Miniaturowy joystick z założoną gałką



Arduino: Joystick - złącze
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 :-)

2 komentarze:

  1. Coś jest nie tak z załącznikami: 404 Not found

    OdpowiedzUsuń