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

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

  • Yaklaşım Dedektörü Devresi

    Görseldeki yaklaşım sensörü modülü ve pin yapısı görülmektedir. Sensör modülü bir çift IR alıcı verici LED’e sahiptir.  Verici LED kızılötesi frekansta ışık verir. 2 cm-35 cm aralığında bulunan engelin yüzeyine çarpıp yansıyan ışık alıcı sensör tarafından okunur. Dijital çıkış veren modül üzerindeki yeşil ışık yanar ve dijital çıkıştan da LOW (lojik 0) okunur. Algılama uzaklığı…

  • Engelden Kaçan Robot Uygulaması

    Engelden kaçan robotta engelleri algılamak için ultrasonik sensör kullanılmaktadır GörseldekiUltrasonik sensörden gelen bilgilerle mesafe hesaplanır. Mesafe 30 cm’nin altına indiğinde motor tarafından sürücüye sol tekerleği geriye döndürme bilgisi gönderilmektedir. 30 cm üzerindekitüm mesafe ölçümlerinde tekerlekler ileri yönde döndürülecek şekilde motor sürücüye bilgi gönderilmektedir. Taslaktaki “hiz=255;” değeri düz gitme ve dönüş için farklı değerlere ayarlanarakrobot yavaşlatılabilir….

  • LDR’yle Analog Giriş Uygulaması

    LDR, ışıkla direnci ters orantılı olarak değişen elemandır. 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ğlanarakgerilim bölücü oluşturulur. Bağlantı noktasının gerilim değişimi Arduino’nun analog girişineverilir const byte LED = 13; //LED değişkeninin içeriği 13 ile sabitlendi. int LDR; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); } void…

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