Cómo hacer un sistema de alarma Arduino simple

  • Harry James
  • 0
  • 3555
  • 68
Anuncio

Detecte movimiento, luego asuste a un intruso con una alarma aguda y luces intermitentes. ¿Suena divertido? Claro que lo hace. Ese es el objetivo del proyecto Arduino de hoy, adecuado para principiantes. Estaremos escribiendo completamente desde cero y probando a medida que avanzamos para que pueda tener una idea de cómo se está haciendo todo en lugar de simplemente instalar algo que ya hice.

Descargo de responsabilidad: esto no va a proteger realmente su casa. Eso podría dale a tu hermana una sorpresa desagradable cuando se cuela en tu habitación.

Necesitarás:

  • Un arduino
  • Ultrasónico “silbido” sensor, estoy usando HC-SR04 Un PIR sería mejor, pero son caros. Un sensor de ping se puede colocar subrepticiamente en una puerta y todavía sirve el mismo trabajo básico, y solo cuesta $ 5
  • Un zumbador piezoeléctrico
  • Luz de tira LED, con el mismo cableado que utilizamos en este proyecto Cree su propia iluminación ambiental dinámica para un centro multimedia Cree su propia iluminación ambiental dinámica para un centro multimedia Si ve muchas películas en su PC o centro multimedia, yo ' Estoy seguro de que has enfrentado el dilema de la iluminación; ¿Apagas completamente todas las luces? ¿Los mantienes a todo volumen? O… .

Cuando esté conectando este proyecto, no elimine todo cada vez, solo siga construyendo en el último bloque. Para cuando llegues a “Codificación del sistema de alarma” sección, debe tener todas las partes conectadas, con un aspecto similar a este:

Luces parpadeantes

Utilice el diagrama de cableado de este proyecto Cree su propia iluminación ambiental dinámica para un centro multimedia Cree su propia iluminación ambiental dinámica para un centro multimedia Si ve muchas películas en su PC o centro multimedia, estoy seguro de que se ha enfrentado a dilema de iluminación; ¿Apagas completamente todas las luces? ¿Los mantienes a todo volumen? O ... para conectar su tira de LED; no cambie los pines, ya que necesitamos salida PWM. Use este código para probar rápidamente su cableado. Si todo va bien, deberías tener esto:

Sensor de distancia

En el módulo SR04, encontrarás 4 pines. VCC y GND ir a + 5V rail y tierra respectivamente; TRIGONOMETRÍA es el pin que se usa para enviar una señal de sonda, pon esto en el pin 6; ECO se usa para leer la señal de regreso (y, por lo tanto, calcular la distancia) - ponga esto en 7.

Para simplificar las cosas, hay una biblioteca que podemos usar llamada NewPing. Descargue y coloque en su Arduino's Biblioteca carpeta y reinicie el IDE antes de continuar. Prueba usando este código; abra el monitor en serie y asegúrese de que la velocidad esté establecida en 115200 baudios. Con un poco de suerte, deberías ver que te envían algunas mediciones de distancia a una velocidad bastante alta. Puede encontrar una varianza de 1 o 2 centímetros, pero está bien. Intente pasar la mano frente al sensor, moviéndolo hacia arriba y hacia abajo para observar las lecturas cambiantes..

El código debe ser bastante simple de entender. Hay algunas declaraciones de pines relevantes al inicio, incluida una distancia máxima; esto puede variar según el sensor exacto que tenga, pero siempre que pueda obtener lecturas de menos de 1 metro con precisión, debería estar bien.

En el ciclo de esta aplicación de prueba, usamos el silbido() función para enviar un sonar ping, recuperando un valor en milisegundos de cuánto tiempo tardó en volver el valor. Para dar sentido a esto, utilizamos las bibliotecas NewPing construidas en constante de US_ROUNDTRIP_CM, que define cuántos microsegundos se necesitan para ir a un solo centímetro. También hay un retraso de 50 ms entre pings para evitar sobrecargar el sensor.

Alarma piezoeléctrica

El sensor de cristal piezoeléctrico es un timbre simple y económico, y podemos usar un pin PWM 3 para hacer diferentes tonos. Conecte un cable al pin 3, uno al riel de tierra; no importa cuál.

Usa este código para probar.

La única forma de matar la alarma bastante desagradable y ruidosa es tirar de los enchufes. El código es un poco complejo de explicar, pero implica el uso de ondas sinusoidales para generar un sonido distintivo. Ajusta los números para jugar con diferentes tonos.

Codificación del sistema de alarma

Ahora que tenemos todas las piezas de este rompecabezas, combinémoslas juntas.

Siga adelante y haga un nuevo boceto, llamado Alarma. Comience combinando todas las variables y las definiciones de pin que tenemos en los ejemplos de prueba hasta ahora.

#include // Seleccione qué pines aptos para PWM se utilizarán. #define RED_PIN 10 #define GREEN_PIN 11 #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Pin Arduino atado al pin de activación del sensor ultrasónico. #define ECHO_PIN 7 // Pin Arduino atado al pin de eco en el sensor ultrasónico. #define MAX_DISTANCE 100 // Distancia máxima a la que queremos hacer ping (en centímetros). #define ALARM 3 float sinVal; int toneVal; 

Comience escribiendo un básico preparar() función: solo trataremos con las luces por ahora. Agregué un retraso de 5 segundos antes de que se inicie el ciclo principal para darnos algo de tiempo para salir del camino si es necesario.

void setup () // establece pinModes para RGB strip pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // restablecer luces analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); retraso (5000); 

Usemos una función auxiliar que nos permita escribir rápidamente un único valor RGB a las luces.

// función auxiliar que nos permite enviar un color en un comando color vacío (rojo de caracteres sin signo, verde de caracteres sin signo, azul de caracteres sin signo) // la función de generación de color analogWrite (RED_PIN, rojo); analogWrite (BLUE_PIN, azul); analogWrite (GREEN_PIN, verde); 

Finalmente, nuestro bucle por ahora consistirá en un simple destello de color entre rojo y amarillo (o, lo que sea que desee que sea su alarma, solo cambie los valores RGB).

bucle vacío () color (255,0,0); // retraso rojo (100); color (255,255,0); // retraso amarillo (100); 

Cargue y pruebe eso para asegurarse de que está en el camino correcto.

Ahora, integremos el sensor de distancia para activar esas luces solo cuando algo se encuentre dentro, por ejemplo, 50 cm (un poco menos que el ancho del marco de una puerta). Ya definimos los pines correctos e importamos la biblioteca, así que antes de preparar() agregue la siguiente línea para crear una instancia:

Sonda NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Nueva configuración de pines y distancia máxima. 

Debajo de eso, agregue una variable para almacenar el estado de la alarma que se activa o no, por defecto a falso, por supuesto.

booleano activado = falso; 

Agregue una línea a la preparar() función para que podamos monitorear la salida en serie y depurar.

Serial.begin (115200); // Abra el monitor en serie a 115200 baudios para ver los resultados del ping. 

A continuación, cambiemos el nombre del bucle actual a alarma() - esto es lo que se llamará si la alarma se ha disparado.

alarma nula () color (255,0,0); // retraso rojo (100); color (255,255,0); // retraso amarillo (100); 

Ahora crea un nuevo lazo() función, una en la que buscamos un nuevo ping, leemos los resultados y activamos la alarma si se detecta algo dentro del rango del medidor.

void loop () if (activado == verdadero) alarm ();  else delay (50); // Espere 50 ms entre pings (aproximadamente 20 pings / seg). 29 ms debería ser el retraso más corto entre pings. unsigned int uS = sonar.ping (); // Enviar ping, obtener tiempo de ping en microsegundos (us). distancia int sin firmar = uS / US_ROUNDTRIP_CM; Serial.println (distancia); si (distancia < 100) triggered = true;    

Déjame explicarte el código brevemente:

  • Comience verificando si la alarma se ha activado, y si es así, active la función de alarma (solo parpadea las luces en este momento).
  • Si aún no se ha activado, obtenga la lectura actual del sensor.
  • Si el sensor está leyendo <100 cm, something has padded the beam (adjust this value if it's triggering too early for you, obviously).

Pruébelo ahora, antes de agregar el molesto zumbador piezoeléctrico.

¿Trabajando? Excelente. Ahora agreguemos ese timbre nuevamente. Añadir pinMode al preparar() rutina.

pinMode (ALARMA, SALIDA); 

Luego agregue el bucle piezo zumbador a la función alarm ():

para (int x = 0; x<180; x++)  // convert degrees to radians then obtain sin value sinVal = (sin(x*(3.1412/180))); // generate a frequency from the sin value toneVal = 2000+(int(sinVal*1000)); tone(ALARM, toneVal);  

Si intenta compilar en este punto, se encontrará con un error; lo he dejado deliberadamente para que pueda ver algunos problemas comunes. En este caso, tanto la biblioteca de tonos NewPing como la estándar usan las mismas interrupciones: básicamente son conflictivas y no hay mucho que puedas hacer para solucionarlo. Oh querido.

Sin embargo, no te preocupes. Es un problema común, y alguien ya tiene una solución: descargue y agregue este NewTone a su carpeta de Bibliotecas Arduino. Ajuste el comienzo de su programa para incluir esto:

#incluir  

Y ajusta la línea:

 tono (ALARMA, toneVal); 

a

 NewTone (ALARMA, toneVal); 

en lugar.

Eso es. Configure su alarma en la puerta de su habitación para el próximo ladrón desventurado.

O, un perro tonto, que parecía completamente imperturbable por la alarma..

¿Tienes problemas con el código? Aquí está la aplicación completa. Si obtiene errores aleatorios, intente pegarlos a continuación y veré si puedo ayudarlo.

Crédito de imagen: Alarma de incendio a través de Flickr




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.