[sdiy] [SDIY] Measuring the sound levels from a microphone using an ESP32 board
Spiros Makris
spirosmakris92 at gmail.com
Mon Jul 6 10:18:03 CEST 2020
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).
[image: image.png]
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.
[image: image.png]
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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://synth-diy.org/pipermail/synth-diy/attachments/20200706/6f5a8b40/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 15319 bytes
Desc: not available
URL: <http://synth-diy.org/pipermail/synth-diy/attachments/20200706/6f5a8b40/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 15311 bytes
Desc: not available
URL: <http://synth-diy.org/pipermail/synth-diy/attachments/20200706/6f5a8b40/attachment-0001.png>
More information about the Synth-diy
mailing list