[sdiy] [SDIY] Measuring the sound levels from a microphone using an ESP32 board
rburnett at richieburnett.co.uk
Mon Jul 6 13:56:05 CEST 2020
Do the calculations digitally on the audio data as Tom said, if your micro is up to the job.
If you have to use an analogue circuit approach because the micro isn't fast enough or draws too much current, then take a look here...
This excellent web page shows many precision rectifier circuits that go a long way towards eliminating the dead band that you otherwise get using just a single rectifier diode.
Good luck with your project!
Sent from my Xperia SP on O2
---- Tom Wiltshire wrote ----
>I’d sample the incoming audio directly at a good rate (48KHz maybe) and then do any processing on the data. Much easier to do math inside the uP, rather than outside in analog circuitry.
>As to what algorithm you use to measure sound level, there are an absolute ton of them, as I discovered when I looked into VU meters.
> Electric Druid
>Synth & Stompbox DIY
>> On 6 Jul 2020, at 09:18, Spiros Makris <spirosmakris92 at gmail.com> wrote:
>> Hello list,
>> I have to develop a small metering application for a university project. The idea behind it is to demonstrate the internet of things and how it can be used to monitor the (audio) noise levels in a room, to be used in places like studios, production facilities or even bars.
>> The sensor used is a common electret type microphone, which is preamplified using a current to voltage opamp stage, based on the OPA172 amplifier. The supply voltage is 3V (same as the microcontroller), but I have the option of 5, 9 or even 12V if needed (only unipolar, though.) Then, this amplified signal needs to be converted to a measurement that will somehow relate to "how loud" the sounds are. Accurate SPL measurements are not required (although they would sure be nice if this was a commercial application). I may have access to a measuring microphone in order to calibrate this when I'm done. I'm using an ESP32 board and its onboard ADC.
>> I first tried to use the RMS Arduino library, which measures an AC signal coming into any analogue pin (no external processing, other than prequalification). I couldn't get it to show any coherent readings - I'm not sure if this is due to the sample number or sampling period I'm using. Making an RMS calculation method from scratch wasn't much better either - the variations I could detect were (or seemed to be) minuscule - definitely not enough to be meaningful in this application.
>> I'm now trying a more analogue approach: the preamp signal is passed through a Schottky diode, connected to a large capacitor. A transistor is placed parallel to the capacitor, to be used as a reset switch (controlled by the processor).
>> I have tried AC coupling and DC coupling the input - both methods work (DC coupled version is shown). When the input goes over the threshold of the diode, the capacitor is charged (with a pretty large current), and the droop rate is small enough to measure it with the controller, then reset it, to take another measurement. So far so good, but I need some way of eliminating that 0.3V threshold.
>> The graph is taken from the AC coupled version (but is identical to the DC-coupled one, save for some DC offset). The X-axis shows the input amplitude and the Y-axis shows the capacitor's final voltage.
>> The ESP32 has adjustable attenuation for the ADC - the maximum range can be adjusted to ~1.3V, ~2.5V and ~3.3V (approximate values). The resolution is 12bits.
>> I thought of using a rail to rail opamp to make an ideal diode - however, I only have a SOIC8 version of an OPA172 and no time to print a PCB. Perhaps I can source adapters quickly though - is there a single opamp circuit that could help me?
>> I can also mess around with the preamplifier stage, adjusting the dc bias or gain.
>> I'm kinda stuck. Any ideas?
>> Synth-diy mailing list
>> Synth-diy at synth-diy.org
>Synth-diy mailing list
>Synth-diy at synth-diy.org
More information about the Synth-diy