Introducing The Sound Detector
The Sound Detector
The Sound Detector is a small board that combines a microphone and some processing circuitry. It provides not only an audio output, but also a binary indication of the presence of sound, and an analog representation of it’s amplitude.
This tutorial will guide you through hooking up and using the Sound Detector. It will examine how the circuit works, explain some details about getting the best performance from the Sound Detector, then present two different projects that demonstrate how to use it.
To get started with the Sound Detector, simply connect it to a power supply.
(Sound Detector → Power Supply )
In a quiet room, power the board up, and then speak into the microphone. You should see the red LED on the board blink in response to your voice.
With it’s 3 outputs, the board itself is a lot more flexible. To explore that flexibility, read on.
The Sound Detector has 3 separate outputs. It’s easiest to see what each is doing with a graph. The following illustrates how the sound detector responds to a series of sound pulses.
Sample Sound Detector Output
This shows the output voltages over time.
Having examined the outputs, lets also take a quick walk through the schematic, to gain an understanding of how each stage works.
The first section of the circuit is an electret microphone capsule. This portion of the circuit borrows from the Electret Microphone breakout board.
Microphone and Preamplifier
The capsule is biased by the supply voltage through R1, and it outputs an AC voltage that is riding a DC offset of approximately ½ the supply voltage.
The output from the capsule is an extremely small voltage, so the signal from the capsule is amplified by IC1G1, an operational amplifier stage. By default, the preamplifier has an arithmetic gain of 100 (20 dB), and the gain can be adjusted by populating R17 (which we’ll examine in detail on the next page).
The audio output is DC coupled, riding one half the supply voltage, so it can be directly connected to the ADC of a microcontroller. In perfectly quiet conditions, it will ideally read ½ full scale, or 512 on a 10-bit converter.
The second stage of the circuit is an envelope follower.
Envelope Follower
IC1G3 forms an opamp-based precision rectifier. This stage implements the equation
COPY CODE
if(Vin > 0) Vout = 0; else Vout = Vin * -2.2
The opamp inverts and amplifies the signal. When it’s output swings high, D2 turns on, and charges C1. When the opamp output is high or not swinging, D2 is turned off, and C1 discharges through R9. Thus, C1 tracks the peaks of the input signal.
IC1G4 is a buffer amplifier, so external loads on the envelope pin won’t change the C1’s charge/discharge behavior.
This results in a signal that tracks the peak amplitude of the input signal. A louder sound will result in a higher voltage on the Envelope pin. As with the audio pin, the envelope can be connected to the ADC of a microcontroller.
The final stage implements a thresholded switch on the envelope signal.
Schmitt Trigger
The Schmitt trigger watches the envelope signal, and toggles the output when the threshold is exceeded. A Schmitt trigger is a comparator that adjusts it’s threshold voltage when the output switches, requiring a higher voltage to switch on than to switch off. This allows it to ignore some ripple in the input signal, like the ripple present in the output of the envelope follower stage.
The output of the Schmitt trigger is found on the Gate pin. You can connect it to a digital input. We’ll use it to trigger interrupts in the software example.
Each of the three output signals is present on the .1" header at the edge of the board. They are active simultaneously. If you aren’t using one in your particular application, simply leave that pin disconnected.
The heart of the Sound Detector is the electret microphone capsule – without it, we couldn’t convert acoustic energy into electrical energy. These capsules have a couple of quirks that we need to understand in order to apply them successfully.
Inside the capsule is the diaphragm, which is actually one plate of a small capacitor. That capacitor forms a voltage divider with the external bias resistor. The diaphragm moves in response to sound, and the capacitance changes as the plates get closer together or farther apart, causing the divider to change. Since capacitors are sensitive to loading, it’s internally buffered with a JFET (junction field-effect transistor).
Due to the mechanical and electronic tolerances involved, some capsules are more sensitive than others. Also, the JFET is rather sensitive to noise on the power supply. Both of these factors need to be accounted for when deploying the Sound Detector.
The Sound Detector is an analog circuit, and as such, it’s more sensitive to noise on the power supply than most digital circuits. Since the capsule is effectively a voltage divider sitting across the power rails, it will transcribe any noise on the supply lines onto the capsule output. The next circuit in the chain is a high-gain amplifier, so any noise on the supply will then be amplified. Therefore, the Sound Detector may require more careful power supply configuration than many circuits.
In testing with various supplies, a significant degree of variability was discovered - some supplies are less noisy than others. One exhibited as much as 30 mV ripple on the supply output, an as a result, the the Sound Detector was rather sensitive and unstable. You can check how clean a power supply is by checking it with an oscilloscope or volt meter, set to the AC Volts (or, if provided, the AC millivolts) range. A truly clean supply will show 0.000 VAC. Based on the supplies used in testing, ripple of more than about 10 mV is problematic.
Powering my Arduino with a 9V external supply, which allows the onboard regulators to function, the Arduino’s 5V output was sufficiently clean. However, powering it from the 5V available on the USB port on a PC, the regulators are bypassed, and the results were somewhat less usable, and vary greatly between different ports on different PCs. A powered USB hub will probably provide cleaner power than the ports on the PC itself.
If all else fails, three 1.5V batteries in series make a nice, clean source of 4.5V.
The Sound Detector comes set for moderate sensitivity - speaking directly into the microphone, or clapping your hands nearby should cause the gate output to fire. If you find that it doesn’t work well in a specific application, you can change the circuit to be more or less sensitive.
The gain is set by changing the feedback resistors in the preamp stage. The resistors are marked in the silkscreen on the PCB.
Resistor Closeup
R3 is a surface mount part, with 100K Ohm populated by default. R17 is an unpopulated position for a through hole resistor.
It’s most likely that you’ll find the detector to be too sensitive. In testing the board for this writeup, noisy air conditioning and music in the next office were enough to set it off. To make the board less sensitive, you can lower the preamplifier gain by populating R17 in parallel with R3.
R3 Value | R17 Value | Arithmetic Gain | Gain (dB) |
100K | - | 100 | 40 |
100K | 100K | 50 | 33 |
100K | 47K | 32 | 30 |
100K | 22K | 18 | 25 |
100K | 10K | 9 | 19 |
100K | 4.7K | 4 | 13 |
100K | 2.2K | 2 | 6 |
If you want to make the sound detector more sensitive, so that it will be activated by quieter sounds, you can remove R3, and populate R17.
R17 Value | Arithmetic Gain | Gain (dB) |
100K | 100 | 40 |
220K | 220 | 46 |
470K | 470 | 53 |
1Meg | 1000 | 60 |
In some applications, the onboard LED may be distracting or undesirable. To disable it, simply use a solder sucker or wick to remove the solder blob from the jumper near the LED.
The electret capsule on the Sound Detector is also sensitive to mechanical vibration and wind noise.
The Sound Detector will pick up handling noise. Mounting it with a resilient material can help absorb vibration – placing it on a piece of open-cell foam helped reject vibration conducted through the testing workbench. Other resilient mounting strategies would include suspending it using rubber bands, or building shock absorbers using #4 machine screws and heat-shrink tubing.
Wind noise is caused when blasts of air enter the capsule. Examples would be a windy day, or the sharp exhalation that often accompanies syllables such “p,” “b” and “t.” The capsule come with a thin fabric covering, but it may not be enough to prevent stronger blasts. You can craft a more robust windscreen with open-cell foam or synthetic fur (like the covering that sneaks into the frame when a boom mic accidentally enters a film scene).
Now that we understand how to configure the board, let’s hook it to an Arduino and see what it can do.
We snapped a 5-pin section off the header, and soldered it to the Sound Detector. Then we took the jumper wires and made the following connections.
(Sound Detector → Arduino )
Additionally, as described on the calibration page, a 33K Ohm resistor was soldered into position R17. R3 was left in place, so the gain was lowered from 40 dB to about 28 dB.
/****************************************************************************** * sound_detector_demo.ino * Sound detector sample sketch * Byron Jacquot @ SparkFun Electronics * February 19, 2014 * https://github.com/sparkfun/Sound_Detector * * This sketch demonstrates the use of the Sparkfun Sound Detector board. * * The Sound Detector is a small board that combines a microphone and some * processing circuitry. It provides not only an audio output, but also a * binary indication of the presence of sound and an analog representation * of it's amplitude. * * This sketch demonstrates two different modes of usage for the Sound * Detector. The gate output (a binary indication that is high when sound * is present, and low when conditions are quiet) is used to fire a pin-change * ISR, which lights an LED when the sound is present. The envelope output * (an analog voltage to rises to indicate the amplitude of the sound) is * sampled in the loop(), and it prints an indication of the level to the * serial terminal. * * For more details about the Sound Detector, please check the hookup guide. * * Connections: * The Sound Detector is connected to the Adrduino as follows: * (Sound Detector -> Arduino pin) * GND → GND * VCC → 5V * Gate → Pin 2 * Envelope → A0 * * Resources: * Additional library requirements: none * * Development environment specifics: * Using Arduino IDe 1.0.5 * Tested on Redboard, 3.3v/8MHz and 5v/16MHz ProMini hardware. * * This code is beerware; if you see me (or any other SparkFun employee) at the * local, and you've found our code helpful, please buy us a round! * * Distributed as-is; no warranty is given. ******************************************************************************/ // Define hardware connections #define PIN_GATE_IN 2 #define IRQ_GATE_IN 0 #define PIN_LED_OUT 13 #define PIN_ANALOG_IN A0 // soundISR() // This function is installed as an interrupt service routine for the pin // change interrupt. When digital input 2 changes state, this routine // is called. // It queries the state of that pin, and sets the onboard LED to reflect that // pin's state. void soundISR() { int pin_val; pin_val = digitalRead(PIN_GATE_IN); digitalWrite(PIN_LED_OUT, pin_val); } void setup() { Serial.begin(9600); // Configure LED pin as output pinMode(PIN_LED_OUT, OUTPUT); // configure input to interrupt pinMode(PIN_GATE_IN, INPUT); attachInterrupt(IRQ_GATE_IN, soundISR, CHANGE); // Display status Serial.println("Initialized"); } void loop() { int value; // Check the envelope input value = analogRead(PIN_ANALOG_IN); // Convert envelope value into a message Serial.print("Status: "); if(value 10) && ( value 30) { Serial.println("Loud."); } // pause for 1 second delay(1000); }
This code simultaneously demonstrates two different operating modes of the Sound Detector.