Go Down

Topic: Difference between two circuits (Read 2040 times) previous topic - next topic


Hi, I am building a sound sensing circuit using electret microphones.  I have tried many different schematics and suggestions but overall cannot get over a problem pertaining to the sensitivity of the microphone, which has only been able to pick up shouts, claps, and other loud noises close to the actual microphone.

I was wondering if this circuit:

will give me the same sensitivity results as this circuit:

The latter is only picking up those loud noises, where I would rather this microphone circuit to be much more sensitive.  I have tried many different tutorials that are either exact in sensitivity to the latter link, or are incomplete (links being taken down or steps missing, ridiculous I know).

If neither of these routes give me sensitivity, where it could pick up a large range of frequencies at quiet to loud volumes, do you recommend another route?  I am fairly new to Arduino in general, and sound sensing very new - but I know what I am asking for is possible so I won't give up!

Thanks for the help.


One of the problems you'll run into trying to pick up quiet souds is that our perception of sound is logarithmic, not proportional. This means that quiet sounds have far, far less power then you might expect. They might not be able to be picked up with a 10 bit ADC like the Arduino has. Even if you increase the sensitivity of the microphone, you can't increase the dynamic range of the ADC, which is stuck at about 60 dB (roughly 6 dB per bit). Quiet sounds can easily get lost in the inherent noise of the ADC.

It depends. How quiet is "quiet"?
Hackaday: https://hackaday.io/MarkRD


It depends. How quiet is "quiet"?

I would like to get a reaction from my voice talking at a normal speaking level when I am in a nearly silent room, but it does not work as of now.  It only works if I shout and I am so close to it that I am nearly touching it.


The lm386 is amplifying and driving the speaker...

Does the sparkfun have an amp or preamp circuit? It should or the tiny voltages on the mic will be too small to be read...

So then, how much gain do you need.... eg do you want to get around 500-700 with normal speech or do you want 100 - 200 for normal speech so you hit 900-1000 for loud noises for example, or do you want 800 - 900 readings for whispers...

The lm386 is default around 20? Gain unless you set it externally via resistors/caps  the lm386 is weird to me as most opamps use a resistor divider to set the gain, yet the 386 a capacitor can adjust the gain.. I'll have to look into that sometime


Let's do some calculations on the Sparkfun microphone.

Wikipedia (http://en.wikipedia.org/wiki/Sound_pressure) lists "Normal Conversation @ 1m" at 40-60 dBSPL, which translates to a sound pressure level of 2-20 mPa (millipascals).

The Sparkfun microphone's datasheet lists its sensitivity as "- 46 ± 2.0, ( 0 dB = 1V / Pa ) at 1K Hz." This translates to a voltage output of about 5 mV per pascal. I have little experience with microphones and have no idea if this is typical or not.

Multiply 5 mV/Pa by 2-20 mPa and you get 10-100 uV raw output from the microphone. The Sparkfun mic breakout has a gain of 100 built in, so that's 1-10 mVRMS output for normal speech volume.

This is far, far too low to be picked up by the Arduino's 10-bit ADC, and will likely need to be multiplied by up to 100 times more. But by doing that you risk swamping the output with louder sounds.

The lm386 is default around 20? Gain unless you set it externally via resistors/caps  the lm386 is weird to me as most opamps use a resistor divider to set the gain, yet the 386 a capacitor can adjust the gain.. I'll have to look into that sometime

The 386 is a class AB audio power amplifier, not an op amp. Totally different class of device.
Hackaday: https://hackaday.io/MarkRD


That explains that....

So what explains the use of the opamp symbol on almost every circuit I've cime across?


Find a copy of Don Lancasters OP-AMP Cookbook and use it to  make a pre-amp using an LM358.  Set the gain of the LM358 to 100. Set the gain of the LM386 to 20 (No bootstrap capacitor) and use a simple pot to control the pre-amp output.
With the suggested gain(s) set in the dc feedback components of the Pre-Amp. For a millivolt input you should be capable of 20 mV to 2V output swing. If you use the inverting op-amp input as the audio input you can vary the DC output offset of the Pre-Amp from +1.25V to +3.75 V by connecting the stationary leads to Vcc and Gnd. The Wiper (center lead) goes to the non inverting op-amp input. With this method you can center the output @ 1/2 the power supply...
With any (almost) newer Cmos op-amp (I like and use LMC662's) both input and output can swing from rail to rail. The older devices... LM324, LM358, LM2904 the output cannot swing less than 2 BE (diode) drops from either supply rail...
You can also connect 2 or 3 sections of a CD4069UB in series and connect a 100k resistor from input to output and easily achieve 30 to 50 DB of gain (1000 to 100000). don't forget to use dc blocking caps on input And output of the 4069UB as well as a 220 uF bypass capacitor..Note: the CD4069UB is capable of linear operation and it will work from 3V to 15 Vcc.
Many if not all common Electret microphones have a j-fet buffer, internal to the microphone and  do require a volt or two as bias voltage for the J-fet in the microphone... a 1K resistor in  series with a 4K7 and a 10 uF cap from that junction is required as the mic bias Must be stable and clean. The open end of the 1K resistor goes to Vcc and the open  end of the 4K7 resistor goes to the mic output and to the audio amp input. The negative end of the 10uF filer cap goes to ground.

--> WA7EMS <--
"The solution of every problem is another problem." -Johann Wolfgang von Goethe
I do answer technical questions PM'd to me with whatever is in my clipboard

Go Up