Arduino Uygulamaları – RFID ile Kart Kontrol

Bir önceki yazımda 16×2 LCD Ekranda Mesafe Okuma uygulaması yapmıştık. Bu yazımda RFID ile Kart Kontrol uygulaması gerçekleştireceğiz.

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

Buradan gerekli kütüphaneyi indirmeyi ve Arduino programının kurulu olduğu klasör altındaki libraries klasörüne MFRC522 ismiyle kaydetmeyi unutmayın.

Gerekli Malzemeler

  • Arduino
  • LED
  • 220 Ω direnç
  • RC522 RFID modül ve 2 adet RFID kart/tag
  • Jumper
  • 9V pil ya da güç kaynağı (Arduino’yu harici beslemek isterseniz)

Gerekli bilgiyi verdikten sonra kodları yazarak ve Arduino’yu bilgisayara takarak kodumuzu yazalım.

Öncelikle Arduino’nun EEPROM’una kaydedecek kodu yazalım:

#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 serial ekrana 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;
}

Dikkat edilmesi 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:

#include 
#include 
#include 
#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();
}

Kodumuzu yazdıktan sonra Arduino’ya yükleyelim. Aşağıdaki gibi bağlantıyı gerçekleştirelim.

Bir sonraki yazımda Ses Kontrol uygulaması gerçekleştireceğiz.

Posted in Arduino, Genel and tagged , .

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir