26
Nis
2023

Arduino ile RFID

Radyo Frekansı ile Tanımlama (RFID) teknolojisi, radyo frekansı kullanarak nesneleri tanımlar. Günümüzde lojistik, malzeme kontrolü, evcil hayvan takibi, araç takibi, personel ve müşteri takibi, erişim kontrolü, sağlık, pazarlama, ödeme gibi birçok alanda kullanılmaktadır.

RFID sistemi bir RFID etiketi (tag) ve bir okuyucudan oluşur. Basitçe, okuyucu RFID etiketindeki veriyi okuyarak bir nesne tanımlaması yapar. Bu yönüyle RFID sistemi, barkod ve karekod sistemlerine çok benzer.

RFID etiketiBir RFID etiketi, sorgulamaya ve cevaplamaya yarayan bir silikon çip ve onu çevreleyen bir antenden oluşur. Silikon çip RFID etiketinin bilgilerini saklar. İki tür RFID etiketi vardır:

  1. Aktif RFID etiketinin dahili bir güç kaynağı vardır ve sürekli olarak sinyal üretir. Uzun mesafeden okunabilirler ve genellikle gerçek zamanlı konum takibi gibi uygulamalarda kullanılırlar.
  2. Pasif RFID etiketinde herhangi bir dahili güç kaynağı bulunmaz. RFID okuyucunun yaydığı elektromanyetik dalganın anten üzerinde oluşturduğu akım ile çalışır. Genellikle geçiş kontrolü, ticari ürün etiketi gibi uygulamalarda kullanılırlar. Aktif RFID etiketlerine kıyasla çok daha ucuzdurlar.

RFID etiketlerinin bellek boyutu genelde 2KB’dan daha küçüktür. Her etiketin bir kendine has (uinque) seri numarası bulunur. Etiketler yalnızca okunabilir veya hem okunup hem yazılabilir olmak üzere iki çeşittir.

RFID sistemi çalışma frekansına bağlı olarak 4 grupta incelenir.

  1. Düşük frekans RFID (Low Frequency RFID) 30 KHz ile 500KHz arasındaki frekanslarda çalışır. Genel olarak kullanılan ise 125KHz’dir. Birkaç santimetre gibi çok kısa menzilli uygulamalarda kullanılır.
  2. Yüksek frekans RFID (High Frequency RFID) 3MHz ile 30MHz arasındaki frekanslarda çalışır. Genelde 13.56MHz kullanılır. Bir metreye kadar menzili vardır.
  3. Ultra yüksek frekans RFID (UHF RFID) 300MHz ile 960 MHz arasındaki frekanslarda çalışır. Genelde 433MHz kullanılır. Etiket 10 metre uzaklıktan rahatlıkla okunabilir.
  4. Mikrodalga RFID (Microwave RFID) 2.45GHz frekans ile çalışır ve etiketin metrelerce uzağında bile veri okunabilir.

Malzemeler

  • 1 adet Arduino
  • 1 adet RFID-RC522 okuyucu
  • 1 adet RFID kart, etiket, vb.

RFID-RC522 okuyucu, Arduino projelerinde en sık kullanılan RFID okuyucu modülüdür. Üç farklı seri iletişim protokolünü destekler:

  • 10Mbit/s hıza kadar SPI iletişim
  • Fast mod’da 400KBd’a kadar, High-speed mod’da 3400Kbd’a kadar hız ile I2C iletişim
  • 1228.8Kbd’a kadar UART iletişim

RC522 modülü genellikle yanında bir RFID kart ve anahtarlık ile gelir. Her ikisinin de 1KB belleği vardır. RC522 hem bu RFID etiketlerden veri okuyabilir hem de onları programlayabilir. Modülün iletişim kuracağı protokol türüne göre bağlantı pinleri görseldeki gibidir.

RC522 modülünün VCC girişi 3.3V ile beslenir, ancak data pinlerinin tamamı 5V ile çalışabilir. Modülü Arduino ile kullanmak için herhangi bir voltaj regülatörü gerekli değildir. Bu örnekte RC522 Arduino’ya SPI arayüzü ile bağlanmıştır. SPI arayüzü ile Arduino bağlantısı tablodaki şekilde yapılır.

MOSIMISOSCKCS/SS/SDA
Arduino Uno11121310
Arduino Nano11121310
Arduino Mega51505253

Bağlantı şeması

IRQ pini bu çalışmada kullanılmayacağı için boş bırakılmıştır. VCC girişi Arduino 3.3V çıkışına bağlanır. 5V çıkışına bağlanması durumunda modül zarar görebilir.

Kaynak kod

Arduino RFID kütüphanesini indirmek için tıklayınız.

Aşağıdaki kaynak kod Arduino’ya yüklendiğinde RFID etiketinin bilgileri okunabilir.

#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN         5          // Reset pini
#define SS_PIN          10         // Slave select pini
MFRC522 mfrc522(SS_PIN, RST_PIN);  // MFRC522 nesnesi oluştur
void setup() {
Serial.begin(9600);                       
while (!Serial);                                // Seri port açıksa
            SPI.begin();                        // Init SPI arayüzünü başlat
            mfrc522.PCD_Init();                 // MFRC522 başlat            
            mfrc522.PCD_DumpVersionToSerial();  // PCD-MFRC522 Card okuyucu bilgilerini göster (Firmware versiyonu)
}
void loop() {
            // Okuyucuya yeni kart geldiyse oku. 
            if ( ! mfrc522.PICC_IsNewCardPresent()) {
                        return;
            }
            // Kartı seç
            if ( ! mfrc522.PICC_ReadCardSerial()) {
                        return;
            }
            // Kart bilgisini al. Bu işlem PICC_HaltA() fonksiyonunu otomatik olarak çağırır.
            mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

RC522 modüle bir etiket yaklaştırıldığında seri portta aşağıdaki gibi bir çıktı elde edilir.

Seri port ekranında görülen Card UID okutulan etiketin seri numarasını, PICC type ise etiketin türü ve bellek boyutunu gösterir. Card UID dört çift hexadecimal veriden oluşmaktadır. Her bir hexadecimal çifti 1 bayt boyutundadır. Eğer bunlar tek tek okunmak istenirse aşağıdaki kod satırları da kullanılabilir.

Serial.println(rfid.uid.uidByte[0]);
Serial.println(rfid.uid.uidByte[1]);
Serial.println(rfid.uid.uidByte[2]);
Serial.println(rfid.uid.uidByte[3]);