- Cum funcționează acordorul de chitară
- Componente necesare
- Scheme
- Cod Arduino pentru acordor de chitară
Bună băieți, în ultimele săptămâni, am lucrat la reconectarea cu dragostea mea pentru chitară. Cântând la chitară cutie a fost modul în care mă relaxez cu câțiva ani în urmă înainte ca saxofonul să preia conducerea. Întorcându-mă la chitară, după 3 ani de rareori batând o coardă, am descoperit, printre altele, că nu mai știu cum ar trebui să sune fiecare coardă, pentru ao pune în cuvintele prietenului meu: „Nu mi-a mai fost auzit auzul” și Ca urmare, nu am putut regla chitara fără ajutorul unei tastaturi sau a unei aplicații mobile pe care am descărcat-o ulterior. Săptămânile au trecut până acum câteva zile când producătorul din mine a devenit motivat și am decis să construiesc un acordor de chitară bazat pe Arduino. În tutorialul de astăzi, vă voi împărtăși cum să vă construiți propriul acordor de chitară DIY Arduino.
Cum funcționează acordorul de chitară
Înainte de a trece la electronică, este important să înțelegem principiul din spatele construcției. Există 7 note muzicale majore notate cu alfabete; A, B, C, D, E, F, G și se termină de obicei cu un alt A care este întotdeauna la o octavă mai mare decât prima A. În muzică există mai multe versiuni ale acestor note, cum ar fi prima A și ultima A. Aceste note se disting fiecare de variația lor și una de cealaltă prin una dintre caracteristicile sunetului cunoscute sub numele de tonalitate. Pitch este definit ca intensitatea sonoră sau deprimare a sunetului și a indicat prin frecvența acelui sunet. Întrucât frecvența acestor note este cunoscută, pentru a determina dacă chitara este acordată sau nu, trebuie doar să comparăm frecvența notei anumitor coarde cu frecvența reală a notei pe care o reprezintă coarda.
Frecvențele celor 7 note muzicale sunt:
A = 27,50 Hz
B = 30,87Hz
C = 16,35Hz
D = 18,35Hz
E = 20,60Hz
F = 21,83Hz
G = 24,50 Hz
Fiecare variantă a acestor note este întotdeauna la un ton egal cu FxM unde F este frecvența și M este un număr întreg diferit de zero. Astfel, pentru ultimul A care, așa cum am descris mai devreme, este la o octavă mai mare decât primul A, frecvența este;
27,50 x 2 = 55Hz.
Chitara (chitară principală / cutie) are de obicei 6 corzi notate cu notele E, A, D, G, B, E pe coardă deschisă. Ca de obicei, ultimul E va fi la o octavă mai mare decât primul E. Vom proiecta tunerul nostru pentru chitară pentru a ajuta la acordarea chitarii folosind frecvențele acestor note.
Conform acordului standard pentru chitară, nota și frecvența corespunzătoare pentru fiecare coardă sunt prezentate în tabelul de mai jos.
Siruri de caractere |
Frecvență |
Notaţie |
1 (E) |
329,63 Hz |
E4 |
2 (B) |
246,94 Hz |
B3 |
3 (G) |
196,00 Hz |
G3 |
4 (D) |
146,83 Hz |
D3 |
5 (A) |
110,00 Hz |
A2 |
6 (E) |
82,41 Hz |
E2 |
Fluxul proiectului este destul de simplu; convertim semnalul sonor generat de chitară într-o frecvență, apoi comparăm cu valoarea exactă a frecvenței șirului care este acordat. Chitaristul este notificat folosind un LED atunci când valoarea se corelează.
Detectarea / conversia frecvenței implică 3 etape principale;
- Amplificatoare
- Compensare
- Conversie analog la digital (eșantionare)
Semnalul sonor produs va fi prea slab pentru ca ADC-ul Arduino să îl recunoască, deci trebuie să amplificăm semnalul. După amplificare, pentru a menține semnalul în intervalul recunoscut de ADC-ul Arduino pentru a preveni tăierea semnalului, compensăm tensiunea semnalului. După compensare, semnalul este apoi transmis către Arduino ADC unde este eșantionat și se obține frecvența acelui sunet.
Componente necesare
Următoarele componente sunt necesare pentru a construi acest proiect;
- Arduino Uno x1
- LM386 x1
- Mic condensator x1
- Microfon / mufă audio x1
- 10k potențiometru x1
- O.1uf condensator x2
- Rezistor de 100 ohmi x4
- Rezistor de 10 ohmi x1
- 10uf condensator x3
- LED galben de 5 mm x2
- LED verde de 5 mm x1
- În mod normal, butoane deschise x6
- Sârme de jumper
- Breadboard
Scheme
Conectați componentele așa cum se arată în Diagrama circuitului acordorului de chitară de mai jos.
Butoanele sunt conectate fără rezistențe pull up / down deoarece vor fi utilizate rezistențele incorporate Arduino. Acest lucru este pentru a vă asigura că circuitul este cât se poate de simplu.
Cod Arduino pentru acordor de chitară
Algoritmul din spatele codului pentru acest proiect de acordare chitară este simplu. Pentru a regla o anumită coardă, chitaristul selectează coarda apăsând butonul corespunzător și înfășoară piesele cu o coardă deschisă. Sunetul este colectat de etapa de amplificare și transmis la Arduino ADC. Frecvența este decodificată și comparată. Când frecvența de intrare din șir este mai mică decât frecvența specificată, pentru acel șir se aprinde unul dintre LED-urile galbene care indică faptul că șirul trebuie strâns. Când frecvența măsurată este mai mare decât frecvența stipulată pentru acel șir, se aprinde un alt LED. Când frecvența se încadrează în intervalul stipulat pentru acea coardă, ledul verde se aprinde pentru a ghida chitaristul.
Codul Arduino complet este dat la sfârșit, aici am explicat pe scurt părțile importante ale codului.
Începem prin a crea o matrice pentru a ține comutatoarele.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Apoi, creăm o matrice pentru a menține frecvența corespunzătoare pentru fiecare dintre șiruri.
floq freqarray = {82,41, 110,00, 146,83, 196,00, 246,94, 329,63}; // toate în Hz
După ce facem acest lucru, declarăm apoi pinii la care sunt conectate LED-urile și alte variabile care vor fi utilizate pentru obținerea frecvenței de la ADC.
int LowLed = 7; int higherLed = 6; int justRight = 5; #define LENGTH 512 byte rawData; int count;
Următoarea este funcția de configurare nulă () .
Aici începem prin activarea tragerii interne pe Arduino pentru fiecare dintre pinii la care sunt conectate comutatoarele. După care stabilim pinii la care sunt conectate LED-urile ca ieșiri și lansăm monitorul serial pentru a afișa datele.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (lowerLed, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
În continuare, este funcția buclei de gol , implementăm detectarea și compararea frecvenței.
bucla void () { if (count <LENGTH) { count ++; RawData = analogRead (A0) >> 2; } else { sum = 0; pd_state = 0; perioada int = 0; for (i = 0; i <len; i ++) { // Autocorelare sum_old = sum; sumă = 0; for (k = 0; k <len-i; k ++) sum + = (rawData-128) * (rawData-128) / 256; // Serial.println (sumă); // Peak Detect State Machine if (pd_state == 2 && (sum-sum_old) <= 0) { period = i; pd_state = 3; } if (pd_state == 1 && (sum> treier) && (sum-sum_old)> 0) pd_state = 2; if (! i) { treh = sum * 0,5; pd_state = 1; } } // Frecvența identificată în Hz dacă (trezire> 100) { freq_per = sample_freq / period; Serial.println (freq_per); for (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == HIGH) { if (freq_per - freqarray <0) { digitalWrite (lowerLed, HIGH); } else if (freq_per - freqarray> 10) { digitalWrite (lowerLed, HIGH); } else { digitalWrite (justRight, HIGH); } } } } număr = 0; } }
Codul complet cu o demonstrație video este prezentată mai jos. Încărcați codul pe placa Arduino și distanțați-vă.