- Como funciona o afinador de guitarra
- Componentes necessários
- Esquemas
- Código Arduino para afinador de guitarra
Olá pessoal, nas últimas semanas venho trabalhando para me reconectar com meu amor pelo violão. Tocar violão era como eu relaxava alguns anos atrás, antes de o saxofone assumir o controle. Voltando ao violão, após 3 anos raramente dedilhando um acorde, descobri entre outras coisas que não sabia mais como cada uma das cordas deveria soar, para colocar nas palavras do meu amigo, “Minha audição não estava mais afinada” e como resultado disso, eu não conseguia afinar a guitarra sem a ajuda de um teclado ou de um aplicativo móvel que baixei posteriormente. As semanas se passaram até poucos dias atrás, quando o criador em mim ficou motivado e decidi construir um afinador de guitarra baseado em Arduino. No tutorial de hoje, estarei compartilhando como construir seu próprio afinador de guitarra Arduino DIY.
Como funciona o afinador de guitarra
Antes de passarmos para a eletrônica, é importante entender o princípio por trás da construção. Existem 7 notas musicais principais denotadas pelos alfabetos; Lá, Si, C, Ré, Mi, Fá, Sol e geralmente terminam com outro Lá, que está sempre uma oitava acima do primeiro A. Na música existem várias versões dessas notas, como o primeiro A e o último A. Essas notas são distinguidos cada um de sua variação e um do outro por uma das características de som conhecidas como pitch. Pitch é definido como o volume ou baixa do som e é indicado pela frequência desse som. Uma vez que a frequência dessas notas é conhecida, para determinarmos se o violão está afinado ou não, precisamos apenas comparar a frequência da nota de uma determinada corda com a frequência real da nota que a corda representa.
As frequências das 7 notas musicais são:
A = 27,50 Hz
B = 30,87 Hz
C = 16,35 Hz
D = 18,35 Hz
E = 20,60 Hz
F = 21,83 Hz
G = 24,50 Hz
Cada variação dessas notas está sempre em uma altura igual a FxM, onde F é a frequência e M é um número inteiro diferente de zero. Assim, para o último A que, conforme descrito anteriormente, está uma oitava acima do primeiro A, a frequência é;
27,50 x 2 = 55 Hz.
A guitarra (chumbo / caixa de guitarra) geralmente tem 6 cordas denotadas pelas notas E, A, Ré, Sol, Si, E na corda aberta. Como de costume, o último E estará uma oitava acima do primeiro E. Estaremos projetando nosso afinador de guitarra para ajudar a afinar a guitarra usando as frequências dessas notas.
De acordo com a afinação padrão da guitarra, a nota e a frequência correspondente de cada corda são mostradas na tabela abaixo.
Cordas |
Frequência |
Notação |
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 |
O fluxo do projeto é bastante simples; convertemos o sinal sonoro gerado pelo violão em uma frequência e depois comparamos com o valor exato da frequência da corda que está sendo afinada. O guitarrista é notificado por meio de um LED quando o valor se correlaciona.
A detecção / conversão de frequência envolve 3 estágios principais;
- Amplificando
- Compensação
- Conversão analógica para digital (amostragem)
O sinal de som sendo produzido será muito fraco para o ADC do Arduino reconhecer, portanto, precisamos amplificar o sinal. Após a amplificação, para manter o sinal dentro da faixa reconhecível pelo ADC do Arduino para evitar o corte do sinal, compensamos a tensão do sinal. Após a compensação, o sinal é então passado para o Arduino ADC, onde é amostrado e a frequência desse som é obtida.
Componentes necessários
Os seguintes componentes são necessários para construir este projeto;
- Arduino Uno x1
- LM386 x1
- Microfone Condensador x1
- Microfone / conector de áudio x1
- Potenciômetro de 10k x1
- O.1uf capacitor x2
- Resistor de 100 ohms x4
- Resistor de 10 ohms x1
- 10uf capacitor x3
- LED amarelo 5mm x2
- LED verde 5mm x1
- Botões de pressão normalmente abertos x6
- Fios de ligação
- Tábua de pão
Esquemas
Conecte os componentes conforme mostrado no diagrama de circuito do afinador de guitarra abaixo.
Os botões de ação são conectados sem resistores pull up / down porque os resistores pullup embutidos do Arduino serão usados. Isso é para garantir que o circuito seja o mais simples possível.
Código Arduino para afinador de guitarra
O algoritmo por trás do código para este projeto de afinador de guitarra é simples. Para afinar uma corda em particular, o guitarrista seleciona a corda pressionando o botão correspondente e toca uma corda aberta. O som é coletado pelo estágio de amplificação e repassado para o Arduino ADC. A frequência é decodificada e comparada. Quando a frequência de entrada do string é menor do que a frequência especificada, para aquele string, um dos LEDs amarelos acende indicando que o string deve ser apertado. Quando a frequência medida é maior que a frequência estipulada para aquela string, outro LED acende. Quando a frequência está dentro da faixa estipulada para aquela corda, o LED verde acende para orientar o guitarrista.
O código Arduino completo é fornecido no final, aqui explicamos brevemente as partes importantes do código.
Começamos criando um array para conter os interruptores.
arranjo de botões interno = {13, 12, 11, 10, 9, 8}; //
Em seguida, criamos um array para manter a frequência correspondente para cada uma das strings.
float freqarray = {82,41, 110,00, 146,83, 196,00, 246,94, 329,63}; // tudo em Hz
Feito isso, declaramos os pinos aos quais os LEDs estão conectados e outras variáveis que serão utilizadas para a obtenção da frequência do ADC.
int lowerLed = 7; int superiorLed = 6; int justRight = 5; # define COMPRIMENTO 512 bytes rawData; contagem interna;
A seguir está a função void setup () .
Aqui, começamos habilitando o pull up interno no Arduino para cada um dos pinos aos quais os interruptores estão conectados. Depois disso, definimos os pinos aos quais os LEDs são conectados como saídas e iniciamos o monitor serial para exibir os dados.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (higherLed, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
Em seguida, é a função de loop vazio , implementamos a detecção e comparação de frequência.
void loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } else { sum = 0; pd_state = 0; período interno = 0; para (i = 0; i <len; i ++) { // Autocorrelação sum_old = sum; soma = 0; para (k = 0; k <len-i; k ++) soma + = (rawData-128) * (rawData-128) / 256; // Serial.println (soma); // Máquina de estado de detecção de pico 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; if (! i) { thresh = sum * 0,5; pd_state = 1; } } // Frequência identificada em 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 (higherLed, HIGH); } else { digitalWrite (justRight, HIGH); } } } } contagem = 0; } }
O código completo com um vídeo de demonstração é fornecido abaixo. Faça upload do código para sua placa Arduino e toque rapidamente.