Arduino RfID Kart Uygılaması RC522 RFID Modül Kullanımı

Kodla Büyü

togius

Süper Üye
Süper Üye
Mesajlar
1,728
https://www.youtube.com/watch?v=bUDgjyRzpnA aşağıdaki kodları kullanarak hazırladığım devrem.

Arduino RfID Kart Uygılaması. Bu uygulamayı geliştirerek basit bir Rfid kart personel takibi uygulaması yapabilirisiniz.

https://github.com/miguelbalboa/rfid adresinden kartımızı çalıştırmamızda gerekli olan kütüphaneyi indirerek Arduino programının kurulu olduğu klasör altındaki libraries klasörüne MFRC522 ismiyle kaydedebilirsiniz.

Merhaba arkadaşlar. Bugün sizlerle Arduino ile RC522 RFID modülünü kullanacağız.

Gereken malzemeler:

Arduino UNO
Breadboard
RC522 RFID modül ve 2 adet RFID kart/tag
Erkek-erkek jumper kablo
LED
220 Ω direnç

RFID genel anlamıyla nesnelerin radyo dalgaları kullanılarak tanınması için kullanılan teknolojidir. Günlük hayatımızda toplu taşıma biletlerinde, işyeri ve okul girişlerindeki turnikelerde karşımıza sıklıkla çıkmaktadır. Kablosuz haberleşme teknolojileri ile ilgili daha fazla bilgi edinmek isterseniz, Kablosuz Haberleşme Teknolojileri yazımızı okuyabilirsiniz.

Kullandığımız kartların kendilerine ait UID isimli bir numarası vardır. Bu numara, her kart için farklıdır. Okuyucumuza kartımızı veya anahtarlığımızı yaklaştırdığımızda bu numara okunarak işlem yapılır. Bu uygulamada, öncelikle elimizdeki kartların UID’lerini Arduino’muzun dahili EEPROM’una kaydederek ve daha sonra okuttuğumuz kartın UID’sini, bellekteki UID değerleriyle karşılaştırarak işlem yapacağız. Devre şemamız şu şekilde:

rc522_bb-1024x626.png


https://github.com/miguelbalboa/rfid adresinden kartımızı çalıştırmamızda gerekli olan kütüphaneyi indirerek Arduino programının kurulu olduğu klasör altındaki libraries klasörüne MFRC522 ismiyle kaydediyoruz.

Öncelikle, elimizdeki kartları Arduino’nun EEPROM’una kaydedecek kodu yüklüyoruz:

Kod:
#include <SPI.h>
#include <MFRC522.h>
#include <EEPROM.h>

#define RST_PIN 9
#define SS_PIN 10

byte readCard[4];
int successRead;

MFRC522 mfrc522(SS_PIN, RST_PIN);

MFRC522::MIFARE_Key key;

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println("RFID KART KAYIT UYGULAMASI");
  Serial.println("--------------------------");
  Serial.println("Lutfen 1 numarali karti okutun");
  Serial.println();
  do {
    //okuma başarılı olana kadar getID fonksiyonunu çağır
    successRead = getID(); 
  }
  while (!successRead);
  for ( int i = 0; i < mfrc522.uid.size; i++ )
  {
    //kartın UID'sini EEPROM'a kaydet
    EEPROM.write(i, readCard[i] ); 
  }
  Serial.println("Kart EEPROM'a kaydedildi.");
  Serial.println();
  Serial.println("Lutfen 2 numarali karti okutun.");
  Serial.println();
  do {
    successRead = getID();
  }
  while (!successRead);
  for ( int i = 0; i < mfrc522.uid.size; i++ )
  {
    EEPROM.write(i + 4, readCard[i] );
  }
  Serial.println("Kart EEPROM'a kaydedildi.");
  Serial.println();
  Serial.println("Kart kayit islemi basarili!");
}

void loop()
{
}

int getID() {
  //yeni bir kart okunmadıysa 0 döndür
  if ( ! mfrc522.PICC_IsNewCardPresent()) { 
    return 0;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return 0;
  }
  Serial.print("Kart UID'si: ");
  //kartın UID'sini byte byte oku ve seri monitöre yaz
  for (int i = 0; i < mfrc522.uid.size; i++) {  //
    readCard[i] = mfrc522.uid.uidByte[i];
    Serial.print(readCard[i], HEX);
  }
  Serial.println("");
  //kart okumayı durdur ve 1 döndür (okuma başarılı)
  mfrc522.PICC_HaltA();
  return 1;
}

Bu kodu yükledikten sonra, Arduino programından “Seri Port Ekranı”nı açarak kart okuma işlemini yapıyoruz.

kay%C4%B1t1.jpg


Burada dikkat etmemiz gereken nokta, 1 ve 2 numaralı kartların birbirinden farklı olması. Eğer okuma işlemi sırasında 1 ve 2 numaralı kart olarak aynı kartı seçersek, bir sonraki adımda kullanacağımız kod çalışmayacaktır. Kart okuma işlemi yapıldıktan sonra, aşağıdaki kodu Arduino’muza yükleyerek bir sonraki adıma geçiyoruz:

Kod:
#include <SPI.h>
#include <MFRC522.h>
#include <EEPROM.h>

#define RST_PIN 9
#define SS_PIN 10
#define ledPin 7

MFRC522 mfrc522(SS_PIN, RST_PIN);

String lastRfid = "";
String kart1 = "";
String kart2 = "";

MFRC522::MIFARE_Key key;

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  pinMode(ledPin, OUTPUT);
  Serial.println("RFID KART OKUMA UYGULAMASI");
  Serial.println("--------------------------");
  Serial.println();
  //EEPROM'dan kart bilgisini oku
  readEEPROM();
}

void loop()
{
  //yeni kart okununmadıkça devam etme
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }
  //kartın UID'sini oku, rfid isimli string'e kaydet
  String rfid = "";
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    rfid += mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ";
    rfid += String(mfrc522.uid.uidByte[i], HEX);
  }
  //string'in boyutunu ayarla ve tamamını büyük harfe çevir
  rfid.trim();
  rfid.toUpperCase();
  
  if (rfid == lastRfid)
    return;
  lastRfid = rfid;

  Serial.print("Kart 1: ");
  Serial.println(kart1);
  Serial.print("Kart 2: ");
  Serial.println(kart2);
  Serial.print("Okunan: ");
  Serial.println(rfid);
  Serial.println();
  //1 nolu kart okunduysa LED'i yak, 2 nolu kart okunduysa LED'i söndür
  if (rfid == kart1)
  {
    digitalWrite(ledPin, HIGH);
    Serial.println("LED yandi.");
  }
  if (rfid == kart2)
  {
    digitalWrite(ledPin, LOW);
    Serial.println("LED sondu.");
  }
  Serial.println();
  delay(200);

}

void readEEPROM()
{
  //EEPROM'dan ilk kartın UID'sini oku (ilk 4 byte)
  for (int i = 0 ; i < 4 ; i++)
  {
    kart1 += EEPROM.read(i) < 0x10 ? " 0" : " ";
    kart1 += String(EEPROM.read(i), HEX);
  }
  //EEPROM'dan ikinci kartın UID'sini oku
  for (int i = 4 ; i < 8 ; i++)
  {
    kart2 += EEPROM.read(i) < 0x10 ? " 0" : " ";
    kart2 += String(EEPROM.read(i), HEX);
  }
  //Okunan stringleri düzenle
  kart1.trim();
  kart1.toUpperCase();
  kart2.trim();
  kart2.toUpperCase();
}

led1.jpg


Bu kod sayesinde, 1 numaralı kartımızı okuttuğumuzda Arduino, RC522 modülün okuduğu UID değerini EEPROM’da kayıtlı olan 1 numaralı kart değeriyle karşılaştırıyor, eğer iki değer birbirinin aynısı ise 7 numaralı pine bağladığımız LED’i yakıyor. Arduino’muz, yeni bir kart okumak üzere hazır bekler haldeyken 2 numaralı kartı okutur isek, bu sefer yanmakta olan LED söndürülüyor. Eğer EEPROM’da UID’si kayıtlı olmayan bir kart okutursak LED’in durumunda herhangi bir değişiklik olmuyor.

Sizler de elinizdeki farklı RFID kartlarla deneme yaparak farklı kartları kaydedebilirsiniz. RC522 modül, bu uygulamada karta yazma işlemi yapmadığından, uygulamayı elinizdeki desteklenen tüm kartlarla sorunsuzca kullanabilirsiniz.

(Alıntı: http://maker.robotistan.com/arduino-dersleri-18-rc522-rfid-modul-kullanimi/)
 
Geri
Üst