Joystick moodul Arduinoga

Joystick mooduli ühendamine Arduinoga

Joystick (juhtkang) mooduli ehitus kui ka tööpõhimõte on väga lihtsad ning selle ühendamine samuti. Moodulil on nii X kui Y teljel liigutatav nupp ning lisaks üks klikatav nupp mis aktiveerub kui juhtkangil otse peale vajutada. Juhtkangi saab liigutada korraga kõigis suundades ning kui see lahti lasta liigub see hetkega tagasi algasendisse. Tehniliselt on tegu kahe potentsiomeetriga mida liigutab keskel olev juhtkang ning lisaks üks lüliti nupuvajutuse jaoks.

Ühendamine

Juhtkangi liigutades muutub mooduli X ja Y telje väljundis pinge 0V ja 5V vahemikus. Seega muutuva pinge/väärtuse lugemiseks peame kasutama analoog sisendi klemme. Siin näidisprogrammis kasutame selleks Arduino UNO klemme A0 ja A1. Nupuvajutuse ühendame digitaal sisendisse klemmile D8 kuna nupu puhul on vaid kaks väärtust- kas see on alla vajutatud või mitte.

Konkreetse mooduli (pildil) klemmide järgi saame siis sellised ühendused moodulilt arendusplaadi külge. Sisend klemmid võib valida ka teised, aga sel juhul tuleb muuta allpool toodud näidsiprogrammis sisendite numbrid ära vastavalt.

  • GND => Toide GND
  • +5V => Toide +5V
  • VRx => Analoog sisend klemm A1
  • VRy => Analoog sisend klemm A0
  • SW => Digitaal sisend klemm  D8

Joystick moodul

Paar sõna analoog sisenditest

Arduino arendusplaatidel on sisse ehitatud 10 bitised analoog-digitaalmuundur sisendid. Arduino UNO plaadil on neid äiteks 6 tükki (A0, A1, A2, A3, A4, A5). Kui programmis lugeda mõnest analoog sisendist väärtusi on need 0-1023 vahel (2 astmes 10 = 1024). Arduino teisendab (vaikimisi) 0-5V  vahemikus analoog signaali täisarvuks vahemikus 0-1023. See annab täpsuseks  0.0049 volti ühiku kohta. Näiteks kui pinge klemmil on 1.47V siis analogRead väärtuseks on 300 (1.47V / 0.0049V = 300).

Näidiskood ja tulemus

Lae see kood oma Arduinole peale ning ava terminal. Programm loeb iga 50ms tagant juhtkangi asukoha (potentsiomeetrite) väärtused ning edastab need terminali. Kui juhtkang on vaikimisi asendis peaks nii X kui Y telje väärtuseks olema ideaalis 1023 / 2 = 512. Reaalses elus võivad need siiski natuke erineda- konkreetse  testi käigus olid need näiteks 495 ning 520. NB: Säti infoedastus kiiruseks terminali aknal sama mis programmis  (9600 baud) bitti sekundis.

/**
 * Arduino näidisprogramm joystick
 * mooduli testimiseks
 * 
 */

int joyPinX = 1;    //analoog sisend A1 telje X väärtuse lugeemiseks
int joyPinY = 0;    //analoog sisend A0 telje Y väärtuse lugeemiseks
int joyButton = 8;  //Digitaalne pin kliki jaoks

int valueX = 0;
int valueY = 0;
int valueBtn = 0;

void setup() {
  pinMode(joyButton, INPUT);
  digitalWrite(joyButton, HIGH); //Prevent floating / Vältimaks ujuv väärtusi
  Serial.begin(9600);
}

void loop() {
  valueBtn = invertBinaryValue( digitalRead(joyButton) );
  valueX = analogRead(joyPinX);
  valueY = analogRead(joyPinY);
  
  Serial.println( "" );
  
  Serial.print( " X: " );
  Serial.print(  valueX );
  
  Serial.print( " Y: " );
  Serial.print(  valueY );
  
  Serial.print( " BTN: " );
  Serial.print(  valueBtn );
  
  delay(50);
}

int invertBinaryValue(int data) {
  if( data == 0 ){
    return 1;
  }
  
  return 0;
}

Ja screenshot tulemusest.

Joystick mooduli näidsiprogrammi väljund terminalis
Joystick mooduli näidsiprogrammi väljund terminalis