Proyecto: Dispositivo que reacciona a frecuencias sonoras en Arduino.

Buenas tardes. Me gustaría explicarles mi proyecto con Arduino por ver si me pueden resolver algunas cuestiones. Voy a intentar explicar todo lo mejor posible y de paso pondré mis aportaciones por si a alguien le pudieran servir de ayuda. Aclaro que no pretendo que me lo den todo hecho, solo necesito resolver dudas porque llevo poco usando arduino y a veces no sé hacer las cosas :(


-¿Quien soy?¿Cuales son mis conocimientos?
Soy estudiante de diseño de producto, además me dedico profesionalmente a cantar, por lo que he pensado realizar un proyecto que enlace ambas disciplinas :)

Mis conocimientos de electrónica con Arduino son muy básicos. He realizado un curso de las típicas cosas con Arduino y Lillypad como encender un LED, mover un servomotor... Muchas de las cosas que sé las he sacado del libro "Make wearable electronics"de Kate Hartman (lo tengo en pdf pero no me deja subirlo porque excede el tamaño, se lo puedo pasar si lo desean).
Tengo otros conocimientos como SolidWorks.

-¿Qué pretendo hacer de proyecto?
Pretendo realizar un dispositivo tipo wearable (collar) que reaccione con mi voz cuando canto. La idea es que cuando mi voz emita un DO se ilumine un LED rojo, cuando sea un RE se ilumine un LED azul, cuando sea un Mi un led verde... Otra idea es que por ejemplo cuando sea un FA se mueva un servomotor...
Es decir, el proyecto será un complemento más al espectáculo.
Creo que lo ideal sería utilizar LEDS RGB para tener más colores disponibles.


-Pero entonces, no podrías realizar muchas frecuencias a la vez, solo un tono detrás de otro...
Exacto, de momento, no me veo capaz de hacer algo más complejo. Solo podría ser a capella.


-¿En qué proyectos o estética me baso?
Me inspira mucho la empresa LED and mirror costumes - Light Solutions ETERE - by ETERESHOP.
La mayoría de wearables para espectáculo NO interaccionan con el sonido, simplemente tienen una programación previa. A veces sí que interaccionan, pero responden a un sonido alto de volumen, es decir a un golpe de sonido, pero no a una frecuencia de una nota musical como DO, RE, MI...

Digamos que este tutorial es lo que NO quiero:


-¿Qué problemas he tenido hasta ahora?
Primeramente he de decir que no sabía que iba a ser tan complicado. A los diseñadores de producto no nos imparten conocimientos electrónicos, más bien nos dedicamos a la parte estética. Sin embargo a mi la electrónica me parece un mundo fascinante y he querido dirigir mi proyecto hacia este camino.

He buscado muchas cosas en inglés y español y al final solo me ha funcionado ese tutorial, menos mal que encontré a este agradable señor: My Weekend Project: Musical Note Detector Using An Arduino

He realizado el tutorial y el primer problema es que Arduino detecta muy bien las frecuencias emitidas por el piano, pero si canto las frecuencias, no las reconoce con tanta precisión (no es que yo desafine :ROFLMAO:).
He investigado sobre frecuencias en notas para buscar una explicación a todo y entender qué es una frecuencia. Aquí aparece qué frecuencia le corresponde a cada nota musical. Frecuencia de las notas musicales

El segundo problema es que no tengo ni idea qué puedo hacer para que cuando yo con mi voz, o yo con el piano haga sonar un LA (440 herzios) (input) pueda ordenar que se ilumine un LED (output)... No se cómo escribir el código.

Hasta ahora los tutoriales que he realizado eran con simples pulsadores para iluminar LEDS... eran más simples.

Muchas gracias de antemano y si quieren saber más no duden en decírmelo.
 
@LadyCarp Lo que intentas hacer es un fabuloso proyecto, como ya te diste cuenta la frecuencia de las notas del instrumento están en ciertos rangos de Hz constantemente y precisos, por muy entrenado y afinado que sea un cantante habrá una variación y hay muchas clasificaciones de Voz que lio no, por ende habrá que realizar un análisis espectral de cada nota cantada dependiendo el tipo de voz.

Hay 2 maneras de realizar ese proyecto la primera con AI interesante, la segunda crear un programa que identifique cada nota, esta ultima ya se ha realizado y el programa se llama Evocanto.

Para poder entender como esta estructurado adjunto el PDF, después de leer este archivo podrás darte cuenta que tipo de herramientas puede implementar o modificar, al igual que tipo de programación es el mas factible para realizar tu proyecto.

También puedes ver el siguiente programa para darte una guía al respecto Sonic Visualiser
 

Adjuntos

  • Evocanto.pdf
    496.9 KB · Visitas: 3
Última edición:
En música, la diferencia de tocar un la 440 Hz con piano, tu voz, una guitarra, etc, se le llama TIMBRE. El programa del tutorial no esta programado para diferenciar timbres, por lo tanto no deberías tener problemas con probarlo con tu voz, a menos que efectivamente estés desafinando.

Como el programa ya existe, debes aumentar una rutina que encienda los leds que dices. No se programar Arduino, pero un ejemplo de algoritmo sería:

bucle:

if (nota == la)
then
output pin B0

if (nota == sol)

output pin B1

if (nota == fa

etc...


goto bucle
 
Muchas gracias a los dos por las respuestas tán rápidas:)
Hola, básicamente he visto algo similar a lo que buscas, a un afinador de instrumentos. Quizás modificando algo ya hecho.
Efectivamente hay muchos tutoriales, pero no he encontrado ninguno que compartiera el código y que explicara cómo hacer funcionar un LED una vez que se detecta la frecuencia.

@LadyCarp Lo que intentas hacer es un fabuloso proyecto, como ya te diste cuenta la frecuencia de las notas del instrumento están en ciertos rangos de Hz constantemente y precisos, por muy entrenado y afinado que sea un cantante habrá una variación y hay muchas clasificaciones de Voz que lio no, por ende habrá que realizar un análisis espectral de cada nota cantada dependiendo el tipo de voz.

Hay 2 maneras de realizar ese proyecto la primera con AI interesante, la segunda crear un programa que identifique cada nota, esta ultima ya se ha realizado y el programa se llama Evocanto.

Para poder entender como esta estructurado adjunto el PDF, después de leer este archivo podrás darte cuenta que tipo de herramientas puede implementar o modificar, al igual que tipo de programación es el mas factible para realizar tu proyecto.

También puedes ver el siguiente programa para darte una guía al respecto Sonic Visualiser
Muchísimas gracias, voy a mirar todo detenidamente y cuando lo asimile volveré a escribir.
:)
En música, la diferencia de tocar un la 440 Hz con piano, tu voz, una guitarra, etc, se le llama TIMBRE. El programa del tutorial no esta programado para diferenciar timbres, por lo tanto no deberías tener problemas con probarlo con tu voz, a menos que efectivamente estés desafinando.

Como el programa ya existe, debes aumentar una rutina que encienda los leds que dices. No se programar Arduino, pero un ejemplo de algoritmo sería:

bucle:

if (nota == la)
then
output pin B0

if (nota == sol)

output pin B1

if (nota == fa

etc...


goto bucle
Sí, ya se que eso es el timbre, pero la frecuencia de la voz no la reconoce de forma precisa... no sé cual es el problema pero de verdad que no desafino :ROFLMAO:
En música, la diferencia de tocar un la 440 Hz con piano, tu voz, una guitarra, etc, se le llama TIMBRE. El programa del tutorial no esta programado para diferenciar timbres, por lo tanto no deberías tener problemas con probarlo con tu voz, a menos que efectivamente estés desafinando.

Como el programa ya existe, debes aumentar una rutina que encienda los leds que dices. No se programar Arduino, pero un ejemplo de algoritmo sería:

bucle:

if (nota == la)
then
output pin B0

if (nota == sol)

output pin B1

if (nota == fa

etc...


goto bucle
voy a probar con eso. Muchas gracias :D
 

Dr. Zoidberg

Well-known-Papá Pitufo
Sí, ya se que eso es el timbre, pero la frecuencia de la voz no la reconoce de forma precisa... no sé cual es el problema pero de verdad que no desafino
Y como sabés que estás cantado un LA 440 y no el de alguna octava arriba? Un LA 440 es una nota relativamente "grave" para la voz de una mujer, que además no es un tono "puro" como el 440 del diapasón, sino que tiene armónicos propios del sistema reproductor de voz.
Hay varias formas de hacer lo que necesitás, pero dudo que lo logres en forma simple con un Arduino:
1-Hacer una FFT y buscar la componente de mayor amplitud (que debería ser la fundamental de la nota que querés identificar) --> Muy difícil sin usar una FPU a menos de hacer algunos trucos de programación.
2-Programar filtros pasabanda estrechos para que dejen pasar la frecuencias que necesitás, y luego determinás la frecuencia real contando durante un tiempo "los cruces por cero" de la señal capturada...y si está mas o menos cerca activás el LED (supongo que en esta aplicación la precisión es algo superfluo en tanto no se desvíe demasiado). Esto es bastante mas simple y solo requiere tener la memoria suficiente para muestrear la señal y luego filtarla.
3- Lo de 2 sin filtros, pero es un problema por que se van a colar frecuencias/armónicos/ruidos que pueden caer cerca de las que vos buscás y se puede confundir el algoritmo de reconocimiento. Con un poco de trabajo puede funcionar con escasos recursos.

Eso es lo fácil...
 
Última edición:
Estoy viendo en el código del tutorial del video, la rutina

//Print the note
Serial.print("i think you played");
if(notelocation==0)
{
Serial.Print("C");
}

Proba cambiando esa línea Serial.print("C") por

digitalWrite(13,HIGH);


Eso en teoría debería encender un led conectado al puerto digital 13 del Arduino al cantar la nota DO.

Lo siento pero no se programar Arduino, es lo que estoy entendiendo así al vuelo. Si funciona, cambia el código para las demás notas
Y como sabés que estás cantado un LA 440 y no el de alguna octava arriba? Un LA 440 es una nota relativamente "grave" para la voz de una mujer

A menos que sea la Negra Sosa
 
Última edición:
Arriba