Buenas!
En este proyecto haremos uso del módulo max9814 un micrófono amplificador para mostrar el ritmo del sonido a través de una salida de leds que se iluminarán de forma progresiva cada vez que el sonido detectado supere un determinado umbral de voltaje.
Sonido
![]() |
Fuente: https://es.wikipedia.org/wiki/Longitud_de_onda |
Max9814
Un micrófono es un dispositivo de entrada que se usa para transformar las ondas sonoras en energía eléctrica y viceversa. Max9814 es un micrófono con amplificador y control de ganancia.. Permite detectar el sonido del ambiente y también dispone de pines para poder escuchar el sonido que detecta por ejemplo a través de unos auriculares, para lo cual se puede conectar un jack hembra a la salida de los pines.
![]() |
Detalle del módulo |
Diagrama de conexión
![]() |
Diagrama de conexión de max9814 con un led blanco |
Código
La señal de audio de la salida de un amplificador es un voltaje variable y oscila.
Para obtener el nivel de sonido es preciso tomar varias muestras para obtener las extensiones mínima y máxima de la señal o la amplitud pico entre los valores máximo y mínimo de la señal.
En el código de referencia obtenido del enlace que modificamos levemente para añadir el comportamiento de encendido y apagado de los leds, se elige una muestra de 50 milisegundos, lo cual es suficiente para medir niveles de sonido de hasta 20 herztios el límite más bajo que alcanza el oído humano.
![]() |
Fuente: https://www.pasco.com/products/guides/sound-waves |
Utilizamos el código de referencia del enlace que se deja en el siguiente apartado. Se calcula la frecuencia cada cierto intervalo y se convierte a voltaje. Si el voltaje supera determinado umbral se enciende el led o los leds si tenemos más de uno.
/****************************************
Example Sound Level Sketch for the
Adafruit Microphone Amplifier
****************************************/
#define LED1 2
#define LED2 3
#define LED3 4
#define UMBRALED1 1.0
#define UMBRALED2 1.1
#define UMBRALED3 1.2
const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;
void setup()
{
Serial.begin(9600);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop()
{
unsigned long startMillis= millis(); // Start of sample window
unsigned int peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
// collect data for 50 mS
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(0);
if (sample < 1024) // toss out spurious readings
{
if (sample > signalMax)
{
signalMax = sample; // save just the max levels
}
else if (sample < signalMin)
{
signalMin = sample; // save just the min levels
}
}
}
peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude
double volts = (peakToPeak * 5.0) / 1024; // convert to volts
Serial.println(volts);
if(volts > UMBRALED1 && volts < UMBRALED2){
digitalWrite(LED1,HIGH);
}
if(volts > UMBRALED2 && volts < UMBRALED3){
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
}
if(volts > UMBRALED3){
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
}
if(volts < UMBRALED3)
{
digitalWrite(LED3,LOW);
}
if(volts < UMBRALED2)
{
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
}
if(volts < UMBRALED1){
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
}
}
Referencias
- https://learn.adafruit.com/adafruit-microphone-amplifier-breakout/measuring-sound-levels
- http://cursoarduinomega.blogspot.com/2015/07/electret-microphone-amplifier-max9814.html
- https://electropeak.com/learn/interfacing-max9814-electret-microphone-amplifier-module-with-arduino/
- https://www.pasco.com/products/guides/sound-waves
- https://es.wikipedia.org/wiki/Longitud_de_onda
- https://es.wikipedia.org/wiki/Rarefacci%C3%B3n