Sound Pressure Sensor and Mike Pre-amp for Arduino




Introduction: Sound Pressure Sensor and Mike Pre-amp for Arduino

About: I am a physician by trade. After a career in the pharmeceutical world I decided to take it a bit slower and do things I like. Other than my hobbies that involves grassroots medicine in S.E.&P Asia. I have bu...

I have published a Sound pressure Sensor for the arduino (or other microcontroller) before.
It was based on a TLC272 double Op-amp and did very well.
One of the people reacting though was asking if I had done any soundwave analysis with it. I did not because the circuit was not meant for that: It was purely meant to convert a certain level of sound to an anologue level that as such gave an indication for the total Sound level.

Nevertheless that circuit can also used as a preamplifier, simply by tapping the signal from the Output of OP 1.

But of course it is a bit better to make a decent PCB design for it, but as I always like to experiment a bit, I decided to built the circuit a bit different. For those who do not want to solder. The Freetronics soundboard is very akin to this one

BOM (Bill of materials)
This is what is needed:
1 elektret microphone
R1 -2k2
R2-10k precision
R3-10k precision
L1 ferrite bead
8pins DILfoot
print header 4xSIL

With regard to R2 and R3: the actual resistance is not so important as long as both resistors are the same. 2x12k or 2x15k works equally well.

The same goes for R7 and R8. It is more about the ratio than about the actual value a 47k vs a 680R works just as well.

The larger capacitors do not necesarily have to be electrolytic capacitors, but if that is what you have.... I indicated the polarity

L1 is not really necessary, but together with C5 it helps keeping the power supply line clean.

This microphone amplifier is based around the TLC272 double opamp.
The first opamp is  used as an amplifier. The voltage offset on the positive input is set to half Vcc with R2 and R3. The Closedloop gain is set at 100 by R5 and R4. There is an AC coupling/high pass filter to the 2nd opamp by C4 and R6. The second opamp is used as comparator: R7 and R8 determine a level sensitivity of 71 mV (with 5 Volt Vcc). The delay in the RC filter at the SPL output is 3ms (150+1200)*2,2uF  in which 150 is the internall pull up of the TLC272.

SPL is the sound pressure level. There is also an audio output for the amplified microphone signal. As the audio signal is DC coupled, the signal will swing around 1/2 Vcc

The maximum Vcc is about 10 Volts, but if used with e.g. the Arduino, the Vcc should be equal to that of the Arduino. The minimum voltage the Opamp needs is 3 Volt. I have also tried an TL072 opamp that is supposed to be suited for audio circuits but my results with it were not as good as with the TLC272

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: The PCB

The PCB is quite simple. Because of the size of the scrap I had, I made it a bit bigger, but it can easily be made smaller.
As I presume people building this are confident in soldering, I am not going to waste much words on it.

For those who are checking the colorcodes on some resistors against the values mentioned... yes sometimes they are different. e.g. with the 1Mohm I made a mistake coz the bag was falsely labelled. So had to solder it out and replace by a real 1Mohm

Step 2: Software

The following code will read the SPI 4 times a second and write it to the screen

//Reading SPL
const int spl = A0;   // the SPL output is connected to analog pin 0

void setup() {

void loop() {
  Serial.println(analogRead(spl), DEC);

Be the First to Share


    • Magnets Challenge

      Magnets Challenge
    • Raspberry Pi Contest 2020

      Raspberry Pi Contest 2020
    • Wearables Contest

      Wearables Contest

    5 Discussions

    cdíaz ramirez
    cdíaz ramirez

    3 years ago

    hello!! thanks for your work!

    i'm having kind of problem trying to understand the use of the comparator , my knowledge tells me that if the + is higher than - then the output have to be vcc or gnd, so is kinda digital. why did you connect it to analog input?


    Reply 3 years ago

    i think you ae mixing up a few things. the comparator as such does not have an analog input, it just has an input that compares against another input. it doesnt matter wether the signal is analog or digital. The reason that i am using the comparator is because next to a pure analog output i wanted a sound pressure level output. It means that the output doesnt swing beween high and low depending on the (incidental) volume of someones voice but wheter or not there is a specific volume for a certain period of time


    I wanted to replicate your circuit (Thanks btw!). Will this circuit work well with an 8 ohm speaker used in reverse as a mic instead of an electret mic? Would I need to change anything in that case? Perhaps a bigger gain?




    Reply 4 years ago on Introduction

    Pete, the circuit is designed for an electret micophone. It is possible to use a loudspeaker
    as a microphone but these are not really sensitive so you may need an
    extra amplifier (a one transistor step). Also, a loudspeaker doesnt
    need the 2k2 resistor. So, I'd say, remove that one and give it a try. If you dont get enough output you will need to increase the amplification, either by adding a transistor or bu lowering the 10k entrance resistor to say 5 k. Currently the amplification is 100. maybe that is enough, maybe it isnt.
    let me know how you fare


    Reply 4 years ago on Introduction

    Thanks I'll give that a go! I'll let you know how it the way, do you predict a lot of noise in the signal? Will it be easy to average the input audio frequency to determine if the main frequency falls in the human voice domain?

    The reason I need this pre amp, is so that I can feed it into the arduino and do some real time processing to determine if the input sound is a human voice (i.e. within 300 and 1000 Hz), while also trying to disregard unwanted background noise and sounds. Do you think it can be achieved with the quality of the data coming in from the audio stream?

    I was planning to use the library found here to determine the frequency: