Inicio > Arduino, Programación > LEDs al ritmo de la música con Arduino

LEDs al ritmo de la música con Arduino


LEDs al ritmo de la música

Os dejo un pequeño experimento que he estado haciendo esta tarde. Consiste en sincronizar unos LEDs al ritmo de la música que suena en el PC usando Arduino.

Para ello, cortamos un cable Microjack con el que recibiremos el sonido del PC. Cortaremos el cable y conectamos la malla al GND, el rojo (derecho) al analógico 0, y el blanco (izquierdo) al 1.

Ahora podremos leer el volumen de la música y así encender los LEDs cuando corresponda usando analogRead.

A más volumen por un canal, más LEDs de este encenderemos. 

En mi caso, los LEDs derechos van del 0 al 2, y los izquierdos, del 5 al 3 (sí, en orden inverso, por comodidad la conectarlos).

Cuando el volumen es 0 ó muy bajo, no encendemos ninguno, cuando el volumen sea bajo, encenderé el 0 y el 6, y conforme suba, el 1 y 4, y finalmente, el 2 y el 3. Estos “volúmenes” los defino como umbrales. Quizás tengáis que ajustarlos un poco según vuestro PC.

Evidentemente, si la canción es estéreo, no se encenderán los mismos LEDs en cada canal.

Podéis ver un vídeo del funcionamiento aquí:

Aquí os dejo el código, que como veréis, es muy sencillo:


//Canales a Leer
#define R  0
#define L  1

//PINS Izquierdos
#define L1 5
#define L2 4
#define L3 3

//PINs Derechos
#define R1 0
#define R2 1
#define R3 2

//Umbrales para cada PIN
#define UMBRAL1 20
#define UMBRAL2 40
#define UMBRAL3 50

//Variables donde guardamos
//El valor de R y L
int r;
int l;

void setup() {

  //Ponemos todos pins del 0 a 6
  //en modo OUTPUT
  for (int i = 0; i < 6; i++)
   pinMode(i, OUTPUT);

}

void loop() {

  //Leemos los canales
 r = analogRead(R);
 l = analogRead(L);

 //Encemos los leds que correspondan

 if (r > UMBRAL1)
  digitalWrite(R1, HIGH);
 else
  digitalWrite(R1, LOW);

 if (r > UMBRAL2)
  digitalWrite(R2, HIGH);
 else
  digitalWrite(R2, LOW);

 if (r > UMBRAL3)
  digitalWrite(R3, HIGH);
 else
  digitalWrite(R3, LOW);

 if (l > UMBRAL1)
   digitalWrite(L1, HIGH);
 else
   digitalWrite(L1, LOW);

 if (l > UMBRAL2)
   digitalWrite(L2, HIGH);
 else
    digitalWrite(L2, LOW);

 if (l > UMBRAL3)
   digitalWrite(L3, HIGH);
 else
    digitalWrite(L3, LOW);

}

Podéis mejorar el efecto añadiendo más LEDs a cada canal.

Anuncios
Categorías:Arduino, Programación Etiquetas: , , , ,
  1. David
    3 junio, 2014 en 12:45 pm

    El cable microjack al que te refieres, cuál es exactamente?
    Te refieres a un cable jack de entrada al micrófono ?

  2. David
    16 junio, 2014 en 11:43 am

    Buenas, gracias por responder la pregunta anterior, me ha surgido otra
    sería posible meter 3 leds en cada pin arduino, por ejemplo
    en el pin 1 (3leds), en el 2 (3 leds) asi hasta el pin 8 y que cuando llegue la música por ejemplo y solo pille el umbral en el pin 1 se enciendan los tres leds a la vez? es un ejemplo y nose si me he explicado bien jajajaja Saludos 🙂

    • 16 junio, 2014 en 11:49 am

      Poder se puede, pero los arduinos emiten muy poco amperaje por las salidas, por lo que el brillo de los LEDs será menor.

  3. DANIO
    26 octubre, 2014 en 2:09 am

    me podreis pasar un diagrama de las conexiones?

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: