back to top

Raspberry Pi 3 İle RC522 RFID Modülü Kullanımı #15

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) dersimize kadar olan malzemeler için Kombo Kit, Raspberry Pi 3 Röle Kartı İle Alarm Devresi Yapımı 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 Nedir?

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.

Raspberry Pi Hakkında Daha Fazlasını Öğrenmeye Devam Et

Raspberry Pi pek çok yönüyle avantaj sahibi ve geliştiriciler tarafından çok sevilen bir platform. Elektronik projelerinde, bilgisayar bilimlerinde ve robotik çalışmalarında sağladığı destek ve rahatlık ile öğrenmeyi sevdiren Raspberry Pi hergün daha da çok gelişiyor. 

Peki siz de daha fazla gelişmek istemez misiniz? Linux bilginizi geliştirmek, elektronik dünyasına atılmak ve eğlenceli projelere imza atmak için sizi Raspberry Pi ile yolculuğa çıkarıyoruz! Sizler için hazırladığımız Raspberry Pi eğitim serisine devam edin :

Raspberry İle Step Motor Kontrolü Nasıl Yapılır?

Step motorlar, hassas hareket gerektiren uygulamalarda kullanılan motorlardır. Fonksiyon olarak DC motorlar ile servo motorların her ikisinin de karakterini gösterir: istenildiğinde belirli bir konuma adım adım ilerleyebilir veya sürekli olarak istenilen yönde döndürülebilir. Normal yazıcılar ve 3B yazıcıların vazgeçilmez parçalarındandırlar.

14. Dersimizde Raspberry İle Step Motor Kontrolü Nasıl Yapılır? Beraber öğreneceğiz.

Sese Duyarlı Alarm Devresi Nasıl Yapılır?

Raspberry ile 16. dersimizde ise çok daha basit yapıya sahip bir mikrofon sensörü ile ses şiddeti algılayıp, bu şiddetin seviyesine göre sesli bir alam tetiklemeyi ve “Sese Duyarlı Alarm Devresi Nasıl Yapılır?” öğreneceğiz.

Son Çıkan Yazılar

34 YORUMLAR

    • 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

  1. 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.

  2. 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 ??

  3. 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

  4. 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.

  5. Merhaba, devreyi birkaç kez kurmama rağmen “Kart bekleniyor…” mesajında bekliyor. ilerlemiyor.
    Paketin içinden anahtarlığı ve kartı deniyorum. Başka bir ayar mı yapmam gerkeiyor.

  6. Merhabalar. Output olarak LCD ekran kullanmayı düsünüyorum ama kodları nasıl yapacagımı bilmiyorum acaba yardımcı olabilecek var mı şimdiden teşekkürler 🙂

CEVAP VER

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