Un sensor de sonido puede basarse en un micrófono tipo electret. El funcionamiento del micrófono se basa en dos placas que forman un capacitor, siendo una de ellas una membrana que al moverse con el sonido, hace cambiar las cargas eléctricas del capacitor produciendo pequeñas variaciones de voltaje. Este tipo de micrófonos necesita si o si que la señal generada sea amplificada para que pueda ser utilizada.
El mas usual es del tipo mostrado a la izquierda, con un diámetro de 9.7 mm y una altura de entre 5 y 7 mm.
La idea es enviar un nivel de tensión proporcional al nivel de sonido que llega al micrófono. Aquí, como en la mayoría de los sensores se presentan dos posibilidades:
La primera opción brinda todas las posibilidades desde el lado del software, hasta pudiéndose capturar audio (si se dispone de donde almacenarlo) para luego procesarlo y reproducirlo. La segunda opción es mas simple del lado del software, y hasta es posible incorporar rutinas de interrupciones para cuando aparezca el audio. En módulos comerciales generalmente se disponen de ambas funcionalidades a costa de tener pines separados para cada una de ellas. En esos casos, la salida digital suele denominarse SPL (Sound Pressure Level).
En nuestro caso solo requerimos un detector de nivel de sonido (o ruido) que nos entregue un nivel de tensión según lo detectado por el micrófono. No se hará registro de muestras del audio, sino simplemente se desea conocer cual es su nivel global (0 Volts es silencio). Luego, por software se puede determinar un valor booleano (hay sonido/no hay sonido) usando un umbral programable.
Para amplificar la tensión del micrófono en principio hay dos posibilidades: usando un transistor o usando un amplificador operacional. Para el propósito buscado alcanza con usar un transistor, y de los circuitos encontrados se probaron varios, encontrando en el siguiente la funcionalidad y simplicidad buscada. El capacitor de entrada se dimensionó para tener mejor respuesta a los sonidos graves. Notar que no hay un capacitor a la salida, el acople es directo con la entrada analógica que lee niveles de DC (en algunos circuitos se coloca un capacitor a la salida cuando se quiere desacoplar el componente DC y que solo quede la parte AC para aplicaciones de audio convencionales). Con este circuito se encontró que el ruido ambiente da una lectura de 160 a 190 (valor entre 0..1023 del ADC de 10 bits de Arduino) y ruidos fuertes pueden llegar a un valor de 600 a 800. De esta forma se logra una buena discriminación para umbrales y un buen rango para las aplicaciones.
En la primer fotografía se muestran los componentes electrónicos necesarios para construir este sensor coincidentes con el esquema electrónico mostrado arriba. En la siguiente se muestra el calado de dos bloquecitos Rasti que constituyen la solución mecánico-constructiva elegida para materializar el sensor. En la tercera se muestra los componentes ya soldados, notando que no se usó placa de circuito impreso, sino que se soldaron los componentes usando sus propias patas y algunas extensiones de cable fino. Finalmente se muestra el módulo sensor ya ensamblado y terminado.
Prueba sensor de sonido
/*
Lee el valor del sensor de sonido conectado al puerto
analogico AI1 de la shield FSdirect. Si el valor leido
supera un cierto umbral, prende el led conectado a la
salida digital DIO1 de la misma shield.
Tambien muestra el valor leido por el monitor serial.
*/
#include <FreeSensors.h>
FSdirect sh1;
int led = DIO1;
int sensor = AI1;
int valor;
int umbral = 200;
void setup() {
sh1.begin();
sh1.pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop() {
valor = sh1.analogRead(sensor);
sh1.digitalWrite(led, (valor>umbral));
Serial.print("sensor = ");
Serial.println(valor);
delay(80);
}
Este programa de ejemplo se encuentra incluido en la library en la ubicación examples/sonido