Capacitación Arduino · Circuito 13

Sensor de sonido
¡Enciende un LED
con un aplauso!

Módulo micrófono electret con comparador LM393 (tipo KY-038 / FC-04), simulado en Tinkercad Circuits.

Entrada digital Detección de flanco Bloques + C++

El componente

Módulo sensor de sonido

Micrófono electret Comparador LM393 Trimmer azul (3296) LED L1 (PWR) LED L2 (DO) capta el sonido decide: ¿hay sonido? ajusta la sensibilidad hay energía se enciende con sonido DO → D2 + → 5V G → GND AO → sin usar
El trimmer azul fija el umbral. Gira el tornillo hasta que el LED DO se apague en silencio y se encienda con un aplauso.
El módulo tiene 4 pines: DO (digital), +, G y AO (analógico). Aquí usamos solo DO. Algunas versiones de 3 pines no traen AO.

Cómo funciona

Del aplauso a una señal digital

Sonido que capta el micrófono umbral (trimmer) ¡aplauso! Salida DO → pin D2 HIGH LOW
  1. El micrófono convierte el sonido en un voltaje muy pequeño que sube y baja.
  2. El LM393 compara ese voltaje con el umbral del trimmer.
  3. Mientras el sonido supera el umbral, DO pasa a HIGH. Arduino lo lee con digitalRead(2).
  4. El programa detecta el instante en que DO sube (el flanco) y cambia el LED: encendido ↔ apagado.

Truco de simulación

Tinkercad no tiene este sensor… lo armamos con piezas que sí existen

En el kit real

Arduino D25VGND

El módulo compara el sonido con el umbral del trimmer y entrega el resultado por DO.

En Tinkercad: módulo virtual

Parte del móduloLa reemplazamos conArduino
MicrófonoPulsador + 2 resistencias de 10 kΩ
sin presionar = 0 · aplauso = 512
A0
Trimmer azulPotenciómetro
umbral de 0 a 1023
A1
Comparador LM393El código:
if (sonido > umbral)
—
LED DOLED amarillo + 220 ΩD12
Así se practica lo mismo que con el sensor real: si subes demasiado el umbral (poca sensibilidad), el "aplauso" ya no se detecta.

Paso 1 · Componentes

Búscalos en el panel de componentes de Tinkercad

Arduino Uno R3 ×1

Buscar: Arduino

Placa de pruebas pequeña ×1

Buscar: Placa de pruebas

Pulsador ×1

Hace de micrófono: presionar = aplauso.

Potenciómetro ×1

Hace de trimmer azul: fija el umbral.

10 kΩ
220 Ω

Resistencias ×4

2 × 10 kΩ (micrófono) y 2 × 220 Ω (LEDs).

LED amarillo ×1

Hace de LED DO del módulo.

LED rojo ×1

Se enciende y apaga con cada aplauso.

Para cambiar el valor de una resistencia o el color del LED, haz clic en el componente y edítalo en el cuadro de propiedades.

Paso 2 · Circuito

Así se ve en Tinkercad

MÓDULO DE SONIDO VIRTUAL

Pruébalo aquí mismo

Mantén presionado el pulsador y gira la perilla del potenciómetro (o usa la barra).

A0 · sonido0
A1 · umbral512
DOLOW

Presiona el pulsador: 512 > umbral → se detecta el aplauso.

Cables

Rojo 5V → riel +

Negro GND → riel −

Naranja micrófono → A0

Azul trimmer → A1

Amarillo D12 → LED DO

Verde D13 → LED rojo

Paso 2 · Conexiones

Conexión por conexión

Alimentación
Arduino 5VRiel + inferior
Arduino GNDRiel − inferior
Micrófono (pulsador)
—Pulsador sobre la ranuraColumnas 2 y 4
Columna 2 (abajo)Riel +
—10 kΩColumna 4 → 8 (fila c)
—10 kΩColumna 8 → 12 (fila b)
Columna 12Riel −
Columna 8Arduino A0
Trimmer (potenciómetro)
—Potenciómetro (fila e)Columnas 14, 15, 16
Columna 14Riel −
Columna 16Riel +
Columna 15 (cursor)Arduino A1
LED DO (amarillo)
—LED cátodo / ánodo (fila e)Columna 18 / 19
—220 ΩColumna 19 → 23 (fila c)
Arduino D12Columna 23
Columna 18Riel −
LED del aplauso (rojo)
—LED cátodo / ánodo (fila e)Columna 25 / 26
—220 ΩColumna 26 → 30 (fila c)
Arduino D13Columna 30
Columna 25Riel −
Todo va en la mitad inferior de la protoboard (filas a–e) y en los rieles de abajo. La pata doblada del LED es el ánodo (+). Al pasar el cursor sobre un agujero, Tinkercad resalta los que están conectados.

Paso 3 · Código en bloques

Arrastra estos bloques · todo dentro de «siempre»

Antes: Variables → Crear variable: sonido umbral estado estadoAnterior ledEncendido · No pongas nada en «al iniciar». Control Entrada Matemáticas Variables Salida

Paso 3 · Código C++

El mismo programa en texto

// Módulo de sonido virtual:
// pulsador = micrófono, potenciómetro = trimmer
const int PIN_MICROFONO = A0;
const int PIN_TRIMMER = A1;
const int PIN_LED_DO = 12;
const int PIN_LED = 13;

int sonido = 0;
int umbral = 0;
int estado = 0;
int estadoAnterior = 0;
int ledEncendido = 0;

void setup() {
  pinMode(PIN_LED_DO, OUTPUT);
  pinMode(PIN_LED, OUTPUT);
}
En Tinkercad: Código → Bloques → Texto. Acepta el aviso, borra lo que haya y pega.
void loop() {
  sonido = analogRead(PIN_MICROFONO);
  umbral = analogRead(PIN_TRIMMER);

  // Esto es lo que hace el comparador LM393
  if (sonido > umbral) {
    estado = 1;
    digitalWrite(PIN_LED_DO, HIGH);
  } else {
    estado = 0;
    digitalWrite(PIN_LED_DO, LOW);
  }

  if (estado == 1 && estadoAnterior == 0) {  // empieza un aplauso
    if (ledEncendido == 0) {
      ledEncendido = 1;
      digitalWrite(PIN_LED, HIGH);
    } else {
      ledEncendido = 0;
      digitalWrite(PIN_LED, LOW);
    }
    delay(200);  // ignora el eco del mismo aplauso
  }
  estadoAnterior = estado;
}

Paso 4 · Simular

¡A probar!

  1. Pulsa Iniciar simulación.
  2. Deja el potenciómetro cerca de la mitad hacia abajo (umbral bajo).
  3. Haz clic en el pulsador (= un aplauso): el LED amarillo (DO) se enciende mientras lo mantienes y el LED rojo cambia.
  4. Sube el umbral casi al máximo y vuelve a presionar: no pasa nada. Es el sensor con poca sensibilidad.

Si algo no funciona

Ningún LED enciendeRevisa la orientación (pata doblada = ánodo, hacia la resistencia).
El LED rojo cambia soloFalta la 10 kΩ de la columna 8 a la 12: A0 queda "flotando".
Nunca detecta el aplausoBaja el umbral: con el pulsador, A0 llega a 512.
Detecta sin presionarEl umbral está en 0: súbelo un poco.

Paso 5 · Kit real

Del simulador a la protoboard

Cambia el módulo virtual por el real

SensorArduino
DOD2
+5V
GGND
AOsin conectar

Quita el pulsador, las dos 10 kΩ, el potenciómetro y el LED amarillo: el módulo real ya trae todo eso. El LED rojo y su 220 Ω se quedan.

Un solo cambio en el código

El comparador ahora está en el módulo. Borra las dos lecturas analogRead y el if (sonido > umbral), y escribe en su lugar:

estado = digitalRead(2);

Calibración

  1. Conecta la placa: se enciende el LED L1 (PWR).
  2. Gira el trimmer azul hasta que L2 (DO) se apague en silencio.
  3. Aplaude: L2 debe parpadear y el LED rojo cambiar.

Si tu módulo tiene la salida invertida (LOW con sonido), usa estado = !digitalRead(2);

Alternativa · OpenCircuits

En OpenCircuits el sensor KY-038 sí existe

R4R3LED1LED2R5R6IC1152102101103102101LM393P8AK1908H103W1043296AOG+DO
Sonido en la sala 0 %
DO: LOW Abrir OpenCircuits ↗opencircuitos.vercel.app
El bloque nuevo: «Sensor de sonido DO pin 2: ¿hay ruido?» (categoría Sonido) lee DO del KY-038 y reemplaza al if (sonido > umbral). Variables: estado estadoAnterior ledEncendido. Sonido Control Matemáticas Variables Salida
// C++ code
//
int estado = 0;

int estadoAnterior = 0;

int ledEncendido = 0;

void setup()
{
  pinMode(2, INPUT);
  pinMode(13, OUTPUT);
}
void loop()
{
  if (digitalRead(2) == HIGH) {
    estado = 1;
  } else {
    estado = 0;
  }
  if (estado == 1 && estadoAnterior == 0) {
    if (ledEncendido == 0) {
      ledEncendido = 1;
      digitalWrite(13, HIGH);
    } else {
      ledEncendido = 0;
      digitalWrite(13, LOW);
    }
    delay(200); // Wait for 200 millisecond(s)
  }
  estadoAnterior = estado;
}
Este texto lo escribe OpenCircuits a partir de los bloques (modo Bloques + texto). Es el mismo programa del kit real: lee DO con digitalRead(2).

Para seguir

Retos

1 · Contador de aplausos

Muestra en el Monitor serie cuántos aplausos van. Pista: Serial.println() y una variable que sume 1.

2 · Doble aplauso

Que el LED cambie solo con dos aplausos seguidos en menos de 1 segundo. Pista: millis().

3 · Alarma sonora

Agrega el buzzer en D8 y haz que suene un pitido corto cada vez que detecte un aplauso.

4 · Semáforo por aplausos

Con 3 LEDs (verde, amarillo, rojo): cada aplauso avanza al siguiente color.

← → para avanzar · + − acercar el circuito · F pantalla completa