- Materiales necesarios
- Funcionamiento del sensor de sonido
- Medición de la frecuencia de audio en un osciloscopio
- Diagrama de circuito del detector de silbidos Arduino
- Medición de frecuencia con Arduino
- Programando su Arduino para detectar Whistle
- Detector de silbidos Arduino funcionando
Cuando era niño, me fascinaba un coche musical de juguete que se activaba cuando aplaudías, y luego, cuando crecí, me preguntaba si podíamos usar el mismo para encender las luces y los ventiladores de nuestra casa. Sería genial encender mis ventiladores y luces simplemente aplaudiendo en lugar de caminar con mi perezoso yo hacia el tablero de interruptores. Pero a menudo funciona mal ya que este circuito responderá a cualquier ruido fuerte en el ambiente, como una radio fuerte o para la cortadora de césped de mi vecino. Aunque construir un interruptor de aplauso también es un proyecto divertido.
Fue entonces cuando me encontré con este método de detección de silbidos en el que el circuito detectará el silbido. Un silbido, a diferencia de otros sonidos, tendrá una frecuencia uniforme durante una duración determinada y, por lo tanto, se puede distinguir del habla o la música. Entonces, en este tutorial aprenderemos cómo detectar el sonido del silbido mediante la interfaz del sensor de sonido con Arduino y cuando se detecte un silbido, cambiaremos una lámpara de CA a través de un relé. En el camino también aprenderemos cómo se reciben las señales de sonido por micrófono y cómo medir la frecuencia usando Arduino. Suena interesante, así que comencemos con el Proyecto de automatización del hogar basado en Arduino.
Materiales necesarios
- Arduino UNO
- Módulo de sensor de sonido
- Módulo de relé
- Lámpara AC
- Conexión de cables
- Tablero de circuitos
Funcionamiento del sensor de sonido
Antes de sumergirnos en la conexión de hardware y el código para este proyecto de automatización del hogar, echemos un vistazo al sensor de sonido. El sensor de sonido utilizado en este módulo se muestra a continuación. El principio de funcionamiento de la mayoría de los sensores de sonido disponibles en el mercado es similar a este, aunque la apariencia puede cambiar un poco.
Como sabemos, el componente primitivo de un sensor de sonido es el micrófono. Un micrófono es un tipo de transductor que convierte las ondas sonoras (energía acústica) en energía eléctrica. Básicamente, el diafragma dentro del micrófono vibra con las ondas de sonido en la atmósfera, lo que produce una señal eléctrica en su pin de salida. Pero estas señales serán de muy baja magnitud (mV) y, por lo tanto, no pueden ser procesadas directamente por un microcontrolador como Arduino. Además, de forma predeterminada, las señales de sonido son de naturaleza analógica, por lo que la salida del micrófono será una onda sinusoidal con frecuencia variable, pero los microcontroladores son dispositivos digitales y, por lo tanto, funcionan mejor con onda cuadrada.
Para amplificar estas ondas sinusoidales de baja señal y convertirlas en ondas cuadradas, el módulo utiliza el módulo comparador LM393 integrado como se muestra arriba. La salida de audio de bajo voltaje del micrófono se suministra a un pin del comparador a través de un transistor amplificador, mientras que un voltaje de referencia se establece en el otro pin utilizando un circuito divisor de voltaje que involucra un potenciómetro. Cuando el voltaje de salida de audio del micrófono excede el voltaje preestablecido, el comparador aumenta con 5 V (voltaje de funcionamiento), de lo contrario, el comparador permanece bajo a 0 V. De esta manera, la onda sinusoidal de baja señal se puede convertir en onda cuadrada de alto voltaje (5 V). La instantánea del osciloscopio a continuación muestra lo mismo donde la onda amarilla es la onda sinusoidal de señal baja y la azul es la onda cuadrada de salida. losLa sensibilidad se puede controlar variando el potenciómetro del módulo.
Medición de la frecuencia de audio en un osciloscopio
Este módulo sensor de sonido convertirá las ondas sonoras de la atmósfera en ondas cuadradas cuya frecuencia será igual a la frecuencia de las ondas sonoras. Entonces, midiendo la frecuencia de la onda cuadrada, podemos encontrar la frecuencia de las señales de sonido en la atmósfera. Para asegurarme de que todo funciona como se supone, conecté el sensor de sonido a mi osciloscopio para sondear su señal de salida como se muestra en el siguiente video.
Encendí el modo de medición en mi osciloscopio para medir la frecuencia y usé una aplicación de Android (Frequency Sound Generator) de Play Store para generar señales de sonido de frecuencia conocida. Como puede ver en el GID anterior, el osciloscopio pudo medir las señales de sonido con una precisión bastante decente, el valor de la frecuencia que se muestra en el osciloscopio es muy cercano al que se muestra en mi teléfono. Ahora que sabemos que el módulo está funcionando, procedamos a conectar el sensor de sonido con Arduino.
Diagrama de circuito del detector de silbidos Arduino
El diagrama de circuito completo para el circuito del interruptor del detector de silbidos Arduino que usa el sensor de sonido se muestra a continuación. El circuito se dibujó con el software Fritzing.
El sensor de sonido y el módulo de relé están alimentados por el pin de 5V del Arduino. El pin de salida del sensor de sonido está conectado al pin digital 8 del Arduino, esto se debe a la propiedad de temporizador de ese pin y discutiremos más sobre esto en la sección de programación. El módulo de relé se activa mediante el pin 13, que también está conectado al LED integrado en la placa UNO.
En el lado del suministro de CA, el cable neutro está conectado directamente al pin Común (C) del módulo de relé, mientras que la fase está conectada al pin Normalmente abierto (NO) del relé a través de la carga de CA (bombilla). De esta manera, cuando se activa el relé, el pin NO se conectará con el pin C y, por lo tanto, la bombilla se iluminará. De lo contrario, el blub permanecerá apagado. Una vez hechas las conexiones, mi hardware se veía así.
Advertencia: Trabajar con un circuito de CA puede resultar peligroso, tenga cuidado al manipular cables con corriente y evite cortocircuitos. Se recomienda un disyuntor o la supervisión de un adulto para las personas que no tienen experiencia con la electrónica. ¡¡Usted ha sido advertido!!
Medición de frecuencia con Arduino
De manera similar a nuestro osciloscopio que lee la frecuencia de las ondas cuadradas entrantes, tenemos que programar Arduino para calcular la frecuencia. Ya hemos aprendido cómo hacer esto en nuestro tutorial de contador de frecuencia usando la función pulso en. Pero en este tutorial usaremos la biblioteca Freqmeasure para medir la frecuencia y obtener resultados precisos. Esta biblioteca utiliza la interrupción del temporizador interno en el pin 8 para medir cuánto tiempo permanece encendido un pulso. Una vez que se mide el tiempo podemos calcular la frecuencia usando las fórmulas F = 1 / T. Sin embargo, dado que estamos usando la biblioteca directamente, no necesitamos entrar en los detalles del registro y las matemáticas de cómo se mide la frecuencia. La biblioteca se puede descargar desde el siguiente enlace:
- Biblioteca de medidas de frecuencia de pjrc
El enlace anterior descargará un archivo zip, luego puede agregar este archivo zip a su IDE de Arduino siguiendo la ruta Sketch -> Incluir biblioteca -> Agregar biblioteca.ZIP.
Nota: El uso de la biblioteca deshabilitará lafuncionalidad analogWrite en los pines 9 y 10 en UNO, ya que el temporizador estará ocupado por esta biblioteca. Además, estos pines cambiarán si se utilizan otras placas.
Programando su Arduino para detectar Whistle
El programa completo con un video de demostración se puede encontrar al final de esta página. En este encabezado explicaré el programa dividiéndolo en pequeños fragmentos.
Como siempre, comenzamos el programa incluyendo las bibliotecas requeridas y declarando las variables requeridas. Asegúrese de haber agregado la biblioteca FreqMeasure.h como se explica en el encabezado anterior. El estado variable representa el estado del LED y las variables frecuencia y continuidad se utilizan para generar la frecuencia medida y su continuidad respectivamente.
#incluir
Dentro de la función de configuración de vacío , comenzamos el monitor en serie a una velocidad de 9600 baudios para la depuración. Luego use la función FreqMeasure.begin () para inicializar el pin 8 para medir la frecuencia. También declaramos que se emite el pin 13 (LED_BUILTIN).
configuración vacía () { Serial.begin (9600); FreqMeasure.begin (); // Mide en el pin 8 por defecto pinMode (LED_BUILTIN, OUTPUT); }
Dentro del bucle infinito, seguimos escuchando en el pin 8 usando la función FreqMeasure.available (). Si hay una señal entrante, medimos la frecuencia usando FreqMeasure.read (). Para evitar errores debido al ruido, medimos 100 muestras y tomamos un promedio de eso. El código para hacer lo mismo se muestra a continuación.
if (FreqMeasure.available ()) { // promediar varias lecturas juntas sum = sum + FreqMeasure.read (); cuenta = cuenta + 1; if (cuenta> 100) { frecuencia = FreqMeasure.countToFrequency (suma / cuenta); Serial.println (frecuencia); suma = 0; cuenta = 0; } }
Puede usar la función Serial.println () aquí para verificar el valor de la frecuencia de su silbato. En mi caso, el valor recibido fue de 1800Hz a 2000Hz. La frecuencia de los silbidos de la mayoría de las personas se ubicará en este rango en particular. Pero incluso otros sonidos como la música o la voz pueden caer bajo esta frecuencia, por lo que para distinguirlos, monitorearemos la continuidad. Si la frecuencia es continua 3 veces, confirmamos que es un silbido. Entonces, si la frecuencia está entre 1800 y 2000, incrementamos la variable llamada continuidad.
si (frecuencia> 1800 && frecuencia <2000) {continuidad ++; Serial.print ("Continuidad ->"); Serial.println (continuidad); frecuencia = 0;}
Si el valor de continuidad alcanza o excede tres, entonces cambiamos el estado del LED alternando la variable llamada estado. Si el estado ya es verdadero, lo cambiamos a falso y viceversa.
if (continuidad> = 3 && estado == falso) {estado = verdadero; continuidad = 0; Serial.println ("Luz encendida"); delay (1000);} if (continuidad> = 3 && estado == verdadero) {estado = falso; continuidad = 0; Serial.println ("Luz apagada"); retraso (1000);}
Detector de silbidos Arduino funcionando
Una vez que el código y el hardware estén listos, podemos comenzar a probarlo. Asegúrese de que las conexiones sean correctas y encienda el módulo. Abra el monitor serial y comience a silbar, puede notar que el valor de continuidad se incrementa y finalmente enciende o apaga la Lámpara. A continuación se muestra una instantánea de muestra de mi monitor en serie.
Cuando el monitor en serie dice Luz encendida, el pin 13 se pondrá alto y el relé se activará para encender la lámpara. De manera similar, la lámpara se apagará cuando el monitor de serie indique Luz apagada . Una vez que haya probado el funcionamiento, puede alimentar la configuración con un adaptador de 12 V y comenzar a controlar su electrodoméstico de CA mediante un silbato.
El funcionamiento completo de este proyecto se puede encontrar en el video vinculado a continuación. Espero que hayas entendido el tutorial y hayas disfrutado aprendiendo algo nuevo. Si tiene algún problema para que las cosas funcionen, déjelo en la sección de comentarios o utilice nuestro foro para otras consultas técnicas.