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

  • 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ı…

  • LED’le Dijital Çıkış Uygulaması

    Arduino’nun 13. pininde bir LED ve LED’e seri bağlı direnç vardır. Arduino koduLED’i 1 saniye aralıklarla yakıp söndürmektedir. void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, 0); delay(1000); digitalWrite(13, 1); delay(1000); } const byte LED = 13; // Arduino'nun 13 nolu ucu sabit değişken olarak BYTE tipinde LED isminde tanımlandı. void setup() {…

  • Röleyle Dijital Çıkış Uygulaması

    Görselde röle modülünün beslemesi Arduino kartının 5 V ve GND uçlarından verilir. Modülün sinyal girişine Arduino’nun çıkış olarak ayarlanan 13 numaralı pini bağlanır. Modülün NO-COM uçlarına 220 V’la seri bağlanan lamba normalde sönüktür. Modülün sinyal girişi Arduino’nun 13 numaralı pininden lojik 1 (5 V) bilgisini aldığında röle içinde COM ucu NO kontağıyla temas eder ve…

  • Işık Sensörü Uygulaması

    Görseldeki devrede Arduino’nun 5 V gerilimi üzerine uygulanan LDR’nin direnç-gerilim değişiminin anlaşılabilmesi için 10 kΩ’luk bir direnç seri bağlanarak gerilim bölücü oluşturulur. Bağlantı noktasının gerilim değişimi Arduino’nun analog girişine verilir. Aydınlık ortamda LDR’nindirenci 10 kΩ’un altındadır. Karanlıkta (LDR elle kapatıldığında) LDR direnci MΩ değerine doğruartar. LDR üzerine düşen gerilim artacağı için LDR ucuna bağlı A0…

  • 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…

Bir Yorum Yazın

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