- Come funziona l'accordatore per chitarra
- Componenti necessari
- Schematico
- Codice Arduino per accordatore per chitarra
Ciao ragazzi, nelle ultime settimane ho lavorato per ricollegarmi al mio amore per la chitarra. Suonare la chitarra in scatola è stato il modo in cui mi rilasso alcuni anni fa prima che il sassofono prendesse il sopravvento. Tornando alla chitarra, dopo 3 anni in cui ho strimpellato raramente un accordo, ho scoperto tra l'altro che non sapevo più come doveva suonare ciascuna corda, per dirla con le parole del mio amico, "Il mio udito non era più intonato" e di conseguenza, non sono stato in grado di accordare la chitarra senza l'ausilio di una tastiera o di un'app mobile che ho successivamente scaricato. Le settimane sono passate fino a pochi giorni fa, quando il maker che era in me si è motivato e ho deciso di costruire un Guitar Tuner basato su Arduino. Nel tutorial di oggi, condividerò come costruire il tuo accordatore per chitarra Arduino fai-da-te.
Come funziona l'accordatore per chitarra
Prima di passare all'elettronica, è importante comprendere il principio alla base della build. Ci sono 7 note musicali principali denotate dagli alfabeti; LA, SI, DO, RE, MI, FA, SOL e di solito terminano con un altro LA che è sempre un'ottava più alta del primo LA. Nella musica esistono diverse versioni di queste note come la prima LA e l'ultima LA. Queste note si distinguono ciascuna per la loro variazione e l'una dall'altra per una delle caratteristiche del suono note come altezza. Il tono è definito come il volume o la debolezza del suono ed è indicato dalla frequenza di quel suono. Poiché la frequenza di queste note è nota, per determinare se la chitarra è accordata o meno, dobbiamo solo confrontare la frequenza della nota di una particolare corda con la frequenza effettiva della nota che la corda rappresenta.
Le frequenze delle 7 note musicali sono:
LA = 27,50 Hz
B = 30,87 Hz
C = 16,35 Hz
D = 18,35 Hz
E = 20.60Hz
F = 21,83 Hz
Sol = 24,50 Hz
Ogni variazione di queste note è sempre a un passo uguale a FxM dove F è la frequenza e M è un numero intero diverso da zero. Così per l'ultimo LA che, come descritto in precedenza, è ad un'ottava più alta del primo LA, la frequenza è;
27,50 x 2 = 55 Hz.
La chitarra (chitarra solista / scatola) di solito ha 6 corde denotate dalle note E, LA, RE, SOL, SI, MI sulla corda aperta. Come al solito, l'ultimo mi sarà un'ottava più alta del primo mi. Progetteremo il nostro accordatore per chitarra per aiutare ad accordare la chitarra usando le frequenze di queste note.
Secondo l'accordatura standard della chitarra, la nota e la frequenza corrispondente di ciascuna corda sono mostrate nella tabella sottostante.
stringhe |
Frequenza |
Notazione |
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 |
Il flusso del progetto è abbastanza semplice; convertiamo il segnale sonoro generato dalla chitarra in una frequenza, quindi confrontiamo con il valore di frequenza esatto della corda che viene accordata. Il chitarrista viene avvisato tramite un LED quando il valore è correlato.
La rilevazione / conversione della frequenza coinvolge 3 fasi principali;
- Amplificare
- Compensazione
- Conversione da analogico a digitale (campionamento)
Il segnale sonoro prodotto sarà troppo debole per essere riconosciuto dall'ADC di Arduino, quindi dobbiamo amplificare il segnale. Dopo l'amplificazione, per mantenere il segnale entro l'intervallo riconoscibile dall'ADC di Arduino per evitare il clipping del segnale, compensiamo la tensione del segnale. Dopo l'offset, il segnale viene quindi passato all'ADC Arduino dove viene campionato e si ottiene la frequenza di quel suono.
Componenti necessari
I seguenti componenti sono necessari per costruire questo progetto;
- Arduino Uno x1
- LM386 x1
- Microfono a condensatore x1
- Microfono / jack audio x1
- Potenziometro 10k x1
- Condensatore O.1uf x2
- Resistenza da 100 ohm x4
- Resistenza da 10 ohm x1
- Condensatore 10uf x3
- LED giallo 5mm x2
- LED verde da 5 mm x1
- Pulsanti normalmente aperti x6
- Cavi jumper
- Breadboard
Schematico
Collegare i componenti come mostrato nello schema del circuito dell'accordatore per chitarra di seguito.
I pulsanti sono collegati senza resistenze pull up / down perché verranno utilizzate le resistenze pullup integrate di Arduino. Questo per garantire che il circuito sia il più semplice possibile.
Codice Arduino per accordatore per chitarra
L'algoritmo alla base del codice per questo Guitar Tuner Project è semplice. Per accordare una particolare corda, il chitarrista seleziona la corda premendo il pulsante corrispondente e strimpella suona una corda aperta. Il suono viene raccolto dallo stadio di amplificazione e trasmesso all'ADC Arduino. La frequenza viene decodificata e confrontata. Quando la frequenza di ingresso dalla stringa è inferiore alla frequenza specificata, per quella stringa si accende uno dei LED gialli indicando che la stringa deve essere tesa. Quando la frequenza misurata è maggiore della frequenza stabilita per quella stringa, si accende un altro LED. Quando la frequenza rientra nell'intervallo stabilito per quella corda, il LED verde si accende per guidare il chitarrista.
Alla fine viene fornito il codice completo di Arduino, qui abbiamo spiegato brevemente le parti importanti del codice.
Iniziamo creando un array per contenere gli interruttori.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Successivamente, creiamo un array per contenere la frequenza corrispondente per ciascuna delle stringhe.
float freqarray = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // tutto in Hz
Fatto ciò, dichiariamo quindi i pin a cui sono collegati i LED e le altre variabili che verranno utilizzate per ottenere la frequenza dall'ADC.
int lowerLed = 7; int upperLed = 6; int justRight = 5; #define LENGTH 512 byte rawData; int count;
La prossima è la funzione void setup () .
Qui iniziamo abilitando il pull up interno su Arduino per ciascuno dei pin a cui sono collegati gli interruttori. Dopodiché impostiamo i pin a cui sono collegati i LED come uscite e lanciamo il monitor seriale per visualizzare i dati.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (upperLed, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
Successivamente, è la funzione loop vuoto , implementiamo il rilevamento e il confronto della frequenza.
void loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } altro { sum = 0; pd_state = 0; periodo int = 0; for (i = 0; i <len; i ++) { // Autocorrelation sum_old = sum; somma = 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> thresh) && (sum-sum_old)> 0) pd_state = 2; se (! i) { soglia = somma * 0,5; pd_state = 1; } } // Frequenza identificata in Hz if (thresh> 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 (upperLed, HIGH); } else { digitalWrite (justRight, HIGH); } } } } count = 0; } }
Di seguito viene fornito il codice completo con un video dimostrativo. Carica il codice sulla tua scheda Arduino e strimpella via.