- Απαιτούμενα υλικά
- Πώς λειτουργεί ένας περιστροφικός κωδικοποιητής;
- Τύποι περιστροφικού κωδικοποιητή
- KY-040 Rotary Encoder Pinout και περιγραφή
- Διάγραμμα κυκλώματος Arduino Rotary Encoder
- Προγραμματισμός του Arduino για Rotary Encoder
- Εργασία του Rotary Encoder με τον Arduino
Ένας περιστροφικός κωδικοποιητής είναι μια συσκευή εισόδου που βοηθά το χρήστη να αλληλεπιδράσει με ένα σύστημα. Μοιάζει περισσότερο με ποτενσιόμετρο ραδιοφώνου, αλλά εξάγει μια σειρά παλμών που κάνει την εφαρμογή του μοναδική. Όταν περιστρέφεται ο διακόπτης του κωδικοποιητή, περιστρέφεται με τη μορφή μικρών βημάτων που το βοηθούν να χρησιμοποιηθεί για έλεγχο stepper / servo motor, πλοήγηση σε μια ακολουθία μενού και αύξηση / μείωση της τιμής ενός αριθμού και πολλά άλλα.
Σε αυτό το άρθρο θα μάθουμε για τους διαφορετικούς τύπους Rotary Encoders και πώς λειτουργεί. Θα το συνδέσουμε επίσης με το Arduino και θα ελέγξουμε την τιμή ενός ακέραιου περιστρέφοντας τον Encoder και θα εμφανίσουμε την τιμή του σε μια οθόνη LCD 16 * 2. Στο τέλος αυτού του σεμιναρίου θα είστε άνετοι με τη χρήση ενός Rotary Encoder για τα έργα σας. Ας ξεκινήσουμε λοιπόν…
Απαιτούμενα υλικά
- Περιστροφικός κωδικοποιητής (KY-040)
- Arduino UNO
- 16 * 2 αλφαριθμητική LCD
- Ποτενσιόμετρο 10k
- Ψωμί
- Σύνδεση καλωδίων
Πώς λειτουργεί ένας περιστροφικός κωδικοποιητής;
Ο Rotary Encoder είναι ένας ηλεκτρομηχανικός μετατροπέας, που σημαίνει ότι μετατρέπει τις μηχανικές κινήσεις σε ηλεκτρονικούς παλμούς. Αποτελείται από ένα κουμπί που όταν περιστρέφεται θα κινείται βήμα προς βήμα και θα παράγει μια ακολουθία παλμών τρένων με προκαθορισμένο πλάτος για κάθε βήμα. Υπάρχουν πολλοί τύποι κωδικοποιητών ο καθένας με τον δικό του μηχανισμό εργασίας, θα μάθουμε για τους τύπους αργότερα, αλλά προς το παρόν ας επικεντρωθούμε μόνο στον αυξητικό κωδικοποιητή KY040 αφού τον χρησιμοποιούμε για το σεμινάριό μας.
Η εσωτερική μηχανική δομή για τον κωδικοποιητή φαίνεται παρακάτω. Αποτελείται βασικά από έναν κυκλικό δίσκο (γκρι χρώμα) με αγώγιμα τακάκια (χρώμα χαλκού) τοποθετημένα πάνω από αυτόν τον κυκλικό δίσκο. Αυτά τα αγώγιμα τακάκια τοποθετούνται σε ίση απόσταση όπως φαίνεται παρακάτω. Οι ακίδες εξόδου στερεώνονται πάνω από αυτόν τον κυκλικό δίσκο, με τέτοιο τρόπο ώστε όταν περιστρέφεται το κουμπί, τα αγώγιμα μαξιλάρια έρχονται σε επαφή με τους πείρους εξόδου. Εδώ υπάρχουν δύο ακίδες εξόδου, η έξοδος Α και η έξοδος Β όπως φαίνεται στο παρακάτω σχήμα.
Η κυματομορφή εξόδου που παράγεται από τον πείρο εξόδου Α και την έξοδο Β εμφανίζεται σε μπλε και πράσινο χρώμα αντίστοιχα. Όταν το αγώγιμο μαξιλάρι βρίσκεται ακριβώς κάτω από τον πείρο, πηγαίνει ψηλά με αποτέλεσμα την ώρα και όταν το αγώγιμο επίθεμα απομακρύνεται, ο πείρος πηγαίνει χαμηλό με αποτέλεσμα τον χρόνο εκτός λειτουργίας της κυματομορφής που φαίνεται παραπάνω. Τώρα, αν μετρήσουμε τον αριθμό των παλμών θα μπορέσουμε να προσδιορίσουμε πόσα βήματα έχει μετακινηθεί ο Κωδικοποιητής.
Τώρα μπορεί να προκύψει το ερώτημα, γιατί χρειαζόμαστε δύο σήματα παλμού όταν το ένα είναι αρκετό για να μετρήσει τον αριθμό των βημάτων που έγιναν κατά την περιστροφή του κουμπιού. Αυτό συμβαίνει επειδή πρέπει να προσδιορίσουμε σε ποια κατεύθυνση περιστρέφεται το κουμπί. Εάν ρίξετε μια ματιά στους δύο παλμούς, μπορείτε να παρατηρήσετε ότι και οι δύο είναι 90 ° εκτός φάσης. Ως εκ τούτου, όταν ο διακόπτης περιστρέφεται δεξιόστροφα, η έξοδος Α θα πάει ψηλά πρώτα και όταν ο διακόπτης περιστρέφεται αριστερόστροφα, η έξοδος Β θα φτάσει ψηλά πρώτα.
Τύποι περιστροφικού κωδικοποιητή
Υπάρχουν πολλοί τύποι περιστροφικού κωδικοποιητή στην αγορά που ο σχεδιαστής μπορεί να επιλέξει έναν σύμφωνα με την αίτησή του. Οι πιο συνηθισμένοι τύποι αναφέρονται παρακάτω
- Αυξητικός κωδικοποιητής
- Απόλυτος κωδικοποιητής
- Μαγνητικός κωδικοποιητής
- Οπτικός κωδικοποιητής
- Κωδικοποιητής λέιζερ
Αυτοί οι κωδικοποιητές ταξινομούνται με βάση το σήμα εξόδου και την τεχνολογία ανίχνευσης, ο αυξητικός κωδικοποιητής και οι απόλυτοι κωδικοποιητές ταξινομούνται με βάση το σήμα εξόδου και ο μαγνητικός, οπτικός και λέιζερ κωδικοποιητής ταξινομούνται με βάση την τεχνολογία αίσθησης. Ο κωδικοποιητής που χρησιμοποιείται εδώ είναι ένας αυξητικός κωδικοποιητής τύπου.
KY-040 Rotary Encoder Pinout και περιγραφή
Τα pinouts του περιστροφικού κωδικοποιητή τύπου ΚΥ-040 εμφανίζονται παρακάτω
Οι δύο πρώτοι ακροδέκτες (Ground και Vcc) χρησιμοποιούνται για την τροφοδοσία του Encoder, συνήθως χρησιμοποιείται τροφοδοσία + 5V. Εκτός από την περιστροφή του κουμπιού σε ρολόι προς τα δεξιά και αριστερόστροφα, ο κωδικοποιητής διαθέτει επίσης διακόπτη (Active low) που μπορεί να πατηθεί πιέζοντας το κουμπί προς τα μέσα. Το σήμα από αυτόν τον διακόπτη λαμβάνεται μέσω του πείρου 3 (Διακόπτης). Τέλος, έχει τους δύο ακροδέκτες εξόδου που παράγουν τις κυματομορφές όπως συζητήθηκε παραπάνω. Τώρα ας μάθουμε πώς να το συνδέσουμε με το Arduino.
Διάγραμμα κυκλώματος Arduino Rotary Encoder
Το πλήρες διάγραμμα κυκλώματος για το Interfacing Rotary Encoder with Arduino φαίνεται στην παρακάτω εικόνα
Ο Rotary Encoder έχει 5 ακίδες με τη σειρά που φαίνεται στην παραπάνω ετικέτα. Οι δύο πρώτες ακίδες είναι Ground και Vcc που συνδέονται με το Ground και + 5V pin του Arduino. Ο διακόπτης του κωδικοποιητή συνδέεται με τον ψηφιακό ακροδέκτη D10 και τραβιέται επίσης ψηλά μέσω μιας αντίστασης 1k. Οι δύο ακίδες εξόδου συνδέονται στα D9 και D8 αντίστοιχα.
Για να εμφανιστεί η τιμή της μεταβλητής που θα αυξηθεί ή θα μειωθεί περιστρέφοντας τον Περιστροφικό κωδικοποιητή χρειαζόμαστε μια ενότητα οθόνης. Αυτή που χρησιμοποιείται εδώ είναι συνήθως διαθέσιμη 16 * 2 άλφα αριθμητική οθόνη LCD. Έχουμε συνδέσει την οθόνη για λειτουργία σε λειτουργία 4-bit και την τροφοδοτήσαμε χρησιμοποιώντας τον πείρο + 5V του Arduino. Το Ποτενσιόμετρο χρησιμοποιείται για τη ρύθμιση της αντίθεσης της οθόνης LCD. Αν θέλετε να μάθετε περισσότερα για την οθόνη LCD Interfacing με το Arduino, ακολουθήστε τον σύνδεσμο. Το πλήρες κύκλωμα μπορεί να χτιστεί πάνω από ένα breadboard, έμοιαζε κάπως έτσι κάτω από την ολοκλήρωση όλων των συνδέσεων.
Προγραμματισμός του Arduino για Rotary Encoder
Είναι αρκετά εύκολο και απλό να προγραμματίσετε την πλακέτα Arduino για τη διασύνδεση ενός Rotary Encoder με αυτήν, εάν έχετε κατανοήσει την αρχή λειτουργίας ενός Rotary Encoder. Πρέπει απλώς να διαβάσουμε τον αριθμό παλμών για να προσδιορίσουμε πόσες στροφές έχει κάνει ο κωδικοποιητής και να ελέγξουμε ποιος παλμός πήγε ψηλά πρώτα για να βρούμε σε ποια κατεύθυνση περιστράφηκε ο κωδικοποιητής. Σε αυτό το σεμινάριο θα εμφανίσουμε τον αριθμό που αυξάνεται ή μειώνεται στην πρώτη σειρά της οθόνης LCD και την κατεύθυνση του κωδικοποιητή στη δεύτερη γραμμή. Το πλήρες πρόγραμμα για να κάνετε το ίδιο μπορεί να βρεθεί στο κάτω μέρος αυτής της σελίδας με ένα βίντεο επίδειξης, δεν απαιτεί καμία βιβλιοθήκη. Τώρα, ας χωρίσουμε το πρόγραμμα σε μικρά κομμάτια για να κατανοήσουμε τη λειτουργία.
Δεδομένου ότι έχουμε χρησιμοποιήσει μια οθόνη LCD, συμπεριλαμβάνουμε τη βιβλιοθήκη υγρών κρυστάλλων που είναι από προεπιλογή παρούσα στο Arduino IDE. Στη συνέχεια ορίζουμε καρφίτσες για σύνδεση LCD με Arduino. Τέλος αρχικοποιούμε την οθόνη LCD σε αυτές τις καρφίτσες.
#περιλαμβάνω
Στη συνέχεια, μέσα στη λειτουργία εγκατάστασης , εμφανίζουμε ένα εισαγωγικό μήνυμα στην οθόνη LCD και στη συνέχεια περιμένουμε για 2 δευτερόλεπτα, ώστε αυτό το μήνυμα να είναι αναγνώσιμο από τον χρήστη. Αυτό γίνεται για να διασφαλιστεί ότι η οθόνη LCD λειτουργεί σωστά.
lcd.print ("Rotary Encoder"); // Γραμμή εισαγωγής μηνύματος 1 lcd.setCursor (0, 1); lcd.print ("With Arduino"); // Καθυστέρηση γραμμής εισαγωγής μηνύματος 2 (2000). lcd.clear ();
Ο Περιστροφικός κωδικοποιητής έχει τρεις ακίδες εξόδου που θα είναι ακροδέκτες INPUT για το Arduino. Αυτές οι τρεις ακίδες είναι οι διακόπτες, έξοδος Α και έξοδος Β αντίστοιχα. Αυτά δηλώνονται ως είσοδος χρησιμοποιώντας τη λειτουργία pinMode όπως φαίνεται παρακάτω.
// pin Mode δήλωση pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Μέσα στη λειτουργία κενής ρύθμισης , διαβάζουμε την κατάσταση της εξόδου A pin για να ελέγξουμε την τελευταία κατάσταση του pin. Στη συνέχεια, θα χρησιμοποιήσουμε αυτές τις πληροφορίες για να συγκρίνουμε με τη νέα τιμή για να ελέγξουμε ποιος πείρος (Έξοδος Α ή Έξοδος Β) έχει φτάσει ψηλά.
Προηγούμενο_Output = digitalRead (Encoder_OuputA); // Διαβάστε την αρχική τιμή της παραγωγής Α
Τέλος, μέσα στη λειτουργία του κύριου βρόχου , πρέπει να συγκρίνουμε την τιμή των εξόδων Α και εξόδου Β με την προηγούμενη έξοδο για να ελέγξουμε ποια θα φτάσει πρώτα ψηλά. Αυτό μπορεί να γίνει απλά συγκρίνοντας την τιμή της τρέχουσας εξόδου των Α και Β με την προηγούμενη έξοδο όπως φαίνεται παρακάτω.
if (digitalRead (Encoder_OuputA)! = Προηγούμενο_Output) { if (digitalRead (Encoder_OuputB)! = Προηγούμενο_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Δεξιόστροφα"); }
Στον παραπάνω κώδικα, η δεύτερη αν η συνθήκη εκτελείται εάν η έξοδος Β έχει αλλάξει από την προηγούμενη έξοδο. Σε αυτήν την περίπτωση, η τιμή της μεταβλητής κωδικοποιητή αυξάνεται και η οθόνη LCD δείχνει ότι ο κωδικοποιητής περιστρέφεται προς τη φορά των δεικτών του ρολογιού . Ομοίως, αν η περίπτωση προϋπόθεση αποτύχει, στην επόμενη άλλο όρο που ελαττώνει τη μεταβλητή και την απεικόνιση ότι ο κωδικοποιητής περιστρέφεται στην αριστερόστροφη κατεύθυνση. Ο κωδικός για το ίδιο φαίνεται παρακάτω.
αλλιώς { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Αντι - δεξιόστροφα") } }
Τέλος, στο τέλος του κύριου βρόχου πρέπει να ενημερώσουμε την προηγούμενη τιμή εξόδου με την τρέχουσα τιμή εξόδου, έτσι ώστε ο βρόχος να μπορεί να επαναληφθεί με την ίδια λογική. Ο παρακάτω κώδικας κάνει το ίδιο
Προηγούμενο_Output = digitalRead (Encoder_OuputA);
Ένα άλλο προαιρετικό πράγμα είναι να ελέγξετε εάν έχει πατηθεί ο διακόπτης στον Κωδικοποιητή. Αυτό μπορεί να ελεγχθεί ελέγχοντας τον πείρο του διακόπτη στον περιστροφικό κωδικοποιητή. Αυτός ο πείρος είναι ένας ενεργός χαμηλός πείρος, που σημαίνει ότι θα πέσει χαμηλά όταν πατηθεί το κουμπί. Εάν δεν πιέζεται ο πείρος παραμένει ψηλά, έχουμε χρησιμοποιήσει επίσης μια αντίσταση έλξης προς τα πάνω για να βεβαιωθούμε ότι η παραμονή είναι υψηλή όταν ο διακόπτης δεν πιέζεται, αποφεύγοντας έτσι την κατάσταση κινητού σημείου.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Πιεσμένος διακόπτης"); }
Εργασία του Rotary Encoder με τον Arduino
Μόλις το υλικό και ο κωδικός είναι έτοιμοι, απλώς ανεβάστε τον κωδικό στην πλακέτα Arduino και ενεργοποιήστε τον Πίνακα Arduino. Μπορείτε είτε να το τροφοδοτήσετε μέσω του καλωδίου USB είτε να χρησιμοποιήσετε έναν προσαρμογέα 12V. Όταν τροφοδοτείται η οθόνη LCD θα πρέπει να εμφανίζει το εισαγωγικό μήνυμα και στη συνέχεια να είναι κενό Τώρα περιστρέψτε τον περιστροφικό κωδικοποιητή και θα δείτε ότι η τιμή αρχίζει να αυξάνεται ή να μειώνεται με βάση την κατεύθυνση που περιστρέφετε. Η δεύτερη γραμμή θα σας δείξει εάν ο κωδικοποιητής περιστρέφεται δεξιόστροφα ή αριστερόστροφα. Η παρακάτω εικόνα δείχνει το ίδιο
Επίσης, όταν πατηθεί το κουμπί, η δεύτερη γραμμή θα εμφανίσει ότι το κουμπί είναι πατημένο. Η πλήρης εργασία βρίσκεται στο παρακάτω βίντεο. Αυτό είναι απλώς ένα δείγμα προγράμματος για τη διασύνδεση του Encoder με το Arduino και για να ελέγξετε εάν λειτουργεί όπως αναμένεται. Μόλις φτάσετε εδώ, θα πρέπει να μπορείτε να χρησιμοποιήσετε τον κωδικοποιητή για οποιοδήποτε από τα έργα και το πρόγραμμά σας ανάλογα.
Ελπίζω να έχετε καταλάβει το σεμινάριο και τα πράγματα λειτουργούσαν όπως έπρεπε. Εάν έχετε προβλήματα χρησιμοποιήστε την ενότητα σχολίων ή τα φόρουμ για τεχνική βοήθεια.