PIR sensor based burglar alarm with SMS alert.

This project is about a PIR sensor based burglar alarm with SMS alert. The circuit senses the intrusion using a PIR sensor and sends an SMS to to the given mobile number when an intrusion occurs. The number of intrusions taken place is also displayed on an LCD display. An 8051 microcontroller is used for monitoring the PIR sensor and sending the alert message using the GSM module. An alarm is also raised when the intrusion occurs.

PIR sensor.

PIR sensor means passive infrared sensor. It is used to detect and measure the IR (infra red) radiations emitting from a source. The hear of the PIR sensor is a sensor core made of pyroelectric materials like   Gallium Nitride. They simple produce an electrical output according to the intensity of IR radiations falling on it. In most cases an array of such sensors cores are used to improve detection. Numerous Fresnel Lenses arranged in the form of a dome is place on the sensor face to focus as much as IR radiations on to the sensor face. When ever a movement occurs in front of the PIR sensor,  the intensity of the IR radiations falling on the PIR sensor changes and so do the sensors electrical out of the sensor. The electronic circuit inside the sensor detects this variation and pulls the output pin of the PIR sensor HIGH for sometime. Usually the output pin is pulled HIGH for 3 to 4 second. Read this article Interfacing PIR sensor to 8051.

GSM Module.

GSM (Global Systems fro Mobile communication) Module is a device that can accept a SIM card and operate in a GSM network. A GSM module can perform various tasks in the network such as sending messages, accepting messages, dialing a phone number, receiving calls, sending and receiving voice messages, sending digital media etc. In simple words a GSM module can perform any task that is supported by the module itself and the network service provider. The network actually sees the GSM module just like a mobile phone. The common applications of GSM module are appliance switching devices, messaging systems, voice mailing systems, FAX systems etc.

GSM Module – Buyers Guide – are you looking to buy a GSM module? There are a handful of product variants for GSM module – like SIM900, SIM300, SIM800 etc. We have created this buyers guide to help you select the right GSM module for your project needs.

burglar alarm with sms alert - circuit diagram

 

The GSM module we are using here is based on a  SIM900 GSM chip. Read this article Interfacing GSM module to 8051.

 

Circuit diagram.

burglar alarm with SMS alert

The GSM module communicates with the 8051 using serial communication. Tx pin of the GSM module is connected to Rx pin of the microcontroller (pin10) and Rx pin of the GSM module is connected to Tx pin of the microcontroller. Output pin of the PIR sensor is connected to P3.5 of the microcontroller. Data pins (D0 to D7) of the LCD module are connected to Port 0 of the microcontroller. Each pins of Port 0 are pulled up using a 10K x 8 resistor network. Port 0 of the 8051 is open drain  and has no internal pull up resistor. So we need external pull -up resistors to make it work properly as output pins. Control pins (RS,RW and E ) of the LCD module are connected to P2.7, P2.6 and P2.5 of the microcontroller respectively. The LCD module we are using here is JHD162A. Read this article, Interfacing LCD module to 8051. Resistor R4 is used for setting the contrast of the display. Resistor R5 limits the current through the back light LED of the display.

Push button switch S2, capacitor C11 and resistor R6 are associated with the reset circuit. Capacitor C11 is used to de bounce the push button switch. The C11 actually by-passes the vibrations produced when the push button switch is pressed. If C11 is not used, the microcontroller will read all the vibrations as key presses and the system will perform multiples resets. Crystal X1 and capacitors C8, C10 are associated with the clock circuitry. The baud rate used for serial communication in this project is 9600. So the crystal needs to be exactly 11.0592 MHz for getting this baud rate.

Port 2.0 of the microcontroller is used for controlling the alarm. P2.0 is connected to transistor Q1 through resistor R7. R7 limits the base current of Q1. Resistor R0 (10K) is used for pulling up P2.0 pin. The relay is connected across the collector of Q1. D5 is a freewheeling diode. It by-passes the back emf produced when the relay is switched. If free-wheeling is not done, the back emf may destroy the transistor or even the microcontroller. The 12V buzzer is connected  through the normally-open contact of the relay.

Program.

PIR EQU P3.5          //equates P3.5 to PIR
RS EQU P2.7           //equates P2.7 to RS
RW EQU P2.6           //equates P2.6 to RW
E  EQU P2.5           //equates P2.5 ot E
ORG 00H               //origin
MOV TMOD,#00100001B   //Timer1=Mode2 timer & Timer0=Mode1 timer    
MOV TH1,#253D         //loads Th1 with 253D (9600 baud)       
MOV SCON,#50H         //sets serial port to Mode1 and receiver enabled       

 
SETB TR1              //starts Timer1

MOV DPTR,#LUT         //loads DPTR with starting address of LUT   
SETB P3.5             //sets P3.5 as input port for PIR sensor
CLR P2.0              //sets 2.0 as output port for alarm
MOV R7,#00D           //loads R7 with 00D


MAIN:ACALL DINT       //calls DINT subroutine
     ACALL TEXT1      //calls TEXT1 subroutine
     ACALL LINE2      //calls LINE2 subroutine
     ACALL TEXT2      //calls TEXT2 subroutine
     ACALL TEXT3      //calls TEXT3 subroutine
     ACALL SPLIT      //calls SPLIT subroutine
     ACALL NUM        //calls NUM subroutine
HERE:JNB PIR,HERE     //loops here until PIR output is HIGH
     SETB P2.0        //sets P2.0 (alarm ON)
     INC R7           //increments R7 (No: of intrusions)
     ACALL DINT       //calls DINT subroutine
     ACALL TEXT1      //calls TEXT1 subroutine
     ACALL LINE2      //calls LINE2 subroutine
     ACALL TEXT4      //calls TEXT4 subroutine
     ACALL TEXT3      //calls TEXT3 subroutine
     ACALL SPLIT      //calls SPLIT subroutine
     ACALL NUM        //calls NUM subroutine
     ACALL SMS        //calls SMS subroutine
     
HERE1:JB PIR,HERE1    //loops here PIR output is LOW  
      CLR P2.0        //clears P2.0 (alarm OFF)
SJMP MAIN             //jumps to MAIN loop


SMS:MOV A,#"A"        //ascii of A
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"T"        //ascii of T
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#0DH        //ascii of /r
    ACALL SEND        //sends the ascii code to GSM
    ACALL DELAY1      //calls DELAY1 (1S)


    MOV A,#"A"        //ascii of A
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"T"        //ascii of T
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"+"        //ascii of +
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"C"        //ascii of C
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"M"        //ascii of M
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"G"        //ascii of G
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"F"        //ascii of F
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"="        //ascii of =
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"1"        //ascii of 1
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#0DH        //ascii of /r
    ACALL SEND        //sends the ascii code to GSM
    ACALL DELAY1      //calls DELAY1 (1S)


    MOV A,#"A"        //ascii of A
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"T"        //ascii of T
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"+"        //ascii of +
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"C"        //ascii of C
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"M"        //ascii of M
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"G"        //ascii of G
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"S"        //ascii of S
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"="        //ascii of =
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#34D        //ascii of "
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"+"        //ascii of +
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"9"        //ascii of 9
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"1"        //ascii of 1
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"9"        //ascii of 9
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"5"        //ascii of 5
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"4"        //ascii of 4
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"4"        //ascii of 4
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"7"        //ascii of 7
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"9"        //ascii of 9
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"0"        //ascii of 0
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"7"        //ascii of 7
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"9"        //ascii of 9
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"3"        //ascii of 3
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#34D        //ascii of "
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#0DH        //ascii of /r  
    ACALL SEND        //sends the ascii code to GSM
    ACALL DELAY1      //calls DELAY1 (1S)


    MOV A,#"I"        //ascii of I
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"n"        //ascii of n
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"t"        //ascii of t
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"r"        //ascii of r
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"u"        //ascii of u
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"d"        //ascii of d
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"e"        //ascii of e
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"r"        //ascii of r
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"!"        //ascii of !
    ACALL SEND        //sends the ascii code to GSM
    MOV A,#"!"        //ascii of !
    ACALL SEND        //sends the ascii code to GSM
    ACALL DELAY1      //calls DELAY1 (1S)

    MOV A,#1AH        //ascii of CTRL+Z
    ACALL SEND        //sends the ascii code to GSM       
    ACALL DELAY1      //calls DELAY1 (1S)
    RET               //returns from subroutine

SEND:CLR TI           //clears TI flag of SCON
     MOV SBUF,A       //moves value in A to SBUF register
WAIT:JNB TI,WAIT      //waits here until TI flag is set
     RET              //returns from subroutine

SPLIT:MOV A,R7        //moves the value in R7 to A
      MOV B,#10D      //loads B with 10D
      DIV AB          //divides A with B
      MOV R6,B        //moves the remainder to R6
      MOV B,#10D      //loads B with 10D
      DIV AB          //divides A with B
      MOV R5,B        //moves the remainder to R5
      MOV R4,B        //moves the quotient to R4
      RET             //returns from subroutine
 
 TEXT1: MOV A,#"I"    //ascii of I
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"N"        //ascii of N
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"T"        //ascii of T
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"R"        //ascii of R
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"U"        //ascii of U
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"D"        //ascii of D
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"E"        //ascii of E
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"R"        //ascii of R
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#" "        //ascii of SPACE
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"A"        //ascii of A
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"L"        //ascii of L
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"A"        //ascii of A
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"R"        //ascii of R
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"M"        //ascii of M
    ACALL DISPLAY     //calls DISPLAY subroutine
    RET               //return from subroutine
    
     
 TEXT2: MOV A,#"S"    //ascii of S
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"C"        //ascii of C
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"A"        //ascii of A
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"N"        //ascii of N
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"I"        //ascii of I
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"N"        //ascii of N
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"G"        //ascii of G
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"."        //ascii of .
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"."        //ascii of .
    ACALL DISPLAY     //calls DISPLAY subroutine
    RET               //return from subroutine
    
    
    

 TEXT3: MOV A,#"I"    //ascii of I
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"N"        //ascii of N
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"T"        //ascii of T
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"R"        //ascii of R
    ACALL DISPLAY     //calls DISPLAY subroutine
    RET               //return from subroutine
     
 TEXT4: MOV A,#"A"    //ascii of A
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"L"        //ascii of L
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"E"        //ascii of E
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"R"        //ascii of R
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"T"        //ascii of T
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"!"        //ascii of !
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"!"        //ascii of !
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"!"        //ascii of !
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,#"!"        //ascii of !
    ACALL DISPLAY     //calls DISPLAY subroutine
    RET               //return from subroutine
 
  NUM:MOV A,R4        //moves 1st digit to A
    ACALL ASCII       //calls ASCII subroutine
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,R5          //moves 2nd digit to A 
    ACALL ASCII       //calls ASCII subroutine
    ACALL DISPLAY     //calls DISPLAY subroutine
    MOV A,R6          //moves last digit to A
    ACALL ASCII       //calls ASCII subroutine
    ACALL DISPLAY     //calls DISPLAY subroutine
    RET               //return subroutine
  
 DINT:MOV A,#0FH      //loads a with 0FH
    ACALL CMD         //calls CMD subroutine
    MOV A,#01H        //loads a with 01H
    ACALL CMD         //calls CMD subroutine
    MOV A,#06H        //loads a with 06H
    ACALL CMD         //calls CMD subroutine
    MOV A,#81H        //loads a with 81H
    ACALL CMD         //calls CMD subroutine
    MOV A,#3CH        //loads a with 3CH
    ACALL CMD         //calls CMD subroutine
    RET               //return from subroutine

LINE2:MOV A,#0C0H     //loads a with 0C0H 
    ACALL CMD         //calls CMD subroutine
    RET               //return from subroutine

CMD: MOV P0,A         //loads P0 with A
    CLR RS            //clears RS pin
    CLR RW            //clears RW pin
    SETB E            //sets E pin
    CLR E             //clears E pin
    ACALL DELAY       //calls DELAY subroutine
    RET               //return from subroutine

DISPLAY:MOV P0,A      //loads P0 with A   
    SETB RS           //sets RS pin
    CLR RW            //clears RW pin
    SETB E            //sets E pin
    CLR E             //clears E pin
    ACALL DELAY       //calls DELAY subroutine
    RET               //return from subroutine

DELAY1:MOV R6,#15D        //loads R6 with 15D 
BACK: MOV TH0,#00000000B  //loads TH0 with 00B 
      MOV TL0,#00000000B  //loads TH0 with 00B    
      SETB TR0            //starts Timer 0        
HERE2: JNB TF0,HERE2      //loops here until TF0 is set (roll over)    
      CLR TR0             //stops Timer 0            
      CLR TF0             //clears TF0        
      DJNZ R6,BACK        //jumps to BACK label (loops 15 times)
      RET                 //return from subroutine

DELAY: CLR E              //clears E
    CLR RS                //clears RS
    SETB RW               //sets RW
    MOV P0,#0FFh          //writes P0 with all 1's
    SETB E                //sets E
    MOV A,P0              //moves P0 to A
    JB ACC.7,DELAY        //jumps to label DELAY when ACC.7 is set
    CLR E                 //clears E
    CLR RW                //clears RW
    RET                   //return from subroutine

ASCII: MOVC A,@A+DPTR     //overwrites A with ascii of data in A 
       RET                //return from subroutine      
    
LUT: DB  48D              //ascii of 0
     DB  49D              //ascii of 1
     DB  50D              //ascii of 2
     DB  51D              //ascii of 3  
     DB  52D              //ascii of 4
     DB  53D              //ascii of 5
     DB  54D              //ascii of 6
     DB  55D              //ascii of 7 
     DB  56D              //ascii of 8
     DB  57D              //ascii of 9
   
    END                   //END statement

 

Notes.

  • GSM modules available in the market comes with different supply voltages like  12V, 9V, 5V etc. The module  I am using here operates on 12V DC. So make sure that your GSM module is operating on correct supply voltage.
  • Make sure that all ground lines of (GSM module. PIR sensor module and rest of the circuit) are shorted together.

 

 

 

 

Author

1 Comment

  1. Thanks Praveen, today I learned a lot about PIR sensor. I was quite confused regarding this area but now the doubts are clear.