Tutorial Raspberry Pi : Alarma con aviso por mail
En este tutorial vamos a realizar una alarma para nuestra casa, que en caso de detectar a alguien nos envié un mail de alerta. Usaremos la Raspberry Pi Expansion Board para interactuar con el sensor, disponible para comprar en nuestra Tienda. Dado que hoy en dia casi todo el mundo dispone de un smartphone es una manera de estar enterado al instante si han entrado en tu casa.
Para ello instalaremos el cliente de correo mutt, que nos permite enviar correos desde un gmail.
sudo apt-get update
sudo apt-get install mutt
Ahora con el paquete instalado lo vamos a configurar para enviar desde el root. Para ello creamos el siguiente fichero y rellenamos esta información. Donde pone electroensaimada poned vuestro usuario de gmail y donde pone password vuestra clave.
sudo nano /root/.muttrc
Contenido de fichero
set from = "electrensaimada@gmail.com"
set realname = "Alarma electroensaimada"
set imap_user = "electroensaimada@gmail.com"
set imap_pass = "password"
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set postponed ="+[Gmail]/Drafts"
set header_cache =~/.mutt/cache/headers
set message_cachedir =~/.mutt/cache/bodies
set certificate_file =~/.mutt/certificates
set smtp_url = "smtp://electroensaimada@smtp.gmail.com:587/"
set smtp_pass = "password"
Para ello instalaremos el cliente de correo mutt, que nos permite enviar correos desde un gmail.
sudo apt-get update
sudo apt-get install mutt
Ahora con el paquete instalado lo vamos a configurar para enviar desde el root. Para ello creamos el siguiente fichero y rellenamos esta información. Donde pone electroensaimada poned vuestro usuario de gmail y donde pone password vuestra clave.
sudo nano /root/.muttrc
Contenido de fichero
set from = "electrensaimada@gmail.com"
set realname = "Alarma electroensaimada"
set imap_user = "electroensaimada@gmail.com"
set imap_pass = "password"
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set postponed ="+[Gmail]/Drafts"
set header_cache =~/.mutt/cache/headers
set message_cachedir =~/.mutt/cache/bodies
set certificate_file =~/.mutt/certificates
set smtp_url = "smtp://electroensaimada@smtp.gmail.com:587/"
set smtp_pass = "password"
Ahora crearemos la siguiente carpeta:sudo mkdir -p /root/.mutt/cache
Ya estamos listos para enviar un correo, recordad que lo hemos configurado para enviar desde el root si lo queréis desde el usuario pi donde pone root lo cambiáis por pi.
Vamos a enviar nuestro primer correo para ello hacemos sudo su. Y tecleamos el siguiente código:
echo "Alarmaaaa" | mutt -s "Prueba" micorreo@gmail.com
Donde pone Alarmaaaa ira el contenido del mensaje y en Prueba ira el asunto del mensaje. Finalmente el ultimo correo es el destinatario del mail.
Ahora vamos a nuestra bandeja de entrada y allí tendremos el correo.
Ya estamos listos para enviar un correo, recordad que lo hemos configurado para enviar desde el root si lo queréis desde el usuario pi donde pone root lo cambiáis por pi.
Vamos a enviar nuestro primer correo para ello hacemos sudo su. Y tecleamos el siguiente código:
echo "Alarmaaaa" | mutt -s "Prueba" micorreo@gmail.com
Donde pone Alarmaaaa ira el contenido del mensaje y en Prueba ira el asunto del mensaje. Finalmente el ultimo correo es el destinatario del mail.
Ahora vamos a nuestra bandeja de entrada y allí tendremos el correo.
Ahora vamos a enviar un archivo adjunto para ello crearemos un archivo con nano adjunto.c y lo rellenamos con texto.
Para adjuntar-lo al correo se hace de la siguiente forma. Donde /root/adjunto.c es la ruta del archivo.
echo "Este correo incluye un adjunto" | mutt -s "Archivo Adjunto" micorreo@gmail.com -a /root/adjunto.c
Para adjuntar-lo al correo se hace de la siguiente forma. Donde /root/adjunto.c es la ruta del archivo.
echo "Este correo incluye un adjunto" | mutt -s "Archivo Adjunto" micorreo@gmail.com -a /root/adjunto.c
Sensor PIR
Para detectar si ha entrado alguien usaremos un sensor PIR, este sensor se basa en la lectura de los infrarrojos pasivos,detecta movimientos de personas,animales etc y tiene un amplio cono de acción de casi 180º.

pir.pdf | |
File Size: | 51 kb |
File Type: |
El sensor consta de tres cables.
- Rojo: VCC(de 5V a 12V) en algunos sitios he visto que solo les funciona a partir de 7V, en mi caso con 5V me detecta bien así que lo alimentare a 5V.
- Marrón: GND
- Negro: Pin de alarma, este pin actúa como un colector abierto, es decir al detectar algo pone el pin a GND en caso contrario lo deja libre, por lo que podemos poner una resistencia de pull-up hacia Vcc o hacia 5V.
Usaremos la Raspberry Pi Expansion Board y conectaremos el sensor PIR al pin 2 con dos pull-up de 4.7K, para ello la soldaremos en el área de prototipado de la placa. El uso de dos resistencias d 4.7K es porque he ido probando valores con una de 1K se me quedaba en 1 todo el tiempo, con una de 4.7K me leía 0, en este caso dos de 4.7K en paralelo es como una de 2.3 K que parece que funciona. Eso puede ser debido al TXB0108. Tenemos un conector de 4 pines, el cuarto pin esta conectado al pin de alarma así con un cable lo pinchamos con el pin 2 de la placa.
Ahora crearemos un pequeño programa para que nos lea cada segundo el valor del pin 2. Recordad con 0 nos ha detectado con 1 no.

pir.c | |
File Size: | 0 kb |
File Type: | c |
Compilamos y ejecutamos.
cc -o PIR PIR.c -L/usr/local/lib -lwiringPi
sudo ./PIR
cc -o PIR PIR.c -L/usr/local/lib -lwiringPi
sudo ./PIR
Ahora vamos a modificar un poco el programa vamos a usar una interrupción para detectar la Alarma, en este caso no tiene mucho sentido ya que el evento no es algo rápido y ademas el programa no tiene que realizar nada mas así que podríamos hacer polling a una frecuencia aceptable y funcionaria igual. En mi caso he tenido que actualizar la librería wiringPi ya que tenia una versión obsoleta aquí explica como se hace.
Usaremos una interrupción por flanco de bajado en el pin 2. Esta activara una variable llamada alerta, y en el main se comprobara que esta variable este a 1, en ese caso haremos parpadear el led 5 veces. El sensor es muy sensible y al mínimo movimiento que se haga se activa. La siguiente función activa la interrupción en el pin 2, como flanco de bajada y esta llamara a Interrupt que es el nombre de una funcion que he creado.wiringPiISR (2 ,INT_EDGE_FALLING , &Interrupt);
Usaremos una interrupción por flanco de bajado en el pin 2. Esta activara una variable llamada alerta, y en el main se comprobara que esta variable este a 1, en ese caso haremos parpadear el led 5 veces. El sensor es muy sensible y al mínimo movimiento que se haga se activa. La siguiente función activa la interrupción en el pin 2, como flanco de bajada y esta llamara a Interrupt que es el nombre de una funcion que he creado.wiringPiISR (2 ,INT_EDGE_FALLING , &Interrupt);

alarma.c | |
File Size: | 0 kb |
File Type: | c |
Aquí podéis ver como se activa la alarma. Cada vez que sale el mensaje activado es que ha detectado un flanco, pero en realidad nosotros actuamos en función de la variable alerta, así nos aseguramos de entrar solo una vez cada 2.5 segundos, que es el tiempo que parpadea.
En el siguiente video podéis ver como me detecta la mano y parpadea el led.
El ultimo caso consiste en enviar el correo cuando salte la Alarma. Para que no se empiece a volver loco enviando correos limitaré el numero de mails por programa a 3. Es decir en cada ejecución de programa solo puede enviar 3 mails como máximo Ademas modificamos el tiempo de parpadeo, en este caso a 30 segundos.
Fijaos que usamos la función system, esta permite ejecutar comandos de la consola directamente en el codigo. Asi que usamos los ejemplos de envió anteriores y los ponemos dentro de la función system. Dado que dentro de system tiene que ir un string entre " " y el comando a escribir tiene comillas, se sustituyen la comillas del comando por \".
Fijaos que usamos la función system, esta permite ejecutar comandos de la consola directamente en el codigo. Asi que usamos los ejemplos de envió anteriores y los ponemos dentro de la función system. Dado que dentro de system tiene que ir un string entre " " y el comando a escribir tiene comillas, se sustituyen la comillas del comando por \".

alarma_2.c | |
File Size: | 0 kb |
File Type: | c |
|
|
Hemos finalizado el tutorial y tenemos una alarma simple pero efectiva que se puede mejorar. Por ejemplo haciendo ruido mediante un zumbador, complementar la información del PIR con una webcam para poder ver que esta pasando y una buena opción seria hacer una foto cada vez que detecta algo y mandarla por mail.