Proyecto: Encender y Apagar Luz con Aplausos

Este proyecto es de los más sencillos y a su vez de los más populares. Quién no quiere sentirse un dandy encendiendo la luz de su salón con una palmada al llegar a casa? En Amazon ya están vendiendo lámparas y focos led que se encienden con una palmada, pero claro, no tiene gracia comprarlo hecho. Queremos hacerlo nosotros mismos verdad?

Como dijimos es un proyecto muy simple, pero dependiendo del país donde te encuentres trabajarás con tensiones de 110v o 220v, por lo que deberás ser muy cuidadoso cuando trabajes con alto voltaje.

Elementos necesarios

Aquí hay una lista de los elementos que necesitaremos para este proyecto:

 

Encender lampara con apalusos arduino

Conexiónes para encender la luz con palmadas

A continuación podemos ver el diagrama de conexión. Primero conectarémos el micrófono y el relé al arduino uno.

Si el sensor de sonido tiene 4 pines significa que tiene una salida digital y una salida analógica, asegúrete de utilizar la salida analógica para la conexión. Si el micrófono sólo tiene 3 pines es porque sólo tiene salida analógica. Conecta el micrófono al pin analógico 0 A0 de tu arduino. Luego conecta el relé al pin digital 2.

lampara que enciende con aplauso

Una vez conectados los módulos a la placa Arduino es momento de conectar el cable del portalamparas al relé. Recuerde que este cable se conecta a alta tensión por lo que deberá hacer las conexiones sin estár conectado a la corriente eléctrica.

Conexión de relé arduino a portalamparas

Código Básico

Cuando hayas terminado con todas las conexiones sube el código de abajo que enciende la lámpara con un aplauso. Si todo funciona bien, ahora puedes conectar el enchufe al relé.

void setup() {
  pinMode(2, OUTPUT);
  pinMode(A0, INPUT);
}
void loop() {
  if(analogRead(A0) > 600) {
    digitalWrite(2, !digitalRead(2));
    delay(1000);
  }
}

El código que acabamos de subir a nuestro Arduino funcionará, pero tiene un problema. Si escuchamos música fuerte o subimos el volumen del televiso puede ocurrir que lámpara parpadée. Para evitar este inconveniente debemos lograr que el código sea más robusto y capaz de ignorar ese ruido.

Código Mejorado

Una forma de conseguirlo es almacenando las últimas lecturas de la salida del micrófono, entonces si se detecta un aplauso (al leer desde el micrófono se recibe la señal High) comprobamos si hay un anterior High almacenado, y si no lo hay cambiamos el estado de la lámpara.

Este método no es perfecto, hay algunas formas más avanzadas de hacerlo, pero con esta solución lograremos evitar la mayoría de los errores por ruidos fuertes. Claro que no servirá por ejemplo si tosémos fuerte, o si estornudamos, o si se nos cae algo al piso.

Lo haremos de la siguiente forma:

  1. Tendremos un long long int
  2. Cada pocos milisegundos cambiaremos este valor por uno (así: valor = valor << 1 ) desplazará todos los bits uno a la izquierda y añadirá 0 al principio
  3. Entonces si el micrófono será mayor que algún valor, incrementaremos nuestro valor por uno
  4. Al mismo tiempo, si la salida del micrófono es mayor que algunos valores, cambiaremos el estado de la lámpara, pero sólo cuando nuestro valor con long int value sea == 0 , ¿por qué cero? porque significa que para las últimas lecturas no se detectó ningún sonido fuerte.

Veamos el código, que es mucho más simple que la explicación.

long long int last_states = 0;
void setup() {
  pinMode(2, OUTPUT);
  pinMode(A0, INPUT);
}
void loop() {
  last_states = last_states << 1; 
  if(analogRead(A0) > 600) {
    if(last_states == 0){
      digitalWrite(2, !digitalRead(2));
    }
    last_states++;
  }
  delay(20);
}

Con este código lámpara no reaccionará a una música fuerte o a la TV encendida.