domingo, 2 de marzo de 2014

Sistema de Seguridad



 Sistema de Seguridad con Arduino

En este proyecto voy a crear un Sistema de Seguridad, en el cual con un RFID voy a identificar a la persona que desconecta la alarma y entra a la casa, si el numero de tarjeta o llavero no se encuentra en nuestra memoria el sistema dará un mensaje de alerta.Todo se controlara a través de un Arduino Mega y un PIC 16F877  Arduino Uno.



El sistema estará compuesto por un sensor de movimiento, sensor de apertura de ventana, el RFID, alarma de sonido, un sistema para abrir la puerta y una pantalla LCD con adaptador de salida paralela a I2C para mostrar la información de los estados de la alarma.





Lo primero que hice fue buscar información sobre el sensor de movimiento y el Sistema RFID, buscando las librerías adecuadas para arduino.
La librería que estoy utilizando para el Sistema RFID es rfid-master, la librería podéis descargarla aquí.


RFID

Lo primero que hice fue crear un programa sencillo para leer el numero de la tarjeta o llavero, y que lo mostrara en el terminal Serial de Arduino.


//**** Ejemplo de código de Arancha Requena

#include <SPI.h>
#include <MFRC522.h>

MFRC522 rfid(53, 5); //Pines 53 del SPI SS, y pin 5 del Reset


void setup () {
  Serial.begin (9600);
  SPI.begin ();
  rfid.PCD_Init();
  Serial.println("Init...");
}

void loop(){
  if (rfid.PICC_IsNewCardPresent()){
    Serial.println("");
    Serial.println("New Card");
   
    if (rfid.PICC_ReadCardSerial()){  // esto mostrará los 16 dígitos de la tarjeta 
     Serial.println ("");
     Serial.println ("el numero de serie de la tarjeta es:");            
     Serial.print (rfid.uid.uidByte[0], DEC);
     Serial.print (",");
     Serial.print (rfid.uid.uidByte[1], DEC);
     Serial.print (",");
     Serial.print (rfid.uid.uidByte[2], DEC);
     Serial.print (",");
     Serial.print (rfid.uid.uidByte[3], DEC);
     Serial.print (",");
     Serial.print (rfid.uid.uidByte[4], DEC);
     Serial.println ("");   
     delay(350);
    }
  }
}
 
Tras conocer el numero de la tarjeta, podemos decirle que si el numero se corresponde con el numero que tenemos guardado realice expresamente algo, por ejemplo encender un led verde y mostrar por el terminal que la tarjeta es la correcta, y si el numero no se corresponde con el numero guardado, puede encender un led rojo e indicar por el terminal que la tarjeta no es la correcta.


La conexión del sistema RFID con el arduino Mega 2650 es la siguiente:

RFID                     Arduino

SDA                                 PIN 53
SCK                                 PIN 52
MOSI                               PIN 51
MISO                               PIN 50
GND                                GND
RST                                 PIN 5
3,3V                                 3,3V


Sensor Movimiento PIR

Para la detección de movimiento en este sistema de seguridad voy a utilizar un PIR Sensor el cual a través del cambio de calor mide el movimiento, este sensor es fácil de conectar con el Arduino solo tiene 3 patillas, una de alimentación a 5 voltios(VCC), la salida del sensor(OUT) y masa(GND).
El programa que hemos realizado en arduino para su comprobación es sencillo, diciéndole simplemente que cuando el sensor lea un 1 significa que hay movimiento y enciende un led para indicar el movimiento.

Sensor Pir y conexion a Arduino

/*************************************************************
 * Programa Arduino PIR SENSOR  |  BY Arancha Requena Perez *
 *************************************************************/
int ledPin = 8;                 // comprobacion con el pin 8
int inputPin = 2;               // entrada del sensor (PIR sensor)
int val = 0;                    // variable para guardar la entrada de inputPin
void setup() {
  pinMode(ledPin, OUTPUT);      // ledPin salida
  pinMode(inputPin, INPUT);     // inputPin entrada
  Serial.begin(9600);
  Serial.println("Init...");
}
void loop(){
  val = digitalRead(inputPin);  // lee la entrada del sensor y la almacena en val
  if(val==HIGH){
    Serial.println("movimiento detectado");
   digitalWrite(ledPin, HIGH);  // si val es igual a HIGH(alto) el pin 8 se pone en Alto
  }else{
    digitalWrite(ledPin,LOW);
    Serial.println("sin movimiento");
  }
  delay(250);
}



Maqueta sensores

Para hacer los sensores de ventana, la alarma y el motor de la cerradura de la puerta, estoy realizando una maqueta en una placa, para saber que esta ocurriendo en el Sistema de Alarma, cuando se active uno de los sensores de ventana se encenderá un led indicando la apertura de esa ventana, lo mismo ocurrirá cuando se active el altavoz de aviso de intruso, e incluso con la apertura de la cerradura. He realizado un primer esquema en Ares proteus y quedara mas o menos así.

PCB(Ares) de la maqueta
3D de la maqueta(Ares)
La realización de la placa se a realizado por método fotográfico, en la fotoploter y con foto insolación. Incorporo los pasos realizados:



Primer paso: Realizar el Negativo de la placa
Segundo paso: Ponerle el papel foto sensible a la placa de cobre
Tercer paso: Alinear el negativo y los agujeros de la placa
Cuarto paso: Foto insolación
Quinto paso: Revelador
Sexto paso: Horno para endurecer la placa
Séptimo paso: Cloruro Férrico
Octavo paso: Quita Film
A continuación para la mascara de soldadura se repite el proceso encima de las pistas, a excepción de que después del revelado no se introduce en el ácido, ni en el quita Film, dejando los huecos para poder soldar los componentes.





Depuración de programas


Driver Motor

Puesto que nuestro sistema de Alarma sera controlado principalmente por el RFID, al desactivar la alarma también nos abrirá el cerrojo de la puerta, por lo que a nuestro sistema le vamos a incorpora un Driver para controlar un motor.
El proceso de creación va a ser el mismo que para la placa de la maqueta, por foto insolación.

Primero realizamos el PCB de la placa, la cual esta compuesta por una fuente conmutada de alimentación de 12v para alimentar el Driver(TC4422,Microchip),y el driver ataca a el transistor IRF540,ST que habilita la puesta en marcha del motor.

PCB(Ares) del Controlador Motor

Driver Motor
Serigrafia

Driver motor montado


Sensores Ventana

Tras realizar el driver del motor, he terminado de realizar el programa del sensor de las ventanas, depurandolo con la conexión a la maqueta. El código que pongo a continuación es tan solo el programa de la detección de ventana abierta o cerrada de la habitación y el salón, y el vídeo que pondré a continuación del código, es la unión de los programas en el principal del sistema de seguridad. 


int salon=4,habitacion=5,ledsalon=6,ledhabitacion=7,rfid=8;
int val=0,valsalon=0,valhabitacion=0;
void setup()
{
  pinMode(salon,INPUT);
  pinMode(habitacion,INPUT);
  pinMode(ledhabitacion,OUTPUT);
  pinMode(ledsalon,OUTPUT);
  pinMode(rfid,INPUT);
  Serial.begin(9600);
  digitalWrite(ledhabitacion,HIGH);
  digitalWrite(ledsalon,HIGH);
  Serial.println("init...");
}
void loop(){
  val=digitalRead(rfid);
  digitalWrite(ledhabitacion,HIGH);
  digitalWrite(ledsalon,HIGH);
  if(val==LOW){ //para aclararme simulo el estado de conexion o desconexion de la alarma
    Serial.println("alarma activada");
    digitalWrite(ledsalon,LOW);
    digitalWrite(ledhabitacion,LOW);
    valhabitacion=digitalRead(habitacion);
    valsalon=digitalRead(salon);
    if(valhabitacion == HIGH){
      Serial.println("Ventana habitacion abierta");
    }else{
      Serial.println("Ventana habitacion cerrada");
    }
    if(valsalon==HIGH){
      Serial.println("Ventana salon abierta");
    }else{
      Serial.println("Ventana salon cerrada");
    }      
    delay(500);
  }
}







Comunicacion Arduino Mega y Arduino Uno

Tras tenerlo casi todo listo con el Arduino Mega, he realizado una comunicación con un Arduino Uno, el cual cuando recibe un comando del Arduino Mega este actúa en consecuencia.
En mi caso he incorporado una pantalla LCD de 16x2 por comunicación I2C, en la cual recordar hay que añadirle una resistencia de fin de bus en cada hilo de comunicación, este bus esta compuesto por 2 hilos, el SDA y el SCL, además de VCC y GND.

El Arduino Mega procesa toda la información que le llega de los sensores(sensor de movimiento, sensores de ventana y RFID) y actúa sobre los actuadores(altavoz de alarma y motor de cerradura). Esa información también se la paso al Arduino Uno haciendo este que se muestre por la pantalla LCD el estado de la Alarma.




Datos Sensores 

Tras tener el Sistema completo, he realizado un seguimiento de los estados de la alarma, guardando así el estado de los sensores con la fecha y hora del momento en el que se produjo. Guardando así también la fecha y hora de activación o desactivación de la alarma y que persona fue la que dio esas ordenes. El sistema de guardado se realiza a través de la programación con Processing leyendo del puerto serie los datos que manda el arduino y almacenándolos en un archivo txt.

Eficiencia Energética

En este proyecto hemos pensado también en la eficiencia energética, como el control de nuestro motor para abrir la cerradura, puesto que cuando pasas la tarjeta por primera vez que te identifica tras desactivar la alarma, el motor se pone en marcha, pero si vuelves a pasar la tarjeta en repetidas ocasiones, el motor no se volverá a encender.
Nuestra maqueta utiliza leds de bajo consumo.
El altavoz esta programado para un sonido intermitente, y que así no se caliente y no consuma mas.
Fuente de alimentación con un 88% de alta eficiencia.

Diagrama de estados

Tras realizar el proyecto he realizado un diagrama de estados para ver los estados en los que se encuentra el sistema de seguridad.




Vídeo del proyecto terminado

 



Gantt Proyect



5 comentarios:

  1. ¿Se podrá consultar el estado de la alarma por Internet?

    ResponderEliminar
  2. Hola, oye que librerias usaste para la comunicacion i2c con el lcd , por que mira que he buscado como loco y no encuentro dar con el programa adecuado , tutorial o libreria que funcione ese modulo (y me compre el mismo al que tomaste foto ). Me podrias ayudar

    ResponderEliminar
  3. mi pana gracias x este gran aporte, quiero usar un modulo de GSM en me envie un msj de texto, dando las alertas de cada evento ocurrido. Gracias.

    ResponderEliminar