En este tutorial realizaremos un proyecto con los sensores de sonido KY-038 y KY-037 que controlarán el encendido y apagado de un LED; y posteriormente de un foco, auxiliándonos con del módulo relevador de 5V KY-019.
INTRODUCCIÓN
Los sensores de sonido KY-038 y KY-037 son muy similares, ya que ambos cuentan con un micrófono para la detección de sonidos, la única diferencia es la sensibilidad que tiene cada uno.

El ajuste de la sensibilidad es a través del trimpot, siendo que en forma horaria aumenta la sensibilidad y de lado contrario se reduce.

Los dispositivos tienen dos LEDs:
Ahora realizaremos la prueba de funcionamiento y ajuste de sensibilidad de ambos sensores, para lo cual requeriremos:
Diagrama de conexión de los sensores de sonido
La siguiente conexión es útil para ambos sensores:KY-037 y KY-038, ya que ambos cuentan con los mismos pines. El led que estaremos conectando nos confirmará la detección de sonido

Código de prueba de Sensores de Sonido
El siguiente programa tiene como función detectar los pulsos(que llamaremos flancos) que está recibiendo la tarjeta de desarrollo cada vez que detecte sonido.
//Nota: Ajustar la sensibilidad del micrófono con el trimpot int KY037= 4; //Pin 4 para la salida digital del KY int flanco= 0; //Variable de apoyo para saber la lectura del sensor void setup() { Serial.begin(9600); //Inicialización del puerto serial a 9600 baudios pinMode( KY037, INPUT) ; //pin del KY como entrada de datos } void loop() { if (digitalRead(KY037)==HIGH ) //Si se detecta un sonido el KY(dependiente a la sensibilidad determinada por el usuario) { flanco= flanco + 1; // Se realiza un contador +1 por cada vez que el sensor detecte un flanco ALTO Serial.print("Número de Flancos: "); // Escribe el número de flancos detectados dependiendo el sonido censado... Serial.println(flanco, DEC) ; // escribiendo el valor en forma decimal } }
En nuestro Monitor Serial visualizaremos cuando efectuemos algún sonido como se comporta el módulo, podremos ver que el contador varia dependiendo a la intensidad del sonido. Si es bajo sólo se vera uno o dos flancos y si es más fuerte crecerá el valor del contador.
Para calibrar nuestro sistema, consideramos que un sonido con 4 flancos en ALTO, son suficientes para poder tener un sonido actuador.
Prueba en ambos sensores <
Teniendo en cuenta que que ya se efectuó una calibración en la sensibilidad y ya conocemos los datos obtenidos de los dispositivos, modificaremos un poco nuestro código como se muestra a continuación:
//Nota: Ajustar la sensibilidad del micrófono con el trimpot int led = 13; //Colocaremos un Led en el Pin 13 del Arduino para saber cuando sea activado el Sensor de Sonido int KY037= 4; //Pin 4 para la salida digital del KY int flanco= 0; //Variable de apoyo para saber la lectura del sensor void setup() { Serial.begin(9600); //Inicialización del puerto serial a 9600 baudios pinMode( led, OUTPUT) ; //pin 13/led como pin de salida pinMode( KY037, INPUT) ; //pin del KY como entrada de datos } void loop() { if (digitalRead(KY037)==HIGH ) //Si se detecta un sonido el KY(dependiente a la sensibilidad determinada por el usuario) { flanco= flanco + 1; // Se realiza un contador +1 por cada vez que el sensor detecte un flanco ALTO Serial.print("Número de Flancos: "); // Escribe el número de flancos detectados dependiendo el sonido censado... Serial.println(flanco, DEC) ; // escribiendo el valor en forma decimal if (flanco == 4) { //Si el contador llega a 4, que es el valor anteriormente calibrado a nuestro sistema Serial.println(flanco); //Escribe el valor del flanco=4 y... digitalWrite(led, HIGH); //...enciende el led } else if (flanco== 8) { //El contador esperara un nuevo sonido para desactivar el led y eso es cuando se llega al valor de flanco=8 Serial.println(flanco); //Escribe el valor del flanco=8 y... digitalWrite(led, LOW); //...se apagará el led y .. flanco= 0; //Se reiniciara el valor del flanco para que no se quede ningún valor guardad en flanco } } }
Con estas nuevas instrucciones se notará que cada vez que se realice un sonido alrededor de 4 flancos se encenderá el LED y cuando se vuelva a llegar a otros 4 flancos (Número de Flancos=8) se apagará el LED.
Se puede observar que si el sonido es débil los flancos detectados son menores a 4 y por lo tanto no se podrá encender el led. Esto se realiza para poder “filtrar” el sonido y que nuestro dispositivo solo detecte un aplauso en especifico y que no se confunda con otro sonido.
Por otro lado, el KY-038 incrementamos la sensibilidad y a la menor provocación dispara los flancos con un “chasquido” o con una palmada débil.
Ahora que ya tenemos calibrados los módulos, remplazaremos el led por un foco y nos auxiliaremos de el Modulo KY-019. Para adicionalmente requeriremos:
Diagrama de conexión
Trabajaremos con el KY-037 debido a que el ajuste de sensibilidad que realizamos es ideal para que solo se active con un aplauso previamente predeterminado a 4 flancos.


Programa en IDE Arduino
El programa previamente realizado, para el el encendido de un LED lo modificaremos para que ahora el actuador afecte al relevador de 5V.
//Nota: Ajustar la sensibilidad del micrófono con el trimpot int reley= 13; //Salida al reley en el Pin 13 del Arduino que activara a su vez el foco int KY037= 4; //Pin 4 para la salida digital del KY int FlancoKY= 0; //Variable de apoyo para saber la lectura del sensor void setup() { Serial.begin(9600); //Inicialización del puerto serial a 9600 baudios pinMode( reley, OUTPUT) ; //pin 13/reley como pin de salida pinMode( KY037, INPUT) ; //pin del KY como entrada de datos } void loop() { if (digitalRead(KY037)==HIGH ) //Si se detecta un sonido el KY(dependiente a la sensibilidad determinada por el usuario) { FlancoKY= FlancoKY+ 1; // Se realiza un contador +1 por cada vez que el sensor detecte un flanco ALTO Serial.print("Número de Flancos: "); // Escribe el número de flancos detectados dependiendo el sonido censado... Serial.println(FlancoKY, DEC) ; // escribiendo el valor en forma decimal if (FlancoKY== 4) { //Si el contador llega a 4, que es el valor anteriormente calibrado a nuestro sistema Serial.println(FlancoKY); //Escribe el valor del flanco=4 y... digitalWrite(reley, HIGH); //...enciende el RELE } else if (FlancoKY== 8) { //El contador esperara un nuevo sonido para desactivar el RELE y eso es cuando se llega al valor de flanco=8 Serial.println(FlancoKY); //Escribe el valor del flanco=8 y... digitalWrite(reley, LOW); //...se apagará el RELE y .. FlancoKY= 0; //Se reiniciara el valor del flanco para que no se quede ningún valor guardad en flanco } } }
En el caso del relevador se realizo la conexión en NO(Normalmente Abierto) para que se activará con una entrada en ALTO.
Y de esta manera podremos controlar nuestra lámpara por medio de aplausos. 👏👏👏👏👏👏👏