RFID Uygulaması

Görseldeki uygulamada RFID okuyucuya geçerli bir kart okutulduğunda seri ekranda “ge-
çerli kart” yazar. Geçersiz kart okutulduğunda kartın ID’sini verir. ID’si programa dâhil edilen
kartlar, geçerli kart olur. Kart geçerliyken çalışan kod blokuna istenen kodlar yazılarak istenen
kontroller sağlanır.

#include <SPI.h> // Dahili SPI kütüphanesi
#include <MFRC522.h>  // v1.4.9

#define reset 9 // Reset pini
#define ss 10  // SS pin

MFRC522 kartOkuyucu(ss, reset);  // kartOkuyucu isimli nesne oluşturuldu.

void setup() {
  Serial.begin(9600);		//Bilgisayarın seri ekranıyla UART iletişimi.
  SPI.begin();			// MFRC522 kart okuyucusuyla SPI iletişimi.
  kartOkuyucu.PCD_Init();		// MFRC522'yi başlat
  Serial.println("Lütfen kartı okutunuz.");
}

void loop() {
  if ( ! kartOkuyucu.PICC_IsNewCardPresent())  //Bir kart okunana kadar bekle.
    return;

  if ( ! kartOkuyucu.PICC_ReadCardSerial())  // Kartı oku.
    return;

  Serial.print("Kart ID: ");
  yazdir(kartOkuyucu.uid.uidByte, kartOkuyucu.uid.size);
  kartOkuyucu.PICC_HaltA();
  Serial.println("\n Lütfen kartı okutunuz.");
}

void yazdir(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX); // HEX olarak yazdır.
  }
}


#include <SPI.h> // Dahili SPI kütüphanesi
#include <MFRC522.h>  // v1.4.9

#define reset 9 // Reset pini
#define ss 10  // SS pin

MFRC522 kartOkuyucu(ss, reset);  // kartOkuyucu isimli nesne oluşturuldu.

byte i, j, k;
byte kartSayisi = 2; //Kart sayısı doğru girilmelidir.
byte kartlar[][4] = {
  {0xA6, 0x06, 0x1E, 0xF9}, // ilk kartın dört byte'lık ID'si HEX olarak tanımlandı.
  {0xA6, 0x06, 0x1E, 0xF8}, // ikinci kart...
};

void setup() {
  Serial.begin(9600);		//Bilgisayarın seri ekranıyla UART iletişimi.
  SPI.begin();			// MFRC522 kart okuyucusuyla SPI iletişimi.
  kartOkuyucu.PCD_Init();		// MFRC522'yi başlat
  Serial.println("Lütfen kartı okutunuz.");
}

void loop() {
  if ( ! kartOkuyucu.PICC_IsNewCardPresent())  //Bir kart okunana kadar bekle.
    return;

  if ( ! kartOkuyucu.PICC_ReadCardSerial())  // Kartı oku.
    return;

  if (kartKontrol()) { // Kart geçerliyse yapılacaklar...
    Serial.println("Kart geçerli.");
  }
  else { // Kart geçerli değilse yapılacaklar...
    for (i = 0; i < 4; i++) {
      Serial.print(kartOkuyucu.uid.uidByte[i], HEX); //Geçersiz kartın ID'sini ekrana yazdır.
      Serial.print(" ");
    }
    Serial.println(" numaralı kartınız sisteme tanımlı değil!");
  }
  delay(500);
  Serial.println("\n Lütfen kartı okutunuz.");
}

boolean kartKontrol() { // Kart geçerliye 1, değilse 0 döndürür.
  k = 0;
  for (j = 0; j < kartSayisi; j++) { // Kayıtlı tüm kartlara bak.
    for (i = 0; i < 4; i++) { // Her kartın ID'si dört byte.
      if (kartlar[j][i] == kartOkuyucu.uid.uidByte[i]) {//Okunan kartı kayıtlı olanlarla karşılaştır.
        k++;
        if (k == 4) { // Tüm byte'lar doğrulandıysa...
          return 1; // 1 döndür.
        }
      }
    }
  }
  return 0; // Okunan kart kayıtlı kartlarla eşleşmediyse 0 döndür.
}

#include <EEPROM.h>
#include <SPI.h> // Dahili SPI kütüphanesi
#include <MFRC522.h>  // v1.4.9

#define reset 9 // Reset pini
#define ss 10  // SS pin

MFRC522 kartOkuyucu(ss, reset);  // kartOkuyucu isimli nesne oluşturuldu.

int i, k, j; // j değişkeni kayıtlı kartların dört byte'lık ID'sinin ilk byte numarasını tutmaktadır.
byte kartSayisi; //EEPROM hafızanın 0. byte'da tutulacak.

void setup() {
  Serial.begin(9600);		//Bilgisayarın seri ekranıyla UART iletişimi.
  SPI.begin();			// MFRC522 kart okuyucusuyla SPI iletişimi.
  kartOkuyucu.PCD_Init();		// MFRC522'yi başlat
  //EEPROM.write(0, 0); // Yönetici kartını sıfırlamak için kullanılır (Kart sayısı da sıfırlanır).
  kartSayisi = EEPROM.read(0); // Cihaz yeniden başladığında kart sayısını EEPROM'dan al.
  Serial.print("Kayıtlı kart sayısı: "); Serial.println(kartSayisi);

  if (!kartSayisi) { // Kart sayısı sıfır ise yönetici kartı tanımla.
    Serial.println("Yönetici kartı kayıtlı değil. Lütfen yönetici olacak kartı okutunuz.");
    kartOku();
    for (i = 0; i < 4; i++) {
      EEPROM.write(i + 1, kartOkuyucu.uid.uidByte[i]); //Yeni kartı sıradaki dört byte'a yaz.
      Serial.print(kartOkuyucu.uid.uidByte[i], HEX); //Yönetici kartın ID'sini ekrana yazdır.
      Serial.print(" ");
    }
    EEPROM.write(0, 1); // Kart sayısı 1 oldu.
    Serial.println(" numaralı Yönetici kartı hafızaya kaydedildi.");
    delay(2000);
  }
  Serial.println("Lütfen kartı okutunuz.");
}


void loop() {
  kartOku();

  if (kartKontrol()) { // Kart geçerliyse yapılacaklar...
    Serial.println("Kart geçerli.");
  }
  else { // Kart geçerli değilse yapılacaklar...
    for (i = 0; i < 4; i++) {
      Serial.print(kartOkuyucu.uid.uidByte[i], HEX); //Geçersiz kartın ID'sini ekrana yazdır.
      Serial.print(" ");
    }
    Serial.println(" numaralı kartınız sisteme tanımlı değil!");
  }
  delay(500);
  Serial.println("\n Lütfen kartı okutunuz.");
}
void kartOku() {
  if (  kartOkuyucu.PICC_IsNewCardPresent()) { //Bir kart okunana kadar bekle.
    if ( ! kartOkuyucu.PICC_ReadCardSerial())  // Kartı oku.
      kartOku();
  } else kartOku();

}

boolean kartKontrol() { // Kart geçerliye 1, değilse 0 döndürür.
  k = 0;
  for (j = 1; j < EEPROM.length() / 4; j += 4) {
    /* Kayıtlı tüm kartlara bak. UNO hafızasına 1024/4=256 kart tanımlanabilir.
      j değişkeni kayıtlı kartların dört byte'lık ID'sinin ilk byte numarasını tutmaktadır.*/
    for (i = 0; i < 4; i++) { // Her kartın ID'si dört byte.
      if (EEPROM.read(j + i)  == kartOkuyucu.uid.uidByte[i]) { //Okunan kartı kayıtlı olanlarla karşılaştır. (5. byte'tan sonra)
        k++;
        if (k == 4) { // Tüm byte'lar doğrulandıysa...
          if (j == 1) // Okunan kart yönetici kartı ise...
            yonetimIslemleri();
          else return 1; // 1 döndür.
        }
      }
    }
  }
  return 0; // Okunan kart kayıtlı kartlarla eşleşmediyse 0 döndür.
}


void yonetimIslemleri() {
  Serial.println("Lütfen eklemek veya silmek istediğiniz kartı okutunuz.");

  delay(2000);
  kartOku();
  kartKontrol();

  if (kartKontrol()) { //Kart kayıtlıysa...
    Serial.println("Kart siliniyor. Lütfen bekleyiniz...");
    kartSil(); // Kartı sil.
  }
  else {//Kart kayıtlı değilse...
    kartEkle(); //Kartı ekle.
  }
  if (j == 1)
    return;
}

void kartSil() {
  for (i = j; i < EEPROM.length() - 4; i++) {
    int x = EEPROM.read(i + 4);
    EEPROM.write(i, x);//Bulunan kart ID'sinin ilk byte numarasından (j) başlayarak tüm hafızayı dört byte sola kaydır.
  }
  EEPROM.write(0, EEPROM.read(0) - 1); // Kart sayısını bir azalt.
  Serial.println("Okutulan kart hafızadan silindi.");
}

void kartEkle() {
  kartSayisi = EEPROM.read(0);
  for (i = 0; i < 4; i++) {
    EEPROM.write(kartSayisi * 4 + 1 + i, kartOkuyucu.uid.uidByte[i]);   //Yeni kartı sıradaki dört byte'a yaz.
    Serial.print(kartOkuyucu.uid.uidByte[i], HEX); //Geçersiz kartın ID'sini ekrana yazdır.
    Serial.print(" ");
  }
  EEPROM.write(0, EEPROM.read(0) + 1); // Kart sayısını bir arttır.
  Serial.print("ID numaralı ");
  Serial.print(EEPROM.read(0));
  Serial.println(". kart hafızaya kaydedildi.");
  delay(2000);
}

#include <EEPROM.h>
#include <SPI.h>      // Dahili SPI kütüphanesi
#include <MFRC522.h>  // v1.4.9

#define reset 9  // Reset pini
#define ss 10    // SS pin

MFRC522 kartOkuyucu(ss, reset);  // kartOkuyucu isimli nesne oluşturuldu.

int i, k, j;                              // j değişkeni kayıtlı kartların dört byte'lık ID'sinin ilk byte numarasını tutmaktadır.
byte toplamKullaniciSayisi = 255;         // Sistemi en fazla kaç kişi kullanacak.
byte kartSayisi;                          //EEPROM hafızanın 0. byte'da tutulacak.
const byte role = 4, LED = 3, buton = 2;  // Butona basılarak yönetici kartı değiştirilir.

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(role, OUTPUT);
  pinMode(buton, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(buton), yoneticiKartiOlustur, LOW);
  Serial.begin(9600);      //Bilgisayarın seri ekranıyla UART iletişimi.
  SPI.begin();             // MFRC522 kart okuyucusuyla SPI iletişimi.
  kartOkuyucu.PCD_Init();  // MFRC522'yi başlat
  //EEPROM.write(0, 0); // Yönetici kartını sıfırlamak için kullanılır (Kart sayısı da sıfırlanır).
  kartSayisi = EEPROM.read(0);  // Cihaz yeniden başladığında kart sayısını EEPROM'dan al.
  Serial.print("Kayıtlı kart sayısı: ");
  Serial.println(kartSayisi);

  if (!kartSayisi) {  // Kart sayısı sıfır ise yönetici kartı tanımla.
    yoneticiKartiOlustur();
  }
}


void loop() {
  kartOku();

  if (kartKontrol()) {  // Kart geçerliyse yapılacaklar...
    kartGecerli();
  } else {  // Kart geçerli değilse yapılacaklar...
    kartGecersiz();
  }
}


void kartOku() {
  if (kartOkuyucu.PICC_IsNewCardPresent()) {  //Bir kart okunana kadar bekle.
    if (!kartOkuyucu.PICC_ReadCardSerial())   // Kartı oku.
      kartOku();
  } else kartOku();
}

boolean kartKontrol() {  // Kart geçerliye 1, değilse 0 döndürür.
  k = 0;
  for (j = 1; j < 255 * 4; j += 4) {
    /* Kayıtlı tüm kartlara bak. UNO hafızasına 1024/4=256 kart tanımlanabilir.
      j değişkeni kayıtlı kartların dört byte'lık ID'sinin ilk byte numarasını tutmaktadır.*/
    for (i = 0; i < 4; i++) {                                  // Her kartın ID'si dört byte.
      if (EEPROM.read(j + i) == kartOkuyucu.uid.uidByte[i]) {  //Okunan kartı kayıtlı olanlarla karşılaştır. (5. byte'tan sonra)
        k++;
        if (k == 4) {  // Tüm byte'lar doğrulandıysa...
          if (j == 1)  // Okunan kart yönetici kartı ise...
            yonetimIslemleri();
          else return 1;  // 1 döndür.
        }
      }
    }
  }
  return 0;  // Okunan kart kayıtlı kartlarla eşleşmediyse 0 döndür.
}


void yonetimIslemleri() {
  Serial.println("Lütfen eklemek veya silmek istediğiniz kartı okutunuz.");

  delay(2000);
  kartOku();
  kartKontrol();

  if (kartKontrol()) {  //Kart kayıtlıysa...
    Serial.println("Kart siliniyor. Lütfen bekleyiniz...");
    kartSil();   // Kartı sil.
  } else {       //Kart kayıtlı değilse...
    kartEkle();  //Kartı ekle.
  }
  if (j == 1)
    return;
}

void kartSil() {
  for (i = j; i < EEPROM.length() - 4; i++) {
    int x = EEPROM.read(i + 4);
    EEPROM.write(i, x);  //Bulunan kart ID'sinin ilk byte numarasından (j) başlayarak tüm hafızayı dört byte sola kaydır.
  }
  EEPROM.write(0, EEPROM.read(0) - 1);  // Kart sayısını bir azalt.
  Serial.println("Okutulan kart hafızadan silindi.");
}

void kartEkle() {
  kartSayisi = EEPROM.read(0);
  for (i = 0; i < 4; i++) {
    EEPROM.write(kartSayisi * 4 + 1 + i, kartOkuyucu.uid.uidByte[i]);  //Yeni kartı sıradaki dört byte'a yaz.
    Serial.print(kartOkuyucu.uid.uidByte[i], HEX);                     //Geçersiz kartın ID'sini ekrana yazdır.
    Serial.print(" ");
  }
  EEPROM.write(0, EEPROM.read(0) + 1);  // Kart sayısını bir arttır.
  Serial.print("ID numaralı ");
  Serial.print(EEPROM.read(0));
  Serial.println(". kart hafızaya kaydedildi.");
  delay(2000);
}

void kartGecerli() {
  Serial.println("Kart geçerli.");
  digitalWrite(LED, HIGH);
  digitalWrite(role, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  digitalWrite(role, LOW);
  Serial.println("\n Lütfen kartı okutunuz.");
}
void kartGecersiz() {
  for (i = 0; i < 4; i++) {
    Serial.print(kartOkuyucu.uid.uidByte[i], HEX);  //Geçersiz kartın ID'sini ekrana yazdır.
    Serial.print(" ");
  }
  Serial.println(" numaralı kartınız sisteme tanımlı değil!");

  for (i = 0; i < 3; i++) {
    digitalWrite(LED, HIGH);
    delay(250);
    digitalWrite(LED, LOW);
    delay(250);
  }
  Serial.println("\n Lütfen kartı okutunuz.");
}

void yoneticiKartiOlustur() {
  Serial.println("Yönetici kartı kayıtlı değil. Lütfen yönetici olacak kartı okutunuz.");
  kartOku();
  for (i = 0; i < 4; i++) {
    EEPROM.write(i + 1, kartOkuyucu.uid.uidByte[i]);  //Yeni kartı sıradaki dört byte'a yaz.
    Serial.print(kartOkuyucu.uid.uidByte[i], HEX);    //Yönetici kartın ID'sini ekrana yazdır.
    Serial.print(" ");
  }
  EEPROM.write(0, 1);  // Kart sayısı 1 oldu.
  Serial.println(" numaralı Yönetici kartı hafızaya kaydedildi.");
  delay(2000);
}

Benzer Temrinler & Yazılar

  • IR ile Uzaktan Kumanda Uygulaması

    Görselde IR ile uzaktan kumanda uygulaması görülmektedir. Burada kullanılan kumandalarda her tuşun farklı bir kodu vardır. Kullanılmak istenen tuşun kodunu öğrenebilmek için menülerden “Taslak  Library Ekle  Kütüphaneleri Yönet” seçeneğinden arama kutusuna “IRremote” yazılarak “IRremote” kütüphanesi bulunur ve kurulur. Menülerden “Taslak  Library Ekle  IRremote” seçilerek programın başına eklenir. Aşağıdaki program herhangi bir…

  • ESP32-S3 Pin Yapısı

    ESP32-S3 DevKitC-1 (ESP32-S3-WROOM-1) geliştirme kartının 44 pinli detaylı bacak ve pin bağlantı diyagramı aşağıda yer almaktadır. Vektörel SVG formatında hazırlanmış şemayı doğrudan inceleyebilir veya yüksek çözünürlüklü olarak indirebilirsiniz. 🔍 Vektörel (SVG) Tam Ekran İncele 💾 PNG Formatında İndir ESP32-S3 Önemli Özellikler & Pin Grupları İşlemci: Xtensa® 32-bit LX7 Çift Çekirdek (240 MHz’e kadar), Vektör/Yapay Zeka…

  • Nem Sensörü Uygulaması

    DHT sensörleri, kapasitif nem sensörü ve termistör (NTC) olmak üzere iki parçadan oluşur. İçindeanalog dijital dönüştürü vardır. Görsel 3.15a’da DHT11 ve DHT22’nin pin yapısı görülmektedir.DHT11 ve DHT22 aynı pin çıkışına sahiptir ancak bunların farklı özellikleri vardır. DHT11 0 ile 50 °Carasındaki sıcaklığı ±2 °C doğrulukla verirken DHT22 -40 ile 80 °C arasındaki sıcaklığı ±0,5 °Cdoğrulukla…

  • Seri Port Ekran Uygulaması

    Görseldeki çıktılarda seri port ekranına Serial.println() fonksiyonuyla “MerhabaDünya” yazdırılmaktadır.İkinci programda butonla dijital giriş uygulamasında butonun durumu seri port ekranına yazdırılmaktadır void setup() { Serial.begin(9600); //Seri iletişim baudrate ayarı yapıldı. } void loop() { Serial.println("Merhaba Dünya!"); } const byte buton = 2; void setup() { Serial.begin(9600); //Seri iletişim baudrate ayarı yapıldı. pinMode(buton, INPUT_PULLUP); } void loop()…

  • Isı Sensörü Uygulaması

    Aşağıda LM35 sıcaklık sensörü pin yapısı ve uygulama devresi görülmektedir. LM35 sıcaklık sensörü 4-20 V’la beslenebilmektedir. Çıkış ucu ise 25 °C’de 250 mV gerilimvermektedir. Bu değer her 1 °C’de 10 mV değişim gösterir. 10 bitlik analog giriş 0-5 V için 0-1023 arası değer almaktadır. Analog girişteki gerilim (5/ 1023)*A0 işlemiyle volt cinsinden bulunur. Volt değeri…

  • Uzaktan Kontrollü Araba Uygulaması

    Görseldeki joystick modülünün 10 bitlik ADC’de aldığı değerler verilmiştir. Görselde joystick modülünün pin yapısı görülmektedir. Görsel 3.84’teki verici ve Görsel 3.85’teki alıcı devrelerinde birer adet nRF24L01+ modül kullanılarak kablosuz iletişim uygulaması yapılmıştır. nRF24L01+ modülü Arduino ile haberleşirken SPI protokolünü kullanır. Joystickle x ve y ekseninde 0-1023 arasında okunan değerler map() foksiyonuyla -255 ile 255 arası…

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacaktır. Gerekli alanlar * ile işaretlenmiştir.