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.
![](https://blog.uelectronics.com/wp-content/uploads/2021/07/comparacion.jpg)
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.
![](https://blog.uelectronics.com/wp-content/uploads/2021/07/trimpot.jpg)
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
![](https://blog.uelectronics.com/wp-content/uploads/2021/07/conexion-1-1.jpg)
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.
![](https://blog.uelectronics.com/wp-content/uploads/2021/07/conexion-2-2.jpg)
![](https://blog.uelectronics.com/wp-content/uploads/2021/07/advertencia.jpg)
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. 👏👏👏👏👏👏👏