Raspberry Pi Dersleri serimizde kullanacağımız malzemelerin tamamına sizler için hazırladığımız setler ile kolayca sahip olabilirsiniz. Raspberry Pi’ye Uzaktan Bağlantı Yöntemleri (VNC,SSH,TTL) #4 dersimize kadar olan malzemeler için Kombo Kit, Raspberry Pi 3 Röle Kartı İle Alarm Devresi Yapımı #11 dersimize kadar olan malzemeler için Süper Başlangıç Seti, tüm derslerdeki malzemeler için Proje Seti tercih edebilirsiniz.

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, Python kodumuzun çalışabilmesi için öncelikle gerekli kütüphaneyi yüklememiz gerekli:

sudo pip install pi-rc522

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 rfid-read.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 (alternatif olarak buradan da erişebilirsiniz):

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.

 

 

25 Yorumlar

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

    IndentationError: expected an indented block

    • if kart uid satırıa gelince bir üst satıra
      kartlar = [“kart1uid”,”kart2uid”] #kart uidlerini list e attık
      if kart_uid in kartlar:
      print(“LED Yandi!”)
      GPIO.output(ledpin, True)
      else:
      print(“LED Sondu!”)
      GPIO.output(ledpin, False)

      #kart_uid okunan kart uid i

  2. rc522.py çalıştırdığımda
    print(“\nKart Algilandi!”)
    IndentationError: expected an indented block
    şeklinde hata veriyor.Çözüm bulamadım.Şimdiden teşekkürler.

  3. 1. bölümdeki kodları çalıştırırken.
    böyle bi hata alıyorum;
    File “rfid-read.py”, line 16
    kart_uid = str(uid[0])+” “+str(uid[1])+” “+str(uid[2])+” “+str(uid[3])+” “+str(uid[4])
    ^
    IndentationError: expected an indented block

    1.bölüm için kodların linkini atar mısınız ??

  4. kerem bey, daha hızlı mesajlasabilecegimiz bi yol yokmu, mailimi görebiliyorsunuz diye biliyorum.
    Bana yardımcı olur musunuz , hala aynı hatayı alıyorumda.
    hata;
    File “rfid-read.py”, line 16
    kart_uid = str(uid[0])+” “+str(uid[1])+” “+str(uid[2])+” “+str(uid[3])+” “+str(uid[4])
    ^
    IndentationError: expected an indented block

  5. tekrar merhaba, 1. bölümdeki kodu çalıştırdığımda sadece ‘Kart bekleniyor’ yazısı gelmekte.
    Ayrıca (rc522 de D1 in kırmızı ışığı yanıyor ve led de çok az da olsa bir ışık var) bilgilerinize.
    yardımınızı rica ediyorum.

CEVAP VER

Please enter your comment!
Please enter your name here