Introduction: Arduino Lock Mechanism
This is a simple Arduino project that emulates a home security system.
It is fully simulated on Proteus though you should not expect much difference on a real environment.
You'll require:
- Proteus
- Atmel Studio
- Visual Micro for Atmel Studio
- Arduino IDE
You can just use Arduino IDE with Proteus but I prefer the complete set up to take advantage of:
- The .hex file is stored within the project folder
- Atmel Studio has compelling auto-complete features
Basically when the project loads you shall see a such a set-up
Step 1: Set-up, Code
#include
#include #include #include
int greenLed=22; int redLed=23; int servoPin=24;// Servo int piezoPin=25; char* ourCode="1234"; int currentPosition=0; Servo myservo; int pos = 0;
const byte rows=4; const byte cols=3;
char keys[rows][cols]={
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[rows]={13,10,9,8};
byte colPins[cols]={7,6,1};
Keypad keypad=Keypad(makeKeymap(keys),rowPins,colPins,rows,cols);
LiquidCrystal Lcd (12,11,5,4,3,2);void setup()
{
Lcd.begin(16,2);
myservo.attach(24);
displayCodeEntryScreen();
pinMode(piezoPin,OUTPUT);
pinMode(servoPin,OUTPUT);
pinMode(redLed,OUTPUT);
pinMode(greenLed,OUTPUT);
digitalWrite(redLed,LOW);
digitalWrite(greenLed,LOW);
}void loop() {
int l;
char key=keypad.getKey();
Lcd.setCursor(0,0);
Lcd.print(" ENTER PASSWORD ");
if(int(key)!=0){
Lcd.setCursor(4,1);
for(l=0;l<=currentPosition;++l)
{Lcd.print("*");}
if(key==ourCode[currentPosition])
{
++ currentPosition;
if(currentPosition==4)
{unlockDoor();
currentPosition=0;
}
}
else{invalidCode();
currentPosition=0;
}
}
}
void invalidCode()
{
digitalWrite(redLed,HIGH);
digitalWrite(servoPin,LOW);
digitalWrite(piezoPin,HIGH);
clearScreen();
Lcd.setCursor(0,0);
Lcd.print("ACCESS DENIED!");
Lcd.setCursor(0,1);
Lcd.print("INVALID CODE ");
delay(5000);
digitalWrite(redLed,LOW);
digitalWrite(piezoPin,LOW);displayCodeEntryScreen(); }
void turnHandle()
{
for(pos = 0; pos <= 180; pos += 1) // 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
}
for(pos = 180; pos>=0; pos-=1) // 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 unlockDoor()
{
digitalWrite(greenLed,HIGH);
clearScreen();
Lcd.setCursor(0,0);
Lcd.print(" ACCESS GRANTED ");
Lcd.setCursor(0,1);
Lcd.print(" WELCOME!! ");
digitalWrite(servoPin,HIGH);
turnHandle();
delay(500);
digitalWrite(greenLed,LOW);
digitalWrite(servoPin,LOW);
displayCodeEntryScreen();
}
void displayCodeEntryScreen()
{
clearScreen();
Lcd.setCursor(0,0);
Lcd.print(" HELLO AND ");
Lcd.setCursor(0,1);
Lcd.print(" WELCOME! ");
delay(3000);
clearScreen();
}
void clearScreen()
{
Lcd.setCursor(0,0);
Lcd.print(" ");
Lcd.setCursor(0,1);
Lcd.print(" ");
}Step 2: Welcome Screen
On a successful build the file should be stored in the following file directory eg :C:\Users\Username\Documents\Atmel Studio\6.2\ProjectFolder\ProjectName\Debug
The welcome screen is as shown...
Step 3: Password Request
Enter your password
In our Case 1234
Step 4: Access Granted
On successful entry
Step 5: Closing
After the motor moves to simulate door unlocking it will lock again and display home screen

