- Cómo funciona el afinador de guitarra
- Componentes necesarios
- Esquemas
- Código Arduino para afinador de guitarra
Hola chicos, durante las últimas semanas he estado trabajando para reconectarme con mi amor por la guitarra. Tocar la guitarra de caja fue como me relajé hace unos años antes de que el saxofón se hiciera cargo. Volviendo a la guitarra, después de 3 años de raramente rasguear un acorde, descubrí, entre otras cosas, que ya no sabía cómo debería sonar cada una de las cuerdas, para decirlo en palabras de mi amigo, "Mi oído ya no estaba afinado" como resultado de esto, no pude afinar la guitarra sin la ayuda de un teclado o una aplicación móvil que luego descargué. Pasaron las semanas hasta que hace unos días cuando el creador en mí se motivó y decidí construir un afinador de guitarra basado en Arduino. En el tutorial de hoy, compartiré cómo construir tu propio afinador de guitarra Arduino DIY.
Cómo funciona el afinador de guitarra
Antes de pasar a la electrónica, es importante comprender el principio detrás de la construcción. Hay 7 notas musicales principales indicadas por los alfabetos; A, B, C, D, E, F, G y generalmente terminan con otra A que siempre está en una octava más alta que la primera A. En la música existen varias versiones de estas notas como la primera A y la última A. Estas notas se distinguen cada uno por su variación y entre sí por una de las características del sonido conocidas como tono. El tono se define como el volumen o la lentitud del sonido y se indica mediante la frecuencia de ese sonido. Dado que se conoce la frecuencia de estas notas, para que podamos determinar si la guitarra está afinada o no, solo necesitamos comparar la frecuencia de la nota de una cuerda en particular con la frecuencia real de la nota que representa la cuerda.
Las frecuencias de las 7 notas musicales son:
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 variación de estas notas siempre tiene un tono igual a FxM, donde F es la frecuencia y M es un número entero distinto de cero. Así, para el último A que, como se describió anteriormente, está en una octava más alta que el primer A, la frecuencia es;
27,50 x 2 = 55 Hz.
La guitarra (guitarra principal / caja) generalmente tiene 6 cuerdas indicadas por las notas E, A, D, G, B, E en cuerda abierta. Como de costumbre, la última E estará en una octava más alta que la primera E. Diseñaremos nuestro afinador de guitarra para ayudar a afinar la guitarra utilizando las frecuencias de estas notas.
De acuerdo con la afinación de guitarra estándar, la nota y la frecuencia correspondiente de cada cuerda se muestran en la siguiente tabla.
Instrumentos de cuerda |
Frecuencia |
Notación |
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 |
El flujo del proyecto es bastante simple; Convertimos la señal de sonido generada por la guitarra a una frecuencia y luego la comparamos con el valor de frecuencia exacto de la cuerda que se está afinando. Se notifica al guitarrista mediante un LED cuando el valor se correlaciona.
La detección / conversión de frecuencia implica 3 etapas principales;
- Amplificando
- Compensación
- Conversión analógica a digital (muestreo)
La señal de sonido que se está produciendo será demasiado débil para que el ADC de Arduino la reconozca, por lo que debemos amplificar la señal. Después de la amplificación, para mantener la señal dentro del rango reconocible por el ADC de Arduino para evitar el recorte de la señal, compensamos el voltaje de la señal. Después de la compensación, la señal se pasa al Arduino ADC donde se muestrea y se obtiene la frecuencia de ese sonido.
Componentes necesarios
Se requieren los siguientes componentes para construir este proyecto;
- Arduino Uno x1
- LM386 x1
- Micrófono de condensador x1
- Conector de micrófono / audio x1
- Potenciómetro de 10k x1
- Condensador de 0.1uf x2
- Resistencia de 100 ohmios x4
- Resistencia de 10 ohmios x1
- Condensador 10uf x3
- LED amarillo de 5 mm x2
- LED verde de 5 mm x1
- Botones pulsadores normalmente abiertos x6
- Cables de puente
- Tablero de circuitos
Esquemas
Conecte los componentes como se muestra en el diagrama de circuito del afinador de guitarra a continuación.
Los botones pulsadores están conectados sin resistencias pull up / down porque se utilizarán las resistencias pullup integradas de Arduino. Esto es para asegurar que el circuito sea lo más simple posible.
Código Arduino para afinador de guitarra
El algoritmo detrás del código para este proyecto de afinador de guitarra es simple. Para afinar una cuerda en particular, el guitarrista selecciona la cuerda presionando el botón correspondiente y rasguea una cuerda abierta. El sonido se recoge en la etapa de amplificación y se transmite al Arduino ADC. La frecuencia se decodifica y compara. Cuando la frecuencia de entrada de la cadena es menor que la frecuencia especificada, para esa cadena uno de los LED amarillos se enciende indicando que la cadena debe apretarse. Cuando la frecuencia medida es mayor que la frecuencia estipulada para esa cadena, se enciende otro LED. Cuando la frecuencia está dentro del rango estipulado para esa cuerda, el LED verde se enciende para guiar al guitarrista.
El código completo de Arduino se proporciona al final, aquí hemos explicado brevemente las partes importantes del código.
Comenzamos creando una matriz para contener los interruptores.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
A continuación, creamos una matriz para contener la frecuencia correspondiente para cada una de las cadenas.
float freqarray = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // todo en Hz
Una vez hecho esto, declaramos los pines a los que están conectados los LED y otras variables que se utilizarán para obtener la frecuencia del ADC.
int lowerLed = 7; int upperLed = 6; int justRight = 5; #define LENGTH 512 bytes rawData; int count;
La siguiente es la función void setup () .
Aquí comenzamos habilitando el pull up interno en el Arduino para cada uno de los pines a los que están conectados los interruptores. Después de lo cual configuramos los pines a los que se conectan los LED como salidas y lanzamos el monitor en serie para mostrar los datos.
configuración vacía () { para (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (LED inferior, SALIDA); pinMode (LED superior, SALIDA); pinMode (justRight, SALIDA); Serial.begin (115200); }
A continuación, está la función de bucle vacío , implementamos la detección y comparación de frecuencia.
bucle vacío () { si (cuenta <LONGITUD) { cuenta ++; rawData = analogRead (A0) >> 2; } más { suma = 0; pd_state = 0; int período = 0; for (i = 0; i <len; i ++) { // Autocorrelación sum_old = sum; suma = 0; para (k = 0; k <len-i; k ++) suma + = (rawData-128) * (rawData-128) / 256; // Serial.println (suma); // Máquina de estado de detección de picos if (pd_state == 2 && (sum-sum_old) <= 0) { period = i; pd_state = 3; } if (pd_state == 1 && (suma> umbral) && (suma-suma_antiguo)> 0) pd_state = 2; if (! i) { thresh = sum * 0.5; pd_state = 1; } } // Frecuencia identificada en 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 (LED superior, ALTO); } else { digitalWrite (justRight, HIGH); } } } } cuenta = 0; } }
A continuación se muestra el código completo con un video de demostración. Sube el código a tu placa Arduino y rasguea.