DFD and Code

Here is the process flow of the Xtreme Defender

DFD xtreme defender process flow

 

And here is the full code of this project (arduino sketch)

/*
 * Copyright (C) 2016 Samarth Gupta
 * Project Title: Xtreme Defender - Home Security System
 * Author: Samarth Gupta
 * Started Date: 15/4/16
 * Project Sponsored by - www.samteck.net
 * Version: 1.0
 */

/////////////////////////////////////////////////////////////////////////
#include<LiquidCrystal.h>
#include<Wire.h>
#include<Password.h>
#include<Keypad.h>
#include<Servo.h>
#include "RTClib.h"

//-----Declaring Global Variables-----//

//Keypad
Password password = Password("1234"); //Delared the password for system

const byte ROWS = 4; //Delared the number of rows in keypad
const byte COLS = 4; //Delared the number of colums in keypad

char keys[ROWS][COLS] = { {'1','2','3','A'},  //telling the arduino about the keys of keypad
                          {'4','5','6','B'},
                          {'7','8','9','C'},
                          {'*','0','#','D'} };

byte rowPins[ROWS] = {46,47,48,49}; //Rows pins connection to Arduino
byte colPins[COLS] = {50,51,52,53}; //Columns pins connection to Arduino

Keypad keypad = Keypad(makeKeymap(keys),rowPins,colPins,ROWS,COLS); //Making the keypad object

//Servo
Servo myservo;
int pos = 90; //initial position of servo at Right angle

//Real time Clock
RTC_DS1307 RTC;

//LCD Display
LiquidCrystal lcd(7,8,9,10,11,12); //Assigning the various pins of LCD to Arduino
int passwd_pos = 15;  //password position on the LCD

//Notifications LED
int redPin = 29;  //connect red pin of LED to pin no. 29 on arduino
int bluePin = 31; //connect blue pin of LED to pin no. 31 on arduino
int ledDelay = 50;//delay the led time by 50ms

//Staus Light
int greenLED = 37;  //connect green LED to pin no. 37 on arduino
int redLED = 38;    //connect red LED to pin no. 38 on arduino

//PIR Sensors
int pirPin1 = 39; //connect pir 1 to pin no 39 in arduino
int pirPin2 = 34; //connect pir 2 to pin no 34 in arduino

//Door Switches
int door1 = 41; //door 1 switch is connected to pin no 41 on arduino
int door2 = 42; //door 2 switch is connected to pin no 42 on arduino

//Speaker
int speakerPin = 35;  //alaram speaker is connected to pin no 35;

//Blue anbient light Relay connection
int relay = 4;  //Connect pin 4 of arduino to realy board

//Other variables
int alarmStatus = 0;  //setting these variables to 0
int zone = 0;
int alarmActive = 0;

//-----Beginning setup Function-----//

void setup(){
  Serial.begin(9600); //send data to computer via serial communication at 9600bps
  lcd.begin(20, 4);   //Telling the size of the LCD by samteck
  Wire.begin();       //Setting up I2C communication with Arduino
  RTC.begin();        //Start getting time form RTC module
  RTC.adjust(DateTime(__DATE__,__TIME__));//Set the time on RTC to compile time

  myservo.attach(2);  // attaches the servo on pin 2 to the servo object
  myservo.write(pos);

  //setting up pin  modes of LED Lights
  pinMode(redPin,OUTPUT);
  pinMode(bluePin,OUTPUT);
  pinMode(redLED,OUTPUT);
  pinMode(greenLED,OUTPUT);

  pinMode(speakerPin,OUTPUT);

  pinMode(relay,OUTPUT);

  //setting pinmode of sensors and switches
  pinMode(pirPin1,INPUT);  //Bedroom 1
  pinMode(pirPin2,INPUT);  //Garage
  pinMode(door1,INPUT); //Front door
  pinMode(door2,INPUT); //Back door

  digitalWrite(redLED,LOW);
  digitalWrite(greenLED,HIGH);
  digitalWrite(speakerPin,LOW);

  digitalWrite(relay,HIGH);

  digitalWrite(pirPin1,LOW);
  digitalWrite(pirPin2,LOW);

  calibration();    //call the calibration function to PIR initialization
  
  displayCodeEntryScreen(); //display the starting screen

  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
  }

//-----Beginning loop Function-----//

void loop(){
  DateTime now = RTC.now();   //take current time and date from RTC module

  digitalWrite(redPin,HIGH);
  digitalWrite(bluePin,HIGH);

  //Setting the date and time
  lcd.setCursor(0,1);
  lcd.print(now.day(),DEC);
  lcd.print('/');
  lcd.print(now.month(),DEC);
  lcd.print('/');
  lcd.print(now.year(),DEC);
  lcd.print(' ');

  lcd.setCursor(13,1);
  lcd.print(now.hour(),DEC);
  lcd.print(':');
  lcd.setCursor(16,1);
  lcd.print(now.minute(),DEC);

  keypad.getKey();    //get key press from keypad

  if(alarmActive==1){
    if(digitalRead(pirPin1)==HIGH)
    {
      zone=0;
      alarmTriggered();
    }
    if(digitalRead(door2)==LOW)
    {
      zone=1;
      alarmTriggered();
    }
    if(digitalRead(door1)==LOW)
    {
      zone=2;
      alarmTriggered();
    }
    if(digitalRead(pirPin2)==HIGH)
    {
      zone=3;
      alarmTriggered();
    }
  }
}
  
//////////////  Here comes Functions  ////////////////

void keypadEvent(KeypadEvent eKey){
  switch(keypad.getState()){
      case PRESSED:
        if(passwd_pos - 15 >=5){
            return;
        }
        lcd.setCursor((passwd_pos++),0);
        switch(eKey){
          case '#':
            passwd_pos=15;
            checkPassword();
            break;
            
          case '*':
            password.reset();
            passwd_pos=15;
            break;

           default:
            password.append(eKey);
            lcd.print("*");
         }  
  }
}

void checkPassword(){     //to check if correct pin is entered or not
  if(password.evaluate()){
    if(alarmActive==0 && alarmStatus==0){
      activate();
      }
    else if(alarmActive==1 || alarmStatus==1){
      deactivate();
      }  
  }
    else{
      invalidCode();
      }
}

void activate(){ //to activate the system if correct pin is entered
  if((digitalRead(door1)==HIGH) && (digitalRead(door2)==HIGH)){
    digitalWrite(redLED,HIGH);
    digitalWrite(greenLED,LOW);
    digitalWrite(2,HIGH);
    lcd.setCursor(0,0);
    lcd.print("SYSTEM ACTIVE !!!!!");
    alarmActive=1;
    password.reset();
    delay(2000);
    }
   else{
    if(digitalRead(door1)==LOW && digitalRead(door2)==LOW){
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(" BOTH Door Open ");
    lcd.setCursor(0,2);
    lcd.print("Close & Reactivate");
    }
    else if(digitalRead(door1)==LOW){
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(" FRONT Door Open ");
    lcd.setCursor(0,2);
    lcd.print("Close & Reactivate");
    }
    else{
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(" BACK Door Open ");
    lcd.setCursor(0,2);
    lcd.print("Close & Reactivate");
    }
    delay(2000);
      deactivate();   //if door are open then system will not activate
    } 
}

void deactivate(){    // to deacivate the system
  alarmStatus=0;
  digitalWrite(redLED,LOW);
  digitalWrite(greenLED,HIGH);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(" SYSTEM DEACTIVATED!");
  digitalWrite(speakerPin,LOW);
  alarmActive=0;
  password.reset();
  delay(5000);
  digitalWrite(relay,HIGH);

  displayCodeEntryScreen();   //basically restarts the system
  }

void displayCodeEntryScreen(){    //show up the first screen on the boot
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Enter PIN:");
  lcd.setCursor(0,2);
  lcd.print("Home Security System");
  lcd.setCursor(0,3);
  lcd.print("By Samarth,-SamTeck-");
}

void invalidCode(){  //display when invalid code is entered
  password.reset();
  lcd.clear();
  lcd.setCursor(1,0);
  lcd.print("INVALID CODE! LOL!");
  lcd.setCursor(5,2);
  lcd.print("TRY AGAIN!");
  digitalWrite(greenLED,LOW);
  digitalWrite(redLED,HIGH);
  delay(2000);
  digitalWrite(redLED,LOW);
  delay(1000);
  displayCodeEntryScreen();
}

void alarmTriggered(){    //this function is called whenever input is received on any of the sensor
  int expected_pos;
  int incr;
  digitalWrite(speakerPin,HIGH);
  digitalWrite(relay,LOW);
  digitalWrite(redPin,HIGH);
  digitalWrite(bluePin,LOW);

  password.reset();
  alarmStatus=1;
  lcd.clear();
  lcd.setCursor(0,2);
  lcd.print("  SYSTEM TRIGGERED  ");
  lcd.setCursor(0,4);
  if(zone==0)
  {
    expected_pos=95;
    lcd.print("Motion in Bedroom 1 ");
    delay(1000);  
  }
  else if(zone==1)
  {
    expected_pos=60;
    lcd.print("  Back Door Open");
    delay(1000);  
  }
  else if(zone==2)
  {
    expected_pos=70;
    lcd.print("  Front Door Open");
    delay(1000);  
  }
  else if(zone==3)
  {
    expected_pos=10;
    lcd.print(" Motion in Garage ");
    delay(1000);  
  }

  //setting up position for Servo motor

  if(expected_pos > pos)
    incr=1;
  else
    incr=-1;

  for(pos=pos; pos != expected_pos; pos += incr)
  {
    myservo.write(pos);
    delay(5);  
  }

  StrokeLight();
}

void StrokeLight(){                    //Stroke LED Lights
    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
    }          

void calibration(){
  int i=0;
  lcd.clear();
  lcd.setCursor(5,0);
  lcd.print("WELCOME TO");
  lcd.setCursor(0,1);
  lcd.print("Xtreme Defender 666");
  lcd.setCursor(0,2);
  lcd.print(" A Fully Automated ");
  lcd.setCursor(0,3);
  lcd.print("Home Security System");  
  delay(5000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("LOADING BOOTSTRAP");
  lcd.setCursor(0,1);
  for(i=0;i<20;i++){
      lcd.print(".");
      delay(150);
  }
  lcd.setCursor(0,2);
  lcd.print("LOADING NCC. FILES");
  lcd.setCursor(0,3);
  for(i=0;i<20;i++){
      lcd.print(".");
      delay(100);
  }
  delay(1000);
  
  for(i=0;i<=100;i++){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Initializing .......");
    lcd.setCursor(0,1);
    lcd.print("PIR Sensors");
    lcd.setCursor(0,2);
    lcd.print(i);
    lcd.print("%");
    delay(50);
  }
  lcd.setCursor(8,2);
  lcd.print("--OK DONE--");
  delay(500);
  lcd.setCursor(0,3);
  lcd.print("LOADING START SCREEN");
  delay(1500);
}

 

Glimpse of the Project

Here are some interesting photos of Xtreme Defender


The Base is ready

house looking strucyre


Added LCD and Keypad

lcd-keypad


Making some connections and deploying RTC

making connections and rtc


Added LED strips connected to a Relay Module (12V) to add extra embellishment to the house

led strips installed


With all the electronics diffusing into each other, Have a look

wires scattered in the project


Now everything is done time to decorate the house

xtreme defender in light xtreme defender in dark

This is it guys, in the coming posts, we will be discussing technicalities of the project. Cheers

Xtreme Defender – Setting up the Structure for the Project

So, I started my project with planning and setting up the base for my home (which will be protected eventually). The main motto was to use the recyclable material as much possible. Also, I wanted the structure to be super strong which can bear the periodic wear and tear which will occur in making the Project. Moreover, the House should at least look similar to the general concept of a modern house.

Got great help from a friend studying Architecture (shoutout for) – Tusshar Bhan

So, I began with an Amazon Box (something like below)

amazon box


I did some planning for the structure of project with resources on the internet and knowledge of my own. Afterwards, I came up with the basic layout of the house and start cutting the box into suitable pieces with proper dimensions.

cutting the box into peices


Now, the next thing was to keep in mind the embellishment of the structure so that it is soothing to the eyes. Therefore I wrapped it with the white sheets which will continue to act a wallpaper for the walls.

structure covered with white sheets


Afterwards, the walls were ready and the necessary cut was made for the doors and windows. Plus I also made some cuts at the intersection of the walls to give an extra Stability to the overall structure.

walls made and structure blueprint


Now, the walls were erected and random cardboard board pieces were transformed into an (at least) house looking structure.

house looking structure

So, guys, this was the first step towards the making of the Xtreme-Defender, Home Security System.

Do check out the next section of the project.