¡Las cabras!

Resultados para etiqueta "Arduino"

Publicado: 00:53 09/07/2010 · Etiquetas: , , · Categorías: Frikada al canto : Electrónica
Esto va de un proyecto que he hecho para que unos LEDs bailen según la música que le pongo en el PC.

Uso el Arduino, que podeis ver de que va en el link de la derecha (y si os interesa la electrónica, os recomiendo haceros con uno). Con 6 LEDs y resistencias, y el arduino, sobra para hacer esto.

Antes tenía un problema de sincronismo (los LEDs se volvian majaras y se intercambiaban posiciones), pero ya lo he arreglado. La parte alta del byte que envia el PC indica para que LED es la información, y la parte baja la intensidad del sonido en esa banda de frecuencias.

Si no os interesa todo el rollo ese, mirad el video siguiente que es lo bonito:


Fijaros cuando silba K.K Slider

Primero comento un poco por encima el programa, y al final os pondre el código. Los que os interese el Arduino echadle un vistazo, así os podeis hacer una idea de lo fácil que es programar para esto (aunque si quieres hacer cosas complicadas, también puedes programar en C).

La parte que está en el Arduino es muy simple, y de hecho esta casi fusilada de un ejemplo que viene con el compilador del Arduino (Dimmer, se llama). Simplemente se indica que los pines capaces de regular voltaje son salida, y luego se espera que lleguen los bytes del PC. Se separa la parte alta y la parte baja, con la alta se elige el LED correspondiente (mediante un vector), y la parte baja lleva la intensidad del volumen ya tratada. Como la luminosidad de los LEDs no es lineal con el voltaje, hay otro vector para esto, entramos como índice con el volumen y ya nos devuelve cual sería el voltaje (que va de 0 a 255, es decir, de 0 a 5 V).

Esto de la luminosidad suena raro, pero realmente lo hice a voleo probando valores. Primero lo puse a tope (255) y luego busque lo que para mí sería un valor medio de luminosidad. El resto de valores esta medio extrapolando medio interpolación lineal.

La parte que lleva el PC (mediante Processing) es un poco más complicada. Utiliza la libreria minim, que la verdad es que me resolvió la peor parte de todo, poder obtener el espectro de frecuencias de la señal de salida de la tarjeta de sonido.

Esto esta hecho muy a voleo, con poca base de utilización de señal y demás. Lo podría haber hecho mejor, pero quería algo molón, no exacto.

Lo que hago primero es obtener la transformada de fourier de la señal de sonido, gracias a la libreria. Una vez obtenido, la separo en 240 barras equidistantes de forma lineal, para agrupar bandas de frecuencias. Y luego lo que hago es escoger para cada LED varias barras de estas, y coger el valor máximo de cualquiera de ellas.

¿Por que lo hago así? Como sólo tengo 6 LEDs si cojo el espectro, lo divido en 6 y que haga la media de amplitud, no se ve casi nada. Si lo hago en plan logarítmico (que es como van la mayoría de estos ecualizadores o analizadores de frecuencia) pues no va mal del todo, pero pasa lo mismo que antes, los LEDs se encienden casi todo el rato y no se llega a distinguir mucho a la vista.

Pero con esto del máximo, si hay un instrumento tocando en la banda de frecuencias de un LED, al tener mucha amplitud pero poco ancho de frecuencia, se notara muchisimo en un led en particular, vamos, lo que pasa en ese video con el silbido, o en el de la entrada anterior con la ocarina.

Aparte de eso, cada rango de frecuencias suele tener una amplitud más baja a medida que la frecuencia es mayor. Para compensarlo tienen coeficientes distintos, y en el ultimo LED que es para detectar ruido o percusiones multiplico la amplitud por la frecuencia.

Luego otra cosa que tiene es lo de "volumen" esto es una variable que intenta detectar el volumen general que tiene la canción o lo que sea, ya que dependiendo de como pongas tu el volumen manualmente, como sea el PC, o si la canción esta más bajita que otra o lo que sea los LEDs se iluminarian más o menos, y no queremos eso. Esto mide el volumen actual (que es in.mix.level, si es muy bajo es que no suena nada en ese preciso instante) y lo va actualizando, porque si lo cogiera de forma instantanea saldrian igual los sonidos fuertes o debiles dentro de una misma canción y eso tampoco lo queremos.

Despues separa la información en LEDs y la intensidad (que lo hace dividiendo por 10, para que sea un valor entre 0 y 30) y se la envia al arduino. Además lo dibuja, que es lo que usaba yo para ajustarlo fino, ya que lo último que hice fue enviar los datos al Arduino.

Y creo que eso es todo. Pongo el código a continuación (lleva muchos comentarios de como va cada cosa, eso sí, en inglés porque quiero ponerlo en los foros del arduino), y si alguno quereis saber más pues me lo preguntais aquí mismo.

Código para el Arduino:
Secreto: (Pincha para leerlo)



Código para el Processing:
Secreto: (Pincha para leerlo)

Blogs en Vandal · Contacto · Denunciar Contenido