15 Ağustos 2018 Çarşamba

Arduino - RC522 RFID Uygulaması

                                                                                                 


Merhaba herkese. Bu yazımda RC522 RFID uygulamasının kodlarını ve anlatım videosunu paylaşacağım. RC522 kart okuma işlemini kendisi
yapıyor bize de bu veriyi SPI ile okumak kalıyor. Kodların kaynağı Maker Robotistan, ben ise üzerinde kendi isteğime yönelik değişiklikler yaptım. Şöyle ki, 2 no'lu pine bağladığım butona basarak kart okuttuğumda bu kartı eeproma kaydetmesini istedim. Daha sonra herhangi bir kart okuttuğumda kart numarasını Serial Monitörde göstermesini istedim. 

Arduino Mega ve Arduino UNO için giriş pinleri farklı. Bu yüzden 2 şemayı da paylaşıyorum. Şemalar robotistan ve instructables'dan alınmıştır. Arduino Mega için şemadan farklı olarak SS pini 9 numaraya değil 53 numaraya girilmiştir.


Anlatım Videosu ve Kodlar;







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

#define RST_PIN 9
#define SS_PIN 53
#define Buton 2

byte readCard[4];
int successRead;
int eepromNumber=0,eepromNumber_t=0;
int CardCount=0;



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

MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;

void setup()
{
  pinMode(Buton,INPUT);
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println("RFID KART KAYIT UYGULAMASI");
  readEEPROM();
}
void ReadSaveCard()
{
  Serial.println("Lutfen Karti okutun");
  Serial.println();
  do
  {
    //okuma başarılı olana kadar getID fonksiyonunu çağır
    successRead = getID();
  }
  while (!successRead);
  for (eepromNumber = 0; eepromNumber < mfrc522.uid.size; eepromNumber++)
  {
    //kartın UID'sini EEPROM'a kaydet
    EEPROM.write(eepromNumber+eepromNumber_t, readCard[eepromNumber]);
  }
  CardCount++;
  Serial.println("Kart EEPROM'a kaydedildi.");
  Serial.print("Kaydedilmis Kart Sayisi ");
  Serial.println(CardCount);
  Serial.println();
  eepromNumber_t=eepromNumber_t+4;
}
void ReadCard()
{
   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("Okunan Kart UID'si: ");
  Serial.println(rfid);

  
  if (rfid == kart1)
  {
    Serial.println("1 no'lu Kart Okundu");
    Serial.println();
  }
  if (rfid == kart2)
  {
    Serial.println("2 no'lu Kart Okundu");
    Serial.println();
  }
  if (rfid == kart3)
  {
    Serial.println("3 no'lu Kart Okundu");
    Serial.println();
  }

}

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);
  }
//EEPROM'dan ikinci kartın UID'sini oku
  for (int i = 8 ; i < 12 ; i++)
  {
    kart3 += EEPROM.read(i) < 0x10 ? " 0" : " ";
    kart3 += String(EEPROM.read(i), HEX);
  }

  //Okunan stringleri düzenle
  kart1.trim();
  kart1.toUpperCase();
  kart2.trim();
  kart2.toUpperCase();
  kart3.trim();
  kart3.toUpperCase();
  Serial.println();
  Serial.println(kart1);
  Serial.println(kart2);
  Serial.println(kart3);
  Serial.println();
}

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("");
  Serial.println("");
  //kart okumayı durdur ve 1 döndür (okuma başarılı)
  mfrc522.PICC_HaltA();
  return 1;
}
void loop()
{
  if(digitalRead(Buton))
  {
    Serial.println("KART OKUTMAK ICIN BUTONDAN ELINIZI CEKIN !");
    while(digitalRead(Buton));
    ReadSaveCard();
    readEEPROM();
  }
  ReadCard();
  delay(250);
}

2 yorum:

  1. Merhabalar Üniversite öğrencisiyim ve projem var C# da kullanmak için ne yapmalıyım yardımcı olurmusunuz bana ?

    YanıtlaSil
  2. C# da nasıl servo motor aktiflestırebiliriz.

    YanıtlaSil