Saltar al contenido

KY-037 con ESPHome: detector de sonido (no sonómetro)

29/12/2024
Módulo KY-037 conectado a una placa ESP8266 para detectar sonidos con ESPHome

Actualizado el 6 de agosto de 2026 · Código y limitaciones revisados con la documentación actual de ESPHome.

El KY-037 con ESPHome es útil para detectar un aplauso, golpe, alarma o aumento brusco del ruido y enviar ese evento a Home Assistant. Su salida digital indica si se ha superado un umbral y la analógica permite comparar niveles relativos. Sin embargo, hay una precisión importante: el KY-037 no es un sonómetro y no mide decibelios calibrados.

Lo esencial antes de conectarlo

  • DO: detección binaria por umbral; el potenciómetro físico decide cuándo conmuta.
  • AO: señal analógica para comparar más/menos actividad sonora, no dB SPL.
  • ESP8266: el ADC interno admite 0–1 V; muchas placas NodeMCU/D1 mini incorporan un divisor en A0 para aceptar aproximadamente 3,2–3,3 V. Comprueba tu placa.
  • Alimentación: los clones del módulo varían. A 5 V sus salidas podrían superar lo admisible por un ESP; usa 3,3 V si tu unidad funciona correctamente o adapta niveles.

Qué es el KY-037 y qué entregan sus pines

El módulo combina un micrófono electret, un comparador LM393, un potenciómetro y dos LED. El micrófono reacciona a variaciones de presión acústica, pero la placa no proporciona una cadena de medida calibrada. La orientación, la distancia, la alimentación, las tolerancias del micrófono y el circuito de cada clon cambian el resultado.

Pin KY-037FunciónUso recomendado
+Alimentación del módulo3,3 V cuando el módulo concreto funcione de forma estable; si exige 5 V, adapta AO y DO al ESP.
G / GNDMasa comúnConectar al GND de la placa.
DOSalida del comparadorDetector ON/OFF de un ruido que supera el umbral.
AOSalida analógicaÍndice relativo o diagnóstico; nunca etiquetarlo como dB sin calibración acústica real.

Por qué no se pueden obtener dB reales con una fórmula

Un valor ADC solo representa tensión. Para convertirlo en nivel de presión sonora hacen falta, como mínimo, sensibilidad conocida del micrófono, ganancia analógica, respuesta en frecuencia, cálculo RMS, referencia acústica, ponderación —por ejemplo dBA— y calibración con una fuente o sonómetro fiable. La expresión antigua sensibilidad × log10(ADC) + constante no disponía de esos datos: producía un número con apariencia de decibelios, no una medición.

Home Assistant ofrece la clase sound_pressure para sensores que realmente entregan dB o dBA. signal_strength está destinada a intensidad de señal —por ejemplo RSSI— y tampoco corresponde al KY-037. En esta guía el valor relativo se publica en porcentaje, con state_class: measurement y sin device_class.

Esto no inutiliza el módulo. Para saber si una alarma ha empezado a sonar, si alguien ha golpeado una puerta o si una máquina está más ruidosa que su línea base, una medida relativa puede ser justo lo necesario.

Material necesario

  • KY-037 y cables Dupont.
  • NodeMCU ESP8266 o Wemos D1 mini. También puede utilizarse un ESP32 con los cambios indicados más abajo.
  • ESPHome Device Builder y la integración de Home Assistant.
  • Multímetro recomendado para comprobar la tensión máxima de AO/DO si alimentas el módulo a 5 V.

Si partes de cero, consulta la guía del ESP8266 y nuestra configuración de WiFi seguro en ESPHome.

Cableado del KY-037 con ESP8266

KY-037NodeMCU / D1 miniObservación
+3V3Opción prudente para proteger el ESP si el módulo funciona correctamente a 3,3 V.
GGNDLa masa debe ser común.
DOD1 / GPIO5La mayoría de módulos conmuta a nivel bajo al superar el umbral; el YAML lo invierte.
AOA0Verifica el rango de entrada de tu placa. El chip ESP8266 desnudo solo admite 0–1 V.

No conectes una salida de 5 V directamente a un GPIO o ADC del ESP8266. Si tu versión del KY-037 necesita alimentación a 5 V, mide AO y DO y utiliza un divisor resistivo o adaptador de nivel apropiado.

Opción recomendada: detector digital de umbral

Para aplausos, golpes o una sirena, DO es la opción más sencilla. Gira el potenciómetro hasta que el LED de disparo cambie justo con el sonido objetivo. El siguiente bloque hace que Home Assistant muestre ON inmediatamente y prolonga el evento 250 ms para que un pulso breve resulte visible.

binary_sensor:
  - platform: gpio
    id: ky037_sound_trigger
    name: "KY-037 sonido fuerte detectado"
    icon: "mdi:volume-high"
    pin:
      number: D1        # GPIO5 en NodeMCU / D1 mini
      inverted: true    # Quita esta línea si tu módulo funciona al revés
    filters:
      - delayed_off: 250ms

El potenciómetro ajusta el comparador físico de DO. Un control deslizante en Home Assistant no puede mover ese potenciómetro ni cambiar su umbral: el antiguo “Sensitivity SoundEsp” solo modificaba la fórmula de los falsos dB.

Opción analógica: nivel sonoro relativo en porcentaje

AO puede servir para comparar la actividad sonora del mismo montaje. Como cada unidad da valores distintos, primero observa los registros y sustituye 250 por tu lectura habitual en silencio y 750 por una lectura alta reproducible. El resultado será un índice relativo 0–100 %, no dB.

substitutions:
  ky037_quiet_raw: "250"   # Sustituir por el valor observado en silencio
  ky037_loud_raw: "750"    # Sustituir por un nivel alto de referencia

sensor:
  - platform: adc
    pin: A0
    id: ky037_adc_raw
    internal: true
    raw: true
    update_interval: 100ms
    samples: 32
    sampling_mode: max

  - platform: copy
    source_id: ky037_adc_raw
    name: "KY-037 nivel sonoro relativo"
    icon: "mdi:waveform"
    unit_of_measurement: "%"
    device_class: ""
    accuracy_decimals: 0
    state_class: measurement
    filters:
      - calibrate_linear:
          method: exact
          datapoints:
            - ${ky037_quiet_raw} -> 0
            - ${ky037_loud_raw} -> 100
      - clamp:
          min_value: 0
          max_value: 100
      - exponential_moving_average:
          alpha: 0.2
          send_every: 1
      - throttle: 1s

sampling_mode: max conserva el valor máximo de cada grupo de muestras, lo que ayuda a captar transitorios. El suavizado reduce saltos y throttle evita inundar la base de datos de Home Assistant. Si las lecturas disminuyen cuando el ruido aumenta, intercambia los dos puntos de calibración.

Configuración completa y actual de ESPHome

Este ejemplo reúne WiFi con secretos, API cifrada, OTA actual, DO y AO. Sustituye la clave de API por una cadena Base64 de 32 bytes generada por ESPHome y guarda todos los valores sensibles en secrets.yaml.

substitutions:
  device_name: "ky037-sound-detector"
  friendly_name: "Detector de sonido KY-037"
  ky037_quiet_raw: "250"
  ky037_loud_raw: "750"

esphome:
  name: ${device_name}
  friendly_name: ${friendly_name}

esp8266:
  board: d1_mini

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "KY037 Fallback"
    password: !secret fallback_password

captive_portal:

binary_sensor:
  - platform: gpio
    id: ky037_sound_trigger
    name: "Sonido fuerte detectado"
    icon: "mdi:volume-high"
    pin:
      number: D1
      inverted: true
    filters:
      - delayed_off: 250ms

sensor:
  - platform: adc
    pin: A0
    id: ky037_adc_raw
    internal: true
    raw: true
    update_interval: 100ms
    samples: 32
    sampling_mode: max

  - platform: copy
    source_id: ky037_adc_raw
    name: "Nivel sonoro relativo"
    icon: "mdi:waveform"
    unit_of_measurement: "%"
    device_class: ""
    accuracy_decimals: 0
    state_class: measurement
    filters:
      - calibrate_linear:
          method: exact
          datapoints:
            - ${ky037_quiet_raw} -> 0
            - ${ky037_loud_raw} -> 100
      - clamp:
          min_value: 0
          max_value: 100
      - exponential_moving_average:
          alpha: 0.2
          send_every: 1
      - throttle: 1s

Ejemplo de secrets.yaml:

wifi_ssid: "NOMBRE_DE_TU_RED"
wifi_password: "CONTRASENA_LARGA_DE_TU_RED"
api_encryption_key: "CLAVE_BASE64_GENERADA_POR_ESPHOME"
ota_password: "OTRA_CONTRASENA_UNICA"
fallback_password: "CONTRASENA_AP_SEGURA"

Para organizar configuraciones más grandes puedes usar sustituciones y packages; para proteger los archivos, consulta cómo gestionar secretos en Home Assistant.

Adaptación para ESP32

En un ESP32 clásico puedes conectar AO a un pin ADC1 de entrada, por ejemplo GPIO34, y usar atenuación automática. Los pines dependen de la variante: confirma el pinout de tu placa. Alimenta y adapta el KY-037 para que ninguna salida supere 3,3 V.

sensor:
  - platform: adc
    pin: GPIO34          # ESP32 clásico; comprobar otras variantes
    id: ky037_voltage
    attenuation: auto
    update_interval: 100ms
    samples: 32
    sampling_mode: max
    name: "KY-037 nivel analógico"
    unit_of_measurement: "V"
    accuracy_decimals: 3
    state_class: measurement

Observa primero los voltios en silencio y con el sonido de referencia. Después puedes aplicar calibrate_linear para crear un porcentaje relativo, igual que en ESP8266. No copies los valores de otra persona: no son transferibles entre módulos.

Ajuste práctico del umbral

  1. Enciende el montaje en el lugar donde se utilizará.
  2. En silencio, gira lentamente el potenciómetro hasta localizar el punto donde cambia el LED de DO.
  3. Aléjate ligeramente de ese punto para evitar activaciones continuas.
  4. Reproduce el sonido objetivo a una distancia realista y reajusta.
  5. Comprueba varias veces en Home Assistant, no solo mediante el LED.

Automatización de ejemplo en Home Assistant

Una automatización debe reaccionar a un evento concreto, no interpretar el porcentaje como sonómetro. Este ejemplo notifica cuando DO detecta un sonido fuerte y aplica un modo single para evitar avisos simultáneos:

alias: Aviso de sonido fuerte KY-037
triggers:
  - trigger: state
    entity_id: binary_sensor.sonido_fuerte_detectado
    to: "on"
actions:
  - action: notify.mobile_app_tu_telefono
    data:
      title: "Detector KY-037"
      message: "Se ha detectado un sonido por encima del umbral."
mode: single

Problemas frecuentes

SíntomaQué comprobar
Siempre aparece ONAjusta el potenciómetro; si el LED funciona al contrario, elimina inverted: true.
No detecta aplausosAcerca la fuente, ajusta el umbral, comprueba DO con un multímetro y revisa alimentación/masa.
AO casi no cambiaEs habitual en clones con poca ganancia. Prueba DO o utiliza un módulo de micrófono con amplificador adecuado.
Lectura saturadaLa tensión supera el rango del ADC o la señal está cerca del límite. Corrige alimentación/divisor antes de continuar.
Mucho ruido en el porcentajeSepara cables de fuentes conmutadas, acorta conexiones y ajusta el suavizado; el módulo no es instrumental.
Demasiado historialMantén throttle: 1s o auméntalo; no es necesario guardar 10 muestras por segundo.

Cuándo elegir otro micrófono

Elige un micrófono I2S como INMP441/SPH0645 o una placa de nivel sonoro con especificaciones conocidas si necesitas análisis de audio, frecuencia, RMS o una estimación calibrada. Para demostrar cumplimiento de límites legales o laborales necesitas un sonómetro certificado y el procedimiento aplicable; un KY-037 no puede sustituirlo.

El vídeo conserva la demostración física del módulo. Las entidades llamadas dB en la versión original deben interpretarse como índices relativos; el YAML corregido es el de esta guía.

Fuentes y documentación comprobada

Preguntas frecuentes

¿El KY-037 mide decibelios?

No. Entrega una señal analógica sin calibración acústica y un umbral digital. Puede generar un índice relativo, pero etiquetarlo como dB sin una cadena calibrada es incorrecto.

¿El potenciómetro cambia la salida analógica?

En la mayoría de módulos ajusta el umbral del comparador que controla DO; no calibra AO ni convierte el módulo en sonómetro.

¿Puedo alimentar el KY-037 a 5 V?

Algunos módulos lo especifican, pero entonces AO o DO pueden superar el límite del ESP8266/ESP32. Mide las salidas y adapta niveles. Nunca asumas que un clon es idéntico a otro.

¿Qué opción es mejor para detectar un aplauso?

DO suele ser más simple: ajusta el umbral físico y utiliza el sensor binario. AO es útil si quieres crear tu propio umbral relativo o observar tendencias.

Usado con expectativas correctas, el KY-037 es un detector económico y útil para automatizaciones por eventos. La mejora decisiva no consiste en inventar decibelios, sino en elegir DO o AO según el objetivo, proteger las entradas del ESP y calibrar el porcentaje contra tu propio montaje.

Continúa leyendo

Siguiente guía relacionada · 12 min de lectura

Qué es ESPHome y para qué sirve

Si te estás preguntando qué es ESPHome, te diré que es una herramienta propiedad de Nabu Casa con la que puede crear firmware personalizado…

Continuar con este artículo