Keypad door lock with Bluetooth and Android App
The scheamtic is the same as in the other example. The only thing that is different is that we've connected this HC-05 bluetooth module to our Tx and Rx pins of the arduino which are pin 1 and 0. Remember to connect the UART pins cruced. That means that the Rx pin from the module goes to the Tx pin of the arduino and viceversa.
Just mount this new schematic and upload the next code. The system will work in the same way but now whenever the app button is pressed the door will open or close. Is like the App is the key to this door. You have to download the next app and upload it to your smartphone and install it. The app will send a "c" when close and a "o" when open. In the arduino code we receive that and move the servo motor.
You can download the
Install the app. Open bluetooth setting on your smartphone. Start the Arduino with the bluetooth module connected. Search for new devices on your phone. Connect using 0000 or 1234 password. Now open the app and connect to the new devie. Pres the lock to open or close the door. The next code is the one for the bluetooth connetion as well.
You can download the
To install it we just go to Sketch -> Include library and we open the .zip file that we've just downloaded.
/*Thanks. Remember to visit my Youtube channel
I've used a i2c LCD screen module and 9g servo motor.
*/
//LCD config
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,20,4);
#include <Servo.h>
#include <Keypad.h>
//Variables
int mot_min = 90; //min servo angle (set yours)
int mot_max = 180; //Max servo angle (set yours)
int character = 0;
int activated =0;
char Received = 'c';
char Str[16] = {' ', ' ', ' ', ' ', ' ', ' ', '-', '*', '*', '*', ' ', ' ', ' ', ' ', ' ', ' '};
//Pins
Servo myservo;
int buzzer=11; //pin for the buzzer beep
int external = 12; //pin to inside open
int internal = 13; //pin to inside close
//Keypad config
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','4','7','*'},
{'2','5','8','0'},
{'3','6','9','#'},
{'A','B','C','D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
myservo.attach(10); //attach the servo to pin D10
pinMode(buzzer,OUTPUT);
pinMode(external,INPUT);
pinMode(internal,INPUT);
//Init the screen and print the first text
lcd.init();
lcd.backlight();
lcd.clear();
lcd.print(" PASSWORD");
lcd.setCursor(0,1);
lcd.print(" -*** ");
//put the servo in the close position first
myservo.write(mot_min);
}
void loop(){
///////////////Android OPEN/CLOSE/////////
if(Serial.available()>0)
{
char Received = Serial.read();
if (Received == 'c')
{
myservo.write(mot_min);
activated = 0;
character=0;
Str[6]= '-';
Str[7]= '*';
Str[8]= '*';
Str[9]= '*';
Str[10]= ' ';
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" PASSWORD");
lcd.setCursor(0,1);
lcd.print(Str);
}
if (Received == 'o')
{
myservo.write(mot_max);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ANDROID OPEN");
activated = 2;
analogWrite(buzzer,240);
delay(250);
analogWrite(buzzer,200);
delay(250);
analogWrite(buzzer,180);
delay(250);
analogWrite(buzzer,250);
delay(250);
analogWrite(buzzer,LOW);
lcd.clear();
lcd.setCursor(4,0);
lcd.print("WELLCOME");
lcd.setCursor(2,1);
lcd.print("ELECTRONOOBS");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("DOOR OPEN");
lcd.setCursor(2,1);
lcd.print("ELECTRONOOBS");
delay(500);
}
}
///////////////EMERGENCY OPEN/CLOSE/////////
if (digitalRead(external))
{
myservo.write(mot_max);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("INSIDE OPEN");
activated = 2;
analogWrite(buzzer,240);
delay(250);
analogWrite(buzzer,200);
delay(250);
analogWrite(buzzer,180);
delay(250);
analogWrite(buzzer,250);
delay(250);
analogWrite(buzzer,LOW);
lcd.clear();
lcd.setCursor(4,0);
lcd.print("WELLCOME");
lcd.setCursor(2,1);
lcd.print("ELECTRONOOBS");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("DOOR OPEN");
lcd.setCursor(2,1);
lcd.print("ELECTRONOOBS");
delay(500);
}
if (digitalRead(internal))
{
myservo.write(mot_min);
activated = 0;
character=0;
Str[6]= '-';
Str[7]= '*';
Str[8]= '*';
Str[9]= '*';
Str[10]= ' ';
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" PASSWORD");
lcd.setCursor(0,1);
lcd.print(Str);
}
///////////////KEYPAD OPEN/CLOSE////////////
char customKey = customKeypad.getKey(); //this function reads the presed key
if (customKey){
analogWrite(buzzer,200);
if (character ==0)
{
Serial.println(customKey);
Str[6]= customKey;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" PASSWORD");
lcd.setCursor(0,1);
lcd.print(Str);
}
if (character ==1)
{
Serial.println(customKey);
Str[7]= customKey;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" PASSWORD");
lcd.setCursor(0,1);
lcd.print(Str);
}
if (character ==2)
{
Serial.println(customKey);
Str[8]= customKey;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" PASSWORD");
lcd.setCursor(0,1);
lcd.print(Str);
}
if (character ==3)
{
Serial.println(customKey);
Str[9]= customKey;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" PASSWORD");
lcd.setCursor(0,1);
lcd.print(Str);
}
if (character ==4)
{
Serial.println(customKey);
Str[10]= customKey;
activated=1;
}
character=character+1;
delay(100);
analogWrite(buzzer,LOW);
}
if (activated == 1)
{
/*Change your password below!!!
Change each of Str[6], Str[7], Str[8], Str[9]*/
if(Str[10]='A' && character==5 && Str[6]=='3' && Str[7]=='0' && Str[8]=='0' && Str[9]=='7' )
{
myservo.write(mot_max);
lcd.clear();
lcd.setCursor(4,0);
lcd.print("ACCEPTED");
activated = 2;
analogWrite(buzzer,240);
delay(250);
analogWrite(buzzer,200);
delay(250);
analogWrite(buzzer,180);
delay(250);
analogWrite(buzzer,250);
delay(250);
analogWrite(buzzer,LOW);
delay(1000);
lcd.clear();
lcd.setCursor(4,0);
lcd.print("WELLCOME");
delay(500);
lcd.setCursor(2,1);
lcd.print("ELECTRONOOBS");
delay(1000);
lcd.clear();
lcd.setCursor(3,0);
lcd.print("DOOR OPEN");
lcd.setCursor(2,1);
lcd.print("ELECTRONOOBS");
}
else
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("PASSWORD ERROR");
lcd.setCursor(3,1);
lcd.print("TRY AGAIN");
analogWrite(buzzer,150);
delay(3000);
analogWrite(buzzer,LOW);
character=0;
Str[6]= '-';
Str[7]= '*';
Str[8]= '*';
Str[9]= '*';
Str[10]= ' ';
activated = 0;
lcd.clear();
lcd.setCursor(4,0);
lcd.print("PASSWORD");
lcd.setCursor(0,1);
lcd.print(Str);
}
}
if (activated == 2)
{
if(customKey == 'B' )
{
myservo.write(mot_min);
activated = 0;
character=0;
Str[6]= '-';
Str[7]= '*';
Str[8]= '*';
Str[9]= '*';
Str[10]= ' ';
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" PASSWORD");
lcd.setCursor(0,1);
lcd.print(Str);
}
}
}
So, upload this code. The "customKeypad.getKey()" function will read the pressed key. The function will read just one key at a time and if you keep pushing the button it won't start reading more keys. You can see in the code that first we use the "internal" and "external" pins to open/close the door using the two push buttons. Then we read the pressed key and start editing the password "characters". When the all the 4 charracters were inserted we check if those are the same as the one that we want. If they are we open the door with the servo. If not, we give an error.
To change your password just go to the line from the photo below and change each of the four Str values. In this example the password is 3007. The "A" character will be the "OK"
and the "B" will be the "close".
Now that everything is ready, turn on the Arduino and start typeing your password. Press "A" for OK when all the 4 characters were inserted. To close the door press "B". I hope you'll enjoy this tut.
See more tuts