So I've struggled some time with getting the KY-037 and KY-038 sensors working for ambent sound detection/tracking in ESPHome. These sensors seem to lack sensitivity to be used for anything short of detecting alarms or really loud sounds.
I wanted to build a device to measure the general noise in a room, at a low cost and without actually recording any sound. Finally, I came across the Sparkfun Electret Microphone Breakout BOB-12758. It promised a 60x mic preamp to detect even the lowest ambient noise.
So I connected the mic to an ADC pin on my ESP-WROOM-32 development board, but got disappointed. The sensor output voltage seemed to fluctuate around 1,6V, and randomly spiking upwards and downwards depending on noise around it. Yet another failure, I thought.
Then a brilliant mind on Discord pointed me at the ct_clamp direction. ct_clamp is a sensor type in ESPHome that allows you to sample readings on an ADC pin over time, and convert that to a current measure. The solution turned out brilliantly.
This is how I did it
sensor:
- platform: adc
id: adc_mic_reading
pin: 32
name: "Voltage from my BOB-12758"
update_interval: 60s
attenuation: auto
- platform: ct_clamp
sensor: adc_mic_reading
name: "Sound level from my BOB-12758"
sample_duration: 250ms
update_interval: 500ms
Basically, I'm telling the ct_clamp sensor to use my adc-sensor. Sample the sensor for 250ms before updating with a value twice a second. I've connected my ESPHome to Home Assistant, and now I can monitor the "Sound level" sensor for elevated Ampere values. I can set thresholds in Home Assistant and initiate automations or scenes whenever the sound level reaches certain levels.