Joystick Arduino - σύνδεση και σκίτσο. Δημιουργία άλλου joystick (gamepad) στο Arduino Joystick για σύνδεση Arduino

Σήμερα αποφάσισα να δοκιμάσω να ελέγξω έναν σερβομηχανισμό με ένα joystick συναρμολογώντας ένα απλό κύκλωμα βασισμένο στο Arduino Uno.

Τι χρειαζόμαστε

  1. Καλώδια σύνδεσης;

Πηγή

#περιλαμβάνω
int joyX=0;
intangl=0;
Servo myservo;
void setup()
{
myservo.attach(9);
pinMode(joyX,INPUT);
Serial.begin(9600);
}
void loop()
{
int val = (analogRead(joyX)/64)-8;
αν (val > 0) (
angl=angl+abs(val);
}
αλλού(
εάν (val< 0) {
angl=angl-abs(val);)
}
αν (αγγλ< 0) angl = 0;
αν (angl > 180) angl = 180;
Serial.print("Power: ");
Σειριακή println(val);
Serial.print("Angle: ");
Σειριακή εκτύπωσηln(angl);
myservo.write(angl);
int spd = 500;
αν (val != 0) (
spd = 600/abs(val);
}
Serial.print("Ταχύτητα: ");
Σειριακή εκτύπωσηln(spd);
Serial.println("------------");
καθυστέρηση(spd);
}

Πως δουλεύει

Αποδείχθηκε εύκολος ο έλεγχος του σερβομηχανισμού (χρησιμοποιώντας τη βιβλιοθήκη). Απλώς ονομάζουμε τη συνάρτηση εγγραφής και την τιμή της γωνίας περιστροφής σε μοίρες. Αλλά θα αλλάξουμε την τιμή της γωνίας δυναμικά χρησιμοποιώντας το joystick.

Ο βρόχος διαβάζει την τιμή από την αναλογική είσοδο (που κυμαίνεται από 0 έως 1023 ανάλογα με τη θέση του joystick), διαιρώ αυτήν την τιμή για να μειώσω το βήμα κατά 64 και να αφαιρέσω το 8 στο μέσο όρο. Τώρα θα έχουμε μια τιμή από 7 έως -8. Στη συνέχεια αλλάζω τη μεταβλητή που αποθηκεύει τη γωνία περιστροφής σε αυτήν την τιμή. Αλλάζω και την καθυστέρηση ανάλογα με αυτή την τιμή. Όσο μεγαλύτερη είναι η εκτροπή, τόσο μικρότερη είναι η καθυστέρηση (γρηγορότερη περιστροφή).

  1. Με το Arduino παίρνουμε +5 V στη μία πλευρά του εγκεφάλου (κόκκινο καλώδιο).
  2. Το μαύρο καλώδιο πηγαίνει από το GND στην άλλη πλευρά του εγκεφαλικού πίνακα.
  3. Πείρο σήματος - το ένατο, πράσινο καλώδιο, πηγαίνει στον σερβοκινητήρα (κίτρινο καλώδιο).
  4. Επίσης, ένα μπλε καλώδιο από το joystick (pin S-X) παρέχεται στην αναλογική είσοδο a0.
  5. Από το joystick, το VCC της πλευράς X πηγαίνει με ένα κόκκινο καλώδιο στα +5 V του εγκεφάλου.
  6. Από το joystick GND της πλευράς X, ένα λευκό καλώδιο πηγαίνει στο κοινό GND του εγκεφαλικού πίνακα.
  7. Λοιπόν, κατά συνέπεια, το λευκό καλώδιο GND του εγκεφαλικού πίνακα στο μαύρο καλώδιο του σερβοκινητήρα.
  8. Πορτοκαλί σύρμα +5 V του εγκεφαλικού πίνακα στο κόκκινο καλώδιο του σερβοκινητήρα.

Τι συνέβη

Εντολή

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

Συνδέστε το joystick σύμφωνα με το παραπάνω διάγραμμα. Συνδέστε τις αναλογικές εξόδους X και Y του joystick στις αναλογικές εισόδους A1 και A2 του Arduino, την έξοδο του κουμπιού SW στην ψηφιακή είσοδο 8. Το joystick τροφοδοτείται από +5 V.

Για να δούμε οπτικά πώς λειτουργεί το joystick, ας γράψουμε ένα τέτοιο σκίτσο. Ας δηλώσουμε τις ακίδες, ορίζουμε τους τρόπους λειτουργίας τους. Σημειώστε ότι στη διαδικασία setup(), έχουμε εφαρμόσει υψηλό επίπεδο στην είσοδο switchPin. Αυτό επέτρεψε την ενσωματωμένη pull-up αντίσταση σε αυτήν τη θύρα. Εάν δεν είναι ενεργοποιημένο, τότε όταν δεν πατηθεί το κουμπί του joystick, η 8η θύρα του Arduino θα κρέμεται στον αέρα και θα πιάσει τα pickups. Αυτό θα προκαλέσει ανεπιθύμητα χαοτικά ψευδώς θετικά.

Στη διαδικασία loop(), μετράμε συνεχώς την κατάσταση του κουμπιού και το εμφανίζουμε χρησιμοποιώντας το LED στον ακροδέκτη 13. Λόγω του γεγονότος ότι η είσοδος switchPin τροφοδοτείται προς τα πάνω, το LED είναι συνεχώς αναμμένο και όταν το κουμπί είναι πατημένο, σβήνει και όχι το αντίστροφο.

Στη συνέχεια, διαβάζουμε τα δύο ποτενσιόμετρα joystick - την έξοδο των αξόνων X και Y. Το Arduino έχει ADC 10-bit, επομένως οι τιμές που λαμβάνονται από το joystick κυμαίνονται από 0 έως 1023. Στη μεσαία θέση του joystick , όπως φαίνεται στην εικόνα, οι τιμές που λαμβάνονται στο 500 είναι περίπου στη μέση του εύρους.

Συνήθως, ένα joystick χρησιμοποιείται για τον έλεγχο των ηλεκτροκινητήρων. Αλλά γιατί να μην το χρησιμοποιήσετε, για παράδειγμα, για να ελέγξετε τη φωτεινότητα ενός LED; Ας συνδέσουμε ένα RGB LED (ή τρία κανονικά LED) στις ψηφιακές θύρες 9, 10 και 11 του Arduino χρησιμοποιώντας το παραπάνω διάγραμμα, χωρίς φυσικά να ξεχνάμε τις αντιστάσεις.

Θα αλλάξουμε τη φωτεινότητα των αντίστοιχων χρωμάτων όταν αλλάζουμε τη θέση του joystick κατά μήκος των αξόνων, όπως φαίνεται στο σχήμα. Λόγω του γεγονότος ότι το joystick μπορεί να μην είναι ακριβώς κεντραρισμένο από τον κατασκευαστή και να έχει τη μέση της κλίμακας όχι στο 512, αλλά από το 490 έως το 525, το LED μπορεί να ανάβει ελαφρώς ακόμα και όταν το joystick βρίσκεται στην ουδέτερη θέση. Εάν θέλετε να είναι εντελώς απενεργοποιημένο, κάντε τις κατάλληλες τροποποιήσεις στο πρόγραμμα.

Με βάση το παραπάνω διάγραμμα, ας γράψουμε ένα σκίτσο για το Arduino που ελέγχει τη φωτεινότητα ενός RGB LED χρησιμοποιώντας ένα joystick.

Αρχικά, ας δηλώσουμε μια αντιστοίχιση καρφίτσας και δύο μεταβλητές - ledOn και prevSw - για να λειτουργήσουν με το κουμπί. Στη διαδικασία setup(), αντιστοιχίστε τις ακίδες λειτουργίας και συνδέστε μια pull-up αντίσταση στην ακίδα του κουμπιού με την εντολή digitalWrite (swPin, HIGH).

Στον βρόχο loop(), προσδιορίζουμε το πάτημα του κουμπιού joystick. Πατώντας το κουμπί, εναλλάσσουμε τους τρόπους λειτουργίας μεταξύ της λειτουργίας «φακός» και της λειτουργίας «έγχρωμη μουσική».

Στη λειτουργία freeMode(), ελέγχουμε τη φωτεινότητα των LED γέρνοντας το joystick σε διαφορετικές κατευθύνσεις: όσο πιο έντονη είναι η κλίση κατά μήκος του άξονα, τόσο πιο φωτεινό λάμπει το αντίστοιχο χρώμα. Επιπλέον, η συνάρτηση αναλαμβάνει τον μετασχηματισμό των τιμών χάρτης (τιμή, από κάτω, από πάνω, προς τα κάτω, προς τα πάνω). Η συνάρτηση map() αντιστοιχίζει τις μετρούμενες τιμές (από Κάτω, από Κορυφή) κατά μήκος των αξόνων του joystick στο επιθυμητό εύρος φωτεινότητας (toBottom, to Top). Μπορείτε να κάνετε το ίδιο με τις συνηθισμένες αριθμητικές πράξεις, αλλά μια τέτοια σημείωση είναι πολύ μικρότερη.

Στο discoMode(), τα τρία χρώματα ξεθωριάζουν εναλλάξ μέσα και έξω. Για να μπορούμε να βγούμε από τον βρόχο όταν πατηθεί το κουμπί, ελέγχουμε κάθε επανάληψη για να δούμε αν έχει γίνει κλικ στο κουμπί.


Σπιτική διαδικασία συναρμολόγησης:

Βήμα πρώτο. Συνδέουμε σερβοκινητήρες
Η διαδικασία συναρμολόγησης ενός σπιτικού προϊόντος ξεκινά με τη σύνδεση σερβοκινητήρων. Για τη συναρμολόγηση μιας προκαταρκτικής διάταξης, χρησιμοποιείται μια πλακέτα κυκλώματος. Στη συνέχεια, μπορείτε να φτιάξετε μια ξεχωριστή ασπίδα. Στο σχήμα μπορείτε να δείτε ακριβώς πώς συνδέονται όλα.


Το κόκκινο καλώδιο είναι ρεύμα και συνδέεται με τον ακροδέκτη 5V στο Arduino.
Το μαύρο καλώδιο είναι αρνητικό (γείωση) και συνδέεται με έναν ακροδέκτη Arduino που ονομάζεται GND.
Το κίτρινο καλώδιο από τον Δεξί & Αριστερό σερβοκινητήρα πρέπει να συνδεθεί στον ακροδέκτη 11. Σε ορισμένα μοντέλα, ενδέχεται να είναι επίσης λευκό.
Ένα παρόμοιο κίτρινο καλώδιο Up & Down πρέπει να συνδεθεί στον πείρο 4. Μπορεί επίσης να είναι λευκό σε ορισμένα μοντέλα κινητήρα.
Είναι σημαντικό να θυμάστε ότι οι σύνδεσμοι σήματος που ελέγχουν τον κινητήρα προέρχονται από τις εξόδους PWM.

Βήμα δυο. Συνδέουμε το joystick

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


1. Οι έξοδοι U/R+ και L/R+ βρίσκονται στη μονάδα joystick. Η τροφοδοσία συνδέεται μέσω αυτών των εξόδων. Αντίστοιχα, εδώ πρέπει να εφαρμοστεί τάση + 5 V από την αντίστοιχη ακίδα στο Arduino.

2. Υπάρχουν επίσης δύο υποδοχές στο joystick που ονομάζονται L / R και δύο υποδοχές U / D. Πρέπει να συνδεθούν σε αναλογικές εξόδους A3 και A4.

3. Και τέλος, η γείωση στο joystick πρέπει να συνδεθεί με τη γείωση στο Arduino.

Μετά τη συναρμολόγηση, η σύνδεση πρέπει να ελεγχθεί ξανά. Στις περισσότερες περιπτώσεις προκύπτουν προβλήματα λόγω σφαλμάτων σύνδεσης. Αυτό ισχύει ιδιαίτερα όταν χρησιμοποιείται μια πλακέτα κυκλώματος και υπάρχουν πολλές συνδέσεις σε αυτήν.

Βήμα τρίτο. Σκίτσο για το Arduino
Ο κώδικας είναι πολύ απλός και περιέχει αναλυτικά σχόλια. Ο παραπάνω κώδικας πρέπει απλώς να αντιγραφεί στο Arduino IDE. Μετά τη φόρτωση του κωδικού, οι κινητήρες δεν πρέπει να κινούνται. Θα πρέπει να αρχίσουν να κινούνται μόνο όταν πατηθεί ένα κουμπί στο joystick.


Προβλήματα που μπορεί να προκύψουν και τρόποι επίλυσής τους
1. Εάν οι κινητήρες δεν ανάβουν, πρέπει να ελέγξετε ξανά τη σύνδεση. Οι έξοδοι PWM χρησιμοποιούνται για τη σύνδεση κινητήρων και οι αναλογικές έξοδοι για τη σύνδεση χειριστηρίων.

2. Συμβαίνει ότι αμέσως μετά τη φόρτωση του κωδικού, οι κινητήρες αρχίζουν να δονούνται. Αυτό συμβαίνει εάν οι ακίδες U / D + L / R + έχουν συνδεθεί λανθασμένα. Η σύνδεση πρέπει να ελεγχθεί προσεκτικά. Για να μην καεί η πλακέτα κατά τη διάρκεια της δοκιμής, πρέπει να αποσυνδεθεί από τον υπολογιστή.

3. Εάν όλα ελεγχθούν ξανά, αλλά οι κινητήρες εξακολουθούν να μην θέλουν να λειτουργήσουν, μπορείτε να δοκιμάσετε να επανασυνδέσετε το joystick. Πρέπει να αφαιρεθεί από την πλακέτα κυκλώματος και στη συνέχεια να εγκατασταθεί ξανά με λίγη προσπάθεια. Οι σύνδεσμοι του Joystick πρέπει να εφαρμόζουν καλά στο breadboard.

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

Νέα άρθρα

● Έργο 18: Επεξεργασία δεδομένων από το joystick. Joystick Pan/Tilt Bracket Control

Σε αυτό το πείραμα, θα εξετάσουμε τη σύνδεση ενός αναλογικού joystick δύο αξόνων στο Arduino.

Απαιτούμενα εξαρτήματα:

Ένα joystick είναι εξαιρετικό για τον έλεγχο οποιασδήποτε συσκευής που βασίζεται σε Arduino που κινείται σε σύστημα συντεταγμένων 2D. Για τις πλακέτες Arduino, υπάρχουν αναλογικές μονάδες joystick που έχουν άξονα X, Y (ποτενσιόμετρα 10 kΩ) και ένα πρόσθετο κουμπί - τον άξονα Z. Το joystick σάς επιτρέπει να παρακολουθείτε ομαλά και με ακρίβεια τον βαθμό απόκλισης από το σημείο μηδέν. Το ίδιο το joystick έχει ελατήριο, επομένως θα επιστρέψει στην κεντρική κατάσταση αφού απελευθερωθεί από μια συγκεκριμένη θέση.
Οι ακίδες Vcc και GND μεταξύ και των τριών ομάδων ακίδων συνδέονται. Έτσι, χρειάζονται 5 καλώδια για τη σύνδεση: άξονας X, άξονας Y, κουμπί Z, τροφοδοσία Vcc και κοινό GND. Τα Joysticks είναι παθητικές μονάδες και δεν αντλούν ισχύ από την πλακέτα του Arduino. Οι ακίδες VERT και HORZ συνδέονται στις αναλογικές εισόδους A0 και A1 του Arduino, SEL - στην ψηφιακή είσοδο D2. Το διάγραμμα σύνδεσης φαίνεται στην εικ. 18.1.

Ρύζι. 18.1. Διάγραμμα καλωδίωσης πλακέτας joystick στο Arduino

Ας γράψουμε ένα σκίτσο για την ανάγνωση δεδομένων joystick και την έξοδο τιμών στην οθόνη σειριακής θύρας Arduino IDE. Το περιεχόμενο του σκίτσου φαίνεται στην Λίστα 18.1.

Const int axisX=A0 // Ο άξονας Χ είναι συνδεδεμένος στο A0 const int axisY=A1 // Ο άξονας Y συνδέεται με το A1 const int axisZ=2 // Άξονας Z (κουμπί joystick) συνδεδεμένος στο D2 int valX, valY, valZ = 0 ; void setup()( pinMode(axis_Z, INPUT_PULLUP); // ρυθμίστε το D2 ως ΕΙΣΟΔΟ με συμπερίληψη // pull-up αντίσταση μέσα στον επεξεργαστή Serial.begin(9600); ) void loop()( valX = analogRead(axisX); // τιμή του άξονα X valY = analogRead(axisY); // τιμή του άξονα Y valZ = 1 -digitalRead(axisZ); // Τιμή άξονα Z (κουμπί) // τιμές εξόδου στην οθόνη Serial.print("X:" );Serial.print(valX, DEC); Serial.print(" | Y:" );Serial.print(valY, DEC) Serial.print(" | Z: " );Serial.println(valZ, DEC); καθυστέρηση (500 ); // παύση πριν από την επόμενη ανάγνωση δεδομένων }
Εντολή σύνδεσης:

1. Συνδέουμε το joystick στην πλακέτα Arduino σύμφωνα με το διάγραμμα στο σχ. 18.2.
2. Φορτώστε το σκίτσο από τη λίστα 18.1 στον πίνακα Arduino.
3. Κοιτάμε στην οθόνη σειριακής θύρας Arduino IDE για να εμφανίσουμε τις τιμές μετατόπισης στους άξονες X και Y και την κατάσταση του κουμπιού (άξονας Z).

Ρύζι. 18.2. Διάγραμμα καλωδίωσης πλακέτας Joystick και βραχίονα παν/τίτλου για το Arduino


Ας δημιουργήσουμε ένα πιο κατανοητό παράδειγμα χρήσης ενός joystick για τον έλεγχο της θέσης ενός βραχίονα Pan/Titl με δύο σερβομηχανισμούς, στον οποίο μπορείτε να τοποθετήσετε, για παράδειγμα, μια κάμερα και να αλλάξετε τη θέση της κάμερας αριστερά/δεξιά και κάτω/πάνω χρησιμοποιώντας το joystick. Το διάγραμμα καλωδίωσης για αυτό το πείραμα φαίνεται στο σχ. 18.2.
Μετακινώντας το joystick κατά μήκος του άξονα Χ θα ελέγξουμε την περιστροφή του κάτω σερβομηχανισμού (αριστερά/δεξιά), μετακινώντας το joystick κατά μήκος του άξονα Y θα ελέγξουμε την περιστροφή του άνω σερβομηχανισμού (πάνω/κάτω). Η μέση ουδέτερη θέση του joystick σε κάθε άξονα (με αναλογική τιμή 512) αντιστοιχεί στη γωνία περιστροφής του σερβομηχανισμού κατά γωνία 90°. Τα περιεχόμενα του σκίτσου εμφανίζονται στην Λίστα 18.2.

#περιλαμβάνω // σύνδεση της βιβλιοθήκης Servo Servo servo1, servo2; const int pinServo1=8 ; // Καρφίτσα για σύνδεση 1 σερβομηχανισμού const int pinServo2=9 ; // Καρφώστε για να συνδέσετε 2 σερβομηχανισμούς // μεταβλητές για την αποθήκευση των γωνιών περιστροφής των σερβομηχανισμών int angleServo1,angleServo2 = 0 ; const int axisX=A0; // Ο άξονας Χ είναι συνδεδεμένος στο A0 const int axisY=A1; // Ο άξονας Y συνδέεται με το A1 int valX, valY = 0 ; // μεταβλητές για την αποθήκευση τιμών αξόνων void setup(){ // συνδέστε τη μεταβλητή servo1 με τον pinServo1 pin servo1.attach(pinServo1); // συνδέστε τη μεταβλητή servo2 με τον pinServo2 pin Servo2.attach(pinServo2); ) void loop()( valX = analogRead(axisX); // X axis value valY = analogRead(axisY); // Y axis value // κλιμακώστε την τιμή στο διάστημα 0-180 angleServo1=χάρτης (valX,0 ,1023 ,0 ,180 ); angleServo2=map (valY,0 ,1023 ,0 ,180 ); // στρέψτε τους σερβομηχανισμούς στη γωνία λήψης servo1.write(angleServo1); servo2.write(angleServo2); καθυστέρηση(15); // παύση για να περιμένει να γυρίσουν οι σερβομηχανισμοί }
Εντολή σύνδεσης:

1. Συναρμολογήστε τον βραχίονα Pan/Title και τους σερβομηχανισμούς.
2. Συνδέουμε το joystick και το Pan / Title Bracket στην πλακέτα Arduino σύμφωνα με το διάγραμμα στο σχ. 18.2.
3. Φορτώστε το σκίτσο από τη λίστα 18.2 στον πίνακα Arduino.
4. Ελέγξτε τη θέση του βραχίονα Pan/Title μετακινώντας το joystick κατά μήκος των αξόνων X και Y.

Λίστες προγραμμάτων

Η χρήση ενός joystick είναι ένας από τους τρόπους ανταλλαγής πληροφοριών μεταξύ ενός ατόμου και μιας συσκευής (υπολογιστή, μικροελεγκτή) που βασίζεται στο Arduino. Τις περισσότερες φορές χρησιμοποιούνται για τον έλεγχο μηχανισμών ή ρομπότ. Κατ' αναλογία με τον γνωστό κόσμο των τυχερών παιχνιδιών, τα joystick ονομάζονται επίσης και gamepad. Το gamepad είναι απλό και εύκολο στη χρήση. Σήμερα υπάρχει μεγάλος αριθμός τύπων joystick όσον αφορά τον αριθμό των βαθμών ελευθερίας, τη συχνότητα ανάγνωσης πληροφοριών και την τεχνολογία που χρησιμοποιείται. Σε αυτό το άρθρο, θα εξετάσουμε την πιο δημοφιλή επιλογή, θα μάθουμε πώς να ελέγχετε το joystick και πώς να το συνδέσετε.

Το αναλογικό μοχλό μοιάζει με ένα πόμολο που είναι τοποθετημένο σε μια άρθρωση με δύο ποτενσιόμετρα που καθορίζουν τους άξονες X και Y και ένα κουμπί Z. Γείρετε ή γυρίστε το κουμπί περιστρέφει μια ειδική κινούμενη επαφή, η οποία αλλάζει την τάση εξόδου. Το ίδιο το gamepad είναι εξοπλισμένο με ένα ελατήριο, χάρη στο οποίο επιστρέφει ομαλά στην αρχική του κεντρική κατάσταση αφού το απελευθερώσετε από οποιαδήποτε θέση. Η συσκευή σάς επιτρέπει να παρακολουθείτε πιο ομαλά τον βαθμό απόκλισης από το κεντρικό (μηδέν) σημείο.

Σύνδεση joystick σε arduino

Η σύνδεση του joystick στο Arduino Uno πραγματοποιείται σύμφωνα με το παρακάτω διάγραμμα.

Η μονάδα έχει 5 εξόδους - Vcc, Gnd, X, Y και Key (οι χαρακτηρισμοί ενδέχεται να διαφέρουν ανάλογα με τη συσκευή).

Τα δεδομένα στον άξονα X εξάγονται στην είσοδο A0, κατά μήκος του άξονα Y - στο A1. Για οπτικό έλεγχο του πατήματος του κουμπιού, μπορείτε επίσης να συνδέσετε το LED D11. Η ισχύς παρέχεται από τάση 5 βολτ. Η ακίδα GND συνδέεται με την ίδια ακίδα στην πλακέτα Arduino. Ο ακροδέκτης SW μπορεί να συνδεθεί σε οποιαδήποτε ψηφιακή ακίδα.

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

Πώς να παρακολουθείτε την τρέχουσα θέση ή κατεύθυνση του joystick

Για να χρησιμοποιήσουμε το joystick σε ένα πραγματικό έργο, πρέπει να γράψουμε ένα σκίτσο για να επεξεργαστούμε τα δεδομένα που στέλνει το joystick κατά τη λειτουργία του.

Μπορείτε να μάθετε σε ποια θέση βρίσκεται αυτή τη στιγμή η συσκευή, ανάλογα με τις τιμές των ποτενσιόμετρων. Η κίνηση πραγματοποιείται προς την κατεύθυνση των αξόνων X και Y που είναι κάθετοι. Οι πληροφορίες διαβάζονται από το gamepad χρησιμοποιώντας - εμφανίζει τιμές στην περιοχή από 0 έως 1023. Ως ορίσματα, λαμβάνει τους αριθμούς των ακίδων στο οποίο είναι συνδεδεμένο το joystick:

Serial.println(analogRead(A0)); // δείχνει τη θέση της συντεταγμένης Χ

Serial.println(analogRead(A1)); // δείχνει τη θέση της συντεταγμένης Y

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

byte const PIN_ANALOG_X = A0; // σταθερά για τη συντεταγμένη Χ

byte const PIN_ANALOG_Y = A1; // σταθερά για τη συντεταγμένη Y

Καθορισμός της κατεύθυνσης κίνησης με το joystick

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

Με την τιμή των θέσεων των αξόνων X και Y, μπορείτε να μάθετε εάν το joystick βρίσκεται στο κέντρο ή εάν έχει συμβεί μια μετατόπιση. Οι τιμές προς όλες τις κατευθύνσεις κυμαίνονται από 0 έως 1023, όπως αναφέρθηκε προηγουμένως. Πρώτα απ 'όλα, έρχεται η σκέψη ότι το κεντρικό σημείο θα είναι περίπου στην τιμή 511-512. Αυτό το συμπέρασμα δεν είναι απολύτως σωστό, αφού δεν μπορεί να προσδιοριστεί μια απολύτως ακριβής θέση.

Ο λανθασμένος προσδιορισμός της κεντρικής τιμής μπορεί να οδηγήσει σε εσφαλμένες πληροφορίες σχετικά με την κίνηση του joystick εάν βρίσκεται σε ακίνητη κατάσταση. Για να το κάνετε αυτό, επιλέξτε ένα αριθμητικό εύρος και υποθέστε υπό όρους ότι οποιαδήποτε τιμή σε αυτό θα είναι το κεντρικό σημείο. Οι τιμές πρέπει να προσαρμοστούν για κάθε τύπο joystick, αλλά κατά προσέγγιση θα είναι στην περιοχή 505-518. Οι τιμές που προκύπτουν γράφονται στον κώδικα ως σταθερές:

const int X_THRESHOLD_LOW = 505;

const int X_THRESHOLD_HIGH = 518;

const int Y_THRESHOLD_LOW = 500;

const int Y_THRESHOLD_HIGH = 510;

Το επόμενο βήμα είναι να μετατρέψετε τις συντεταγμένες σε ένα εύρος από -1 έως 1. Για το X -1 κινείται προς τα αριστερά, το 0 δεν είναι κίνηση, το 1 είναι δεξιά. Στο Y -1 - κίνηση προς τα κάτω, 0 - κεντρική τιμή, 1 - προς τα πάνω. Αρχικά, ορίζουμε όλες τις τιμές στο κέντρο 0. Για να ελέγξουμε αν συμβαίνει η κίνηση, χρησιμοποιούμε δηλώσεις if / else.

Παγίδες στη δουλειά του gamepad

Όπως με κάθε συσκευή, τα joystick δεν είναι χωρίς ελαττώματα. Πρώτα απ 'όλα, η παρουσία ελατηρίου δεν επιτρέπει στη λαβή να επιστρέψει με ακρίβεια στην κεντρική θέση λόγω τριβής στα μηχανικά μέρη. Αυτό οδηγεί στο γεγονός ότι πρέπει να προσδιορίσετε προγραμματικά την κεντρική θέση, ή μάλλον το εύρος τιμών στο οποίο οποιοδήποτε σημείο θα θεωρείται υπό όρους το μέσο.

Το δεύτερο πρόβλημα μπορεί να ονομαστεί η παρουσία των λεγόμενων νεκρών ζωνών. Οι δύο ακραίες τιμές με τις μεγαλύτερες αποκλίσεις πρέπει να είναι ίσες με 0 V και την τάση τροφοδοσίας. Στην πραγματικότητα, αυτές οι τιμές μπορεί να διαφέρουν, καθώς δεν χρησιμοποιείται ολόκληρο το ηλεκτρικό εύρος αλλαγής αντίστασης. Για να λυθεί αυτό το πρόβλημα, τα ακραία σημεία μπορούν να αντιστοιχούν σε τιμές 1 kΩ και 9 kΩ.

Πλακέτα επέκτασης ασπίδας JoyStick

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

Σκεφτείτε τι είναι αυτή η ασπίδα από τον παγκοσμίως διάσημο κατασκευαστή arduino Sparkfun. Αυτό το gamepad λειτουργεί καλά και είναι σχετικά φθηνό. Η συσκευή μπορεί να παραδοθεί σε ελαφρώς αποσυναρμολογημένη μορφή, επομένως πρέπει πρώτα να συναρμολογηθεί.


Η ασπίδα περιέχει πολλά τυπικά κουμπιά (4 κανονικά κουμπιά στο πλάι και ένα κουμπί επιλογής). Ανάλογα με το μοντέλο, μπορούν να προστεθούν στην πλακέτα υποδοχές σύνδεσης bluetooth ή μονάδων wifi. Παραδοσιακά, χρησιμοποιώντας εξόδους καρφίτσας και χτένας, μπορείτε να συνδέσετε εξωτερικές συσκευές.

συμπέρασμα

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

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

Συνεχίζοντας το θέμα:
Λύσεις

Αυτή είναι μια ειδοποίηση σχετικά με τη λανθασμένη λειτουργία του υποσυστήματος γραφικών του υπολογιστή στα Windows 10. Εμφανίζεται στο κέντρο ειδοποιήσεων ως μήνυμα κειμένου κατά την εκκίνηση ή μετά...

Νέα άρθρα
/
Δημοφιλής