Choosing between a MEMS microphone vs electret Arduino microphone depends on your project’s specific requirements. Both can capture sound, but they have very different electrical interfaces, sensitivity characteristics, noise floors, and physical sizes. Indian electronics students and makers frequently ask which to use for voice recording, sound detection, or audio processing projects. This guide gives you a complete technical comparison with practical wiring examples and project recommendations.
Table of Contents
- Electret Microphones: How They Work
- MEMS Microphones: Advantages and Limitations
- Technical Comparison Table
- Wiring Electret Mic to Arduino
- Wiring MEMS Mic (INMP441) to ESP32
- Which to Choose for Your Project
- Frequently Asked Questions
Electret Microphones: How They Work
An electret microphone uses a permanently charged polymer film (electret material) as one plate of a capacitor. Sound pressure moves the film, changing capacitance, which varies the voltage across the capacitor. A built-in JFET transistor buffers this high-impedance signal to a usable output.
Electret microphones require a small bias voltage (typically 1–10V) supplied through a resistor to the FET drain. In the classic configuration: VCC → 10kΩ bias resistor → mic drain → output. The electret capsule is extremely cheap — bare capsules cost ₹5–₹20 in India and are found in most phones, intercoms, and voice recorders.
Common module variants available in India:
- MAX4466 electret amp module: Adjustable gain (25×–125×), single-supply 2.4–5.5V. Excellent for analog audio capture. ₹80–₹150.
- MAX9814 auto-gain module: Automatic gain control — perfect when sound levels vary widely. ₹150–₹250.
- KY-038 sound sensor: Basic comparator circuit for sound detection only (on/off trigger, not audio quality). ₹25–₹60.
- Analog microphone modules: Generic op-amp + electret, suitable for simple sound triggering.
MEMS Microphones: Advantages and Limitations
MEMS (Micro-Electro-Mechanical Systems) microphones use a tiny silicon diaphragm fabricated using semiconductor processes. The diaphragm and a fixed backplate form a capacitor — sound pressure deflects the diaphragm, changing capacitance. Unlike electret mics, MEMS microphones contain all circuitry including sigma-delta ADC and output buffers on-chip.
MEMS microphones come in two interface types:
- Analog MEMS: Output is an analog voltage like an electret (but with superior noise performance). Example: Knowles SPM0405HE5H, used in smartphones.
- Digital MEMS (I2S or PDM output): Built-in ADC outputs digital data. Examples: INMP441 (I2S), SPH0645LM4H (I2S), ICS43434 (I2S). The INMP441 is the most popular in Indian maker projects — ₹150–₹300 for a breakout module.
MEMS microphone advantages:
- Very small physical size (3mm × 4mm typical package)
- Excellent repeatability — tight matching between units (useful for microphone arrays)
- Superior high-frequency response (up to 10–20 kHz flat, vs 3–6 kHz for budget electrets)
- Better noise floor (SNR 60–70 dB vs 50–60 dB for electrets)
- Digital I2S output eliminates ADC noise in the signal path
- Reflow solderable — part of the same automated PCB assembly as other ICs
Technical Comparison Table
| Parameter | Electret (MAX4466) | MEMS I2S (INMP441) |
|---|---|---|
| Interface | Analog output (A0) | Digital I2S (3 pins) |
| SNR | ~60 dB | 61 dB (INMP441 spec) |
| Frequency response | 100 Hz – 10 kHz | 60 Hz – 15 kHz (±3dB) |
| Supply voltage | 2.4–5.5V | 1.8–3.3V |
| Arduino (5V) compatible | Yes (direct) | No (needs 3.3V) |
| ESP32 (3.3V) compatible | Yes (reduced gain) | Yes (native) |
| Cost in India (module) | ₹80–₹200 | ₹150–₹300 |
| Coding complexity | Simple (analogRead) | Moderate (I2S library) |
Wiring Electret Mic to Arduino
// MAX4466 Electret Amplifier Module → Arduino UNO
// MAX4466 VCC → Arduino 5V
// MAX4466 GND → Arduino GND
// MAX4466 OUT → Arduino A0
const int MIC_PIN = A0;
const int SAMPLE_WINDOW = 50; // ms window for sampling
void setup() {
Serial.begin(9600);
}
void loop() {
unsigned long startMillis = millis();
int signalMax = 0;
int signalMin = 1024;
// Collect samples over the window
while (millis() - startMillis signalMax) signalMax = sample;
if (sample < signalMin) signalMin = sample;
}
int peakToPeak = signalMax - signalMin; // Peak-to-peak amplitude
float volts = peakToPeak * (5.0 / 1024); // Convert to volts
float dB = 20.0 * log10(volts / 0.00631); // Rough dB estimate
Serial.print("Peak-to-peak: "); Serial.print(peakToPeak);
Serial.print(" | ~dB: "); Serial.println(dB, 1);
delay(100);
}
Wiring MEMS Mic (INMP441) to ESP32
// INMP441 MEMS Microphone → ESP32 Wiring
// INMP441 VDD → ESP32 3.3V
// INMP441 GND → ESP32 GND
// INMP441 SCK → ESP32 GPIO 14 (I2S bit clock)
// INMP441 WS → ESP32 GPIO 15 (I2S word select)
// INMP441 SD → ESP32 GPIO 32 (I2S data)
// INMP441 L/R → GND (left channel) or 3.3V (right)
#include <driver/i2s.h>
#define I2S_SCK 14
#define I2S_WS 15
#define I2S_SD 32
#define I2S_PORT I2S_NUM_0
#define BUFFER_LEN 64
int16_t buffer[BUFFER_LEN];
void i2s_init() {
i2s_config_t config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX),
.sample_rate = 44100,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = I2S_COMM_FORMAT_STAND_I2S,
.intr_alloc_flags = 0,
.dma_buf_count = 8,
.dma_buf_len = BUFFER_LEN
};
i2s_pin_config_t pins = {
.bck_io_num = I2S_SCK,
.ws_io_num = I2S_WS,
.data_out_num = I2S_PIN_NO_CHANGE,
.data_in_num = I2S_SD
};
i2s_driver_install(I2S_PORT, &config, 0, NULL);
i2s_set_pin(I2S_PORT, &pins);
}
void setup() {
Serial.begin(115200);
i2s_init();
}
void loop() {
size_t bytesRead = 0;
i2s_read(I2S_PORT, (void*)buffer, sizeof(buffer), &bytesRead, portMAX_DELAY);
// Process buffer: FFT, RMS, send to server, etc.
int samplesRead = bytesRead / 2;
long rmsSum = 0;
for (int i = 0; i < samplesRead; i++) rmsSum += (long)buffer[i] * buffer[i];
float rms = sqrt((float)rmsSum / samplesRead);
Serial.println(rms);
}
Which to Choose for Your Project
- Sound detection/clap trigger (Arduino UNO/Nano): Use KY-038 or generic analog sound sensor — simplest and cheapest. analogRead() with threshold comparison.
- Voice recording/playback quality audio (Arduino/ESP32): Use MAX4466 or MAX9814 electret modules. Analog output is simpler to work with for beginners.
- Voice recognition / FFT / keyword detection (ESP32): Use INMP441 MEMS I2S — the digital output provides cleaner data for DSP algorithms. Best choice for Alexa, Google Assistant, or edge AI voice projects.
- Microphone array for direction finding: Use matched MEMS microphones — their tight unit-to-unit sensitivity matching makes time-delay calculations accurate.
- Battery-powered devices: MEMS microphones use less power (0.5–1mA vs 2–5mA for electret amp modules).
Frequently Asked Questions
Why does my electret microphone produce a lot of hum (50Hz)?
50Hz hum from Indian mains power typically enters through electromagnetic induction from nearby power cables. Solutions: route microphone cables away from mains cables, use shielded cable (with shield grounded at one end), add a 100nF capacitor from the output to GND to filter low-frequency noise, and consider using a differential amplifier instead of single-ended if the cable is long (>50cm).
Can I use the INMP441 with Arduino UNO?
Technically no — INMP441 requires 3.3V supply and the Arduino UNO’s I2S is software-emulated (no hardware I2S peripheral), making it unreliable for continuous audio streaming. For Arduino Uno applications requiring microphone input, use an electret module with analogRead(). For INMP441 and I2S microphones, use ESP32, STM32, or Arduino Zero (ATSAMD21 has I2S hardware).
What is PDM vs I2S for MEMS microphones?
PDM (Pulse Density Modulation) is a 1-bit high-frequency digital output used in some MEMS microphones (SPH0645, MP34DT01 in STM32 boards). I2S carries multi-bit PCM audio samples at the actual sample rate. PDM requires decimation filtering (converting 1-bit/3.072MHz stream to 24-bit/48kHz PCM) which is handled in hardware on STM32, nRF52, and some ESP32-S3 versions. INMP441 outputs standard I2S/PCM — directly readable without decimation filtering — making it simpler for ESP32 projects.
Add comment