Alarma casera con Processing y arduino

Combinando software y hardware libre podemos crear cosas muy buenas. En este caso crearemos una sencilla alarma que detecta movimiento, muestra una imagen de alerta en la pantalla y nos envía un correo electrónico informándonos que se detectó movimiento en un área donde no debería haberlo (Nuestra casa, un site, nuestro auto, etc).

Uno de los inconvenientes de arduino es la dificultad para adaptar una pantalla (Sí se puede, pero es un poco complicado y el resultado no es muy bueno), pero ¿Qué tal si utilizamos la pantalla del PC para mostrar información de una manera más atractiva? Para ese caso podemos utilizar Processing y aprovechar su potencial gráfico para crear un resultado más profesional.

 

Necesitaremos:

  • Cualquier tarjeta arduino (UNO, Mega, etc) con su cable de alimentación USB.

Arduino

  • Sensor ultrasónico HC-SR04
  • sensor
  • Bocina o speaker (En mi caso utilicé una bocina de computadora que tenía guardada, con que sea una bocina de 1ohm es más que suficiente).

bocina

  • 4 cables macho a hembra para arduino.

cables

Comencemos:

Lo primero será conectar nuestro sensor a la tarjeta arduino. Como casi todos los sensores, éste tiene un pin de alimentación, un pin de tierra y un pin de señal. Insertamos la parte hembra de nuestros cables en los pines de nuestro sensor.

El cable que conectemos al pin de tierra de nuestro sensor lo conectaremos a una entrada de tierra (GND) de nuestra tarjeta arduino.

El cable que conectemos al pin de alimentación de nuestro sensor, lo conectaremos a una entrada de 5V de nuestra tarjeta arduino.

El cable que conectemos al pin “Trig” de nuestro sensor, lo conectaremos a la entrada de señal digital marcada con el número 7 de nuestro arduino.

El cable que conectemos al pin “Echo” de nuestro sensor lo conectaremos a la entrada de señal digital marcada con el número 6 de nuestro arduino.

Por cualquier problema, dejo un diagrama de las entradas de arduino.

 

diagrama arduino

 

Luego, procederemos a conectar el speaker o bocina a nuestro arduino. Primero pelamos nuestros cables blanco y negro (Pueden ser rojo y negro, en ese caso serán positivo y negativo, respectivamente).

El cable blanco o rojo (positivo) irá conectado a la entrada 8 de nuestro arduino.

El cable negro (negativo) irá conectado a una entrada de tierra (GND) de nuestro arduino.

Dejo una imagen de mis conexiones para ayudar.

//Insertar imagen de las conexiones en la tarjeta arduino.

Ya tenemos las conexiones físicas listas. Procederemos a crear nuestro código para arduino.

Lo primero que tenemos que hacer es descargar nuestro IDE de arduino del siguiente link (https://www.arduino.cc/en/Main/Software), hay versiones para Linux, Windows y Mac.

Crearemos un proyecto nuevo y copiaremos el siguiente código:

<script src=”https://gist.github.com/anonymous/18557d2e79be2a763da385b9bd36f656.js”></script>

Con este código, definimos nuestros pines 6 y 7 como echo y trigger respectivamente. Luego definimos nuestros pines 7, 6, 8 como salida, entrada y salida, respectivamente e inicializamos nuestro arduino a 9600 baudios.

Después, inicia nuestra función loop que, como ya sabemos se repite infinitamente. En dicha función loop enviaremos una señal continuamente al pin “TRIGGER” para que el sensor emita una señal, que en caso de rebotar físicamente con un objeto y ser captada de nuevo por él mismo se dispara una señal en el pin “ECHO”.

Luego, en caso de detectar un pulso en el pin “ECHO” se guarda la el intervalo de tiempo entre que se emitió la señal y ésta fue detectada por el sensor. Después hacemos una conversión para obtener la distancia a la cual se encuentra el objeto que rebotó la señal al sensor.

Por último, este valor de “distancia” se valida que sea menor a 40cm (podemos modificar para que sea el valor que nosotros querramos dependiendo nuestras necesidades). En caso de que la distancia sea menor a 40cm suceden dos cosas:

  • Se envía dicho valor por el cable USB (usando la clase Serial)
  • Se envía una señal alta al pin donde está conectada nuestra bocina, para que ésta empiece a pitar.

En caso de que la distancia sea mayor a 40cm, el sistema no hace nada y vuelve a ejecutar la función en espera de otra señal.

 

Con esto enviamos nuestra señal por el cable USB, para que Processing la obtenga y pueda hacer uso de ella. Para esto, haremos un código en Processing como el siguiente:

<script src=”https://gist.github.com/anonymous/e45b477dda999fe2702e97fd703f85fb.js”></script>

 

Lo que hacemos en este código es importar la clase serial para que Processing pueda leer las señales que se envían por el cable USB.

Después, iniciamos el puerto USB a 9600 baudios.

Luego, creamos el canvas donde se mostrará información en caso de detectar un movimiento, y precargamos la imagen que mostraremos con la función loadImage().

Después, inicia nuestra función draw, la cual se ejecutará infinitamente, e intentará capturar la nuestra señal. En dicha función lo primero que hacemos es intentar leer 13 veces la señal por el puerto serial.

Con la condicional  if(message != null), sabremos si se detectó alguna señal, en caso de ser cierto, mostraremos la imagen que habíamos precargado, e ingresaremos a la siguiente URL (http:/4dev.mx/Mailer), la cual ejecuta un script de PHP que envía un email a la cuenta que nosotros querramos, para notificar a la persona (o a nosotros) que se detectó un movimiento.

 

Es todo. Con apenas unos $300 MXN hemos creado una alarma bastante eficiente que detecta intrusos y nos informa de ello en donde estemos. Aunque el proyecto es bastante mejorable, cumple su objetivo de una manera muy sencilla.

Cualquier duda o sugerencia puedes comentarla y con gusto podré resolverla. Saludos.

 

Puedes descargar el código de este proyecto en el siguiente LINK

Deja un comentario