Tutorial para hacer un detector interruptor con silbido con Arduino

Un silbido es un sonido bastante único que los humanos podemos crear fácilmente: cuando el aire fluye a una cierta presión entre nuestros labios, puede crear una onda de sonido con una frecuencia en un cierto rango. ¿No sería guay poder detectar esa frecuencia y controlar cosas de nuestra casa con un solo silbido?

En este post veremos un circuito muy básico y fácil de detección de silbidos y también cómo controlar cualquier arduino con este circuito, entonces electrónicos, ¡vamos a empezar!

 

Materiales

-Micrófono básico de condensador electret

– Amplificador operacional

– Potenciómetro

-Arduino UNO

 

Objetivos

Primero que nada explicaré cómo haremos este proyecto: usando un micrófono básico de condensador electro, detectamos el sonido con el micrófono y a partir de la onda de sonido obtendremos una onda eléctrica (digital) entonces debemos medir la frecuencia de la señal de audio, por lo general la onda de sonido del silbato está entre 900 hercios y 1,8 kilo hercios dependiendo del tamaño de la persona y la posición de los labios.

Usando el arduino medimos el periodo de la señal y cuando se detecta la  frecuencia de rango que queremos, activamos nuestro circuito que por ejemplo podría encender y apagar un led con un relé conectado a una bombilla o hacer cualquier otra cosa así de fácil podríamos controlar las cosas con un silbido, entonces empecemos  con este proyecto.

 

Conexiones

El micrófono que voy a usar es un micrófono de condensador electret que son los micrófonos más utilizados actualmente y tienen un coste muy bajo. El sonido viaja a través del aire en forma de una onda de presión cuando esa onda alcanza las placas capacitivas del micrófono interno eso dará como resultado un cambio de voltaje.

 

 

 

 

 

 

El micrófono tiene un transistor interno que amplificará esa señal entonces todo lo que tenemos que hacer es añadir una resistencia de pull up de 10 kiloohmios en este caso conectado a 5 voltios y el pin negativo del micrófono a tierra.

 

 

 

 

 

 

Puedes identificar el pin positivo del micrófono mirando las tres líneas de las que tiene aquí.

 

 

 

 

 

 

Coloco el micrófono en la placa de pruebas y luego añado la resistencia de pull up de 10 kiloohmios a 5 voltios y el otro pin conectado a tierra.

 

 

 

 

 

 

Ahora conecto mi sonda del oscloscopio al pin de salida y observo la señal y como puedes ver en la siguiete imagen podemos detectar el sonido, pero el valor de pico a pico es muy bajo y también tenemos mucho ruido.

 

 

Entonces seguramente necesitamos amplificar la señal, para eso he usado un amplificador operacional o mejor llamado un opamp este es el LM324 que no es un amplificador de alto rendimiento, pero funciona más que perfecto para este fácil proyecto además tiene 4 amplificadores integrados en un solo chip y como vamos a necesitar amplificar la señal dos veces esto será genial.

 

 

Ok entonces ahora conecto la salida del micrófono a un condensador de 10 microfaradios como filtro de pasa altos y en serie con este condensador, añado una resistencia de un kilohmios, la ganancia del amplificador viene dada por estas dos resistencias.

 

 

 

 

 

 

Y también por la fórmula que aparece en la siguiente imagen:

 

 

Quiero una ganancia de 100 así que las segundas resistencias deberían ser 100 veces más grandes que las de un kilohmio.

 

 

Coloco el opamp en la placa de pruebas y añado las resistencias de 100 kilohmios entre el pin de entrada negativo y la salida que son los pines 13 y 14.

 

 

 

 

 

 

 

Ahora conecto 5 voltios y tierra a los pines de bsc y ground que son los pines 4 y 11 del LM324.

 

 

 

 

 

 

 

Para fijar un valor umbral conecto la entrada positiva que es el pin 12 al pin central de un potenciómetro de 10 vueltas.

 

 

 

 

 

 

 

La onda del silbido como puedes ver es una onda sinusoidal simple y tendrá la misma cantidad de tiempo en el lado negativo que en el lado positivo.

 

 

Dado que el voltaje máximo para este proyecto es de 5 voltios del arduino quiero poner un valor umbral exactamente en el medio de ese voltaje así que giro el potenciómetro hasta obtener 25 voltios en el pin central.

 

 

 

 

 

 

 

Por cierto, los otros los pines del potenciómetro estarán conectados a 5 voltios y tierra

 

 

Ahora observo la señal de salida en el osciloscopio y utilizo esta aplicación para crear un sonido de onda sinusoidal puse la frecuencia a 1,2 kilohercios:

 

 

y acerco el teléfono cerca del micrófono como puedes ver la señal que emite el micrófono es de unos 20 o 30 milivoltios pico a pico y llena de ruido.

 

 

Pero la salida del opamp está cerca de 2 voltios pico a pico y se acercó el teléfono aún más se saturará a 2.5 pico a pico ya que ese es el voltaje máximo que tenemos

 

 

 

 

 

 

 

Muy bien ya tenemos nuestra señal amplificada, la configuración del opamp que hemos utilizado es de inversión por eso la señal de salida está invertida como podemos ver aquí en mi osciloscopio cuando la entrada es positiva la salida es negativa y viceversa además todavía tenemos una onda sinusoidal, lo que yo quiero es una onda cuadrada con la misma frecuencia que la señal original.

 

 

 

 

 

 

 

Entonces para eso amplifico la señal una vez más con el segundo amplificador y eso me dará la onda cuadrada que quiero conecto a la salida del primer amplificador a la entrada positiva del segundo

 

 

 

 

 

 

 

La entrada negativa del segundo amplificador se conecta otra vez a un potenciómetro para establecer el voltaje umbral. Esta segunda configuración del opamp es un comparador tiene una ganancia infinita así que tendremos un pulso positivo cuando la señal de la entrada positiva sea más alta que la entrada negativa y un pulso bajo cuando la entrada esté por debajo del voltaje establecido en el pin negativo

 

 

 

 

 

 

 

Ok ajustamos el potenciómetro a unos 25 voltios una vez más y observamos la salida en el osciloscopio muy bien ahora ya tengo la onda cuadrada.

 

 

Como era de esperar tengo 5 voltios cuando la señal de entrada está por encima de 25 voltios y 0 voltios cuando la entrada está por debajo de los 25 eso me da la onda cuadrada con la misma frecuencia que la primera entrada y eso es exactamente lo que quería.

 

 

 

 

 

 

 

Código

Antes de ir a la parte de arduino quiero verificar el rango de frecuencia de mi silbato, para eso coloco la medida de frecuencia en mí osloscopio y silbo desde el tono más bajo al más alto que puedo. El rango que obtengo está entre 800 hercios y 1600 pero he hecho esta prueba con un silbato de mujer y alcance hasta 2500 hercios así que debes decidir el rango que usarás en el código. Muy bien tenemos nuestro circuito de detección listo.

 

 

Repasemos la parte del arduino, conectaré la segunda salida del amplificador al pin digital 8 del arduino he usado un arduino UNO para estas pruebas, pero el código funcionará tanto con el nano o para el mini. Si usas el arduino mega tendrás que cambiar algunos registros porque ese no usará los mismos.

 

 

 

 

 

 

 

Ok entonces lo que queremos es medir la frecuencia de la señal de entrada, para eso mediremos el tiempo que tarda el pulso en pasar a alto y volver a abajo y multiplicar ese tiempo por dos ya que la onda sinusoidal pasa la misma cantidad de tiempo en ambos lados ese tiempo será el periodo de la señal.

 

 

 

 

 

 

 

Sí invertimos ese tiempo del periodo obtenemos la frecuencia en hercios, para hacer eso he usado interrupciones de cambio de pin.

 

 

Para eso primero añado estas configuraciones de dos registros antes del ciclo de configuración eso hará que el pin digital 8 cree una interrupción en ambos cambios de estado.

 

 

Ahora que tenemos los datos, procedamos con el código, descárgalo y pégalo en tu IDE de arduino. Cada vez que el pin digital 8 en este caso cambie su valor arrancamos una rutina de interrupción ISR.

 

 

Entonces cuando la señal suba entra la interrupción y arranca un contador de tiempo cuando el pulso cae entramos a la interrupción una vez más y detenemos ese contador luego la diferencia entre el tiempo presente y el valor del contador anterior me dará el ancho del tiempo del pulso.

 

 

 

 

 

 

 

He usado la función de micros para contar el tiempo por lo que el valor será en microsegundos este es el vector de interrupción de la medición del ancho del pulso

 

 

En la función loop multiplico el valor medido por 2 para obtener el periodo de la señal completo como dije antes.

 

 

Ahora divido uno por el periodo y obtengo la frecuencia como estaba trabajando en microsegundos tengo que multiplicar el valor de la frecuencia por un millón para obtener hercios desde segundos no desde microsegundos y eso es todo ahora tengo la frecuencia

 

 

Usando en la instrucción de if de texto de rango en este caso está entre 800 hercios y 18 khz si la frecuencia medida está en este rango comienza un nuevo contador llamado contador de pulso cuadrado.

 

 

No quiero que un solo pulso de onda cuadrada tenga la frecuencia deseada porque eso generará un error donde cualquier sonido podría descargar el circuito, quiero un montón de ellos seguidos uno por el otro, de esta forma me aseguraré de que la señal sea la que quiero y no un solo ruido aleatorio.

 

 

Cada vez que la frecuencia medida no está en el rango deseado reinicio el contador de pulsos, en este caso necesito 60 pulsos seguidos para tener la frecuencia en el rango deseado sí detecto eso entonces activo mi circuito aumentar este número disminuirá la sensibilidad de circuito de detección.

 

 

Muy bien una vez que se detecta el silbido activo el pin digital 13 que se conectará a un led y también aplicaré una señal analógica al pin 3 conectado a un zumbador. Sube el código al arduino y hacemos una primera prueba para este proyecto.

 

 

Ahí ya puede encender y apagar el led simplemente silbando, el circuito es inmune a ruido aleatorio tal como puedes ver aquí solo el servido activara este circuito y eso se debe a que el silbido es un sonido especial crea una onda sinusoidal con una frecuencia constante, un tiempo igual en las partes negativas y positivas de la señal y también un rango definido, entonces encontrar ruido aleatorio con las mismas características es bastante difícil no imposible pero difícil.

 

 

Ahora en lugar de un led conecto un relé al pin digital 13 para hacer otra prueba.

 

 

Al relé conectó una bombilla de 220 voltios ten mucho cuidado cuando trabajes con altos voltajes y solo conecta la alimentación cuando estás seguro de que el circuito está listo o limita tus proyectos a componentes de menor voltaje como 5 o 12 voltios ahora cada vez que silboo enciendo y apagó la luz de mi habitación, ¿mola verdad?

 

 

El detector funciona desde cualquier rincón de mi habitación me sorprendió descubrir que detecta tan bien incluso cuando estoy fuera de la habitación.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

nueve + nueve =