Arduino İle RC522 RFID Modülü Kullanımı
RFID kartlarının ne olduğunu biliyor musunuz? Günlük hayatımızda bu kartları o kadar çok kullanıyoruz ki farkında değilsiniz. En basit örneği ile bir örnek verelim. Evinize girerken kapınızda okuttuğunuz ve otomatik kartın açtığı kart sistemi aslında bir RFID sistemidir. Bu yazımızda RFID nedir ve arduino ile RC522 RFID modülünün kullanımı öğreneceğiz.
RFID Nedir ve Elemanları Nelerdir?
RFID, İngilizce Radio Frequency Identification kelimelerinin baş harflerinden oluşan bir kimliklendirme sistemidir. İçerdiği çip sayesinde radyo frekansı kullanarak nesnelerin belirli bir mesafe üzerinden otomatik tanımlanmasını sağlayarak zamandan tasarruf ve iş verimliliğini artırma amacıyla kullanılmaktadır.
RFID sistemleri temek olarak üç bileşenden oluşur. Aktif veya pasif etiket, okuyucu ve anten. Bir RFID etiketinin içindeki çipte kendisi ile ilgili veriler bulunmaktadır. Bir okuyucu tarafından algılanan bu etiket, içerdiği bilgileri bu okuyucu ve okuyucunun çalıştığı veri iletim protokolü aracılığıyla (wifi, bluetooth, UWB vb) ilgili sistemlere iletir. Sistem bu verileri analiz ederek etiketin kime veya neye ait olduğunu, tam olarak nerede olduğunu, durumunu ve daha birçok bilgiyi öğrenerek gerekli iş süreçlerinin uygulanmasını sağlar.
Temel bilgilerimizi öğrendik hadi şimdi asıl konumuza geçelim.
RC522 RFID Modülü Nedir ve Özellikleri Nelerdir?
RC522, NXP semiconductors’ın MFRC522 kontrolcüsüne dayanan 13,56MHz’lik bir RFID modülüdür. Modül, SPI / I2C / UART haberleşme protokollerini desteklemektedir. Satılan kitlerde bir RFID okuyucu, nfc kartı ve nfc anahtarlıkla birlikte gönderilir.
RC522 RFID Özellikleri
- Çalışma Frekansı: 13,56 MHz
- Çalışma Akımı: 13-26mA
- Çalışma Voltajı: 3.3V
- Uyku Akımı: 80uA
- Haberleşme Protokolü: SPI / I2C / UART
- Desteklenen Kartlar: mifare1 S50, mifare1 S70 mifare ultralight, mifare pro ve mifare desfire
- Veri aktarım hızı: maksimum 10Mbit/s
- Çalışma sıcaklığı: -20 ile 80 santigrat derece
- Kart Boyutları: 40x60mm
Not: 125 KHz frekansında çalışan RFID kartlarını desteklememektedir. Yalnızca 13,56 MHz frekansında çalışan kartları desteklemektedir. NFC modülleri bu frekansta çalıştığı için NFC kartları ile beraber kullanılabilir.
RC522 RFID Pin Diyagramı
VCC: Bu, modül için güç kaynağı pinidir. Modül, 2,5 ila 3,3 volt arasındaki voltaj aralığında çalışır. Bunu mikrodenetleyicinin (Arduino) 3,3V çıkış pinine bağlayabiliriz.
RST: Sıfırlama pini, modülü sıfırlamak ve kapatmak için bir giriştir. Bu pin düşük olduğunda, güç kapatma etkinleştirilir, ardından osilatör dahil tüm dahili akım emicileri kapanır ve modülün giriş pinleri dış dünyadan ayrılır.
GND: Bu modülün topraklama pinidir. Bunu mikrodenetleyicinin (Arduino) topraklama(GND) pinine bağlamamız gerekiyor.
IRQ: Bu, bir RFID etiketi menziline girdiğinde mikrodenetleyiciyi modülü uyandırması için uyaran bir kesme pinidir. Modülün güç tasarrufu için uyku moduna geçmesine yardımcı olur.
MISO/SCL/TX: SPI arayüzü aktif olduğunda bu pin Master-In-Slave-Out(MISO) olarak görev yapar. I2C arayüzü aktif olduğunda bu pin seri saat(SCL) olarak görev yapar ve UART arayüzü aktif olduğunda seri veri çıkışı(TX) olarak görev yapar.
MOSI: Bu, SPI iletişimi için Master Out Slave In pinidir
SCK: Bu Seri Saat pinidir. SPI veri yolu Master yani mikrodenetleyici (Arduino) tarafından sağlanan saat darbelerini kabul eder.
SS/SDA/RX: Bu pin, SPI iletişimi sırasında Seri giriş (SS), I2C sırasında SDA ve UART sırasında Rx olarak işlev görür.
RFID Okuyucu Modül Çipi MFRC522 Veri Sayfasını aşağıdan indirebilirsiniz.
Yazımızda Gerekli Malzeme Listesi
RC522 RFID Bağlantı Şeması
RC522 RFID Modül | Arduino |
RST | 9 |
SDA(SS) | 10 |
MOSI | 11 |
MISO | 12 |
SCK | 13 |
3.3V | 3.3V |
GND | GND |
Bağlantımızı yukarıdaki şemamıza göre yaptıysanız artık kodumuza geçebiliriz.
RC522 RFID Arduino Kodu
Bu modülü kullanabilmemiz için öncelikle indirip kurmamız gereken bir kütüphanemiz var. Aşağıdaki linkten indirebilirsiniz.
Kütüphanemizi kurduysanız ilk olarak kart okuma kodumuza bakalım
#include <SPI.h> // SPI haberleşme kütüphanemizi ekliyoruz.
#include <MFRC522.h> // mfrc522 kütüphanemizi ekliyoruz.
#define RST_PIN 9 // Değiştirilebilir,rst pinimiz
#define SS_PIN 10 // Değiştirilebilir, ss pinimiz
MFRC522 mfrc522(SS_PIN, RST_PIN); // Mfrc522 objemizi oluşturuyoruz.
void setup() {
Serial.begin(9600); // Seri haberleşmeyi 9600 bağlantı hızında başlatıyoruz.
while (!Serial); // Seri port açık değilse bir şey yapma
SPI.begin(); // SPI haberleşmeyi başlatıyoruz.
mfrc522.PCD_Init(); // Mfrc522'yi başlatıyoruz.
delay(4); // Opsiyonel bekleme, bazı kartlar bir miktar bekleme gerektiriyor.
mfrc522.PCD_DumpVersionToSerial(); // PCD - MFRC522 Kart okuyucunun bilgilerini yazdırmaktadır.
Serial.println(F("PICC' nin UID, SAK, tipi, ve veri bloklarını oku..."));
}
void loop() {
// Sensör/okuyucuda yeni bir kart yoksa döngüyü sıfırlar. Bu, boştayken tüm işlemi kaydeder.
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Kart seri numarasını oku.
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Okunmuş kart bilgilerini yazdırma.
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}
Şimdi ise okunan kart istediğimiz bir kart ise led yakan bir kod uygulama yapalım. Devremizi aşağıdaki şemaya göre düzenleyelim.
Bağlantılarımızı yaptıysanız aşağıdaki kodumuzu yükleyerek testini yapabilirisiniz.
#include <SPI.h>
#include <MFRC522.h>
const byte YESIL_LED = 4;
const byte KIRMIZI_LED = 2;
MFRC522 rfid(10, 9);//RFID Chip Select ve Reset pinlerinin ayarlarını yapıyoruz.
byte Kart[4] = {37,178,165,0}; // {53, 122, 201, 226} buraya kendi okuttuğunuz kartın ID numarasını yazmalısınız.
boolean Yetki;
void setup()
{
Serial.begin(9600);
pinMode(KIRMIZI_LED, OUTPUT);
pinMode(YESIL_LED, OUTPUT);
SPI.begin();
rfid.PCD_Init();
}
void loop()
{
Yetki = true;
if ( rfid.PICC_IsNewCardPresent())
{
if ( rfid.PICC_ReadCardSerial())
{ Serial.print("Okunan Kart ID: ");
Serial.print(rfid.uid.uidByte[0]);
Serial.print(",");
Serial.print(rfid.uid.uidByte[1]);
Serial.print(",");
Serial.print(rfid.uid.uidByte[2]);
Serial.print(",");
Serial.println(rfid.uid.uidByte[3]);
}
for (int i = 0; i < 4; i++)
{
if (rfid.uid.uidByte[i] != Kart[i])
{
Yetki = false;
}
}
if (Yetki == true)
{
Serial.println("Yetki Onaylandi…");
digitalWrite(YESIL_LED, HIGH);
delay(1000);
digitalWrite(YESIL_LED, LOW);
}
else
{
Serial.println("Yetki Onaylanmadi…");
digitalWrite(KIRMIZI_LED, HIGH);
delay(1000);
digitalWrite(KIRMIZI_LED, LOW);
}
rfid.PICC_HaltA();
}
}
Bir modülümüzün kullanımını daha öğrendik. Anlamadığınız kısımları yorum olarak sorabilirsiniz. Youtube kanalımızı takip ederek yeni videolardan haberdar olabilirsiniz.