Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO Based Keypad Door Lock with LCD Feedback and Relay Control

View and Edit Project In Cirkit DesignerImage of Arduino UNO Based Keypad Door Lock with LCD Feedback and Relay Control

Circuit Documentation

Summary

This circuit is designed to function as a door lock system, utilizing a 4x4 membrane matrix keypad for input, an LCD I2C display for user feedback, a relay module to control a 12V solenoid lock, and an Arduino UNO as the central microcontroller. The system prompts the user to enter a password on the keypad, displays the input on the LCD, and if the correct password is entered, activates the relay to unlock the solenoid lock for a brief period.

Component List

Arduino UNO

LCD I2C Display

Relay Module 1 Channel

4X4 Membrane Matrix Keypad

12V Solenoid Lock

9V Battery

Wiring Details

Arduino UNO

LCD I2C Display

Relay Module 1 Channel

4X4 Membrane Matrix Keypad

12V Solenoid Lock

9V Battery

Documented Code

/*
 * Door Lock System using 4x4 Keypad, LCD, and Relay
 * This code reads input from a 4x4 keypad, displays it on an LCD using I2C,
 * and checks if the entered code matches a predefined password to
 * unlock the door by activating a relay. Feedback is provided on incorrect
 * entry, and blocking delays are prevented.
 * Password: 1234
 */

#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; // Connect to the column pinouts of the keypad

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

LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD address to 0x27 for a 16 chars and 2 line display

const int relayPin = 10; // Pin connected to the relay
String password = "1234";
String input = "";
unsigned long lastInteraction = 0;
const unsigned long timeout = 3000; // 3 seconds timeout for feedback

void setup() {
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, LOW); // Ensure relay is off initially
  lcd.begin(16,2);
  lcd.backlight();
  lcd.print("Enter Password:");
}

void loop() {
  char key = keypad.getKey();
  if (key) {
    lastInteraction = millis();
    if (key == '#') {
      if (input == password) {
        lcd.clear();
        lcd.print("Access Granted");
        digitalWrite(relayPin, HIGH); // Activate relay
        delay(5000); // Keep relay on for 5 seconds
        digitalWrite(relayPin, LOW); // Deactivate relay
      } else {
        lcd.clear();
        lcd.print("Access Denied");
      }
      input = "";
    } else if (key == '*') {
      input = "";
      lcd.clear();
      lcd.print("Enter Password:");
    } else {
      input += key;
      lcd.setCursor(0, 1);
      lcd.print(input);
    }
  }
  if (millis() - lastInteraction > timeout && input != "") {
    lcd.clear();
    lcd.print("Enter Password:");
    input = "";
  }
}

This code is responsible for the operation of the door lock system. It initializes the keypad and LCD, waits for user input, compares the input to a predefined password, and controls the relay to lock or unlock the door accordingly. The LCD provides feedback to the user, prompting for the password and indicating whether access is granted or denied.