Merhabalar. Bu dersimizde sizler ile birlikte Raspberry Pi’mizde RFID kart okuma işlemi yapacağız.

Gerekli malzemeler:

RFID, nesnelerin radyo dalgaları kullanılarak tanınması için geliştirilmiş bir teknolojidir. Toplu taşıma araçlarındaki biletler, otoyol gişelerinde kullanılan HGS/OGS gibi ödeme sistemleri, okul/işyerlerimizdeki turnikelerde sıklıkla karşımıza çıkar. Bu dersimizde de Raspberry Pi kullanarak RFID okuma örneği yapacağız.

RFID okuyucu kartların içersinde büyük ihtimalle fiyatı sayesinde en popüler olanı MFRC522 entegresine sahip olan kartlardır.

rc522
RC522 RFID seti

Set içerisinde NXP firmasının üretmiş olduğu MFRC522 entegresine (datasheet) sahip bir devre kartı ile birlikte bir adet RFID kart ve anahtarlık gelmektedir. MFRC522, SPI arayüzüne sahip olduğundan dolayı, Arduino gibi mikrokontrolcüler veya Raspberry Pi gibi tek kart bilgisayarlar ile kolaylıkla kullanılabilir. Kartımızı, paket içerisinde gelen header’ları lehimledikten sonra aşağıdaki şemaya göre Raspberry Pi’mize bağlıyoruz:

rpi-rc522
RC522 – Raspberry Pi bağlantı şeması

Devre bağlantımızı tamamladıktan sonra aşağıdaki Python kodunu rfid-read.py isimli bir dosyaya kaydediyoruz. Alternatif olarak kodu buradan da kopyalayabilirsiniz.

from pirc522 import RFID
import signal
import time

rdr = RFID()
util = rdr.util()
util.debug = True
print("Kart bekleniyor...")
rdr.wait_for_tag()
(error, data) = rdr.request()

if not error:
 print("Kart Algilandi!")
 (error, uid) = rdr.anticoll()
 if not error:
 kart_uid = str(uid[0])+" "+str(uid[1])+" "+str(uid[2])+" "+str(uid[3])+" "+str(uid[4])
 print(kart_uid)

Kodu kaydettikten sonra

python read-rfid.py

komutu ile çalıştırıyor ve kartımızı okutuyoruz. Böylelikle okuttuğumuz kartın UID’sini öğreniyoruz:

Burada kartımızın UID’sini görmekteyiz. Yapmamız gereken, burada yer alan UID’yi bir kenara not etmek. Bir sonraki programımızı da rc522.py isimli dosyaya kaydediyoruz:

from pirc522 import RFID
import signal
import time
import RPi.GPIO as GPIO 

ledpin = 7
GPIO.setmode(GPIO.BOARD)
GPIO.setup(ledpin, GPIO.OUT)
rdr = RFID()
util = rdr.util()
util.debug = True

while True:
 rdr.wait_for_tag()
 (error, data) = rdr.request()
 if not error:
 print("\nKart Algilandi!")
 (error, uid) = rdr.anticoll()
 if not error:
 # Print UID
 kart_uid = str(uid[0])+" "+str(uid[1])+" "+str(uid[2])+" "+str(uid[3])+" "+str(uid[4])
 print(kart_uid)
 if kart_uid == "xxxxxxxxxxxxxxxx":
 print("LED Yandi!")
 GPIO.output(ledpin, True) 
 else: 
 print("LED Sondu!")
 GPIO.output(ledpin, False)

Daha önce kopyaladığımız UID’yi, bu kodda yer alan

 if kart_uid == "xxxxxxxxxxxxxxxx":

satırındaki değer ile değiştiriyoruz. Böylece program bizim okutmuş olduğumuz RFID kartını algıladığı zaman bağlamış olduğumuz LED’i yakacak. Farklı bir kart okuttuğumuzda ise LED sönecek:

Buradaki LED yakıp söndürme örnek bir uygulamadır. Sizler de örneğin LED’in yerine bir röle kartı bağlayarak istediğiniz UID’ye sahip bir kart okunduğunda 0.5sn kadar bir süre çıkış verdirerek bir RFID kilit açma uygulaması yapabilirsiniz.

 

 

5 Yorumlar

  1. Kolay gelsin dediginiz herşeyi yaptım fakat şöyle bir hata alıyorum. Yardımcı olabilir misiniz

    IndentationError: expected an indented block

CEVAP VER