Sistema de seguridad

OLYMPUS DIGITAL CAMERA
Pantalla de Inicio
Tomado del proyecto de Jun Peng   Arduino Home Security System

En este proyecto se va a utilizar la tarjeta MEGA 2560, así que hay que considerar cambiar el IDE para que no cause errores en la compilación.

Se van  a utilizar los siguientes periféricos:

Sensor de movimiento

HC-SR501 Human Sensor Module Pyroelectric
Sensor de Movimiento HC-SR501

Modulo de fecha y hora

Modulo DST1307
Modulo DST1307 Control de tiempo y fecha.

Pantalla de cristal líquido (LCD

Proyecto Seguridad
Proyecto Seguridad

Teclado matricial 4X4

TECLADO

 

Relevador para motor AC

SainSmart 4-Channel Relay Module SainSmart 4-Channel Relay Module1

Revisando el codigo…..

/*Titulo:        Sistema de seguridadAutor:         Jorge Luis HerreraFecha Inicio:  15 Jun 2015Fecha Term: Version:       A*/

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Keypad.h>    
#include <Password.h> 
#include <Servo.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x3F,20,4);

//Servo
Servo myservo;        // create servo object to control a servo           
int pos = 0;         // variable to store the servo position 


//Real Time Clock
RTC_DS1307 RTC; 

//Password
int passwd_pos = 12;
Password password = Password( "1234" );

const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns

char keys[ROWS][COLS] = { // Define the Keymap
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}

};

byte rowPins[ROWS] = {2,3,4,5};     //connect to the row pinouts of the keypad
byte colPins[COLS] = {6,7,8,9};     //connect to the column pinouts of the keypad

// Create the Keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

//constants for LEDs, inputs and outputs


int ledDelay = 50;
int redPin = 22;
int greenPin = 24;
int bluePin = 26;

// LEDs
int greenLED = 28;
int redLED = 30;

// PIR pins
//int speakerPin = 32;
int pirPin = 32;
int relay = 34;


// Inicializando la alarma
int alarmStatus = 0;
int zone = 0;
int alarmActive = 0;
int delayPeriod = 100;

void setup(){
  
  Serial.begin(9600);
  lcd.backlight();
  lcd.init();
  
  Wire.begin();
  RTC.begin();
  RTC.adjust(DateTime(__DATE__, __TIME__));
  
  myservo.attach(36);  // attaches the servo on pin 36 to the servo object 
  
  displayCodeEntryScreen();
  
  
  //setup and turn off both LEDs
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  
  // enciende apaga LEDs
  pinMode(redLED, OUTPUT);
  pinMode(greenLED, OUTPUT);
  //pinMode(speakerPin, OUTPUT);
  
  //relevadores para motor y sensor pasivo
  pinMode(relay, OUTPUT);  
  pinMode(pirPin, INPUT);  
  
  //INICIALIZA LED'S
  digitalWrite(redLED, HIGH);  //Sistema desactivado
  digitalWrite(greenLED, LOW); //Sistema activado
  
  //digitalWrite(speakerPin, LOW);
  digitalWrite(relay, HIGH); // motor externo conectado a relevador 120V
  
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad  
  
  myservo.write(pos);
}

void loop(){
  //Desplegar Fecha y Hora
  DateTime now = RTC.now();
  //FECHA
  //Dia
  lcd.setCursor(0,0);
  lcd.print(now.day(), DEC);
  lcd.print('/'); 

  //Mes
  lcd.print(now.month(), DEC);
  lcd.print('/');  

  //Anio
  lcd.print(now.year(), DEC);
  lcd.print(' ');

  //Hora
  lcd.setCursor(10,0);
  lcd.print(now.hour(), DEC);
  lcd.print(':');
  //lcd.setCursor(13,1);
  lcd.print(now.minute(), DEC);
  lcd.print(':');
  lcd.print(now.second(), DEC);
  //delay(1000);
  
  
  keypad.getKey();

  //Serial.println(digitalRead(reedPin2));
  Serial.print(digitalRead(pirPin));
  Serial.print(digitalRead(relay));
  Serial.print(alarmActive);
  Serial.println(alarmStatus);
  delay(100);

  if (alarmActive == 1){ 

    if (digitalRead(pirPin) == HIGH)
    {
      zone = 1;
      alarmTriggered();
    }
  }
}

//Functions
//take care of some special events

void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
  case PRESSED:
    if (passwd_pos - 12 >= 5) { 
      return ;
    }
    lcd.setCursor((passwd_pos ++),1);
    switch (eKey){
    case '*':                 //* START to validate password 
      passwd_pos  = 12;
      checkPassword(); 
      break;
    case '#':                 //# STOP to reset password attempt
      passwd_pos = 12;
      password.reset(); 
      
      //lcd.clear();
      // TODO: clear the screen output 
      break;
    default: 
      password.append(eKey);
      lcd.print("*");
    }
  }
}


void alarmTriggered(){
  //int expected_pos;
  //int incr;
  //digitalWrite(speakerPin, HIGH);
  digitalWrite(relay, LOW);
  //digitalWrite(relay3, LOW);
  digitalWrite(redLED, HIGH);
  digitalWrite(greenLED, LOW);
  password.reset();
  alarmStatus = 1;
  alarmActive = 0;
   
  if (zone = 1){
    lcd.clear();
    lcd.setCursor(0,2);
    lcd.print("Movimiento en Garage");
    myservo.write(120);
    StrokeLight();
  }
} 

void StrokeLight(){  //Stroke LED Lights
    for (int i = 0; i < 20; i++)
    {
    digitalWrite(redPin, HIGH);        // turn the red light on
    delay(ledDelay); // wait 50 ms
    digitalWrite(redPin, LOW);         // turn the red light off
    delay(ledDelay); // wait 50 ms
    digitalWrite(redPin, HIGH);        // turn the red light on
    delay(ledDelay); // wait 50 ms
    digitalWrite(redPin, LOW);         // turn the red light off
    delay(ledDelay); // wait 50 ms
    digitalWrite(redPin, HIGH);        // turn the red light on
    delay(ledDelay); // wait 50 ms
    digitalWrite(redPin, LOW);         // turn the red light off
    delay(ledDelay); // wait 50 ms
    delay(10); // delay midpoint by 100ms
    digitalWrite(bluePin, HIGH);       // turn the blue light on
    delay(ledDelay); // wait 50 ms
    digitalWrite(bluePin, LOW);        // turn the blue light off
    delay(ledDelay); // wait 50 ms
    digitalWrite(bluePin, HIGH);       // turn the blue light on
    delay(ledDelay); // wait 50 ms
    digitalWrite(bluePin, LOW);        // turn the blue light off
    delay(ledDelay); // wait 50 ms
    digitalWrite(bluePin, HIGH);       // turn the blue light on
    delay(ledDelay); // wait 50 ms
    digitalWrite(bluePin, LOW);        // turn the blue light off
    delay(ledDelay); // wait 50 ms
    }
    delay (300);
}    

void checkPassword(){                  // To check if PIN is corrected, if not, retry!
  if (password.evaluate())
  {  
    if(alarmActive == 0 && alarmStatus == 0)
    {
      activate();
    } 
    else if( alarmActive == 0 && alarmStatus == 1)
    {  
      deactivate();
    }
  } 
  else {
    invalidCode();
  }
}  

void invalidCode()    // display meaasge when a invalid is entered
{
  password.reset();
  lcd.clear();
  lcd.setCursor(1,0);
  lcd.print("INCORRECTO!");
  lcd.setCursor(1,2);
  lcd.print("INTENTE NUEVAMENTE!");
  digitalWrite(greenLED, LOW);
  digitalWrite(redLED, HIGH);
  delay(2000);
  digitalWrite(redLED, LOW);
  delay(1000);

  displayCodeEntryScreen();
}

void activate()      // Activate the system if correct PIN entered and display message on the screen
{
  //if((digitalRead(reedPin1) == HIGH) && (digitalRead(reedPin2) == HIGH)){
    digitalWrite(redLED, HIGH);
    digitalWrite(greenLED, LOW);
    delay(3000);
    digitalWrite(greenLED, HIGH);
    digitalWrite(redLED,LOW);
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print("Sistema Activado!"); 
    alarmActive = 1;
    password.reset();

    delay(200);

  //}
  //else{

    //deactivate();   // if PIN not corrected, run "deactivate" loop

  //}

}

void deactivate()
{

  //digitalWrite(camera, LOW);
  
  digitalWrite(redLED, HIGH);
  digitalWrite(greenLED, LOW);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Sistema desactivado!");
  //digitalWrite(speakerPin, LOW);
  digitalWrite(pirPin, LOW);
  
  alarmStatus = 0;
  alarmActive = 0;
  password.reset();
  myservo.write(pos);
  delay(500);
  //digitalWrite(relay2, HIGH);
  digitalWrite(relay, HIGH);

  displayCodeEntryScreen();

}

void displayCodeEntryScreen()    // Dispalying start screen for users to enter PIN
{

  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("Enter PIN:");
  lcd.setCursor(0,2);
  lcd.print("Home Security System");
  lcd.setCursor(0,3);
  lcd.print("By Jorge Herrera.");

}

 

 

 

Bandera Suiza (Ejemplo de Inkscape)

bandera suiza