Estos sensores de sonido son baratos, fáciles de usar y capaces de detectar la voz, las palmadas o los golpes en la puerta.

Puedes utilizarlos para una gran variedad de proyectos que reaccionan al sonido, como hacer que tus luces se activen con palmadas o vigilar a tus mascotas mientras estás fuera.

¿Cómo funciona un microfono electret?

Dentro de un micrófono hay un diafragma y una placa posterior fija que funcionan en conjunto como un condensador.

Cuando hablas por el micrófono, tu voz genera ondas sonoras que golpean el diafragma, haciéndolo vibrar.

Cuando el diafragma vibra en respuesta al sonido, las placas se acercan o se alejan, haciendo que la capacitancia cambie. Como resultado, se genera una tensión a través de las placas, que podemos medir para determinar la amplitud del sonido.

Hardware

El sensor de sonido es una pequeña placa que incorpora un micrófono (50Hz-10kHz) y algunos circuitos de procesamiento para convertir la onda sonora en una señal eléctrica.

Esta señal eléctrica se transmite al comparador incorporado de alta precisión LM393, que la digitaliza y la pone a disposición del pin OUT.

El módulo incluye un potenciómetro para ajustar la sensibilidad de la señal OUT.

Puedes utilizarlo para establecer un umbral, de forma que cuando la amplitud del sonido supere el umbral, el módulo emita una señal BAJA, y en caso contrario, una señal ALTA.

Esta configuración es muy útil para activar una acción cuando se alcanza un determinado umbral. Por ejemplo, cuando la amplitud del sonido supera un umbral (se detecta un golpe), puede activar un relé para controlar la luz.

Gira el mando en sentido contrario a las agujas del reloj para aumentar la sensibilidad y en sentido de las agujas del reloj para disminuirla.

El módulo también incluye dos LEDs. El LED de alimentación se ilumina cuando se enciende el módulo, y el LED de estado se ilumina cuando el nivel sonoro supera el valor umbral.

Pinout del sensor de sonido

El sensor de sonido sólo tiene tres pines:

VCC suministra energía al sensor. Se recomienda que el sensor sea alimentado entre 3.3V a 5V.

GND es el pin de tierra.

El pin OUT da una salida HIGH en condiciones de silencio y LOW cuando se detecta el sonido. Puedes conectarlo a cualquier pin digital de un Arduino o a un relé de 5V directamente.

Cableado de un sensor de sonido a un Arduino

Vamos a conectar el sensor de sonido al Arduino.

Las conexiones son bastante sencillas. Empieza por conectar el pin VCC del módulo al pin 5V del Arduino y el pin GND a tierra.

Finalmente, conecta el pin OUT al pin digital #8 del Arduino. Y ya está.

El cableado se muestra en la siguiente imagen.

Ajuste del umbral

El módulo dispone de un potenciómetro integrado para ajustar el umbral de nivel sonoro a partir del cual las salidas del módulo son BAJAS y el LED de estado se ilumina.

Ahora, para ajustar el umbral, haz sonar tus dedos cerca del micrófono y ajusta el potenciómetro hasta que el LED de estado del módulo parpadee en respuesta al chasquido de tus dedos.

Eso es todo; el módulo está ahora listo para ser utilizado.

Ejemplo 1 – Detección básica de sonidos

El siguiente ejemplo detecta aplausos o chasquidos y muestra un mensaje en el monitor serial. Sigue adelante y prueba el sketch; lo revisaremos en detalle más tarde.

#define sensorPin 8

// Variable to store the time when last event happened
unsigned long lastEvent = 0;

void setup() {
        pinMode(sensorPin, INPUT);      // Set sensor pin as an INPUT
        Serial.begin(9600);
}

void loop() {
        // Read Sound sensor
        int sensorData = digitalRead(sensorPin);

        // If pin goes LOW, sound is detected
        if (sensorData == LOW) {
                
                // If 25ms have passed since last LOW state, it means that
                // the clap is detected and not due to any spurious sounds
                if (millis() - lastEvent > 25) {
                        Serial.println("Clap detected!");
                }
                
                // Remember when last event happened
                lastEvent = millis();
        }
}

Si todo funciona correctamente, deberías ver la siguiente salida en el monitor serie cuando se detecta la palmada

Explicación del código:

El sketch comienza declarando el pin de Arduino al que se conecta el pin OUT del sensor.

#define sensorPin 8

A continuación, definimos una variable llamada “lastEvent” que almacena el momento en el que se detectó previamente una palmada. Nos ayudará a reducir la detección accidental de sonidos.

unsigned long lastEvent = 0;

En la sección Setup, configuramos el pin OUT del sensor para que se comporte como una entrada y establezca una comunicación en serie.

pinMode(sensorPin, INPUT);
Serial.begin(9600);

En la sección del bucle, primero leemos la salida del sensor.

int sensorData = digitalRead(sensorPin);

Cuando el sensor detecta un sonido lo suficientemente fuerte como para superar el valor del umbral, la salida se pone en LOW. Sin embargo, debemos asegurarnos de que el sonido es causado por las palmas y no por el ruido de fondo. Por lo tanto, esperamos 25 milisegundos después de que la salida se ponga baja. Si la salida permanece BAJA durante más de 25 milisegundos, se imprime en el monitor serie el mensaje “Aplauso detectado”.

if (sensorData == LOW) {
        if (millis() - lastEvent > 25) {
                Serial.println("Clap detected!");
        }
        lastEvent = millis();
}

Ejemplo 2 – Controlar dispositivos con una palmada

Para nuestro siguiente proyecto, utilizaremos el sensor de sonido para crear un “Clapper” que active los dispositivos alimentados por CA con una palmada.

Este proyecto controla dispositivos alimentados por CA utilizando el módulo de relés de un canal. Si no se está familiarizado con el módulo de relés, considera la posibilidad de leer el siguiente tutorial antes de continuar.

Cableado

El cableado de este proyecto es sencillo.

Advertencia:

Esta tarjeta interactúa con un alto voltaje de CA. Un uso inadecuado o incorrecto podría provocar lesiones graves o la muerte. Por lo tanto, está destinada a personas que estén familiarizadas y tengan conocimientos sobre la ALTA tensión de CA.

Empecemos por alimentar el sensor y el módulo de relés. Conecta sus pines VCC al pin de 5V del Arduino y GND a tierra.

Conecta el pin de salida del sensor de sonido (OUT) al pin digital nº 7 de tu Arduino, y el pin de control del módulo de relés (IN) al pin digital nº 8.

También tendrás que conectar el módulo de relés al dispositivo alimentado por corriente alterna que quieres controlar. Tendrás que cortar tu línea de corriente alterna viva y conectar un extremo del cable cortado (que viene de la pared) a COM y el otro a NO.

El cableado se muestra en el siguiente diagrama.

Código Arduino

Aquí está el código para controlar los dispositivos con una palmada

#define sensorPin 7
#define relayPin 8

// Variable to store the time when last event happened
unsigned long lastEvent = 0;
boolean relayState = false;    // Variable to store the state of relay

void setup() {
        pinMode(relayPin, OUTPUT);  // Set relay pin as an OUTPUT pin
        pinMode(sensorPin, INPUT);  // Set sensor pin as an INPUT
}

void loop() {
        // Read Sound sensor
        int sensorData = digitalRead(sensorPin);

        // If pin goes LOW, sound is detected
        if (sensorData == LOW) {

        // If 25ms have passed since last LOW state, it means that
        // the clap is detected and not due to any spurious sounds
        if (millis() - lastEvent > 25) {
                //toggle relay and set the output
                relayState = !relayState;
                digitalWrite(relayPin, relayState ? HIGH : LOW);
        }

        // Remember when last event happened
        lastEvent = millis();
        }
}

Cuando hayas terminado, el sensor debería encender o apagar el dispositivo cada vez que aplaudas.

Explicación del código:

Si comparas este sketch con el anterior, notarás muchas similitudes, con algunas diferencias.

Al principio, declaramos el pin de Arduino al que se conecta el pin de control del relé (IN). Además, hemos definido una nueva variable “relayState” para llevar la cuenta del estado del relé.

#define relayPin 7

boolean relayState = false;

En el Setup, configuramos el “relayPin” como una salida

pinMode(relayPin, OUTPUT);

Cuando detectamos el sonido de la palmada, en lugar de imprimir el mensaje en el monitor serie, simplemente conmutamos el estado del relé.

relayState = !relayState;
digitalWrite(relayPin, relayState ? HIGH : LOW);

Solución de problemas

Si el sensor de sonido se comporta mal, prueba los siguientes pasos.

  • Asegúrate de que la fuente de alimentación está limpia. Dado que el sensor de sonido es un circuito analógico, es más sensible al ruido de la fuente.
  • El sensor también es sensible a las vibraciones mecánicas y al ruido del viento. El montaje del sensor en una base sólida puede reducir algunas de estas vibraciones.
  • Este sensor de sonido tiene un rango de detección muy corto, tal vez sólo 25 centímetros, por lo que tendrás que hacer un ruido mucho más cerca de él con el fin de obtener una lectura fiable.

Last Minute Engineers. Interface sound sensor with Arduino and control device with a clap. In-Depth: Interface Sound Sensor with Arduino and Control Devices With a Clap (lastminuteengineers.com)