Introduction: Smart Front Door
The following instructable will show how I created my smart front door system. The system works as follows:
- There's a 4-row password
- 3 Buttons are 1,2,3
- The last button is to reset the password
Reset Instructions
- Press the reset button 3 times. (Blue light flashes on)
- Input a new password, length 4 numbers.
- Press the reset button again. (Blue light flashes 3 times to confirm).
NOTE: When inputting a value lower or higher than 4 you may get a red light flashing indicating an error.
Step 1: Arduino Setup
The first step is to get all the buttons, LED's and Servo's setup in the correct order.
REQUIREMENTS
- 1 LED Red
- 1 LED Blue
- 1 Arduino Uno
- Power cable
- Wires
- 1 Servomotor
- 4 Push buttons
- 6 Resistors. (4x 10k, 2x 220 ohm).
Make sure that the wires are going into the correct pins for the next step.
Step 2: Coding
Now the main systems are ready and setup it's time to plug your Arduino into a computer.
Download the main software and open it up.
Input the following code down below, compile it, and upload it to your Arduino.
// Made by Niels Poelder
#include
// All servo's Servo lockServo; int servoState;
// All pins
const int buttonPins[] = {2, 3, 4};
int buttonStates[] = {0, 0, 0};
int lastButtonStates[] = {0, 0, 0};int arrayLength;
const int resetButtonPin = 7;
const int redLedPin = 11; const int greenLedPin = 12;
// Password String inputPassword = ""; String Password = "1232"; bool isLocked = true;
// Misc values
int resetButtonCounter = 0; int resetButtonState = 0; int lastresetButtonState = 0;
bool passChangeInEffect = false;
void setup() {
Serial.begin(9600);
arrayLength = sizeof(buttonPins) / sizeof(buttonPins[0]) - 1;
for(int btc = 0; btc <= arrayLength; btc++){
pinMode(buttonPins[btc], INPUT); //Debugging
Serial.print("Button ");
Serial.print(btc);
Serial.print(" Assigned to PIN ");
Serial.println(buttonPins[btc]);
}pinMode(redLedPin, OUTPUT); pinMode(greenLedPin, OUTPUT); pinMode(resetButtonPin, INPUT);
lockServo.attach(9);
int servoPos = map(180, 0, 180, 90, 160); lockServo.write(servoPos);
}
void loop() {
resetButtonState = digitalRead(resetButtonPin);
Serial.println(inputPassword + " INPUT"); // PASSWORD CHECKER STARfT
if(inputPassword == Password && !passChangeInEffect){
if(isLocked){
int servoPos = map(0, 0, 180, 90, 160);
lockServo.write(servoPos);
isLocked = false;
Serial.println("The lock has been opened");
}
else{
Serial.println("The lock has been closed");
int servoPos = map(180, 0, 180, 90, 170);
lockServo.write(servoPos);
isLocked = true;
}
showLight(greenLedPin, 4);
}else if(inputPassword != Password && inputPassword.length() >= 4 && !passChangeInEffect){
showLight(redLedPin, 4);
}
// PASSWORD CHECKER END
// INPUT BUTTONS START
for(int btc = 0; btc <= arrayLength; btc++){
buttonStates[btc] = digitalRead(buttonPins[btc]);
if (buttonStates[btc] != lastButtonStates[btc]){
if(buttonStates[btc] == HIGH){
inputPassword = inputPassword + (btc + 1);
if(!passChangeInEffect){
resetButtonCounter = 0;
}
}
}
lastButtonStates[btc] = buttonStates[btc];
}
// INPUT BUTTONS END // RESET BUTTON START
if(resetButtonCounter == 3 && !passChangeInEffect){
passChangeInEffect = true;
showLight(greenLedPin, 1);
}
if (resetButtonState != lastresetButtonState){
if (resetButtonState == HIGH) { if(resetButtonCounter < 3 && !passChangeInEffect){
resetButtonCounter += 1;
inputPassword = inputPassword = "";
} if(passChangeInEffect && inputPassword.length() == 4){
Password = inputPassword;
inputPassword = "";
resetButtonCounter = 0;
passChangeInEffect = false;
flashLight(greenLedPin, 3);
}
else if(passChangeInEffect && inputPassword.length() < 4){
passChangeInEffect = false;
resetButtonCounter = 0;
flashLight(redLedPin, 3);
}
}
}
lastresetButtonState = resetButtonState;
// RESET BUTTON END
}void showLight(int lightPin, int seconds){
int interval = seconds * 1000;
digitalWrite(lightPin, HIGH);
delay(interval);
inputPassword = "";
digitalWrite(lightPin, LOW);
} void flashLight(int lightPin, int count){
int interval = 200;
inputPassword = "";
for(int num = 1; num <= count; num++){
delay(interval);
digitalWrite(lightPin, HIGH);
delay(interval);
digitalWrite(lightPin, LOW);
}
}Step 3: Making the Outer Casing.
For the casing, you'll need the following things.
- A small wooden door.
- A small string.
- Drilling machine
- Glue and wood glue
- Wood
- Stone (Optional)
Preparing the door
Step 1:
Drill a hole in the door, about 1 mm.
Step 2:
Put the tiny string through the hole and tie a knot on the outside.
Step 3:
Put the rope through the Servo head. Tie a knot and make sure that the door is able to swing open and close with the rope.
Step 4:
If this is all working put a little bit of glue on the rope on the outside of the door to make sure that it'll never go loose.
Preparing the case
- Get the correct measurements of the wooden box and make sure that there's room for error.
- Make sure that you have a hole in the front door to fit the door in.
- Make sure that you make an access port on the top.
- Saw the pieces of the house.
- Glue everything together but the top.
- Put the front door in and glue the servo against the door (Make sure that the door is fully able to open and close).
Step 4: Putting Everything Together.
Now it's time to put everything together. Make sure that there's a correct amount of height for your wires and buttons to make it through the top of the casing. NOTE: You may want to apply glue to the breadboard/print plate to make sure it's fully stuck.
- Drill a small hole in the side for the Arduino cable.
- Put in the Arduino.
- Put in the breadboard/print plate.
- Wire everything up.
- Check if everything is working
- Glue it all together when possible
- You're Finished!

