Bola musical luminosa con led RGB y micro

Buenas, este es un proyecto de hace un tiempo. lo documento pues varios me han pedido el código :slight_smile:

Se trata de una bola luminosa que reacciona al sonido. Según el nivel de ruido se ilumina en azul, verde y rojo secuencialmente.

Es hipnótica funcionando en vivo. Ahi va un vídeo en el que se ve mas o menos el funcionamiento.

La finalidad de este proyecto era en principio ayudar a darse cuenta de manera visual que se estaba haciendo tanto ruido como para molestar al resto de habitantes de la casa o vecinos.

Después de varias pruebas se encontró la diversión de utilizarlo como luz de efectos para música.[smiley=2vrolijk_08.gif]

Además el módulo montado se puede reutilizar como indicador de cualquier tipo de paramétro. Lectura de un sensor, modos de uso, batería, etc.

Los componentes que se utilizaron fueron:
-Un LED RGB de cuatro patillas ánodo común.
-Tres resistencias de 220 Ohm.
-Un micro preamplificado (Breakout Board for Electret Microphone sku: BOB-08669 de sparkfun)

Este es el circuito:

Estas son imágenes del módulo rgb casero:

Fotos del montaje:

/*
////////////////////////////////////////////////////////////////////////////////
  Bola musical luminosa
 
 Es una bola que reacciona a la presion sonora iluminandose.
 Según el nivel se ilumina secuencialmente  en azul, verde y rojo.
 
 El circuito:
 * LED RGB de 4 patillas. Ánodo conectado a 5v, cátodos conectados a 
   pines 9,10 y 11 y luego a tierra a través de resistencias de 220 Ohm.
 * Microfono preamplificado en pin analógico 0. (yo use el Breakout Board 
   for Electret Microphone sku: BOB-08669 de sparkfun ). 
   Tambien se puede utilizar cualquier elemento que nos proporcione un
   voltaje variable hasta 5V. 

 Vídeo:                        http://www.youtube.com/watch?v=_QrF_CfAFEY
 Mira tambien:                 http://www.youtube.com/watch?v=hckZEcqkg40


 creado el 22 de junio de 2010
 Por Alejandro Taracido Cano (TCRobotics)
 Canal de youtube:             http://www.youtube.com/user/TCRobotics
 ///////////////////////////////////////////////////////////////////////////////
  Musical ball light 
  
 It is a ball that reacts to the sound pressure with light. 
 According to the sound level it sequentially lights in blue, green and red. 
  
 The circuit: 
 * 4-pin RGB LED. 5v connected to anode, cathodes connected to 
   pin 9,10 and 11 and then to ground through 220 Ohm resistor. 
 * Analog microphone preamplifiers in pin 0. (I use the Breakout Board 
   for Electret Microphone sku: BOB-08 669 from SparkFun). 
   You can also use anything that will give us a variable voltage 
   between 5 and 0 volts. 

 Video: http://www.youtube.com/watch?v=_QrF_CfAFEY 
 See also: http://www.youtube.com/watch?v=hckZEcqkg40 

 
 created 22 Jun 2010
 By Alejandro Taracido Cano (TCRobotics)
 Youtube channel: http://www.youtube.com/user/TCRobotics
////////////////////////////////////////////////////////////////////////////////
 */
int MicPin = 0;          // pin that the mic is attached to

int redPin = 9;          // pins that the cathodes of LED are attached to  
int greenPin = 10;
int bluePin = 11;

int MicValue = 0;        // the Microphone value

void setup() {
  //Serial.begin(9600);  //for test the input value initialize serial
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  analogWrite(redPin, 255);       //turn off all LEDs
  analogWrite(greenPin, 255);
  analogWrite(bluePin, 255);
}

void loop() {

  MicValue = analogRead(MicPin);  //read the value of the microphone
 
  //Serial.println(MicValue);     //for test the input value

  if (MicValue > 530) {     //adjust this value to the desired sensitivity
    analogWrite(bluePin,0); //lights up blue
    delay(15);              //small delay for quick response at low noise levels
    }
  
  if (MicValue > 540) {       //adjust this value to the desired sensitivity
    analogWrite(bluePin,255); //lights up green and turn off blue
    analogWrite(greenPin, 0);
    delay(60);               //mid delay for response at mid noise levels
    }
  
  if (MicValue > 550) {        //adjust this value to the desired sensitivity
    analogWrite(greenPin,255); //lights up red and turn off green
    analogWrite(redPin, 0);
    delay(140);                //high delay for response at high noise levels
    }

analogWrite(greenPin, 255);    //Turn off all LEDs
analogWrite(redPin, 255);
analogWrite(bluePin,255);  

}

Se agradecerán los comentarios, preguntas y sugerencias :slight_smile:

Debería ser obligatorio que existiera una bola de estas en cada casa, jajaja

Una pregunta, ¿por qué usas salidas analógicas? Supongo que lo habrás puesto para una posible ampliación.

Un saludo

Jajaajja :slight_smile:

Pues si, realmente con este código puedes conseguir colores RGB variando los valores analógicos de cada color. Es una manía mía utilizar el analogwrite en los códigos con LEDs RGB, así si quiero que sea otro color pues lo modifico rápidamente. Vamos, para que sea mas reutilizable.

Gracias por el interés!

Sencillo y super guapo! [smiley=thumbsup.gif]

Felicidades y gracias por compartirlo.

Gracias Caramono! [smiley=dankk2.gif]

Hola he hecho este proyecto y es genial, ahora querria ampliarlo para por ejemplo tener 3 leds uno para graves o tro para medios y otro para los agudos.
como lo hago?

gracias de antemano

Gracias electronicyuyu!

Pues eso ya es un poco mas complicado. Te metes más en audio.

En este proyecto lo que busco para señalizar es el "volumen" del sonido, vamos, la amplitud de la onda de sonido.
Si buscamos diferenciar graves o agudos, lo que tendríamos que mirar es la frecuencia de la onda (graves menos frecuencia, agudos más frecuencia). El problema es que el "audio" tiene frecuencias comprendidas entre los 20 Hz y los 20 kHz(Espectro audible - Wikipedia, la enciclopedia libre). Por lo que para conocer la frecuencia instantánea de un sonido (según el teorema de Nyquist Teorema de muestreo de Nyquist-Shannon - Wikipedia, la enciclopedia libre) deberías muestrear con el conversor A/D del arduino a 40 KHz.

Nuestro querido arduino sin embargo puede muestrear a un máximo de 10KHz :cry: (http://arduino.cc/en/Reference/AnalogRead).

Otra cosa es que te metas en hardware externo si te quieres pelear :wink:

Un saludo!!

Hay algún chip (creo haberlo leído en el foro inglés) que te saca 6 ó 7 frecuencias (no lo recuerdo bien) y te da los valores de audio en cada una de ella por puerto serie, por lo que es bastante fácil usarlo.

Que interesante, si lo encuentras postéalo por aquí!

Pues por suerte estaba en la primera página y fue fácil encontrarlo

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1275615544

Gracias a TC y a CHIVA.
estas semanas intentare montar algo.
Postearé los resultados o las dudas...
Un saludo.

hola ¿hay alguna forma de sustituir el microfono por un microfono normal?

Pues de los micros normales solo puedes conseguir señales de poco voltaje, del orden de milivoltios.

Por eso se necesita amplificar esta señal para poder leerla mediante la entrada analógica.

El micro que uso ya incorpora un amplificador. Aunque puedes hacer el circuito de amplificación tu:)

muchas gracias pero llo tanto no se ¿abra algo en internet?

Busca en google amplificador microfono electret :wink:

la verdad me parece un proyecto maravilloso...y muy util....y tal vez me vea novato al preguntar esto pero.....el modelo del arduino es el duemilanove?? me imagino que si o no??

la verdad me parece un proyecto genial para usar el arduino y muy util....solo una pregunta....y es que tal vez me vea novato....peroo.....el modelo de el arduino que usaste es el duemilanove me imagino....solo esa duda tendria amigo....de nuevo genial proyecto =D

Gracias por el link chiva!! le echare un vistazo. Aunque ahora estoy un poco atareado con la creación de PCBs:) me fabriqué una insoladora y ya hice un par de placas. (si tengo tiempo a lo mejor posteo como la construí, que me quedó genial:))

Sobre lo del arduino, si, es un duemilanove. Aunque creo que se puede hacer con todos los modelos si no me equivoco. Solo necesitas tener 3 salidas PWM y una entrada analógica:)

Para los que no la conozcan en las fotos, la placa roja es una shield para hacer prototipos de Sparkfun (SparkFun ProtoShield Kit - DEV-13820 - SparkFun Electronics).

Quiero modificar mi primer post para añadir info. Y ahora no me aparece el botón Modify. Alguien sabe como puedo hacer o por que no puedo editarlo??

Gracias!!!

Lo que pasa es que esto es el foro de Arduino en el que no se puede editar los posts pasado cierto tiempo y no existen moderadores, por eso los "Important topics" se quedan eternamente, ya que nadie se preocupa de quitarlos, incluso cuando ya no valen para nada.

Llevan tiempo diciendo que van a poner opciones para que los modere la comunidad, pero me estoy viendo venir lo que pasa en digg.