¿Qué es un módulo sensor de sonido?
Un sensor de sonido es un dispositivo que detecta variaciones en la presión del aire causadas por ondas sonoras y las convierte en señales eléctricas que pueden ser interpretadas por un sistema electrónico.
Los dos módulos que vamos a ver llevan integrados un sensor de sonido y están preparados para que su conexión con un microcontrolador, como Arduino, sea muy sencilla. Ambos permiten trabajar con señales analógicas y digitales.
Los dos módulos (KY-037 izquierda y KY-038 derecha) forman parte del kit de 37 sensores compatibles con Arduino.
¿Para qué sirven los módulos KY-037 y KY-038?
Estos sensores son comúnmente utilizados para medir niveles de sonido, reconocer patrones de sonido o activar respuestas automáticas en presencia de sonido.
Hay una gran variedad de proyectos en los que se pueden utilizar estos sensores. A continuación puedes ver algunos ejemplos:
- Control de luces o dispositivos: Puedes usar un sensor de sonido para activar o desactivar luces u otros dispositivos electrónicos en respuesta a ciertos niveles de sonido. Por ejemplo, puedes encender las luces cuando detecta una palmada.
- Instrumentos musicales electrónicos: Puedes construir instrumentos musicales electrónicos utilizando sensores de sonido para detectar la intensidad del sonido y generar notas musicales correspondientes.
- Proyectos de seguridad y alarma: Los sensores de sonido pueden utilizarse para construir sistemas de alarma que se activen en respuesta a ruidos inusuales o detectar patrones específicos de sonido, como el vidrio rompiéndose.
- Medición de niveles de ruido: Puedes utilizar sensores de sonido para medir los niveles de ruido ambiental en tu entorno. Esto podría ser útil en proyectos de monitoreo de la contaminación acústica.
- Control por voz: Implementar control por voz en proyectos de Arduino utilizando sensores de sonido para activar comandos específicos en respuesta a palabras o patrones de sonido predefinidos.
- Robotica y vehículos autónomos: En proyectos robóticos, los sensores de sonido pueden ser útiles para la detección de obstáculos o la interacción con el entorno, como seguir un sonido o responder a comandos de voz.
- Juegos interactivos: Puedes incorporar sensores de sonido en proyectos de juegos para crear experiencias interactivas que respondan a ruidos o voces específicos.
- Proyectos de arte interactivo: Los artistas y diseñadores utilizan sensores de sonido en proyectos interactivos que responden a la presencia y nivel de sonido en el entorno, creando instalaciones artísticas únicas.
- Control de música o multimedia: Puedes controlar la reproducción de música o multimedia en respuesta a ciertos patrones de sonido o comandos de voz utilizando sensores de sonido.
- Proyectos de aprendizaje y experimentación: Los sensores de sonido son excelentes para proyectos educativos y de aprendizaje en los que los estudiantes pueden explorar conceptos relacionados con la acústica, la electrónica y la programación.
Especificaciones de los módulos
Estructura física
En las siguientes imágenes puedes ver en detalle la estructura física de ambos módulos:
KY-037
KY-038
- Salida analógica (A0).
- Tierra (GND).
- Alimentación (+): 5V.
- Salida digital (D0).
- Potenciómetro 3296W para ajustar la sensibilidad. Permite determinar el valor de referencia en el modo digital.
- Comparador de voltaje LM393 para comprobar el sonido detectado con el valor de referencia umbral en el modo digital.
- Micrófono condensador electrect. Es el elemento que detecta el sonido.
- LED de salida digital. Se activa cuando se envía un pulso alto (HIGH) al pin D0. Cuando el sonido detectado supera el límite de referencia.
- LED de encencido. Se ilumina cuando el módulo está recibiendo alimentación.
Como puedes apreciar, a nivel físico son similares. La principal diferencia es el micrófono integrado, siendo el del modelo KY-038 un poco más sensible.
Especificaciones técnicas
Voltaje de funcionamiento | 5V |
Micrófono | Electrect |
Sensibilidad | -42 ±3 db |
Salida | Digital y analógica |
Temperatura | -40 a 85 ºC |
Dimensiones | 35 x 15 x 14 mm |
Peso | 4 g |
¿Cómo funciona el sensor de sonido?
Para entender cómo funciona el sensor de sonido, primero debemos entender cómo funciona el sonido.
El sonido es una vibración que se propaga en forma de onda a través de un medio (el aire, el agua, etc.).
Cuando un receptor recibe las ondas, estas provocan vibraciones. Por ejemplo, en el caso del oído humano, las hondas provocan vibraciones en el tímpano, atraviesan el oído medio y se convierten en impulsos eléctricos que el cerebro es capaz de interpretar.
Pues bien, el sensor de sonido que llevan integrados ambos módulos, no es más que un micrófono y funciona igual que el oído humano. Dispone de un diafragma y un condensador. El diafragma vibra cuando detecta las ondas sonoras. El condensador tiene dos placas paralelas. Una de las placas permanece fija y la otra vibra en función del diafragma, lo que convierte el sonido en señales eléctricas.
¿Y qué pasa con el resto de elementos que tiene el módulo?
Vamos por partes. El módulo soporta dos modos: analógico y digital.
Modo analógico
El modo analógico envía directamente a la salida analógica (pin A0) la señal que recibe a través del micrófono. Se trata de una señal analógica, con valores comprendidos entre 0 y 1023 (depende del potenciómetro), que representa el sonido capturado al 100% y que tendremos que interpretar.
Modo digital
Determina si el sonido detectado por el micrófono supera un determinado umbral. Este valor de referencia se establece girando el potenciómetro que vimos anteriormente. El comparador LM393 se encarga del resto. Si el sonido supera el valor establecido se iluminará el LED de salida digital, además de enviar un pulso alto al pin digital (D0). Si el sonido detectado no supera el valor umbral, el LED permanece apagado y se envía un valor bajo (LOW) al pin D0.
¿Cómo conectar un módulo sensor de sonido con Arduino?
Materiales
En la siguiente tabla tienes la lista de materiales necesarios para conectar los módulos KY-037 y KY-038 con Arduino:
*Nota: No son necesarios los dos módulos (KY-037 y KY-038), puesto que el funcionamiento es exactamente el mismo, pero te dejo ambos para que puedas elegir.
Una placa Arduino (Yo usaré Arduino UNO) | ||
Un módulo KY-037 | ||
Un módulo KY-038 | ||
Cables | ||
Una protoboard | ||
Un ordenador con el IDE de Arduino instalado |
Conexiones
Voy a conectar solo el KY-037 puesto que el KY-038 se conecta exactamente igual.
Como se puede utilizar el componente en modo analógico y en modo digital, vamos a ver las dos conexiones por separado, aunque puedes usar las dos a la vez si quieres.
Modo analógico
Como ya comentamos anteriormente, el módulo tiene un pin analógico etiquetado como A0. Para hacer la conexión con Arduino simplemente hay que elegir un pin analógico de Arduino y conectar a él el pin A0 del módulo.
Como puedes ver en la imagen yo lo he conectado al pin A5, pero puedes usar cualquier otro:
El resto de conexiones son simples, solo hay que conectar el pin GND del módulo con un pin GND de Arduino y el pin de alimentación (+) con el pin de 5V de Arduino.
Yo me he ayudado de una protoboard, pero puedes hacer las conexiones directamente con la placa Arduino usando cables dupont macho-hembra:
Modo digital
Para utilizar el modo digital las conexiones cambian ligeramente. La tierra y la alimentación son exactamente iguales, pero es ahora el pin D0 del módulo el que hay que conectar. Lo puedes conectar con cualquier pin digital del Arduino. Como puedes ver, yo he elegido el pin 2:
También puedes hacer las conexiones directamente entre el módulo y la placa Arduino sin necesidad de usar una protoboard:
Calibrado
Antes de utilizar el sensor es necesario calibrarlo. Necesitas un destornillador plano de precisión.
Enciende tu Arduino con el módulo conectado para que le llegue alimentación. Ahora fíjate en el led de salida digital:
Si está iluminado gira el potenciómetro en sentido anti horario:
Si está apagado gira el potenciómetro en sentido horario:
¿Cuánto debes girarlo? Pues hasta que llegues al punto exacto en el que el led se apaga (o se enciende). Debes parar cuando esté a punto de encenderse, pero sin llegar a hacerlo.
Con cuidado y paciencia 😉.
¿Cómo programar un módulo sensor de sonido con Arduino?
El sketch funciona tanto para el módulo KY-037 como para el KY-038. Lo que si debes tener en cuenta es el modo de conexión que hayas elegido: analógico o digital. Vamos a ver los dos.
Modo analógico
El sketch necesario es el siguiente:
/* DECLARACIONES */
const int A0_KY037 = A5;
int lectura;
/* CONFIGURACIÓN */
void setup()
{
Serial.begin(9600);
}
/*FUNCIÓN LOOP*/
void loop()
{
int lectura = analogRead(A0_KY037);
Serial.println(lectura);
}
Declaraciones
Necesitamos una constante entera con el número del pin analógico del Arduino en el que está conectado el módulo. En mi caso es el pin A5, si estás usando otro cambia este dato:
const int A0_KY037 = A5;
Configuración
Simplemente inicializamos el puerto serie para poder depurar:
Serial.begin(9600);
No necesitamos nada más porque los puertos analógicos en el Arduino Uno son solo de entrada y no es necesario configurarlos.
Función loop
Como estamos conectando el módulo en un pin analógico tenemos que utilizar la función analogRead() para leer la información que entra por él:
int lectura = analogRead(A0_KY037);
Solo tenemos que pasar como parámetro el pin que debe leer. Utilizaremos para ello la constante que declaramos previamente (A0_KY037).
El dato se guarda en la variable lectura. Será un valor comprendido entre 0 y 1024 (dependerá de cómo hayas calibrado el sensor con el potenciómetro).
Para comprobar lo que se está leyendo mostramos la variable lectura en el monitor serie:
Serial.println(lectura);
Ahora carga el sketch en tu Arduino y haz algún ruido cerca del sensor (unas palmadas, golpes o música alta) para comprobar los resultados en el monitor serie.
En mi caso sale esto:
Puedes probar a girar el potenciómetro para ver cómo varía este dato.
Modo digital
Para hacerlo un poco más visual vamos a encender el LED del pin 13 cuando se detecte sonido:
El sketch necesario es el siguiente:
const int D0_KY037 = 2;
void setup()
{
Serial.begin(9600);
pinMode(D0_KY037, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
int lectura = digitalRead(D0_KY037);
if(lectura == HIGH)
{
Serial.println("Sonido detectado");
digitalWrite(LED_BUILTIN, HIGH);
}else{
digitalWrite(LED_BUILTIN, LOW);
}
}
Declaraciones
Vamos a declarar una constante entera con el pin digital en el que está conectado el módulo:
const int D0_KY037 = 2;
En mi caso es el pin digital 2. Si estás usando otro pin cambia este valor por el correcto.
Configuración
Inicializamos el puerto serie para poder depurar:
Serial.begin(9600);
Tenemos que configurar, por un lado, el pin digital en el que está conectado el sensor:
pinMode(D0_KY037, INPUT);
Lo configuramos como entrada (INPUT) porque se va a comportar como un interruptor.
La otra configuración que necesitamos es el pin digital 13 como salida (OUTPUT) porque vamos a encender su led:
pinMode(LED_BUILTIN, OUTPUT);
Recuerda que la constante LED_BUILTIN está preconfigurada en Arduino y siempre hace referencia al pin digital conectado con el led incrustado de la placa, en el caso del Arduino Uno el pin 13. Si estás usando otra placa consulta el pin correspondiente.
Función loop
Primero tenemos que leer el pin digital en el que está conectado el sensor:
int lectura = digitalRead(D0_KY037);
Y guardamos el dato en la variable entera lectura.
Después comprobamos si el valor leído es HIGH o LOW utilizando una instrucción if:
if(lectura == HIGH)
{
Serial.println("Sonido detectado");
digitalWrite(LED_BUILTIN, HIGH);
}else{
digitalWrite(LED_BUILTIN, LOW);
}
Si es HIGH significa que el sensor ha detectado un sonido por encima del umbral. En este caso mostramos en el monitor serie el mensaje «Sonido detectado» (esto no es obligatorio, es solo para depurar) y encendemos el led del pin 13 enviando valor HIGH con la instrucción digitalWrite(LED_BUILTIN, HIGH).
Si el valor de la variable lectura es LOW significa que el sensor no está detectando sonido por encima del umbral. En este caso apagamos el led, de nuevo con la función digitalWrite(), pero esta ven enviando valor LOW: digitalWrite(LED_BUILTIN, LOW).
Como la función loop se repite indefinidamente estamos haciendo lecturas de forma constante, por lo que detectaremos cualquier sonido que supere el umbral.
Versión abreviada
Si te fijas en el código anterior verás que enviamos valor LOW al led cuando leemos LOW del sensor y enviamos HIGH cuando leemos HIGH.
Como el valor que enviamos al led es el mismo que la lectura del sensor podemos reducir el código de la función loop() así:
void loop()
{
int lectura = digitalRead(D0_KY037);
digitalWrite(LED_BUILTIN, lectura);
}
Hacemos la lectura del sensor igual que antes con digitalRead(D0_KY037) y lo guardamos en la variable lectura. Ahora pasamos la variable como segundo parámetro a la función digitalWrite() que enciende el led: digitalWrite(LED_BUILTIN, lectura).
Como puedes ver se reduce el código bastante.
Carga ahora el sketch en tu Arduino y ¡a dar palmas! Comprueba que se ilumina el led cada vez que das una palmada.
¡Suscríbete a la newsletter y no te pierdas nada!
Te avisaré cuando publique nuevo contenido en paraarduino.com y en mi canal de YouTube (@ParaArduino).