Πίνακας περιεχομένων:

Επιλογέας συντονισμού DIP χρησιμοποιώντας 1 καρφίτσα: 4 βήματα
Επιλογέας συντονισμού DIP χρησιμοποιώντας 1 καρφίτσα: 4 βήματα

Βίντεο: Επιλογέας συντονισμού DIP χρησιμοποιώντας 1 καρφίτσα: 4 βήματα

Βίντεο: Επιλογέας συντονισμού DIP χρησιμοποιώντας 1 καρφίτσα: 4 βήματα
Βίντεο: Makita RT0702C Πώς να χρησιμοποιήσετε το Wood Router - Router - Router 2024, Νοέμβριος
Anonim
Επιλογέας συντονισμού DIP χρησιμοποιώντας 1 ακίδα
Επιλογέας συντονισμού DIP χρησιμοποιώντας 1 ακίδα

Πριν από λίγο καιρό δούλευα σε ένα έργο "music box" που έπρεπε να επιλέξει ανάμεσα σε 10 διαφορετικά αποσπάσματα μελωδίας. Μια φυσική επιλογή για την επιλογή μιας συγκεκριμένης μελωδίας ήταν ένας διακόπτης εμβύθισης 4 ακίδων, καθώς 4 διακόπτες παρέχουν 24= 16 διαφορετικές ρυθμίσεις. Ωστόσο, η εφαρμογή της ωμής δύναμης για αυτήν την προσέγγιση απαιτεί 4 ακίδες συσκευής, μία για κάθε διακόπτη. Δεδομένου ότι σχεδίαζα να χρησιμοποιήσω το ATtiny85 για ανάπτυξη, η απώλεια 4 ακίδων ήταν λίγο υπερβολική. Ευτυχώς, έπεσα σε ένα άρθρο που περιγράφει μια έξυπνη μέθοδο για τη χρήση 1 αναλογικού πείρου για τον χειρισμό πολλαπλών εισόδων διακόπτη.

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

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

Βήμα 1: Απαιτούμενο υλικό

Απαιτούμενο υλικό
Απαιτούμενο υλικό

Η χρήση του UNO ως πλατφόρμα υλοποίησης ελαχιστοποιεί τον αριθμό των απαιτούμενων στοιχείων υλικού. Η εφαρμογή της μεθόδου εισόδου πολλαπλών διακοπτών απαιτεί μόνο έναν διακόπτη εμβύθισης 4 ακίδων, τις 5 αντιστάσεις που χρησιμοποιούνται για το διαχωριστή τάσης και σύρμα σύνδεσης για συνδέσεις. Στη διαμόρφωση προστίθεται ένας πιεζοηχητικός βομβητής για την εφαρμογή του επιλογέα μελωδίας μουσικού κουτιού. Προαιρετικά, ανάλογα με τον τύπο του διακόπτη εμβύθισης που χρησιμοποιείται, είναι χρήσιμο να χρησιμοποιήσετε μια υποδοχή 2x4 8 ακίδων για να συνδέσετε τον διακόπτη εμβύθισης στο breadboard, καθώς οι τυπικοί πείροι του διακόπτη φαίνεται να είναι κατασκευασμένοι για συγκόλληση σε μια σανίδα που δεν συνδέεται απευθείας σε ένα breadboard. Η πρίζα σταθεροποιεί τις συνδέσεις του διακόπτη εμβύθισης και εμποδίζει την εύκολη ανύψωση του διακόπτη όταν ρυθμίζετε τους διακόπτες εναλλαγής.

Ονομα Πιθανή Πηγή Πώς χρησιμοποιείται
Διακόπτης εμβύθισης 4 ακίδων Συντονισμός επιλογής
Υποδοχή 2x4 ακίδων (προαιρετικό) Αμαζόνα Οι αναρτήσεις στους περισσότερους διακόπτες εμβύθισης δεν κρατούν τον διακόπτη πολύ καλά σε ένα breadboard. Μια πρίζα βοηθά να γίνει πιο σταθερή η σύνδεση. Μια εναλλακτική λύση είναι να βρείτε έναν διακόπτη εμβύθισης που είναι πραγματικά κατασκευασμένος για χρήση σε σανίδες με κανονικές ακίδες IC.

αντιστάσεις:

  • 10K x2
  • 20K
  • 40Κ
  • 80Κ
Εφαρμόστε το διαχωριστή τάσης
παθητικός πίεζο βομβητής Αμαζόνα Παίξτε μελωδία όπως καθοδηγείται από την εφαρμογή μέσω της λειτουργίας τόνου Arduino

Βήμα 2: Επεξήγηση μεθόδου πολλαπλών διακοπτών

Επεξήγηση μεθόδου πολλαπλών διακοπτών
Επεξήγηση μεθόδου πολλαπλών διακοπτών

Αυτή η ενότητα συζητά τις βασικές έννοιες για τη μέθοδο πολλαπλών διακοπτών και αναπτύσσει τις εξισώσεις που απαιτούνται για τον αυτόνομο υπολογισμό μοναδικών αναγνωριστικών για κάθε μία από τις 16 πιθανές διαμορφώσεις ρυθμίσεων διακόπτη εμβύθισης. Αυτά τα αναγνωριστικά μπορούν στη συνέχεια να χρησιμοποιηθούν σε ένα πρόγραμμα εφαρμογής για να συσχετίσουν μια διαμόρφωση διακόπτη με μια ενέργεια. Για παράδειγμα, μπορεί να θέλετε τη ρύθμιση - ενεργοποιήστε 1, απενεργοποιήστε 2, απενεργοποιήστε 3, απενεργοποιήστε 4 (1, 0, 0, 0) - για να παίξετε το Amazing Grace και (0, 1, 0, 0) για να παίξετε Το λιοντάρι κοιμάται απόψε. Για συντομία και συνοπτικότητα, τα αναγνωριστικά διαμόρφωσης αναφέρονται ως συγκριτικά στο υπόλοιπο έγγραφο.

Εικόνα
Εικόνα

Η θεμελιώδης ιδέα για τη μέθοδο πολλαπλών διακοπτών είναι το κύκλωμα διαίρεσης τάσης το οποίο αποτελείται από 2 σειρές αντιστάσεων συνδεδεμένες σε τάση εισόδου. Το καλώδιο τάσης εξόδου συνδέεται μεταξύ των αντιστάσεων, R1 και R2, όπως φαίνεται παραπάνω. Η τάση εξόδου του διαιρέτη υπολογίζεται ως η τάση εισόδου πολλαπλασιασμένη με τον λόγο αντίστασης R2 στο άθροισμα του R1 και R2 (εξίσωση 1). Αυτός ο λόγος είναι πάντα μικρότερος από 1, οπότε η τάση εξόδου είναι πάντα μικρότερη από την τάση εισόδου.

Όπως υποδεικνύεται στο διάγραμμα σχεδιασμού παραπάνω, ο πολυδιακόπτης έχει διαμορφωθεί ως διαχωριστής τάσης με R2 σταθερό και R1 ίση με τη σύνθετη/ισοδύναμη αντίσταση για τις αντιστάσεις 4 διακόπτη εμβύθισης. Η τιμή του R1 εξαρτάται από το ποιοι διακόπτες είναι ενεργοποιημένοι και, ως εκ τούτου, συμβάλλουν στη σύνθετη αντίσταση. Δεδομένου ότι οι αντιστάσεις του διακόπτη εμβύθισης είναι παράλληλες, η εξίσωση υπολογισμού της ισοδύναμης αντίστασης δηλώνεται ως προς τα αντίστροφα των αντιστάσεων συστατικών. Για τη διαμόρφωσή μας και την περίπτωση που όλοι οι διακόπτες είναι ενεργοποιημένοι, η εξίσωση γίνεται

1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

δίνοντας τον R1 = 5333,33 βολτ Για να λάβετε υπόψη το γεγονός ότι οι περισσότερες ρυθμίσεις έχουν απενεργοποιημένο τουλάχιστον έναν από τους διακόπτες, η κατάσταση διακόπτη χρησιμοποιείται ως πολλαπλασιαστής:

1/R1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)

όπου ο πολλαπλασιαστής κατάστασης, sΕγώ, είναι ίσο με 1 εάν ο διακόπτης είναι ενεργοποιημένος και ίσος με 0 εάν ο διακόπτης είναι απενεργοποιημένος. R1 μπορεί τώρα να χρησιμοποιηθεί για τον υπολογισμό του λόγου αντίστασης που απαιτείται στην εξίσωση 1. Χρησιμοποιώντας την περίπτωση όπου όλοι οι διακόπτες είναι ενεργοποιημένοι ξανά ως παράδειγμα

ΑΝΑΛΟΓΟΣ = R2/(R1+R2) = 10000/(5333.33+10000) =.6522

Το τελευταίο βήμα στον υπολογισμό της προβλεπόμενης τιμής σύγκρισης είναι ο πολλαπλασιασμός του RATIO με 1023 για να μιμηθούμε το αποτέλεσμα της συνάρτησης analogRead. Το αναγνωριστικό για την περίπτωση όπου όλοι οι διακόπτες είναι ενεργοποιημένοι είναι τότε

συγκριτικό15 = 1023*.6522 = 667

Όλες οι εξισώσεις είναι τώρα σε ισχύ για τον υπολογισμό των αναγνωριστικών για τις 16 πιθανές ρυθμίσεις διακόπτη. Να συνοψίσουμε:

  1. R1 υπολογίζεται χρησιμοποιώντας την εξίσωση 2
  2. R1 και R2 χρησιμοποιούνται για τον υπολογισμό της σχετικής ΑΝΑΦΟΡΑΣ αντίστασης
  3. το RATIO πολλαπλασιάζεται με 1023 για να ληφθεί η τιμή σύγκρισης
  4. προαιρετικά, η προβλεπόμενη τάση εξόδου μπορεί επίσης να υπολογιστεί ως RATIO*Vin

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

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

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

//-------------------------------------------------------------------------------------

// Πρόγραμμα επίδειξης για να διαβάσετε την έξοδο του διαχωριστή τάσης και να το χρησιμοποιήσετε για να προσδιορίσετε τη διαμόρφωση // τρέχοντος διακόπτη αναζήτησης αναζητώντας την τιμή εξόδου σε έναν πίνακα τιμών σύγκρισης // για κάθε πιθανή ρύθμιση. Οι τιμές στον πίνακα αναζήτησης μπορούν // να ληφθούν είτε από προηγούμενη εκτέλεση για τη διαμόρφωση είτε μέσω υπολογισμού // με βάση τις υποκείμενες εξισώσεις. // ---------------------------------------------------- -------------------------------------- int comparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667} · // Ορισμός μεταβλητών επεξεργασίας int dipPin = A0; // αναλογικός πείρος για είσοδο διαιρέτη τάσης int dipIn = 0; // κρατά την έξοδο τάσης διαιρέτη μεταφρασμένη με analogRead int count = 0; // βρόχος μετρητής int epsilon = 7; // διάστημα σύγκρισης μισού πλάτους bool dipFound = false; // αληθής εάν η έξοδος διαχωριστή τάσης βρέθηκε στην αναζήτηση πίνακα void setup () {pinMode (dipPin, INPUT); // διαμορφώστε τον πείρο διαχωριστή τάσης ως INPUT Serial.begin (9600); // ενεργοποίηση σειριακής επικοινωνίας} void loop () {delay (3000); // κρατήστε την έξοδο από την πολύ γρήγορη κύλιση // Αρχικοποιήστε τις παραμέτρους αναζήτησης count = 0; dipFound = false; // Ανάγνωση και τεκμηρίωση τρέχουσας τάσης εξόδου dipIn = analogRead (dipPin); Serial.print ("έξοδος διαιρέτη"); Serial.print (dipIn); // Αναζήτηση συγκριτικής λίστας για την τρέχουσα τιμή ενώ ((count <16) && (! DipFound)) {if (abs (dipIn - comparator [count]) <= epsilon) {// το βρήκε dipFound = true; Serial.print ("βρέθηκε στην είσοδο"); Serial.print (count); Serial.println ("value" + String (comparator [count])); Διακοπή; } count ++; } if (! dipFound) {// τιμή δεν βρίσκεται στον πίνακα. δεν πρέπει να συμβεί Serial.println ("OOPS! Not found; Καλέστε καλύτερα Ghost Busters"); }}

Βήμα 3: Υπολογιστικό φύλλο σύγκρισης

Εικόνα
Εικόνα

Οι υπολογισμοί για τις 16 τιμές σύγκρισης δίνονται στο υπολογιστικό φύλλο που φαίνεται παραπάνω. Το συνοδευτικό αρχείο excel είναι διαθέσιμο για λήψη στο κάτω μέρος αυτής της ενότητας.

Οι στήλες υπολογιστικού φύλλου A-D καταγράφουν τις τιμές αντίστασης διακόπτη εμβύθισης και τις 16 πιθανές ρυθμίσεις διακόπτη. Λάβετε υπόψη ότι ο διακόπτης DIP υλικού που εμφανίζεται στο διάγραμμα σχεδίασης αναρίθμησης είναι στην πραγματικότητα αριθμημένος από αριστερά προς τα δεξιά αντί για την αρίθμηση δεξιά προς αριστερά που εμφανίζεται στο υπολογιστικό φύλλο. Το βρήκα κάπως μπερδεμένο, αλλά η εναλλακτική δεν βάζει τη διαμόρφωση "1" (0, 0, 0, 1) στην πρώτη της λίστας. Η στήλη Ε χρησιμοποιεί τον τύπο 2 της προηγούμενης ενότητας για να υπολογίσει την ισοδύναμη αντίσταση R του διαχωριστή τάσης1 για τη ρύθμιση. Η στήλη F χρησιμοποιεί αυτό το αποτέλεσμα για τον υπολογισμό του σχετικού RATIO αντίστασης και, τέλος, η στήλη G πολλαπλασιάζει το RATIO με την τιμή μέγιστου analogRead (1023) για να λάβει την προβλεπόμενη τιμή σύγκρισης. Οι 2 τελευταίες στήλες περιέχουν τις πραγματικές τιμές από μια εκτέλεση του προγράμματος επίδειξης μαζί με τις διαφορές μεταξύ των προβλεπόμενων και των πραγματικών τιμών.

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

Βήμα 4: Αναπαραγωγή συντονισμού

Παίξτε ένα Tune
Παίξτε ένα Tune

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

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

Η επιλογή και η ταυτοποίηση πραγματοποιείται ως εξής:

  1. Ο "χρήστης" ορίζει τους διακόπτες εμβύθισης στη διαμόρφωση που σχετίζεται με την επιθυμητή μελωδία
  2. κάθε κύκλος βρόχου προγράμματος, το αναγνωριστικό για την τρέχουσα ρύθμιση διακόπτη λήψης λαμβάνεται μέσω του analogRead
  3. Το αναγνωριστικό διαμόρφωσης του βήματος 2 συγκρίνεται με κάθε έναν από τους συγκριτές στη διαθέσιμη λίστα συντονισμού
  4. Εάν βρεθεί αντιστοίχιση, η ρουτίνα playTune καλείται με τις πληροφορίες που απαιτούνται για πρόσβαση στη λίστα σημειώσεων συντονισμού

    Χρησιμοποιώντας τη λειτουργία τόνου Arduino, κάθε νότα αναπαράγεται μέσω του βομβητή

  5. Εάν δεν βρεθεί αντιστοιχία, δεν γίνεται καμία ενέργεια
  6. επαναλάβετε 1-5

Οι ρυθμίσεις του διακόπτη DIP για τις διαθέσιμες μελωδίες εμφανίζονται στον παρακάτω πίνακα όπου 1 σημαίνει ότι ο διακόπτης είναι ενεργοποιημένος, 0 απενεργοποιείται. Θυμηθείτε ότι ο τρόπος με τον οποίο προσανατολίζεται ο διακόπτης βύθισης τοποθετεί τον διακόπτη 1 στην πιο αριστερή θέση (αυτή που σχετίζεται με την αντίσταση 80Κ).

ΟΝΟΜΑ Διακόπτης 1 Διακόπτης 2 Διακόπτης 3 Διακόπτης 4
Ντάνι Μπόι 1 0 0 0
Αρκουδάκι 0 1 0 0
Το λιοντάρι κοιμάται απόψε 1 1 0 0
Κανείς δεν γνωρίζει το πρόβλημα 0 0 1 0
Καταπληκτική Χάρη 0 0 0 1
Κενός χώρος 1 0 0 1
MockingBird Hill 1 0 1 1

Η ποιότητα του ήχου από ένα πιεζοηχητικό βομβητή σίγουρα δεν είναι μεγάλη, αλλά είναι τουλάχιστον αναγνωρίσιμη. Στην πραγματικότητα, εάν οι τόνοι είναι μετρημένοι, είναι πολύ κοντά στην ακριβή συχνότητα των νότες. Μια ενδιαφέρουσα τεχνική που χρησιμοποιείται στο πρόγραμμα είναι η αποθήκευση των δεδομένων συντονισμού στην ενότητα flash/μνήμης προγράμματος αντί της προεπιλεγμένης ενότητας μνήμης δεδομένων χρησιμοποιώντας την οδηγία PROGMEM. Η ενότητα δεδομένων περιέχει τις μεταβλητές επεξεργασίας του προγράμματος και είναι πολύ μικρότερες, περίπου 512 byte για μερικούς από τους μικροελεγκτές ATtiny.

Συνιστάται: