RFID okuma ve kimlik kontrollü giriş sistemi

Başlatan . Kağan, 18 Mart 2014, 11:31:49

. Kağan

  Merhaba arkadaşlar. RFID çip kimlik sistemlerine uzun zamandır ilgi duyuyorum fakat modüler bir kit bulamamıştım. İnternette gezerken http://www.priority1design.com.au/ sitesinde bir okuyucu buldum ve USB özellikli olanından Avustralya dan bir tane getirttim. Bu cihazın üzerinde http://www.priority1design.com.au/rfidread-mrw.pdf  pdf sini verdiğim modüler kit var. Bu kiti kullanarak bir röleyi kontrol etmek ve okutturulan kimlikleri kullanarak kapı açmak isterdim. Fakat programlama bilgim buna yeterli değil sanırım. RX TX uçlarından veri okuma, bu verileri PIC ile okuma ve PIC'e yazma konusunda bana yardım edermisiniz.

Şimdiden teşekkürler.

Mucit23

Usart ile haberleşeceksin. Usart haberleşme işini yerine oturttur ondan sonra aldığın modül ile konuşmaya çalış. Burada swordfish için yazılmış bir örnek var.
http://digital-diy.com/swordfish-example/169-swordfish-module-rfidbas-em4100.html
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

. Kağan

Merhaba Mucit;

Bir forumda http://www.picproje.org/index.php?topic=37985.0 bu konu üzerinde çalışmışsınız ve yazışmışsınız. Kullandığınız modül benimkine benzermi. Biraz daha açıklarmısınız konuyu.

Ben programcı değilim. PIC te komutları öğrenerek birşeyler yapmaya çalışıyorum. UART haberleşmenin sadece adını duydum. Sizin çalışmanızdan paylaşım yaparak yardımcı olursanız sevinirim.

Mucit23

Benim kullandığım modül Petmak firmasının ürettiği modüllerdendi. Yaptığım çalışma ticari olduğu için kod vermem mümkün değil ama mantık hepsinde aynı. Birçoğu Usart ile haberleşiyor. Fakat sadece kopyala yapıştır mantığıyla fazla bir ilerleme kaydetmeniz ne yazıkki mümkün değil. Emin olunki işin derinlerine inmeniz gerekiyor. En ilk başta Usart haberleşmesi hakkında temel seviyede bilgi edinerek işe başlamalısınız. Ardından RFID kartların hafıza yapısını öğrenmeniz işlerinizi çok kolaylaştırır. Daha sonra EM4100 isimli çipin manualini alıp kodlamanızı yapacaksınız.

İlla kod istiyorsanız  en son verdiğim linkte swordfish için kütüphane verilmiş. Ayrıca EM4100 çipinin protokolü hakkında bilgide verilmiş.
http://digital-diy.com/swordfish-example/169-swordfish-module-rfidbas-em4100.html
Swordfish basic tabanlı bir dil. Eğer orada verilen kütüphaneyi kullanacak olursanız yapmanız gereken tek şey oradaki kodları PicBasicde derlenecek şekilde elden geçirmek.

İlk başta dediğim gibi Usart kısmını halledin. Forumda Ete hocanın örnekleri var.  Çalışmalara başlayın takıldığınız yerlerde yardımcı oluruz. 
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

mesut25

araştırma yaparken bu konu hakkında güzel bir örnek buldum ve paylaşmak istedim

CMCON = 7   
DEFINE OSC 4 'Set oscillator in MHz

DEFINE LCD_DREG PORTB  'define port to LCD
DEFINE LCD_DBIT 4      'RB4 RB5 RB6 RB7 display
DEFINE LCD_RSREG PORTA 'RS on porta
DEFINE LCD_RSBIT 0     'RS on porta.0
DEFINE LCD_EREG PORTA  'Enable on porta
DEFINE LCD_EBIT 1      'Numero Enable  porta.1
DEFINE LCD_BITS 4      '
DEFINE LCD_LINES 2     'lines 2
PAUSE 200                                   ' Stop 200ms
LCDOUT $FE,1                              'clear
Lcdout $FE,1,4                               
' -----[ Variables ]-------------------------------------------------------

buf     VAR Byte(12)' RFID bytes buffer
tagNum VAR Byte ' from EEPROM table
idx     VAR Byte ' tag byte index
char VAR Byte ' character from table

' -----[ EEPROM Data ]-----------------------------------------------------

Tag1 DATA "450052B6BC1A"
Tag2 DATA "450052F2EB0A"


' -----[ Initialization ]--------------------------------------------------

HIGH portb.1 ' turn off RFID reader portb.1 is the reciever port
LOW portb.2     ' lock the door!
Low portb.3     ' Turn off LED
' -----[ Program Code ]----------------------------------------------------

Main:

LOW portb.1     ' activate the reader
SERIN2  portb.1, 396, [WAIT($0A)] ' STR buf\12] ' wait for hdr + ID
HIGH portb.1 ' deactivate reader

Check_List:
  FOR tagNum = 1 to 2 ' scan through known tags
    FOR idx = 0 TO 11 ' scan bytes in tag
    READ (((tagNum-1) * 12) + idx), char ' get tag data from table
    IF (char <> buf(idx)) THEN Bad_Char ' compare tag to table
    NEXT
    GOTO Tag_Found   ' all bytes match!

Bad_Char:       ' try next tag
  NEXT

Bad_Tag:
  tagNum = 0
  FREQOUT porta.3, 1000 */ $100, 115 */ $100 ' groan
  PAUSE 1000
  GOTO Main

Tag_Found:

IF tagNum = 1 then displayName1

IF tagNum = 2 then displayName2

GOTO Main

displayName1:
lcdout $FE, 1,"NAME for tag 1"    'assuming your display is on porta.0 @ 9600 baud
pause 500                                      'Pause ,5 sec then clear display
goto open_door

displayName2:
lcdout $FE, 1,"Name for tag 2"    'assuming your display is on porta.0 @ 9600 baud
pause 500                                        'Pause ,5 sec then clear display
goto open_door

open_door:
  HIGH portb.2 ' remove latch
  High portb.3 ' Light LED
  FREQOUT porta.2, 2000 */ $100, 880 */$100 ' beep
  LOW portb.2 ' restore latch
  Low portb.3 ' LED OFF
  GOTO Main
                                                  http://www.picbasic.co.uk/forum/showthread.php?t=6963&page=2

. Kağan

#5
Merhaba,

Örneğe baktım inceledim. Hatta kodda bazı düzeltmeler yaptım.

. Kağan

Merhaba arkadaşlar,

Sonunda sparkfun dan sipariş ettiğim ID-12La reader geldi. Kodlarıda düzenledim ama aşağıdaki kodlarla kart okunduktan sonra hep yanlış anahtar hatası alıyorum. Acaba anahtar karşılaştıma yada anahtar okuma satırlarında bir yanlışlık mı var.

İncelermisiniz.

Şimdiden teşekkürler.

@ __config _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _CP_OFF
CMCON = 7 
DEFINE OSC 4 'Set oscillator in 4 MHz

TRISA=%00000000
TRISB=%00000010
PORTA=0:PORTB=0



DEFINE LCD_DREG PORTB  'define port to LCD
DEFINE LCD_DBIT 4      'RB4 RB5 RB6 RB7 to D4 D5 D6 D7 display
DEFINE LCD_RSREG PORTA 'RS BACAĞI porta
DEFINE LCD_RSBIT 0     'RS BACAĞI porta.0
DEFINE LCD_EREG PORTA  'Enable on porta
DEFINE LCD_EBIT 1      'Numero Enable  porta.1
DEFINE LCD_BITS 4      '
DEFINE LCD_LINES 2     '2 SATIR
PAUSE 200              '200ms BEKLE
LCDOUT $FE,1           'LCD TEMİZLE
Lcdout $FE,1,4
lcdout $FE, 1,"  Copyright 2014"
lcdout $FE, $C0,"***********"
pause 2000
lcdout $FE,1
' -----[ Variables ]-------------------------------------------------------

buf     VAR byte [12]' RFID bytes buffer
tagNum VAR Byte ' from EEPROM table
idx     VAR Byte ' tag byte index
char VAR Byte ' character from table

' -----[ EEPROM Data ]-----------------------------------------------------

Tag1 DATA  "0002701059"
Tag2 DATA  "450052F2EB0E"

' -----[ BAŞLATMA ]--------------------------------------------------

high portb.0 ' turn off RFID reader portb.1 is the reciever port
LOW portb.2     ' KAPIYI KİLİTLE!
Low portb.3     ' LEDİ SÖNDÜR

' -----[ PROGRAM KODU ]----------------------------------------------------


lcdout $FE,1,"LUTFEN KARTINIZI"
lcdout $FE, $C0,"      OKUTUNUZ   "
pause 500

Main:
high portb.3
low portb.0     ' OKUYUCUYU AÇ
serin2 PORTB.1, 16468, [WAIT($02), str buf\12] ' Read 12 byte from ECO-125
high portb.0 ' OKUYUCUYU KAPAT
pause 500 
'-------------------------------------------------
                               
Check_List:
  FOR tagNum = 1 to 2       ' BİLİNEN KARTLARDAN BİRİNİ ARA
    FOR idx = 0 TO 11 ' KARTIN BYTELARINI TARA
    READ (((tagNum-1)*11 ) + idx), char ' TABLODAN VERİLERİ AL
    IF (char <> buf(idx)) THEN Bad_Char ' VERİLERİ KARŞILAŞTIR
    NEXT
    GOTO Tag_Found ' TUM BAYTLARI EŞLEŞTİR!

Bad_Char: ' DİĞER KARTI DENE
  NEXT
'------------------------------------------------------------- 
Bad_Tag:
  tagNum = 0
  FREQOUT porta.3, 1000 */ $100, 115 */ $100 ' BUZZER SESİ
  lcdout $FE, 1,"YANLIS ANAHTAR"
  lcdout $FE, $C0,"TEKRAR DENEYIN"
  pause 1000
  lcdout $FE,1
  GOTO Main
'------------------------------------------------------------
Tag_Found:

IF tagNum = 1 then displayName1

IF tagNum = 2 then displayName2

GOTO Main

displayName1:
lcdout $FE, 1,"  name_1"   
lcdout $FE, $C0, "GIRIS BASARILI"
pause 1000       'BEKLE, 5 SN SONRA EKRANI TEMİZLE
goto kapi_ac

displayName2:
lcdout $FE, 1,"  name_2"   
LCDout $FE, $C0," GIRIS BASARILI"
pause    1000    'BEKLE, 5 SN SONRA EKRANI TEMİZLE
goto kapi_ac   ' ETIKETE GİT

kapi_ac:
  HIGH portb.2      ' KİLİDİ AÇ
  pause 500         ' 500 MS BEKLE
  LOW portb.2 ' KİLİDİ KAPAT
  Low portb.3 ' LEDİ SÖNDÜR
  GOTO Main

Powered by EzPortal