Header Ads

Password Based Door Lock System Using Arduino and Keypad

Overview


In this video, we will learn how to make a simple password based door lock system using Arduino, servo motor and 3*4 matrix keypad.

You can watch the following video below:-

Components Required

The required components list for this project given below:-
  • Arduino Uno
  • 4*3 Keypad
  • 16*2 LCD Display
  • 10K Potentiometer
  • 220-ohm Resistor
  • Servomotor 
  • Vero Board
  • Card Board
  • Some Jumper Wire

Pinout

Circuit Schematic

The circuit diagram of the door lock system using Arduino and keypad has been given below:-
Fig: Door Lock System Using Arduino and Keypad

    Circuit Description

    Source Code

    The source code is given below:-
     #include <Keypad.h>  
     #include <LiquidCrystal.h>  
     #include <Servo.h>  
       
     Servo myservo;  
       
     LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);  
       
     #define Password_Lenght 7 // Give enough room for six chars + NULL char  
       
     int pos = 0;  // variable to store the servo position  
       
     char Data[Password_Lenght]; // 6 is the number of chars it can hold + the null char = 7  
     char Master[Password_Lenght] = "123456";  
     byte data_count = 0, master_count = 0;  
     bool Pass_is_good;  
     char customKey;  
       
     const byte ROWS = 4;  
     const byte COLS = 3;  
     char keys[ROWS][COLS] = {  
      {'1', '2', '3'},  
      {'4', '5', '6'},  
      {'7', '8', '9'},  
      {'*', '0', '#'}  
     };  
     bool door = true;  
       
     byte rowPins[ROWS] = {1, 2, 3, 4}; //connect to the row pinouts of the keypad  
     byte colPins[COLS] = {5, 6, 7}; //connect to the column pinouts of the keypad  
       
     Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad  
       
     void setup()  
     {  
      myservo.attach(9);  
      ServoClose();  
      lcd.begin(16, 2);  
      lcd.print(" Arduino Door");  
      lcd.setCursor(0, 1);  
      lcd.print("--Look project--");  
      delay(3000);  
      lcd.clear();  
       
     }  
       
     void loop()  
     {  
      if (door == 0)  
      {  
       customKey = customKeypad.getKey();  
       
       if (customKey == '#')  
       
       {  
        lcd.clear();  
        ServoClose();  
        lcd.print(" Door is close");  
        delay(3000);  
        door = 1;  
       }  
      }  
       
      else Open();  
     }  
       
     void clearData()  
     {  
      while (data_count != 0)  
      { // This can be used for any array size,  
       Data[data_count--] = 0; //clear array for new data  
      }  
      return;  
     }  
       
     void ServoOpen()  
     {  
      for (pos = 180; pos >= 0; pos -= 5) { // goes from 0 degrees to 180 degrees  
       // in steps of 1 degree  
       myservo.write(pos);       // tell servo to go to position in variable 'pos'  
       delay(15);            // waits 15ms for the servo to reach the position  
      }  
     }  
       
     void ServoClose()  
     {  
      for (pos = 0; pos <= 180; pos += 5) { // goes from 180 degrees to 0 degrees  
       myservo.write(pos);       // tell servo to go to position in variable 'pos'  
       delay(15);            // waits 15ms for the servo to reach the position  
      }  
     }  
       
     void Open()  
     {  
      lcd.setCursor(0, 0);  
      lcd.print(" Enter Password");  
        
      customKey = customKeypad.getKey();  
      if (customKey) // makes sure a key is actually pressed, equal to (customKey != NO_KEY)  
      {  
       Data[data_count] = customKey; // store char into data array  
       lcd.setCursor(data_count, 1); // move cursor to show each new char  
       lcd.print(Data[data_count]); // print char at said cursor  
       data_count++; // increment data array by 1 to store new char, also keep track of the number of chars entered  
      }  
       
      if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master  
      {  
       if (!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)  
       {  
        lcd.clear();  
        ServoOpen();  
        lcd.print(" Door is Open");  
        door = 0;  
       }  
       else  
       {  
        lcd.clear();  
        lcd.print(" Wrong Password");  
        delay(1000);  
        door = 1;  
       }  
       clearData();  
      }  
     }  
    



    No comments

    Powered by Blogger.