Joystick με Arduino

Το joystick είναι κάτι που όταν το ακούμε μας έρχεται στο μυαλό παιχνίδια. Και έτσι είναι, συνήθως το χρησιμοποιούμε για να παίξουμε παιχνίδια καθώς το πληκτρολόγιο και ποντίκι είναι αρκετά πιο δύσκολο να τα χειριστεί κανείς.

Στις παιχνιδομηχανές (Playstation, Xbox, Nintento) χρησιμοποιούμε joystick γιατί δεν γίνεται και διαφορετικά.

Joystick με Arduino γιατί δεν είναι μόνο τα παιχνίδια…

Εκτός όμως από τα παιχνίδια, joystick χρειαζόμαστε και για τον χειρισμό μηχανών όπως είναι οι γερανοί για παράδειγμα, τα ρομποτικά συστήματα αλλά και τα τηλεκατευθυνόμενα.

Το project

Σε αυτό το βίντεο θα σας δείξουμε πως να χρησιμοποιήσετε το joystick με arduino για να ελέγξετε μία συστοιχία από Led. Το joystick που διαθέτουμε, εκτός από το χειριστήριο, διαθέτει και ένα διακόπτη (κουμπί) ο οποίος ενεργοποιείται όταν πιέζουμε τον μοχλό προς τα κάτω.

Θα υπάρχουν τέσσερα κόκκινα LED τα οποία θα αντιπροσωπεύουν τις κατευθύνσεις επάνω, κάτω, δεξιά και αριστερά. Ένα πορτοκαλί LED θα είναι για το κουμπί (πάτημα του joystick).

Όσο ο χρήστης θα μετακινεί προς μία κατεύθυνση τον μοχλό τόσο θα αυξάνεται η ένταση εκείνου του LED. Έτσι όχι μόνο θα δούμε πως λειτουργεί το joystick, αλλά θα μάθουμε καλύτερα και εντολές όπως η analogRead, AnalogWrite και η Map.

Joystick module για arduino και raspberry

Το συγκεκριμένο εξάρτημα βγαίνει σε διάφορα σχέδια και παραλλαγές. Η πιο συνηθισμένη είναι αυτή που βλέπετε στην εικόνα παρακάτω. Για να το βρείτε μπορείτε να απευθυνθείτε σε ένα κατάστημα ηλεκτρονικών αλλά και σε ξένα market place όπως το ebay, wish, bangood, aliexpress…

Είναι κατάλληλο, τόσο για το arduino, όσο και για το raspberry.

Joystick module arduino

Διαθέτει ένα σύστημα δύο αξόνων Χ, Υ όπου σε κάθε άξονα υπάρχει ένα ποτενσιόμετρο. Σε κατάσταση ηρεμίας υπάρχει μία αντίσταση για κάθε άξονα Rx και Ry. Με αυτό το τρόπο μπορούμε να έχουμε αναλογική είσοδο και να την αξιοποιήσουμε.

Όταν μετακινούμε τον μοχλό, στην πραγματικότητα μεταβάλλουμε την αντίσταση X ή Y και σε συνδυασμό με την Rx ή Ry δημιουργείται ένας διαιρέτης τάσης του οποίου την έξοδο διαβάζουμε σε μία αναλογική είσοδο του arduino.

Έχουμε κάνει στο παρελθόν έναν φωτοδιακόπτη αν θέλετε να δείτε τι σημαίνει διαιρέτης τάσης.

Οι τιμές αντίστασης φαίνονται στην παρακάτω εικόνα

Τιμές αντίστασης για το Joystick

To κύκλωμα

Θα υλοποιήσουμε με τη βοήθεια του Fritzing, το κύκλωμα το οποίο φαίνεται στην παρακάτω εικόνα και μπορείτε να κατεβάσετε κάνοντας δεξί κλικ στην εικόνα και επιλέγοντας ‘αποθήκευση εικόνας’.

Joystick control

Ο κώδικας

// Μεταβλητές
int upLed = 6;
int downLed = 11;
int rightLed = 10;
int leftLed = 9;
int switchLed = 4;
int analogX = 0;
int analogY = 1;
int switchBtn = 5;
int valueX, valueY, XIntensity, YIntensity;

void setup() {
  pinMode(upLed, OUTPUT);
  pinMode(downLed, OUTPUT);
  pinMode(rightLed, OUTPUT);
  pinMode(leftLed, OUTPUT);
  pinMode(switchLed, OUTPUT);
  pinMode(switchBtn, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  valueX = analogRead(analogX);
  valueY = analogRead(analogY);
  if (valueX>=500 && valueX<=530)
  {
    digitalWrite(leftLed, LOW);
    digitalWrite(rightLed, LOW);
  }
  if (valueY>=500 && valueY<=530)
  {
    digitalWrite(upLed, LOW);
    digitalWrite(downLed, LOW);
  }
  if (valueY>530) 
  {
    YIntensity = map(valueY, 530,1023,0,255);
    analogWrite(upLed, YIntensity);
  }
  if (valueY<500)
  {
    YIntensity = map(valueY, 500,0,0,255);
    analogWrite(downLed, YIntensity);
  }
  if (valueX>530) 
  {
    XIntensity = map(valueX, 530,1023,0,255);
    analogWrite(leftLed, XIntensity);
  }
  if (valueX<500)
  {
    XIntensity = map(valueX, 500,0,0,255);
    analogWrite(rightLed, XIntensity);
  }

  if (digitalRead(switchBtn)==LOW)
  {
    digitalWrite(switchLed, HIGH);
  }
  else
  {
    digitalWrite(switchLed, LOW);
  }
  Serial.print("Y:");
  Serial.print(YIntensity);
  Serial.print(", X:");
  Serial.println(XIntensity);
}

Το Video

Αφήστε ένα σχόλιο, κοινοποιήστε και κάντε εγγραφή στο κανάλι μας στο Youtube, για να συνεχίσουμε να ανεβάζουμε νέα βίντεο!

10 Μαΐου, 2020

0 απαντήσεις σε "Joystick με Arduino"

    Αφήστε ένα σχόλιο

    Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

    Σχεδιασμός © GetCert. Με επιφύλαξη παντός δικαιώματος.