No products in the cart.
Eres de los que se ponen los auriculares frente al ordenador y se olvida del resto del mundo? ¿Cuántas veces has dejado de escuchar el timbre de la puerta de tu casa? ¿Cuántas te has llevado un enfado de tu madre cuando te gritaba para cenar y no escuchabas? Si todo esto te suena familiar, este tutorial te interesa. En este tutorial vamos a crear una alarma de detección de sonido con Arduino.
Los componentes que vamos a necesitar para este tutorial son:
El software que necesitaremos es:
En este tutorial vamos a hacer algo divertido: Detectar el sonido. Para ello, vamos a utilizar un micrófono Electret, el elemento estrella de este tutorial. Los micrófonos Electret consisten básicamente en un transductor que convierte las ondas sonoras en electricidad. El problema que tienen es que la señal de salida suele ser muy baja (del orden de mV), por lo que conviene procesar la señal con algún amplificador, lo que complica un poco los circuitos. Sin embargo, la buena noticia es que el micrófono Electret de nuestra tienda tiene integrado el circuito, por lo que no necesitaremos todos estos componentes.
Antes de empezar, una buena idea es echarle un vistazo a los datasheet tanto del micrófono electret como del MAX4469:
El montaje a realizar es el siguiente:
El código a copiar en el IDE de Arduino es el siguiente:
// www.opiron.com // by A.Girod, basado en el código escrito por Ladyada // Tutorial de sensado de sonido con Micrófono Electret // más info en: http://www.opiron.com/portfolio/alarma-de-deteccion-de-sonido-con-arduino const int sampleWindow = 50; // Ventana de nuestreo en msSample window width in mS (50 mS = 20Hz) unsigned int sample; int led=13; // Conectamos el LED al pin13 por comodidad void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { unsigned long startMillis= millis(); //Iniciamos la ventana de muestreo unsigned int peakToPeak = 0; // Nivel pico a pico unsigned int signalMax = 0; unsigned int signalMin = 1024; while (millis() - startMillis < sampleWindow) // Recolectamos datos por 50ms { sample = analogRead(0); // Conectamos la salida analógica del sensor a la entrada A0 de Arduino if (sample < 1024) { if (sample > signalMax) { signalMax = sample; // Señal máxima, muestreo } else if (sample < signalMin) { signalMin = sample; // Señal mínima, muestreo } } } peakToPeak = signalMax - signalMin; // Max - min = amplitud pico a pico Serial.print(peakToPeak); double volts = (peakToPeak * 3.3) / 1024; // Conversión a voltios Serial.println(volts); if (volts>0.4){ // Si el valor leído supera al umbral damos una alarma visual digitalWrite(led,HIGH); } else if (volts<0.4){ // De lo contrario, no damos ninguna alarma digitalWrite(led,LOW); } }
Una vez hayáis copiado el código en el IDE de Arduino, no olvidéis que es importante que comprobéis que no tenga ningún error al compilarlo. Finalmente, podéis transferir el código a la placa y… ¡Podéis empezar a jugar! Veréis que en función del ruido que hagáis, se encenderá el LED. ¡Mola!
Supongo que estaréis pensando que tampoco estaréis fijando vuestra vista constantemente en un LED mientras estáis con el PC…por lo tanto, lo que ahora vamos a hacer es escribir un pequeño programa en Processing que nos alerte si se ha producido algún sonido. Veámoslo:
// www.opiron.com by A.Girod // Tutorial de sensado de sonido con Micrófono Electret // más info en: http://www.opiron.com/portfolio/alarma-de-deteccion-de-sonido-con-arduino import processing.serial.*; //Importo la librería para tratar datos puerto serie import controlP5.*; //import controlP5 library ControlP5 cp5; //controlP5 object Serial arduino; int valor; int col = color(255); void setup() { cp5 = new ControlP5(this); background(0,255,0); arduino = new Serial(this, Serial.list()[0], 9600); //Abro el puerto serie size(240, 180); //El tamaño de la pantalla cp5.addButton("OK") //Este botón sirve para aceptar la alarma .setValue(0) .setPosition(20,140) .setSize(50,19) ; } void draw() { fill(col); ellipse(180,140,40,40); //La elipse cambiará de color en función de si hay alarma while (arduino.available() > 0) // Consulto si hay datos en el puerto serie { valor = arduino.read(); //Leo y almaceno el valor del puerto serie println(valor); // Muestro por la consola el valor if (valor==1){ //Si valor es 1 es que ha habido un sonido textSize(22); text("¡Te llaman!", 60, 80); fill(0, 102, 153, 51); col = color(255,0,0); } } } public void OK(int theValue) { println("OK: "+theValue); background(0); col = color(255); }
De esta manera, una vez ejecutemos este programa con Processing, tendremos una pequeña pantalla que nos alertará de manera visual cuando se produce un sonido externo al que tengamos que prestarle atención (el timbre de nuestra casa, una llamada de un compañero, etc):
¡Y esto es todo! ¡Esperamos que os haya gustado el tutorial!
Agradecemos tu feedback cuando has leído un tutorial, y puedes hacerlo de diferentes maneras:
El tutorial y su contenido – texto, imágenes y código- están bajo licencia Creative Commons Attribution-ShareAlike 3.0 License.
.