Der hier vorgestellte Geräusch-Detektor ist eine einfache, aber äußerst zuverlässige Lösung, um akustische Ereignisse mit einem ESP8266 und dem KY-037 Mikrofonmodul zu erkennen.
Durch die Kombination aus digitalem Mikrofonsignal und einer intelligenten Auswertung in ESPHome lassen sich Geräusche nicht nur erkennen, sondern auch sauber von zufälligen Spitzen oder Störungen unterscheiden.
Der Detektor eignet sich ideal für Anwendungen wie:
- Überwachung von Maschinen oder Geräten
- Erkennung von Klopf- oder Klatschsignalen
- Raumüberwachung (z. B. „zu laut“, Alarm, Aktivitätserkennung)
- Trigger für Automatisierungen in Home Assistant
Im Folgenden wird gezeigt, wie der Sensor angeschlossen, eingestellt und das Signal in ESPHome ausgewertet wird.
Geräusch-Detektor mit ESPHome
Dieses Projekt besteht aus einem ESP8266 (hier ein ESP8266-01) und dem Mikrofonmodul KY-037 (AZ-Delivery).
Der Detektor erkennt Geräusche anhand des digitalen Ausgangs (D0) des KY-037.
Verdrahtung
- Spannungsversorgung wie üblich über 5 V bzw. 3,3 V (abhängig vom Aufbau).
- Der digitale Ausgang D0 des KY-037 wird mit GPIO0 des ESP8266-01 verbunden.
Einstellung des KY-037
Am Modul befindet sich ein kleiner Drehregler zur Einstellung der Empfindlichkeit.
Dieser sollte so weit nach links gedreht werden, bis die entsprechende LED (Pin unten → linke LED) des Moduls erlischt.
Ab diesem Punkt kann die Empfindlichkeit so angepasst werden,
dass die LED zuverlässig beim gewünschten Geräusch aufleuchtet.
Erkennungsprinzip (einfach erklärt
)
Der KY-037 liefert ein digitales Signal:
- HIGH (1) → Geräusch über Schwelle erkannt
- LOW (0) → kein Geräusch
Der ESP8266 liest dieses Signal alle 10 ms aus und zählt dabei:
- Wie oft HIGH gemessen wurde
- Wie viele Messungen insgesamt erfolgten
Nach Ablauf eines einstellbaren Zeitfensters (z. B. 500 ms) wird berechnet,
wie hoch der Prozentsatz der HIGH-Messungen ist – der sogenannte Duty Cycle.
-
Liegt dieser Wert über dem eingestellten Schwellenwert, gilt:
Geräusch erkannt -
Liegt er darunter, gilt:
Kein Geräusch
Warum dieses Verfahren sinnvoll ist
Der digitale Ausgang des KY-037 kann bei kurzen Störungen oder hoher Empfindlichkeit flackern.
Durch die Auswertung über ein Zeitfenster erkennt das System nur Geräusche, die konstant genug auftreten – spontane Spitzen werden zuverlässig herausgefiltert.
Hier nun der Code für ESP Home:
esphome:
name: geraeusch-detektor
friendly_name: Geräusch Detektor
on_boot:
priority: -100
then:
- delay: 1s
- lambda: id(geraeusch_raw).publish_state(true);
- delay: 1s
- lambda: id(geraeusch_raw).publish_state(false);
esp8266:
board: esp01_1m # ESP8266-01 mit 1MB Flash
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
min_auth_mode: WPA2
logger:
api:
encryption:
key: "/2T3uEG/myrLB238isK3i+TxsyN+LZwwwp6X94x1MM8="
ota:
- platform: esphome
password: "10cab680eff476760fd6f81885168774"
# --- GPIO-Sensor für Geräusch ---
binary_sensor:
- platform: gpio
id: geraeusch_raw
name: "Geräusch Rohsignal"
internal: true
pin:
number: GPIO0 # nur GPIO0 oder GPIO2 verfügbar auf ESP8266-01
mode: INPUT_PULLUP
device_class: sound
- platform: template
id: geraeusch_erkannt
name: "Geräusch erkannt"
device_class: sound
# --- Globale Zähler ---
globals:
- id: signal_high_count
type: int
restore_value: no
- id: signal_total_count
type: int
restore_value: no
# --- Einstellbare Parameter über Home Assistant ---
number:
- platform: template
name: "Fenster(ms)"
id: window_size
min_value: 100
max_value: 2000
step: 50
unit_of_measurement: "ms"
initial_value: 500
optimistic: true
- platform: template
name: "Schwelle(%)"
id: duty_threshold
min_value: 0.05
max_value: 1.0
step: 0.05
initial_value: 0.25
optimistic: true
# --- Intervalle für Duty-Cycle-Berechnung ---
interval:
- interval: 10ms
then:
- lambda: |-
id(signal_total_count)++;
if (id(geraeusch_raw).state) {
id(signal_high_count)++;
}
- interval: 10ms
then:
- lambda: |-
static float elapsed = 0.0;
elapsed += 0.01; // 10ms Schritt
if (elapsed * 1000 >= id(window_size).state) {
float duty = (float)id(signal_high_count) / (float)id(signal_total_count);
if (duty >= id(duty_threshold).state) {
if (!id(geraeusch_erkannt).state) {
id(geraeusch_erkannt).publish_state(true);
}
} else {
if (id(geraeusch_erkannt).state) {
id(geraeusch_erkannt).publish_state(false);
}
}
// Zähler zurücksetzen
id(signal_high_count) = 0;
id(signal_total_count) = 0;
elapsed = 0.0;
}
Im Home Assistant hat man nun die Möglichkeit die Werte für „Fenster“ und „Schwelle“ entsprechend anzupassen!
Viel Spaß beim Testen und Ausprobieren und vielleicht findet der eine oder andere eine sinnvolle Verwendung dafür!
Falls Ihr es benutzt könnt Ihr hier ja mal einen kurzen Kommentar hinterlassen!

