BU DERSTEKİ TÜM ÜRÜNLERİ TEK SEPETE TOPLADIK!

Sepetten ihtiyacınız olmayanları çıkarabilirsiniz. Ya da ürün ekleyebilirsiniz. Stokta olmayan ürünler, sepette yer almaz. Bu yüzden lütfen sipariş vermeden kontrol ediniz.

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

Gereken malzemeler:

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:

Bu adresten 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:

#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ıt1

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:

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

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.

 

72 Yorumlar

  1. Acaba bu sistemi daha fazla kartl nasıl yaparız ve şu farklı kart olayını nasıl kaldırırım.
    Cevabınıziçin Şimdiden teşekkürler ! 😀

    • Merhabalar. Kart kayıt fonksiyonunu (ilk koddaki 24-37 numaralı satırlar arası) alta tekrar kopyalayarak, ve kod içerisindeki EEPROM.write() komutundaki sayıyı 4 arttırarak (yani i ise i+4, i+4 ise i+8 vb.) bu işlemi yapabilirsiniz. Unutmayın ki Arduino UNO üzerinde bulunan ATmega328p mikrokontrolcünün dahili EEPROM belleği 1 kB büyüklüğündedir. Yani 256 adet kartla sınırlısınız 🙂

      • iyide mesela tek tek satır yazmak yerine satırı bunu bir döngü gibi istedigimiz kadar kart okutmak istesek mesela 100 tane kart onu nasıl yapcaz

  2. Merhabalar. Ben bu olaya bir de karta veri yazma işini eklemek istiyorum. Alışveriş kartı uygulaması gibi kalan bakiyeyi karta yazmam gerek nasıl yapabilirim?

    • Merhabalar. Bu yazıda RFID modülünün çok basit bir uygulaması anlatıldığı için karta veri yazma/okuma yerine sadece kartın UID’si kullanılarak işlem yapılmıştır. Kartın belleğine yapılacak müdahale “Arduino Dersleri” kapsamının dışına çıkacağından daha detaylı anlatım için farklı bir uygulama yazısı hazırlamayı düşünmekteyiz. Teşekkür ederiz.

  3. Merhaba,
    ben barcode scanner’la barkodu okuyup servo motora buna göre yön verecek uygun kodları arıyorum.Bu konuyla ilgili yerli yada yabancı ulaşabileceğim bir kaynak var mı acaba ?

  4. Aynı kartı ilk okuttuğumda led i yakmak ikinci kez okuttuğumda kapatmak istiyorum.. Ayrıca kayıtlı kartlardan birini iptal etmek istersem ne yapmalıyım.. Şimdiden teşekkürler..

  5. Ben dediğiniz tüm adımları harfiyen uyguladım fakat kart ve anahtarlığın ikisinide okumuyor EEPROM a kaydetme aşamasında. Beklemem mi gerekiyor yoksa. Sizce ne tür bir problem olabilir. RFID Kit almştım robotistan.com dan. Çok da istediğim bir proje. Diğer yabancı forumlardan da araştırdım fakat sonuç aynı.

    • Kırmızı renkte olan Funduino marka RC522 kullanıyorsanız bağlantı kablolarının yeri farklı elinizdeki ürünün datasheet’ini kontrol edip doğru bağlantıyı kurmaya çalışın

    • Aynen bende de farklı kartlar anahtarlıklar ve yapıştırma etiketleri var ama kırmızı renkli anahtarlık çalışmıyor diğerlerinin hepsi çalışıyor.

  6. merhaba,
    arduino una’da bütün işlemler hiç bir hata yaşanmadan başarılı bir şekilde gerçekleşiyor, fakat ben rfid dışında bir çok işlem daha ekleyeceğim için mega2560 kullanıyorum aynı yazılımları megaya atıyorum bağlantıyı da aynı yapıyorum fakat kart kaydetme ekranında kart okutamıyorum. Acaba mega’da bağlantı değişikliği mi yapmam gerekiyor anlayamadım,
    yardımlarınız için şimdiden teşekkürler.

    • Arduino Mega üzerindeki SPI bağlantı noktaları farklı pinlerde olduğundan bağlantıları şu şekilde değiştirmeniz gerekecektir:

      UNO -> MEGA
      13 -> 52
      12 -> 50
      11 -> 51
      10 -> 53

  7. Merhaba kolay gelsin ,yukarıdaki yorumları okudum ve kendı arduino megada 50,51,52,53 u pinlere aktardım ve programın kodunda degiştirdim ama yine kartı kayıt ettiremiyorum.Yardımlarınızı beklıyorum şimdiden teşekkür ederim

  8. Merhaba Arduino Mega klon kullanıyorum yukardaki herşeyi harfiyen yaptım. Bağlantılarımı kontrol ettim. Fakat kart okuma işlemi yapmıyor.

    RST_PIN 5
    SS_PIN 53

  9. Merhaba ben kütüphane dosyasını indirdim ancak dosya içerisinde kütüphane yok diye bir mesaj alıyorum bu sorun nasıl çözebilirim

  10. merhabalr ben rfid şifrelerini birer isim atayıp ve kartı tekrar okuttuğmda lcd ekranda bu ismleri görmek istiyorum bana yardımcı olabilirmisinz

  11. Merhaba ben kütüphane dosyasını indirdim ancak dosya içerisinde kütüphane yok diye bir mesaj alıyorum bu sorun nasıl çözebilirim.

  12. anladığım kadarıyla arduino slave , RFID modülü master olarak ayarlanmış. bu şekilde olunca bir arduino ya birden fazla RFID modülü takabilirmiyiz. yada spı bağlantısı kullanan ama sleve olan başka bir modül takılabilirmi.

  13. ben ardunioya bi sd kart ve hoparlör bağladım ve bunun çalışıp durmasını rc522 ile sağlamak istiyorum bunu nasıl yapabilirim ?

  14. hocam denemesını yaptım cok guzel calsıyo ben led yerıne buzzer otsun ıstıyorum 3 kart tanımlamk ısıtıyorum kartı okutunca 200 ms bıp sesı duyulsun sonra kapansın 3 kartı okutuncada boyle yapmasını sureklı ıstıyorum kodlarla oynadım fakat ıstedım sonucu alamıyorum acaba sıze zahmet olmassa kodları yazıp paylasabıleısenın cok memnun olurum sımdıden tskler

  15. merhabalar hocam eproma kaydetmeden her okuttum kartın ıd sını ekrana nasıl gosterebılırız yardımcı olabılırsenın cok sevınırım

  16. merhaba benim bi projem var yardım ederseniz sevinirim 2000 kişilik Rfıd uygulaması yapmamı istedi hocalarım denedim ama yapamadım eğer yardım ederseniz sevinirim

  17. master kart seçerek diğer kartların kaydedilmesini istiyorum yardımcı olabilir misiniz? sizin çalışmanız da güzel elinize sağlık ama şöyle bir sıkıntı var. Her hangi birisi dışardan bir kart alarak sistemi kontrol edebilir gibime geliyor

    • Bahsettiğiniz uygulama, kütüphanenin güncel sürümünde örnek kodlar altında “AccessControl” ismi ile yer alıyor. Buradan da ulaşabilirsiniz. Güvenlik konusuna gelince, bu sistem yalnızca kartların UID’lerine bakarak işlem yaptığından dolayı sizin de bahsettiğiniz gibi dışarıdan gelecek aynı UID’ye sahip bir kart problem oluşturabilir. Bunu göz önünde bulundurarak sistemi kullanmanızı tavsiye ederim.

  18. Merhaba ben de aynı şekilde uyguladım yükleme tamamlanıyor fakat kartları okumuyor. Sebebi ne olabilir? Yardımcı olabilir misiniz?

  19. Merhaba kolay gelsin güzel bir çalışma olmuş.
    Ben RFID kartlar ile 20 adet ayrı kilidi açtırmak istiyorum. 1 nolu kullanıcı RFID kartını okutttuğunda 1 nolu kilit açılması, 20 nolu kullanıcı okuttuğunda 20 nolu kilit açılması için
    NASIL bir donanıma sahip olmam gerekli?
    4 Kanallı role ile bunu yapabilirmiyim ?
    Şimdiden teşekkür ederim

    • Her bir kilidin açılması için ayrı röleye ihtiyaç duyacağınız için 20’li ya da daha yüksek sayıda röleye sahip röle kartı kullanmanız gerekecektir. Ayrıca Arduino UNO’nun çıkış sayısı yeterli gelmeyecektir (13 adet dijital giriş/çıkış mevcuttur).

  20. Merhaba, öncelikle çok güzel bir çalışma olmuş paylaşımınız için teşekkür ederim.
    Biraz acemiyim , yukarıda belirttiğiniz gibi kütüphaneyi indirdim ve librareries in içine MFRC522 ismiyle kaydettim,programi derledim hatasizdi.Devreyide yukarida verdiginiz gibi yaptm .
    Problem şu ki: Seri Port Ekraninda “karti okutunuz” gibisinden bir yazi görüyorum ancak rc522 karti okumuyor. Ne yapmam gerekitğini bilemedim bir yardimci olursaniz Sevinirim.

    Bir de şöyle bir sorum olacak: Uygun program ile bir kartın UID sini değiştirebilirmiyiz? (Arduino rfid 522 kullanarak tabii) ya da bunu yapmak hangi parçalar lazim?

  21. rfid ile uzaktan okuma yapmak istiyorum.yani bi ürün üzerine rfid etiket yapıştırmak o ürünün belli alan içine girdiğinde okunmasını istiyorum bu modülü bulamadım.yardımcı olursanız sevinirim

    • Bahsettiğiniz sistem için aktif RFID okuyucu cihaz gereklidir. Bunlara en iyi örnek köprü ve otoyol gişelerinde kullanılan HGS’dir.

  22. merhaba. bir kart tanıtıp ardından aynı kart ile ledi açıp kapatmak
    daha sonra 2. kart eklediğimde onunlada aynısını yapmak istiyorum
    şimdiden teşekür ederim

    • 1 ve 2 numaralı kartlar olarak aynı kartı tanımlayın. Daha sonra ikinci koddaki //1 nolu kart okunduysa LED'i yak, 2 nolu kart okunduysa LED'i söndür ile başlayan kısmı altına yer alan iki if döngüsünde yer alan digitalWrite(ledPin, HIGH); satırlarının her ikisini de digitalWrite(ledPin, !digitalRead(ledPin)); olarak değiştirin.

  23. Kardeşim merhaba ben bu projenin daha gelişmişini yapcam proje ödevim bu işin içinde lcd ekran ve buzzer olacak doğru kart okuttuğumda led yancak yanlış kart okuttuğumda hiçbir değişme olmayacak ve kkart okunduğunda ekranda hoşgeldiniz merhaba vs nasıl yazdırabilirim

  24. merahaba hocam rfıd kart ile proje varda yardımcı olursanız sevinirim projem rfıd ile dolap kilidi 20 tane ayrı sınıf dolabı olucak ve tek bir arduino uno ile projemiz gerçekleşirmi ve kaç adet kart hafızaya kaydeder hocam öğrendiğime göre 250 yakın kart ekleye biliriz heral tam bilgim yok yardımcı olursanız sevinirim cumaya kadar projemi sunmam lazm yardımcı olurmusunuz

  25. slm yaptıgınız örnegi denedim çalıştı sizden bir ricam olcak rfıd uygulaması kartı admin kartı 4 defa okuttugumuzda bir baska kartı eprom kayıt edecek ve dogru kartı okutugumuzda mavi led yanacak yanlış okuttugumuzda kırmızı kart yanacak ayrıcana seri port ekranına kartların ıdsini yazacak diger rfıd uygulamalarına yazdım cevap alamadım yada ilgilenmediler bu konuda yardım edermisiniz ?

  26. :\Users\Ahmet\Documents\Arduino\RF_D_KART_KOD_OKUMA\RF_D_KART_KOD_OKUMA.ino: In function ‘void setup()’:

    RF_D_KART_KOD_OKUMA:31: error: ‘EEPROM’ was not declared in this scope

    EEPROM.write(i, readCard[i] );

    ^

    RF_D_KART_KOD_OKUMA:43: error: ‘EEPROM’ was not declared in this scope

    EEPROM.write(i + 4, readCard[i] );

    ^

    exit status 1
    ‘EEPROM’ was not declared in this scope

    HATASI VERİYOR.

    • RFID kartların klonlanabilmesi için içerisinde yer alan tüm data sektörlerinin kopyalanması ve daha sonra bu bilginin başka bir karta aktarılması gereklidir. Bu dersimizde ise basit bir şekilde kartın UID’sini kullanarak işlem yapıyoruz. RFID kartların farklı marka ve modelleri, frekansları ve buna bağlı olarak uyum sağlayabildikleri farklı cihazlar mevcuttur. Bu derste kullandığımız RC522 modülü ise malesef klonlama işlemi için yeterli değildir.

  27. merhaba hersyi yaptım çalıştı da ama ben bunu 20 adet kartla yapmak istiyorum 2. kodda ne yapmam gerekiyor 1.kodu yaptım şimdiden teşekürler

  28. Merhabalar, okul projem için bu kodu kullandım fakat kapı devresi yapacağız yani kartı okutunca röle açılacak, 5 saniye delaydan sonra kapanacak kapatıp açma kartı olmayacak kodu nasıl değiştirebilirim ?

    • https://github.com/miguelbalboa/rfid adresine gittiğinizde sağ kısımda yer alan yeşil renkli “Clone or download” butonuna tıklayın ve daha sonra çıkan seçeneklerden “Download ZIP” seçeneğini seçin. İndirdiğiniz zip dosyası içerisindeki klasörü “Belgelerim” klasörünüz altından “Arduino\libraries\” alt klasörüne çıkartın.

  29. uzun süredir uğraşıyorum lakin çözüm elde edemedim benim yapmak istediğimi bazı arkadaşlar da sormuşlar ama yanıt veren olmamış yarcımcı olursanız sevinirim

    elimde 3 adet rfid kart var bu kartların hepsinin aynı işlemi yapmasını istiyorum mesela 1. kartı okuttum led yanacak yine aynı kartı okutunca ledi kapatacak diğer kartlar da aynı işlemi yapacak

  30. merhaba rfıd seri port kartımı okumuyor bunun nedeni ne olabilir acaba kodum calısıyor yalnızca kartı tanımlatamıyorum

  31. Merhaba bu modül ile bir kapı kilidi sistemi yaptım.Merak ettiğim konu bu kartlar kopyalanabilir mi?Mesela apartman kapıları için olana mavi etiketler kopyalanıyor.Ben kartın id si üzerinden karşılaştırma yapıp eşleşme varsa röle çektiriyorum.Kullanıcı kartını kopyalatma şansına sahip mi?

  32. iyi çalışmalar hocam verdiğiniz kodları denedim çalıştı sistem emeğinize sağlık. ben tek bir manyetik kartla açma kapama yapmak için
    sizin verdiğiniz kodları derledim ama sistemim değişik çalışıyor. kart tanıtırken 1. ve 2. kartı aynı kartı tanıttım . sistemi çalıştırdıktan
    sonra manyetik kartı okutuyorum led yanıyor bir daha okutuyorum led sönmüyor daha sonra anahtarlığı okuttum okuma yaptı daha
    sonra manyetik kartımı okuttum led söndü . yani işlemi devamlı yapmam için arada başka id okutmam gerekti anlamadım sıkıntıyı.
    aşağıda verdiğim kodları bi bakarsanız sevinirim iyi çalışmalar.

    //1 nolu kart okunduysa LED’i yak, 2 nolu kart okunduysa LED’i söndür

    if (((rfid == kart1) || (rfid == kart2))&&(control==0))
    {
    digitalWrite(ledPin, HIGH);
    control=1;
    Serial.println(“LED yandi.”);
    Serial.println(control);
    }
    else if (((rfid == kart1) || (rfid == kart2))&&(control==1))
    {
    digitalWrite(ledPin, LOW);
    control=0;
    Serial.println(“LED sondu.”);
    Serial.println(control);
    }

    Serial.println();
    delay(200);

    }

  33. Merhaba ben projemde birden fazla rc522 devresi kullanıp kart okuma yapıcam ama bunun için rc522 modülüne ait numaraya ihtiyacım var araştırdığım kadarıyla sadece etikete ait numara okuma yapılmış benim okuyucuları isimlendirmem lazım nasıl yapabilirim yardımcı olursanız sevinirim

  34. valla güzel olmuş da dosyaya çıktı alırsak üstünü de vb den doldurursak çok sağlam olur bu gibime geldi. Herşeyi elektronikten beklememek lazım ufak bi personel puantaj programı yazıp bu kart numaralarını oradaki bilgilerle eşleştirirsek aylık puantaj ı bile döker bu diyorum. Ellerinize sağlık güzel paylaşım..

CEVAP VER