Afinador de guitarra automático baseado em Arduino
Componentes e suprimentos
![]() |
| × | 1 |
Aplicativos e serviços online
|
Sobre este projeto
Uma das coisas mais importantes ao tocar guitarra é ter certeza de que o instrumento está afinado. Mesmo o melhor guitarrista não soará bem com uma guitarra desafinada. Afinar guitarras à mão usando um afinador padrão sempre foi comum, mas um afinador automático torna as coisas muito mais fáceis e divertidas! Este projeto baseado em Arduino ajustará sua guitarra para você.
Aqui está um vídeo mostrando o projeto em ação:https://www.mathworks.com/videos/automatic-guitar-tuner-using-simulink-and-arduino-1501787185047.html
Visão geral

A figura acima mostra uma visão geral do afinador automático de guitarra.
- O botão de pressão é usado para selecionar a corda a ser afinada
- Um display de seis LEDs é usado para indicar qual string foi selecionada
- A pinça conectada ao motor é usada para girar a cravelha até que a corda esteja afinada.
As entradas e saídas são controladas pelos quatro circuitos mencionados acima:um circuito de entrada digital para o botão de pressão, um circuito de entrada de áudio analógico para a guitarra, um circuito de saída digital para o display de LED e um circuito motorizado para o pino de afinação garra. Esses quatro circuitos interagem com um Arduino Due, que está executando um algoritmo desenvolvido com o Simulink.
Circuito de entrada de áudio
A guitarra é conectada ao afinador por meio de um cabo de guitarra padrão. A extremidade de um cabo de guitarra possui duas conexões, chamadas de ponta e manga. Uma extremidade do cabo será conectada a um conector de entrada, que possui condutores para a ponta e a luva. Soldei os fios nesses terminais para conectar a ponta e a luva ao circuito de entrada de áudio.

Eu recomendaria usar um amplificador operacional TL972 para este circuito. É um amplificador rail-a-rail de baixíssimo ruído que pode operar com tensões de alimentação muito baixas.
Pinça de ajuste motorizada

Eu não poderia usar qualquer motor DC para este projeto. Eu precisava de um motoredutor com baixa velocidade e alto torque. O motor que usei tem velocidade de 6 RPM e torque máximo de 613 onças. Ele tem uma faixa de tensão de 3-12 V, então usei uma bateria de 9 V como fonte de alimentação.
No eixo do motor, montei um mecanismo de aperto simples usando um cubo de grampo, quatro parafusos e um pouco de fita.
Software
Usei o Simulink e seu pacote de suporte para Arduino para desenvolver o algoritmo do sintonizador. Simulink é um ambiente de diagrama de blocos usado para desenvolver algoritmos e modelar sistemas dinâmicos. O pacote de suporte me permite ler e gravar nos pinos do Arduino usando blocos Simulink. Usando os recursos de modo externo do software, posso simular um algoritmo no Arduino com geração automática de código e parâmetros de ajuste enquanto a simulação está em execução, sem ter que recompilar qualquer código. Posso então implantar o algoritmo no hardware para execução autônoma. O modelo que criei é mostrado abaixo.

O modo externo permite o uso de blocos de escopo para monitorar partes do algoritmo enquanto ele está sendo executado no hardware. Isso é especialmente útil para monitorar a entrada digital do botão e a entrada analógica da guitarra. No escopo do botão, podemos ver que a entrada muda de 0 para 1 quando o botão é pressionado.

Eu quero que essa mudança de 0 a 1 acione uma mudança na corda selecionada. Isso é conhecido como um gatilho crescente. Eu criei um gráfico Stateflow chamado “Select String” que tem seis estados, um para cada string, e muda de um estado para o próximo com base nesta entrada crescente do acionador. Aqui está uma visão mais detalhada do gráfico Stateflow.

Ao entrar em cada estado, o pino do LED para a string correspondente é definido como alto. Ao sair de cada estado, o pino é definido como baixo. Escolhi a corda E grave, a mais grave das seis cordas, como padrão. Quando eu ligo o sintonizador pela primeira vez, ele iniciará neste estado padrão.
Existem sete saídas no gráfico Stateflow:uma para o LED para cada uma das seis strings e uma chamada “periodRange”, que discutirei mais tarde. As seis saídas de LED vão direto para os blocos de saída digital do Arduino para ligar ou desligar o LED apropriado.
Agora vamos dar uma olhada na parte de processamento de áudio do modelo. O sinal da guitarra chega através do bloco de entrada analógica. Eu defino o tempo de amostragem do bloco em 0,0002 segundos para uma taxa de amostragem de 5 kHz. Quando toquei a guitarra e abri o bloco de escopo de áudio, fui capaz de ver uma forma de onda como a que está abaixo.

O bloco do osciloscópio me ajudou a ajustar o potenciômetro no circuito de áudio para alterar o ganho da entrada. O ganho deve ser definido o mais alto possível, sem que o pico da forma de onda atinja o valor máximo de 1023. Isso permitirá a leitura mais precisa do sinal.
Quando a guitarra não é tocada, o sinal de entrada deve ser uma linha reta em algum lugar entre 500 e 700. No meu caso, era por volta de 550. É importante saber este valor porque o sintonizador deve processar o áudio apenas quando houver uma nota sendo jogado. Eu escolhi um valor de 575, logo acima desta linha plana, para ser meu limite. O áudio será processado apenas quando o sinal estiver acima deste valor limite. Como o Simulink me permite ajustar os parâmetros durante a execução de uma simulação, fui capaz de definir facilmente meu valor limite.
Quando uma única nota é tocada em uma guitarra, a forma de onda gerada é periódica. O período da forma de onda corresponde a um determinado tom musical. O algoritmo de afinação estima a altura da corda determinando o período da forma de onda. Eu escrevi uma função MATLAB que realiza essa estimativa de pitch e a incluí em meu modelo Simulink usando o bloco de funções MATLAB. Para determinar se a corda está afinada, a função MATLAB precisa de uma entrada indicando qual intervalo de períodos é considerado afinado para cada corda. Esta é a saída “periodRange” do gráfico Stateflow. A função determina se o tom da corda está muito alto, muito baixo ou afinado com base na faixa de período e gera saídas para o motor de acordo.
As saídas da função MATLAB são os três pinos que controlam o motor. Essas saídas vão direto para os blocos de saída digital do Arduino.
Depois de garantir que tudo estava certo com meu algoritmo, fui capaz de implantá-lo no hardware para que pudesse funcionar de forma autônoma, sem estar conectado ao PC e independente do Simulink.
Agora posso afinar minha guitarra automaticamente!
Todos os arquivos necessários para este projeto estão disponíveis aqui:
https://www.mathworks.com/matlabcentral/fileexchange/63697-automatic-guitar-tuner-using-simulink-and-arduino
Esquemas
O circuito para o botão de pressão é uma chave simples com um resistor pull-down. O circuito de exibição de LED envolve 6 LEDs e um resistor limitador de corrente.


Processo de manufatura