Cómo hacer un simple sistema de alarma Arduino

Cómo hacer un simple sistema de alarma Arduino / Bricolaje

Detecta el movimiento y luego asusta a un intruso con sonidos de alarma agudos y luces parpadeantes. ¿Suena divertido? Claro que lo hace. Ese es el objetivo del proyecto Arduino de hoy, adecuado para principiantes. Escribiremos completamente desde cero y realizaremos pruebas a medida que avancemos, así que espero que puedas tener una idea de cómo se está haciendo todo en lugar de simplemente instalar algo que ya he hecho..

Descargo de responsabilidad: esto no va a proteger realmente su casa. Eso podría sin embargo, dale a tu hermana un shock 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 a escondidas en una puerta y aún así desempeñar el mismo trabajo básico, y solo cuesta $ 5
  • Un zumbador piezo
  • Luz de tira LED, con el mismo cableado que usamos en este proyecto Cree su propia iluminación ambiental dinámica para un centro multimedia Construya su propia iluminación ambiental dinámica para un centro multimedia Si ve muchas películas en su PC o centro multimedia, I ' Estoy seguro de que has enfrentado el dilema de la iluminación; ¿Apagas completamente todas las luces? ¿Los mantienes en plena explosión? O… Leer más .

A medida que va conectando este proyecto, no lo elimine todo cada vez, solo siga construyendo en el último bloque. Cuando llegues a “Codificación del sistema de alarma” En la sección, deberías tener todas las partes y piezas conectadas, mirando algo como esto:

Luces parpadeantes

Use el diagrama de cableado de este proyecto Cree su propia iluminación ambiental dinámica para un centro multimedia Construya 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 al dilema de la iluminación; ¿Apagas completamente todas las luces? ¿Los mantienes en plena explosión? O ... Leer más para conectar su tira de LED; No cambies 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 carril y tierra respectivamente; TRIGONOMETRÍA es el pin usado para enviar una señal de sonar, póngalo en el pin 6; ECO se usa para leer la señal de vuelta (y, por lo tanto, calcular la distancia) - póngala en 7.

Para hacer las cosas increíblemente simples, hay una biblioteca que podemos usar llamada NewPing. Descargar y colocar en tu Arduino's. Biblioteca Carpeta y reinicie el IDE antes de continuar. Prueba utilizando 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 algunas mediciones de distancia enviadas a una velocidad bastante alta. Puede encontrar una variación de 1 o 2 centímetros, pero esto está bien. Intente pasar la mano por delante del sensor, moviéndolo hacia arriba y hacia abajo para observar los cambios en las lecturas.

El código debe ser bastante simple de entender. Hay una pequeña declaración de pines relevantes al comienzo, 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 bucle de esta aplicación de prueba, usamos el silbido() función para enviar un ping de sonar, recuperar un valor en milisegundos de cuánto tiempo tardó en devolver el valor. Para dar sentido a esto, usamos las bibliotecas NewPing integradas en constantes de US_ROUNDTRIP_CM, que define cuántos microsegundos se tarda en recorrer un solo centímetro. También hay un retraso de 50 ms entre los pings para evitar la sobrecarga del sensor.

Alarma piezoeléctrica

El sensor de cristal Piezo es un zumbador simple y barato, y podemos usar un pin 3 de PWM para hacer diferentes tonos. Conecte un cable al pin 3, uno al riel a tierra, no importa cuál.

Usa este código para probar.

La única forma de acabar con la alarma más bien repugnante y ruidosa es tirando de los enchufes. El código es un poco complejo de explicar, pero implica el uso de ondas sinusoidales para generar un sonido distintivo. Modifica los números para jugar con diferentes tonos..

Codificación del sistema de alarma

Ahora que tenemos todas las piezas de este rompecabezas, vamos a combinarlas.

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

#incluir  // Seleccione qué pines compatibles con PWM se utilizarán. # define RED_PIN 10 # define GREEN_PIN 11 # define BLUE_PIN 9 # define TRIGGER_PIN 6 // Arduino pin atado para activar pin en el sensor ultrasónico. #define ECHO_PIN 7 // Arduino pin atado a echo pin en el sensor ultrasónico. #define MAX_DISTANCE 100 // Distancia máxima que queremos hacer ping (en centímetros). #define ALARM 3 float sinVal; int toneVal; 

Comienza escribiendo un básico preparar() Función: solo nos ocuparemos de las luces por ahora. He agregado un retraso de 5 segundos antes de que se inicie el bucle principal para darnos algo de tiempo para salir del camino si es necesario.

void setup () // establece pinModes para RGB stripModo pin (RED_PIN, SALIDA); pinMode (BLUE_PIN, SALIDA); pinMode (GREEN_PIN, SALIDA); // reiniciar las luces analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); retraso (5000); 

Usemos una función de ayuda que nos permite escribir rápidamente un solo valor RGB a las luces.

// función auxiliar que nos permite enviar un color en un comando void color (unsigned char red, unsigned char green, unsigned char blue) // la función de generación de color analogWrite (RED_PIN, red); 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, como quiera que sea su alarma, simplemente cambie los valores RGB).

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

Sube y prueba eso para asegurarte de que estás en el camino correcto.

Ahora, integremos el sensor de distancia para disparar esas luces solo cuando algo viene dentro, por ejemplo, 50 cm (solo un ancho menor que el ancho del marco de una puerta). Ya hemos definido los pines correctos e importado la biblioteca, así que antes de su preparar() Función agregar la siguiente línea para instanciarla:

NewPing sonar (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 activada o no, por defecto a falso, por supuesto.

booleano disparado = falso; 

Añadir una línea a la preparar() función para que podamos monitorear la salida en serie y depuración.

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

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

alarma de vacío () color (255,0,0); // retardo rojo (100); color (255,255,0); // retraso en el amarilleo (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 (triggered == true) alarm ();  else delay (50); // Espere 50 ms entre pings (unos 20 pings / seg). 29ms debe ser el menor retraso entre pings. unsigned int uS = sonar.ping (); // Enviar ping, obtener tiempo de ping en microsegundos (uS). unsigned int distance = uS / US_ROUNDTRIP_CM; Serial.println (distancia); si (distancia) < 100) triggered = true;    

Déjame explicarte el código brevemente:

  • Comience por verificar si la alarma se ha activado, y si es así, active la función de alarma (solo parpadeando 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 timbre piezoeléctrico..

¿Trabajando? Genial. Ahora vamos a añadir ese zumbador de nuevo. Añadir pinMode al preparar() rutina.

pinMode (ALARMA, SALIDA); 

Luego agregue el bucle del zumbador piezo a la función de alarma ():

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. He dejado esto deliberadamente para que pueda ver algunos problemas comunes. En este caso, tanto NewPing como la biblioteca de tonos estándar utilizan 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. Ajusta el comienzo de tu programa para incluir esto:

#incluir  

Y ajustar la línea:

 tono (ALARM, toneVal); 

a

 NewTone (ALARM, toneVal); 

en lugar.

Eso es. Configura tu alarma en la puerta de tu habitación para el próximo desafortunado ladrón.

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 está obteniendo errores aleatorios, intente pegarlos a continuación y veré si puedo ayudar.

Crédito de la imagen: Fire Alarm via Flickr.

Explorar más sobre: ​​Arduino.