PASSWORD DOOR LOCK PROJECT
In this project you will learn how to make door lock system using Arduino Uno, Keypad Module, Servo Motor and LCD Display in wokwi simulation.
Password door lock codes:
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
//Servo Motor
Servo myservo;
int pos=0;
// LCD Part
LiquidCrystal_I2C lcd(0x27,16,2);
// Keypad Module Part
const byte ROWS = 4;
const byte COLS = 4;
char Keys[ROWS][COLS]=
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPin[ROWS] = {2,3,4,5};
byte colsPin[COLS] = {6,7,8,9};
Keypad customKeypad = Keypad (makeKeymap(Keys),rowPin,colsPin,ROWS,COLS);
// Door Lock System Part
#define Password_Lenght 7
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;
char customKey;
bool door = true;
void setup() {
// put your setup code here, to run once:
lcd.init();
lcd.backlight();
myservo.attach(10);
}
void loop() {
// put your main code here, to run repeatedly:
if (door == 0)
{
customKey = customKeypad.getKey();
if (customKey == '#')
{
lcd.clear();
ServoClose();
lcd.print(" Door is close");
delay(3000);
door = 1;
}
}
else Open();
}
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();
}
}
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
}
}
No comments:
Post a Comment