Sumit Grover
Published © LGPL

Keypad and SMS based dual door lock system

dual lock system is designed to open door using password by entering it through keypad and if the guest comes opening it using SMS

IntermediateFull instructions provided1,596
Keypad and SMS based dual door lock system

Things used in this project

Hardware components

12 0 12 transformer
×1
diode in 4007
×4
capacitor 100uf
×1
Linear Regulator (7805)
Linear Regulator (7805)
×1
Standard LCD - 16x2 White on Blue
Adafruit Standard LCD - 16x2 White on Blue
×1
resistance 10 k ohm
×1
resistance 1k ohm
×3
33 pf capacitance
×2
11.0592 mhz crystal
×1
capacitance 10 uf
×1
ic 24c04
×1
ic L293D
×1
16 pin ic base
×1
8 pin IC base
×1
DC motor 12v geared
×1
Box as a door
×1
connecting wires
×1
berge stick male
×1
berge stick female
×1
GSM modem
×1
tectile switch big 4 pin
×10
ic at89c51
×1
40 pin ic base
×1

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Schematics

circuit

Code

project code

C/C++
#include<reg51.h>	   	 
#include<intrins.h>	  

sbit s1=P2^0;
sbit s2=P2^1;
sbit s3=P2^2;
sbit s4=P2^3;
sbit s5=P2^4;
sbit s6=P2^5;
sbit s7=P2^6;
sbit s8=P2^7;
sbit s9=P0^6;
sbit s0=P0^7;

sbit m1=P3^4;
sbit m2=P3^5;
			 
sbit rs=P3^6;
sbit en=P3^7;

sbit SCL=P3^2;
sbit SDA=P3^3;

void delay(unsigned int w)
{
unsigned int q;
for(q=0;q<w;q++);
}

void start()
{
   SDA = 1 ;	   _nop_() , _nop_() , _nop_() ;
   SCL = 1 ;	   _nop_() , _nop_() , _nop_() ;
   SDA = 0 ; 	   _nop_() , _nop_() , _nop_() ;
   SCL = 0 ;	   _nop_() , _nop_() , _nop_() ;
}

void stop()
{
   SDA = 0 ;	 _nop_() , _nop_() , _nop_() ;
   SCL = 1 ;	 _nop_() , _nop_() , _nop_() ;
   SDA = 1 ;	 _nop_() , _nop_() , _nop_() ;
   SCL = 0 ;	 _nop_() , _nop_() , _nop_() ;
}

void clock()
{
   SCL = 1 ;	 _nop_() ; _nop_() ; _nop_() ;
   SCL = 0 ;	 _nop_() ; _nop_() ; _nop_() ;
}

void nack()
{
    SDA = 1 ;	  clock() ;
} 


void waitack()
{
    SDA = 1 ;	  clock() ;
}

void opdat(unsigned char dat)
{
   unsigned char i ;
   for ( i = 0 ; i < 8 ; i++ )
   {
      if ( ( dat >> ( 7 - i ) ) & 0x01 ) 	SDA = 1 ; 
      else	 			SDA = 0 ;
      clock() ;
   }
}

void i2c_write(unsigned char dat,unsigned char addr)
{                   	
	start();		 //dummy write start 	
	opdat(0xa0);	//send dev addr
	waitack();
	opdat(addr);
	waitack();
	opdat(dat);		//write data
	waitack();
	stop();
}	
		
unsigned char getdat()
{
   unsigned char i , dat;
   SDA = 1;	   _nop_() , _nop_() , _nop_();
 for ( i = 0 ; i < 8 ; i++ ) 
   {
	  dat = ( ( ( dat << 1 ) & 0xfe ) | SDA );
	  clock();
   }
   return dat;
}

unsigned char i2c_read(unsigned char addr)
{ 
 unsigned char rdata;
start();		//dummy write start
opdat(0xa0);	//send dev addr
waitack();
opdat(addr);
waitack();
	start();				//start read
       opdat(0xa1);   //give device adddr or with for read 
        waitack();	//operation coz lsb gives r|w
        rdata = getdat();
        nack() ;
        stop() ;
        return(rdata);
}
  
void cd(unsigned char w)
{
P1=w;
rs=0;
en=1;
delay(500);
en=0;
}	 

void dd(unsigned char w)
{
P1=w;
rs=1;
en=1;
delay(500);
en=0;
}
		   
void lcd(unsigned char *h)
{
while(*h!=0)
{
dd(*h);
h++;
}
}

void tx(unsigned char num)
{ 
SBUF = num;
while(TI == 0);
TI = 0;
}

void tx_str(unsigned char *y)
{
while(*y!='\0')
	{
		tx(*y);
		y++;
	}
}

void main()
{
unsigned int e;
unsigned char r,q,w,arr1[6],arr[20];

SCON=0x50;
TMOD=0x20;
TH1=0xfd;
TR1=1;		

m1=m2=0;										  

cd(0x38);
cd(0x06);
cd(0x0e);

qwe: 
for(w=0;w<16;w++)
{
arr[w]=0;
}
tx_str("AT");
tx(0x0d);			  
delay(60000);	
tx_str("AT+CMGF=1");
tx(0x0d);	  
delay(60000);
tx_str("AT+CMGD=1");
tx(0x0d);
delay(60000); 					 
delay(60000); 	

cd(0x01);
cd(0x80);
lcd(" ENTER PASSWORD ");		 
cd(0xc0);	   
q=0;
while(1)
{
if(s1==0)
{
dd('*');
while(s1==0);
delay(10000);
arr[q]='1';
q=q+1;
}
else if(s2==0)
{		
dd('*');
while(s2==0);
delay(10000);  
arr[q]='2';
q=q+1;
}		
else if(s3==0)
{		
dd('*');
while(s3==0);
delay(10000);
arr[q]='3';
q=q+1;
}					  
else if(s4==0)
{		
dd('*');
while(s4==0);
delay(10000);
arr[q]='4';
q=q+1;
}		
else if(s5==0)
{		
dd('*');
while(s5==0);
delay(10000);
arr[q]='5';
q=q+1;
}		
else if(s6==0)
{		
dd('*');
while(s6==0);
delay(10000);
arr[q]='6';
q=q+1;
}		
else if(s7==0)
{		
dd('*');
while(s7==0);
delay(10000);
arr[q]='7';
q=q+1;
}		
else if(s8==0)
{		
dd('*');
while(s8==0);
delay(10000);
arr[q]='8';
q=q+1;
}		
else if(s9==0)
{		
dd('*');
while(s9==0);
delay(10000);
arr[q]='9';
q=q+1;
}		
else if(s0==0)
{		
dd('*');
while(s0==0);
delay(10000);
arr[q]='0';
q=q+1;
}
if(q>=6)
{
for(w=0;w<6;w++)
{
arr1[w]=i2c_read(w);
delay(100);
}	
delay(60000);
delay(60000);
if(arr1[0]==arr[0] && arr1[1]==arr[1] && arr1[2]==arr[2] && arr1[3]==arr[3] && arr1[4]==arr[4] && arr1[5]==arr[5])
{
w=i2c_read(12);
delay(100);								 
cd(0x80);
lcd("CORRECT PASSWORD");	
if(w==1)
{								 
cd(0xc0);
lcd(" DOOR  IS  OPEN ");
goto qwe;	
}
else
{	  					 
cd(0xc0);		  
i2c_write(1,12);
delay(200);
lcd("  PLEASE  WAIT  ");		  
m1=0;
m2=1;
delay(45000);	
m1=0;
m2=0;		 
goto qwe;	
}	 
}	   
for(w=0;w<6;w++)
{
arr1[w]=i2c_read(w+6);
delay(100);
}	/*		 
for(w=0;w<6;w++)
{
dd(arr1[w]);
delay(100);
}	*/		 
delay(60000);
delay(60000);
if(arr1[0]==arr[0] && arr1[1]==arr[1] && arr1[2]==arr[2] && arr1[3]==arr[3] && arr1[4]==arr[4] && arr1[5]==arr[5])
{
w=i2c_read(12);
delay(100);								 
cd(0x80);
lcd("CORRECT PASSWORD");	
if(w==0)
{								 
cd(0xc0);
lcd(" DOOR IS CLOSED ");
goto qwe;	
}
else
{	  			  
i2c_write(0,12);
delay(200);			 
cd(0xc0);
lcd("  PLEASE  WAIT  ");		 
m1=1;
m2=0;
delay(52000);		 
m1=0;
m2=0;	
goto qwe;	
}	 
}
cd(0x80);
lcd(" WRONG PASSWORD ");		   
cd(0xC0);
lcd("PLEASE TRY AGAIN");
goto qwe;
}  	 					
if(RI==1)
{
w=SBUF;
RI=0;
if(w=='+')
{
e=0;
while(RI==0)
{
e=e+1;
if(e>30000)
goto qwe;
}
RI=0;
q=SBUF; 
e=0;
while(RI==0)
{
e=e+1;
if(e>30000)
goto qwe;
}
RI=0;
q=SBUF; 
e=0;
while(RI==0)
{
e=e+1;
if(e>30000)
goto qwe;
}
RI=0;
q=SBUF; 
if(q=='T')
{
delay(30000);
tx(0x0d);
cd(0x80);
lcd("  SMS RECEIVED  ");		   
cd(0xC0);
lcd("PLEASE WAIT.....");
tx_str("AT+CMGR=1");
tx(0x0d);
delay(30000);
delay(30000);
wer:	   
e=0;
while(RI==0)
{
e=e+1;
if(e>30000)
{
cd(0x80);
lcd("   WRONG  SMS   ");		   
cd(0xC0);
lcd("PLEASE TRY AGAIN");
goto qwe;
}
}
RI=0;
r=SBUF; 
if(r!='*')
goto wer;	
r=0;
ert:   
e=0;
while(RI==0)
{
e=e+1;
if(e>30000)
{
cd(0x80);
lcd("   WRONG  SMS   ");		   
cd(0xC0);
lcd("PLEASE TRY AGAIN");
goto qwe;
}
}
RI=0;
arr[r]=SBUF;
r=r+1;
if(SBUF!='#')
goto ert;
if(r==11)
{		 
for(w=0;w<6;w++)
{
arr1[w]=i2c_read(w);
delay(100);
}
if(arr[0]=='D' && arr[1]==' ' && arr[2]=='O' && arr[3]==' ' && arr[4]==arr1[0] && arr[5]==arr1[1] && arr[6]==arr1[2] && arr[7]==arr1[3] && arr[8]==arr1[4] && arr[9]==arr1[5])
{
w=i2c_read(12);
delay(100);
cd(0x80);
lcd("CORRECT PASSWORD");	
if(w==1)
{								 
cd(0xc0);
lcd(" DOOR  IS  OPEN ");
goto qwe;	
}
else
{	  					 
cd(0xc0);		  
i2c_write(1,12);
delay(200);
lcd("  PLEASE  WAIT  ");		  
m1=0;
m2=1;
delay(45000);	
m1=0;
m2=0;		 
goto qwe;	
}	 
}
}
if(r==11)
{
for(w=0;w<6;w++)
{
arr1[w]=i2c_read(w+6);
delay(100);
}
if(arr[0]=='D' && arr[1]==' ' && arr[2]=='C' && arr[3]==' ' && arr[4]==arr1[0] && arr[5]==arr1[1] && arr[6]==arr1[2] && arr[7]==arr1[3] && arr[8]==arr1[4] && arr[9]==arr1[5])
{
w=i2c_read(12);
delay(100);								 
cd(0x80);
lcd("CORRECT PASSWORD");	
if(w==0)
{								 
cd(0xc0);
lcd(" DOOR IS CLOSED ");
goto qwe;	
}
else
{	  			  
i2c_write(0,12);
delay(200);			 
cd(0xc0);
lcd("  PLEASE  WAIT  ");		 
m1=1;
m2=0;
delay(52000);		 
m1=0;
m2=0;	
goto qwe;	
}	 
}
}	 
if(r==18)
{		 
for(w=0;w<6;w++)
{
arr1[w]=i2c_read(w);
delay(100);
}
if(arr[0]=='P' && arr[1]==' ' && arr[2]=='O' && arr[3]==' ' && arr[4]==arr1[0] && arr[5]==arr1[1] && arr[6]==arr1[2] && arr[7]==arr1[3] && arr[8]==arr1[4] && arr[9]==arr1[5] && arr[10]==' ')
{		   
for(w=0;w<6;w++)
{
i2c_write(arr[w+11],w);
delay(1200);
}
cd(0x80);
lcd("PASSWORD CHANGED");	
cd(0xc0);
lcd("SUCCESSFULLY - O");
goto qwe;	
}
}	 
if(r==18)
{		 
for(w=0;w<6;w++)
{
arr1[w]=i2c_read(w+6);
delay(100);
}
if(arr[0]=='P' && arr[1]==' ' && arr[2]=='C' && arr[3]==' ' && arr[4]==arr1[0] && arr[5]==arr1[1] && arr[6]==arr1[2] && arr[7]==arr1[3] && arr[8]==arr1[4] && arr[9]==arr1[5] && arr[10]==' ')
{		   
for(w=0;w<6;w++)
{
i2c_write(arr[w+11],(w+6));
delay(1200);
}
cd(0x80);
lcd("PASSWORD CHANGED");	
cd(0xc0);
lcd("SUCCESSFULLY - C");
goto qwe;	
}
}
cd(0x80);
lcd("   WRONG  SMS   ");		   
cd(0xC0);
lcd("PLEASE TRY AGAIN");
goto qwe;
}
}
}  
}
}

Credits

Sumit Grover

Sumit Grover

8 projects • 31 followers

Comments