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?
- 1 x placa Arduino Uno
- 1 x Relé 220v
- 1 x Módulo Sensor de Sonido (Micrófono)
- 1 x foco 220v
- Cables
- 1 x Cable con enchufe y portalámpara
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.
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.
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:
- Tendremos un long long int
- 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
- Entonces si el micrófono será mayor que algún valor, incrementaremos nuestro valor por uno
- 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);
}
-
Arduino ATmega 2560 R3¡Oferta!
$20.50$19.00 -
Arduino Uno Wifi¡Oferta!
$15.00$13.00 -
Arduino Mini USB Nano V3.0 CH340 Chip Board 5V 16M + Cable¡Oferta!
$9.00$8.50