Γεια σας παιδιά, τις τελευταίες εβδομάδες, έχω εργαστεί για την επανασύνδεση με την αγάπη μου για την κιθάρα. Το να παίζω κιθάρα κουτιού ήταν ο τρόπος με τον οποίο χαλαρώνω πριν από μερικά χρόνια πριν αναλάβει το σαξόφωνο. Επιστρέφοντας στην κιθάρα, μετά από 3 χρόνια σπάνια χτύπημα μιας χορδής, ανακάλυψα, μεταξύ άλλων, ότι δεν ήξερα πλέον πώς θα έπρεπε να ακούγεται η κάθε συμβολοσειρά, για να το βάλω στα λόγια του φίλου μου, «Η ακοή μου δεν ήταν πλέον συντονισμένη» και ως αποτέλεσμα αυτού, δεν ήμουν σε θέση να συντονίσω την κιθάρα χωρίς τη βοήθεια ενός πληκτρολογίου ή μιας εφαρμογής για κινητά που κατέβασα αργότερα. Οι εβδομάδες πέρασαν πριν από λίγες μέρες, όταν ο κατασκευαστής μου έδωσε κίνητρα και αποφάσισα να φτιάξω ένα Guitar Tuner με βάση το Arduino. Στο σημερινό σεμινάριο, θα μοιραστώ πώς να φτιάξετε το δικό σας DIY Arduino Guitar Tuner.
Πώς λειτουργεί το Guitar Tuner
Πριν προχωρήσουμε στα ηλεκτρονικά, είναι σημαντικό να κατανοήσουμε την αρχή πίσω από την κατασκευή. Υπάρχουν 7 μεγάλες μουσικές νότες που υποδηλώνονται με τα αλφάβητα. A, B, C, D, E, F, G και συνήθως τελειώνει με ένα άλλο A που είναι πάντα σε οκτάβα υψηλότερο από το πρώτο A. Στη μουσική υπάρχουν αρκετές εκδόσεις αυτών των νότες όπως το πρώτο A και το τελευταίο A. Αυτές οι νότες διακρίνονται το καθένα από την παραλλαγή τους και το ένα από το άλλο από ένα από τα χαρακτηριστικά του ήχου που είναι γνωστό ως pitch. Το βήμα ορίζεται ως η ένταση ή ο χαμηλός ήχος και υποδεικνύεται από τη συχνότητα αυτού του ήχου. Δεδομένου ότι η συχνότητα αυτών των νότες είναι γνωστή, για να καθορίσουμε αν η κιθάρα είναι συντονισμένη ή όχι, χρειάζεται μόνο να συγκρίνουμε τη συχνότητα της νότας μιας συγκεκριμένης συμβολοσειράς με την πραγματική συχνότητα της νότας που αντιπροσωπεύει η συμβολοσειρά.
Οι συχνότητες των 7 μουσικών νότες είναι:
A = 27,50Hz
Β = 30,87Hz
C = 16,35Hz
D = 18,35Hz
Ε = 20,60Hz
F = 21,83Hz
G = 24,50 Hz
Κάθε παραλλαγή αυτών των σημειώσεων είναι πάντα σε ένα βήμα ίσο με το FxM όπου το F είναι η συχνότητα και το M είναι ένας μη μηδενικός ακέραιος. Έτσι, για το τελευταίο Α το οποίο όπως περιγράφηκε προηγουμένως, βρίσκεται σε οκτάβα υψηλότερο από το πρώτο Α, η συχνότητα είναι.
27,50 x 2 = 55Hz.
Η κιθάρα (κιθάρα μολύβδου / κιβωτίου) έχει συνήθως 6 χορδές που υποδηλώνονται με τις σημειώσεις E, A, D, G, B, E σε ανοιχτή χορδή. Ως συνήθως, το τελευταίο E θα βρίσκεται σε οκτάβα υψηλότερο από το πρώτο E. Θα σχεδιάζουμε τον συντονιστή κιθάρας μας για να συντονίσουμε την κιθάρα χρησιμοποιώντας τις συχνότητες αυτών των νότες.
Σύμφωνα με τον τυπικό συντονισμό της κιθάρας, η νότα και η αντίστοιχη συχνότητα κάθε συμβολοσειράς παρουσιάζονται στον παρακάτω πίνακα.
Χορδές |
Συχνότητα |
Σημειογραφία |
1 (Ε) |
329,63 Ηζ |
Ε4 |
2 (Β) |
246,94 Ηζ |
Β3 |
3 (Ζ) |
196,00 Hz |
Ζ3 |
4 (Δ) |
146,83 Ηζ |
Δ3 |
5 (Α) |
110,00 Hz |
Α2 |
6 (Ε) |
82,41 Hz |
Ε2 |
Η ροή του έργου είναι αρκετά απλή. μετατρέπουμε το ηχητικό σήμα που παράγεται από την κιθάρα σε μια συχνότητα και μετά συγκρίνουμε με την ακριβή τιμή συχνότητας της συμβολοσειράς που συντονίζεται. Ο κιθαρίστας ειδοποιείται χρησιμοποιώντας ένα LED όταν συσχετίζεται η τιμή.
Η ανίχνευση / μετατροπή συχνότητας περιλαμβάνει 3 κύρια στάδια.
- Ενίσχυση
- Συμψηφισμός
- Αναλογική σε ψηφιακή μετατροπή (δειγματοληψία)
Το ηχητικό σήμα που παράγεται θα είναι πολύ αδύναμο για να αναγνωρίσει το ADC του Arduino, οπότε πρέπει να ενισχύσουμε το σήμα. Μετά την ενίσχυση, για να διατηρήσουμε το σήμα εντός του εύρους που αναγνωρίζεται από το Arduino's ADC για να αποφευχθεί η αποκοπή του σήματος, αντισταθμίζουμε την τάση του σήματος. Μετά την αντιστάθμιση, το σήμα μεταφέρεται στη συνέχεια στο Arduino ADC όπου γίνεται δειγματοληψία και λαμβάνεται η συχνότητα αυτού του ήχου.
Απαιτούμενα στοιχεία
Απαιτούνται τα ακόλουθα στοιχεία για την κατασκευή αυτού του έργου.
- Arduino Uno x1
- LM386 x1
- Συμπυκνωτής Mic x1
- Υποδοχή μικροφώνου / ήχου x1
- Ποτενσιόμετρο 10k x1
- Πυκνωτής O.1uf x2
- 100ohms αντίσταση x4
- 10ohms αντίσταση x1
- Πυκνωτής 10uf x3
- Κίτρινο LED 5mm x2
- Πράσινο LED 5 mm x1
- Κανονικά Ανοιχτά κουμπιά ώθησης x6
- Καλώδια αλτών
- Ψωμί
Σχηματικά
Συνδέστε τα εξαρτήματα όπως φαίνεται στο διάγραμμα κυκλώματος συντονιστή κιθάρας παρακάτω.
Τα μπουτόν συνδέονται χωρίς αντίσταση τραβήγματος προς τα πάνω / προς τα κάτω, επειδή θα χρησιμοποιηθούν οι ενσωματωμένες αντιστάσεις Arduino. Αυτό γίνεται για να διασφαλιστεί ότι το κύκλωμα είναι όσο το δυνατόν πιο απλό.
Κωδικός Arduino για δέκτη κιθάρων
Ο αλγόριθμος πίσω από τον κώδικα για αυτό το Guitar Tuner Project είναι απλός. Για να συντονιστεί μια συγκεκριμένη συμβολοσειρά, ο κιθαρίστας επιλέγει τη χορδή πατώντας το αντίστοιχο μπουτόν και στρογγυλοποιεί την αναπαραγωγή μιας ανοιχτής χορδής. Ο ήχος συλλέγεται από το στάδιο ενίσχυσης και μεταβιβάζεται στο Arduino ADC. Η συχνότητα αποκωδικοποιείται και συγκρίνεται. Όταν η συχνότητα εισόδου από τη συμβολοσειρά είναι μικρότερη από την καθορισμένη συχνότητα, για αυτήν τη συμβολοσειρά ανάβει ένα από τα κίτρινα LED που υποδηλώνει ότι η συμβολοσειρά πρέπει να σφίξει. Όταν η μετρούμενη συχνότητα είναι μεγαλύτερη από την προβλεπόμενη συχνότητα για αυτήν τη συμβολοσειρά, ανάβει ένα άλλο LED. Όταν η συχνότητα είναι εντός του καθορισμένου εύρους για αυτήν τη συμβολοσειρά, ανάβει το πράσινο LED για να καθοδηγήσει τον κιθαρίστα.
Ο πλήρης κωδικός Arduino δίνεται στο τέλος, εδώ έχουμε εξηγήσει εν συντομία τα σημαντικά μέρη του κώδικα.
Ξεκινάμε δημιουργώντας έναν πίνακα για να κρατήσετε τους διακόπτες.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Στη συνέχεια, δημιουργούμε έναν πίνακα που κρατά την αντίστοιχη συχνότητα για κάθε μία από τις συμβολοσειρές.
float freqarray = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // όλα σε Hz
Με αυτόν τον τρόπο, στη συνέχεια δηλώνουμε τους ακροδέκτες στους οποίους συνδέονται οι λυχνίες LED και άλλες μεταβλητές που θα χρησιμοποιηθούν για τη λήψη της συχνότητας από το ADC.
int lowerLed = 7; int HigherLed = 6; int justRight = 5; #define LENGTH 512 byte rawData; int count?
Στη συνέχεια είναι η λειτουργία ρύθμισης κενού () .
Εδώ ξεκινάμε ενεργοποιώντας το εσωτερικό τράβηγμα στο Arduino για κάθε έναν από τους ακροδέκτες στους οποίους είναι συνδεδεμένοι οι διακόπτες. Μετά από αυτό ορίζουμε τους ακροδέκτες στους οποίους συνδέονται τα LED ως έξοδοι και ξεκινάμε τη σειριακή οθόνη για την εμφάνιση των δεδομένων.
άκυρη ρύθμιση () { για (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowLed, OUTPUT); pinMode (υψηλότερο, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
Στη συνέχεια, είναι η άκυρη loop λειτουργία, υλοποιούμε την ανίχνευση και σύγκριση της συχνότητας.
void loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } αλλιώς { sum = 0; pd_state = 0; int περίοδο = 0; για (i = 0; i <len; i ++) { // Αυτόματη συσχέτιση sum_old = άθροισμα; άθροισμα = 0; για (k = 0; k <len-i; k ++) άθροισμα + = (rawData-128) * (rawData-128) / 256; // Serial.println (άθροισμα); // Peak Detect State Machine εάν (pd_state == 2 && (sum-sum_old) <= 0) { περίοδος = i; pd_state = 3; } εάν (pd_state == 1 && (άθροισμα> όριο) && (sum-sum_old)> 0) pd_state = 2; εάν (! i) { thresh = sum * 0,5; pd_state = 1; } } // Η συχνότητα προσδιορίστηκε σε Hz εάν (όριο> 100) { freq_per = sample_freq / period; Serial.println (freq_per); για (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == HIGH) { if (freq_per - freqarray <0) { digitalWrite (LowerLed, HIGH); } αλλιώς εάν (freq_per - freqarray> 10) { digitalWrite (HigherLed, HIGH); } αλλιώς { digitalWrite (justRight, HIGH); } } } } μέτρηση = 0; } }
Ο πλήρης κωδικός με ένα βίντεο επίδειξης δίνεται παρακάτω. Μεταφορτώστε τον κωδικό στην πλακέτα Arduino και βγείτε μακριά.