Bu konumuzda SMS alarmlı, PIR sensör tabanlı hırsız alarm sisteminin nasıl yapılacağını anlatacağız.

Bu devre, PIR sensörü kullanarak  hareketi algılar ve belirlenmiş mobil telefona SMS yollar. Aynı zamanda LCD displayde hareketin meydana geldiği yerin numarası da görünür. Bu devrede 8051 mikrodenetleyicisi PIR sensörü izlemek ve GSM modülü üzerinden SMS yollamak için kullanılıyor.  Hareket algılandığında aynı zamanda bir alarm da çalmaya başlıyor.

PIR sensör.

PIR sensör pasif bir infrared (kızılötesi) sensör çeşididir. Bir kaynaktan gelen IR (infrared) ışını algılamak ve ölçmek için kullanılır. PIR sensörlerde algılama kısmında, Galyum Nitrid denilen bir piroelektrik malzeme kullanılır. Basitçe anlatmaya çalışırsak; PIR sensörü üzerine düşen ışın miktarına bağlı olarak bir elektriksel çıkış üretir. Dışarıda, IR ışınlarını sensör yüzüne odaklamak için, kafes formunda bir fresnel lens kullanılır. PIR sensörünün önünde bir hareket meydana geldiği anda,  PIR sensörünün üzerine düşen IR radyasyon yoğunluğu değişir ve elektriksel bir çıkış üretilir. Sensörün içindeki elektronik devre, değişikliği tespit eder ve çıkış pinini HIGH yapar.  8051 ile PIR sensörünün nasıl kullanıldığını öğrenmek için şu makaleyi okuyabilirsiniz.

pir_sensor_calisma

 

 

GSM Module.

GSM (Global Systems fro Mobile communication) mödülü, içine SİM kart konulabilen ve GSM ağında çalışabilen bir araçtır. Bir çok şey yapabilir: Mesaj gönderebilir, mesaj alabilir, telefon numarasını arayabilir, çağrı alabilir, sesli mesaj alabilir veya gönderebilir, dijital medya gönderebilir. Basitçe, bir GSM modülü, Ağ servis sağlayıcının ve modülün desteklediği bir çok görevi yapabilir.  GSM modülü bir cep telefonu gibi kullanılabilir. GSM modülünün en yaygın kullanımı, bir makinayı uzaktan çalıştırmak, sesli mail göndermek gibi uygulamalardır.

 

 

gsm_modul

 

 

Bu uygulamada kullanılan SIM900A GSM chip’inin 8051 ile nasıl kullanıldığını öğrenmek için şu makaleyi okuyunuz.

 

Elektronik Devre Şeması:

 

8051-hirsiz-alarm-pir

 

 

GSM modülü 8051 ile seri iletişim ile haberleşiyor. GSM modülünün Tx pini mikrodenetleyicinin Rx pinine (pin10) bağlanacak. GSM modülünün Rx pini ise mikrodenetleyicinin Tx pinine  bağlanacak. PIR sensörünün çıkış pini, mikrodenetleyicinin p3.5 pinine bağlanacak. LCD modülünün data pinleri (D0—D7) , mikrodenetleyicinin PORT0’ına bağlanacak.  PORT0’ın her pini 10k dirençle pull up yapılacak. 8051’in port0’ı açık draindir ve internal pull up dirençleri yoktur. bu yüzden ayrıca pull up dirençlerine gerek vardır.Bu uygulamada LCD modül olarak JHD162A kullanılıyor. R4 direnci LCD’nin kontrastını ayarlamak için kullanılır.R5 direnci ise display’in arka ışık ledinin akımını sınırlandırmak için kullanılıyor.

S2 butonu, C11 kondansatörü ve R6 direnci, reset devresini oluşturuyor. C11 butonun yerinde çalışması için(bounce durumu) kullanılır. Butona basarken meydana gelen titreşimleri elemine eder. X1 kristali ve c8,c10 kondansatörleri, saat devresinde kullanılıyor. Seri iletişimin baud rate oranı 9600dür. Bu yüzden kristalin tam olarak frekansı, 11.0592 MHz olmalı.

Mikrodenetleyicinin Port 2,0 kısmı alarmı kontrol etmek için kullanılır. Röle Q1 transistörünün kollektörüne bağlanır. Röle anahtarlandığında oluşacak emf leri ise D5 diyodu by-pass edecektir. Aksi halde geri emf’ler transistörü hatta mikrodenetleyiciyi bile bozar. 12V röle, rölenin normalde açık kontağı ile bağlanır.

 

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

 

 

Notlar.

  • GSM modülü piyasada değişik besleme gerilimleriyle bulunur. (12V,9V,5V gibi). Bu devrede 12V DC modül kullanılıyor. Bu yüzden GSM modülünüzü doğru besleme geriliminde kullandığınızdan emin olunuz.
  • Bütün ground uçlarının birlikte kısa devre edildiğinden emin olun. (GSM modül, PIR sensör ve devrenin geri kalanı)
  • Kolay gelsin. Yorum yapmayı unutmayın… 🙂

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz