Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

28 Haziran 2021 Pazartesi

RFID nedir? Nasıl çalışır? RC522 RFID Modülü ile Arduino

 RFID nedir? Nasıl çalışır? RC522 RFID Modülü ile Arduino 

İnsanların markette uzun kasa kuyruklarında durup bekledikleri günler çoktan geride kaldı. Sayesinde Ar adio F requency kimliği entification ( RFID ) teknolojisi. Bu RFID tabanlı otomatik ödeme çözümüyle , sepetinizi doldurabilir ve kapıdan çıkabilirsiniz. Artık biri sepetinizdeki her bir ürünü teker teker çaldığında beklemeniz gerekmeyecek. Bunun yerine, ürünlere eklenen RFID etiketleri, arabadaki her öğeyi algılayacak ve neredeyse anında her birini çalacak RFID okuyucu ile iletişim kuracak.

RFID tabanlı Arduino projelerimizin çoğu için RC522 RFID Okuyucu / Yazıcı modülü harika bir seçimdir. Düşük güç, düşük maliyetli, oldukça sağlam, arayüzü kolay ve hobiler arasında delice popüler.

RFID teknolojisi nedir ve nasıl çalışır?

RFID veya Radyo Frekansı Tanımlama sistemi iki ana bileşenden oluşur; tanımlanacak bir nesneye eklenen bir alıcı-verici / etiket ve sorgulayıcı / Okuyucu olarak da bilinen bir Alıcı-Verici.

RFID Teknolojisi Nasıl Çalışır Okuyucu Yazar Sistem Etiketi İletişimi

Okuyucu, bir Radyo Frekansı modülünden ve yüksek frekanslı elektromanyetik alan üreten bir antenden oluşur. Öte yandan, etiket genellikle pasif bir cihazdır, yani pil içermez. Bunun yerine, bilgiyi depolayan ve işleyen bir mikroçip ve bir sinyal alıp iletmek için bir anten içerir.

Bir etikete kodlanmış bilgileri okumak için, Okuyucu'nun yakınına yerleştirilir (okuyucunun doğrudan görüş alanı içinde olması gerekmez). Okuyucu, elektronların etiketin anteni boyunca hareket etmesine ve ardından çipi güçlendirmesine neden olan bir elektromanyetik alan oluşturur.

Etiketin içindeki güçlendirilmiş çip daha sonra sakladığı bilgiyi okuyucuya başka bir radyo sinyali şeklinde geri göndererek yanıt verir. Buna geri saçılma denir. Geri saçılma veya elektromanyetik / RF dalgasındaki değişiklik, okuyucu tarafından algılanır ve yorumlanır ve daha sonra verileri bir bilgisayara veya mikro denetleyiciye gönderir.

Donanıma Genel Bakış - RC522 RFID Okuyucu / Yazıcı Modülü

NXP'den MFRC522 IC'ye dayalı RC522 RFID modülü , dört dolardan daha ucuza çevrimiçi alabileceğiniz en ucuz RFID seçeneklerinden biridir. Genellikle bir RFID kart etiketi ve 1KB belleğe sahip anahtarlık etiketi ile birlikte gelir. Ve en iyisi, bir etiket yazabilir, böylece bir tür gizli mesajınızı içinde saklayabilirsiniz.

RC522 RFID Okuyucu Yazıcı Modülü, Etiket Kartı ve FOB Anahtar Etiketi ile

RC522 RFID Okuyucu modülü, RFID etiketleriyle (ISO 14443A standart etiketleri) iletişim kurmak için kullandığı 13,56 MHz elektromanyetik alan oluşturmak üzere tasarlanmıştır. Okuyucu, maksimum 10 Mbps veri hızı ile 4 pinli Seri Çevresel Arayüz ( SPI ) üzerinden bir mikrodenetleyici ile iletişim kurabilir Ayrıca I2C ve UART protokolleri üzerinden iletişimi de destekler.

Modül, bir kesme pimi ile birlikte gelir. Kullanışlı, çünkü sürekli olarak RFID modülüne sormak yerine “görünümde bir kart var mı? ", Modül yakınına bir etiket geldiğinde bizi uyaracaktır.

Modülün çalışma voltajı 2,5 ila 3,3V arasındadır , ancak iyi haber, mantık pinlerinin 5 volt toleranslı olmasıdır , bu nedenle herhangi bir mantık seviyesi dönüştürücü kullanmadan bir Arduino veya herhangi bir 5V mantık mikrodenetleyicisine kolayca bağlayabiliriz.

İşte eksiksiz özellikler:

Frekans aralığı13.56 MHz ISM Bandı
Ana Bilgisayar ArayüzüSPI / I2C / UART
Çalışma Besleme Voltajı2,5 V ila 3,3 V
Maks. Alan sayısı Çalışma Akımı13-26mA
Min. Akım (Güç kapalı)10µA
Mantıksal Girişler5V Toleranslı
Okuma Aralığı5 santimetre

RC522 RFID Modül Pin Çıkışı

RC522 modülü, kendisini dış dünyaya arayüzleyen toplam 8 pime sahiptir. Bağlantılar aşağıdaki gibidir:

RC522 RFID Okuyucu Yazar Modülü Pin Çıkışı

VCCmodül için güç sağlar. Bu, 2,5 ila 3,3 volt arasında herhangi bir yerde olabilir. Arduino'nuzdan 3.3V çıkışa bağlayabilirsiniz. 5V pinine bağlamanın modülünüzü büyük olasılıkla yok edeceğini unutmayın!

RSTSıfırlama ve güç kapatma için bir giriştir. Bu pin azaldığında, sert güç kapatma etkinleştirilir. Bu, osilatör dahil tüm dahili akım alıcılarını kapatır ve giriş pinleri dış dünyayla bağlantısı kesilir. Yükselen kenarda modül sıfırlanır.

GND Ground Pin'dir ve Arduino'daki GND pinine bağlanması gerekir.

IRQ RFID etiketi yakınına geldiğinde mikro denetleyiciyi uyarabilen bir kesme pimidir.

MISO / SCL / Tx pin, SPI arayüzü etkinleştirildiğinde Master-In-Slave-Out gibi davranır, I2C arayüzü etkinleştirildiğinde seri saat görevi görür ve UART arayüzü etkinleştirildiğinde seri veri çıkışı olarak işlev görür.

MOSI (Ana Çıkış Köle Girişi) RC522 modülüne SPI girişidir.

SCK (Seri Saat) SPI veriyolu Master yani Arduino tarafından sağlanan saat darbelerini kabul eder.

SS / SDA / Rxpin, SPI arayüzü etkinleştirildiğinde Sinyal girişi olarak hareket eder, I2C arayüzü etkinleştirildiğinde seri veri olarak davranır ve UART arayüzü etkinleştirildiğinde seri veri girişi olarak davranır. Bu pim genellikle pimi bir kare içine alarak işaretlenir, böylece diğer pimleri tanımlamak için bir referans olarak kullanılabilir.

Kablolama - RC522 RFID modülünü Arduino UNO'ya bağlama

Artık modül hakkında her şeyi bildiğimize göre, onu Arduino'muza bağlamaya başlayabiliriz!

Başlamak için, modül üzerindeki VCC pinini Arduino'daki 3.3V'a ve GND pinini toprağa bağlayın. Pin RST, Arduino'daki herhangi bir dijital pime bağlanabilir. Bizim durumumuzda, 5 numaralı dijital pime bağlıdır. Kullanacağımız Arduino kütüphanesi desteklemediği için IRQ pini bağlantısız bırakılır.

Artık SPI iletişimi için kullanılan pinlerde kaldık. RC522 modülü çok fazla veri aktarımı gerektirdiğinden, bir mikrodenetleyici üzerindeki donanım SPI pinlerine bağlandığında en iyi performansı verecektir. Donanım SPI pinleri, başka bir pin seti kullanarak arayüz kodunu 'bit-vurmaktan' çok daha hızlıdır.

Her Arduino Board'un uygun şekilde bağlanması gereken farklı SPI pinlerine sahip olduğunu unutmayın. UNO / Nano V3.0 gibi Arduino kartları için bu pinler dijital 13 (SCK), 12 (MISO), 11 (MOSI) ve 10 (SS).

Bir Mega'nız varsa, iğneler farklıdır! Dijital 50 (MISO), 51 (MOSI), 52 (SCK) ve 53 (SS) kullanmak isteyeceksiniz. Hızlı anlamak için aşağıdaki tabloya bakın.

MOSIMİSOSCKCS
Arduino Uno11121310
Arduino Nano11121310
Arduino Mega51505253

Yukarıda belirtilenden farklı bir Arduino kartı kullanıyorsanız, devam etmeden önce Arduino resmi belgelerini kontrol etmeniz önerilir .

RC522 RFID Okuyucu Yazar Modülü ile Arduino Kablolama Fritzing Bağlantıları
Arduino UNO ile Kablolama RC522 RFID Okuyucu Yazıcı Modülü

Arduino Kodu - RFID Etiketi Okuma

RC522 RFID modülü ile iletişim kurmak bir sürü iştir, ancak neyse ki bizim için MFRC522 kitaplığı , RFID etiketlerinden okumayı ve bunlara yazmayı kolaylaştıran bir kitaplık var Miguel Balboa'ya teşekkürler. Önce kütüphaneyi, GitHub deposunu ziyaret ederek indirin veya zip dosyasını indirmek için bu düğmeye tıklayın:

Kurmak için Arduino IDE'yi açın, Sketch> Include Library> Add .ZIP Library'ye gidin ve ardından indirdiğiniz rfid-master.zip dosyasını seçin. Bir kitaplık kurma konusunda daha fazla ayrıntıya ihtiyacınız varsa, bu Arduino Kitaplığı Kurma öğreticisini ziyaret edin .

Kitaplığı kurduktan sonra, Örnekler alt menüsünü açın ve MFRC522> DumpInfo örnek taslağını seçin.

MFRC522 Kitaplık Taslak Dökümü Bilgisi

Bu taslak etikete herhangi bir veri yazmayacaktır. Yalnızca size etiketi okuyup okumadığını söyler ve bununla ilgili bazı bilgiler görüntüler. Bu, herhangi bir yeni etiketi denemeden önce çok faydalı olabilir!

Taslağın başlangıcına gidin ve RST_PIN'in doğru şekilde başlatıldığından emin olun , bizim durumumuzda dijital pin # 5 kullanıyoruz, bu yüzden 5 olarak değiştirin!

MFRC522 Library Sketch DumpInfo RST pini

Tamam, şimdi çizimi yükleyin ve Seri Monitörü açın. Etiketi modüle yaklaştırır yakınlaştırmaz, muhtemelen aşağıdaki gibi bir şey elde edeceksiniz. Tüm bilgiler görüntülenene kadar etiketi hareket ettirmeyin.

MFRC522 Kitaplığı DumpInfo Çıkışı

Etiketin Benzersiz Kimliği (UID), bellek boyutu ve 1K belleğin tamamı dahil olmak üzere etiket hakkındaki tüm yararlı bilgileri görüntüler.

MIFARE Klasik 1K Bellek Düzeni

Etiketin 1K hafızası 16 sektörde düzenlenmiştir (0'dan 15'e kadar) Her sektör ayrıca 4 bloğa bölünmüştür (blok 0'dan 3'e). Her blok 16 bayt veri depolayabilir (0'dan 15'e kadar).

Bu kesinlikle bize sahip olduğumuzu söylüyor

16 sektör x 4 blok x 16 bayt veri = 1024 bayt = 1K hafıza

Sektörler, bloklar ve veriler içeren 1K belleğin tamamı aşağıda vurgulanmıştır.

MFRC522 Kitaplığı DumpInfo Bellek Düzeni
3B Gösterimi MIFARE Classic 1K Bellek Haritası Düzeni
MIFARE Classic 1K Bellek Haritası Düzeninin 3 Boyutlu Gösterimi
Her sektörün Blok 3'ü Sektör Fragmanı olarak adlandırılır ve bir sektörde kalan bloklara okuma ve yazma erişimi sağlamak için Erişim Bitleri adı verilen bilgileri içerir Bu, her sektörün yalnızca alttaki 3 bloğunun (blok 0, 1 ve 2) aslında veri depolama için mevcut olduğu anlamına gelir, yani kendi kullanımımız için 64 bayt sektör başına 48 bayta sahibiz.Ayrıca kesimi 0 Blok 0 olarak bilinen İmalatçı Blok / İmalatçı Veri IC üretici verileri içerir ve U nique İD entifier (UID). Üretici Bloğu aşağıda kırmızıyla vurgulanmıştır.MFRC522 Kitaplığı DumpInfo Üretici Bloğu

Uyarı:

Üretici Bloğunun üzerine yazmak çok risklidir ve kartı kalıcı olarak kilitleyebilir.


Arduino Kodu - RFID Etiketi Yazma

RFID etiketini başarıyla okuduğunuzu düşünürsek, bir sonraki deneyimize geçeceğiz. Aşağıdaki taslak, RFID etiketine özel verilerin yazılmasıyla ilgili temel bir gösteri yapacaktır. Ayrıntılı incelemeye başlamadan önce taslağı deneyin.

#include <SPI.h>      //include the SPI bus library
#include <MFRC522.h>  //include the RFID reader library

#define SS_PIN 10  //slave select pin
#define RST_PIN 5  //reset pin

MFRC522 mfrc522(SS_PIN, RST_PIN);  // instatiate a MFRC522 reader object.
MFRC522::MIFARE_Key key;          //create a MIFARE_Key struct named 'key', which will hold the card information

//this is the block number we will write into and then read.
int block=2;  

byte blockcontent[16] = {"Last-Minute-Engg"};  //an array with 16 bytes to be written into one of the 64 card blocks is defined
//byte blockcontent[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};  //all zeros. This can be used to delete a block.

//This array is used for reading out a block.
byte readbackblock[18];

void setup() 
{
    Serial.begin(9600);        // Initialize serial communications with the PC
    SPI.begin();               // Init SPI bus
    mfrc522.PCD_Init();        // Init MFRC522 card (in case you wonder what PCD means: proximity coupling device)
    Serial.println("Scan a MIFARE Classic card");
  
  // Prepare the security key for the read and write functions.
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;  //keyByte is defined in the "MIFARE_Key" 'struct' definition in the .h file of the library
  }
}

void loop()
{  
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
    Serial.println("card selected");
         
   //the blockcontent array is written into the card block
   writeBlock(block, blockcontent);
   
   //read the block back
   readBlock(block, readbackblock);
   //uncomment below line if you want to see the entire 1k memory with the block written into it.
   //mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
   
   //print the block contents
   Serial.print("read block: ");
   for (int j=0 ; j<16 ; j++)
   {
     Serial.write (readbackblock[j]);
   }
   Serial.println("");
}



//Write specific block    
int writeBlock(int blockNumber, byte arrayAddress[]) 
{
  //this makes sure that we only write into data blocks. Every 4th block is a trailer block for the access/security info.
  int largestModulo4Number=blockNumber/4*4;
  int trailerBlock=largestModulo4Number+3;//determine trailer block for the sector
  if (blockNumber > 2 && (blockNumber+1)%4 == 0){Serial.print(blockNumber);Serial.println(" is a trailer block:");return 2;}
  Serial.print(blockNumber);
  Serial.println(" is a data block:");
  
  //authentication of the desired block for access
  byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
         Serial.print("PCD_Authenticate() failed: ");
         Serial.println(mfrc522.GetStatusCodeName(status));
         return 3;//return "3" as error message
  }
  
  //writing the block 
  status = mfrc522.MIFARE_Write(blockNumber, arrayAddress, 16);
  //status = mfrc522.MIFARE_Write(9, value1Block, 16);
  if (status != MFRC522::STATUS_OK) {
           Serial.print("MIFARE_Write() failed: ");
           Serial.println(mfrc522.GetStatusCodeName(status));
           return 4;//return "4" as error message
  }
  Serial.println("block was written");
}



//Read specific block
int readBlock(int blockNumber, byte arrayAddress[]) 
{
  int largestModulo4Number=blockNumber/4*4;
  int trailerBlock=largestModulo4Number+3;//determine trailer block for the sector

  //authentication of the desired block for access
  byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));

  if (status != MFRC522::STATUS_OK) {
         Serial.print("PCD_Authenticate() failed (read): ");
         Serial.println(mfrc522.GetStatusCodeName(status));
         return 3;//return "3" as error message
  }

//reading a block
byte buffersize = 18;//we need to define a variable with the read buffer size, since the MIFARE_Read method below needs a pointer to the variable that contains the size... 
status = mfrc522.MIFARE_Read(blockNumber, arrayAddress, &buffersize);//&buffersize is a pointer to the buffersize variable; MIFARE_Read requires a pointer instead of just a number
  if (status != MFRC522::STATUS_OK) {
          Serial.print("MIFARE_read() failed: ");
          Serial.println(mfrc522.GetStatusCodeName(status));
          return 4;//return "4" as error message
  }
  Serial.println("block was read");
}

Seri monitördeki çıktı şöyle görünecektir.

RC522 RFID Yazma Etiketi Kod Taslağı Çıktısı

Kod Açıklaması:

Taslak, MFRC522 ve SPI kitaplığını dahil ederek, RC522'nin bağlı olduğu Arduino pinlerini tanımlayarak ve MFRC522 okuyucu nesnesini örnekleyerek başlar.

#include <SPI.h>//include the SPI bus library
#include <MFRC522.h>//include the RFID reader library

#define SS_PIN 10  //slave select pin
#define RST_PIN 5  //reset pin
MFRC522 mfrc522(SS_PIN, RST_PIN);        // instatiate a MFRC522 reader object.
MFRC522::MIFARE_Key key;//create a MIFARE_Key struct named 'key', which will hold the card information

Ardından, verilerimizi saklayacağımız bir blok tanımlamamız gerekiyor. Burada sektör 0 blok 2 seçilir. Unutmayın, hiçbir sektörün 3. bloğunu seçmeyin. 'Sektör fragmanı' bloğuna yazmak, bloğu kullanılamaz hale getirebilir.

//this is the block number we will write into and then read.
int block=2;

Daha blockcontent[16]sonra, bloğa yazmak istediğimiz mesajı tutan 16 baytlık bir dizi tanımlarız Sıfır yazarak herhangi bir bloğu silebilirsiniz.

byte blockcontent[16] = {"Last-Minute-Engg"};  //an array with 16 bytes to be written into one of the 64 card blocks is defined
//byte blockcontent[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};  //all zeros. This can be used to delete a block.

Ardından, adlı 18 baytlık bir dizi tanımlamamız gerekiyor readbackblock[18]Bu, yazılı içeriği geri okumak için kullanılabilir. Bekle… 18 bayt mı? Bunun 16 bayt olması gerekmez mi? Cevap Hayır. MFRC522 kütüphanesindeki MIFARE_Read yöntemi, bir bloğun 16 baytını tutmak için en az 18 baytlık bir arabellek gerektirir.

//This array is used for reading out a block.
byte readbackblock[18];

Kurulum işlevinde: PC, SPI kitaplığı ve MFRC522 nesnesiyle seri iletişimi başlatıyoruz. Ayrıca okuma ve yazma işlevleri için güvenlik anahtarını da hazırlamamız gerekiyor. Burada altı anahtar baytın tümü 0xFF olarak ayarlanmıştır. Kitteki kartlar yeni olduğu ve anahtarlar hiçbir zaman tanımlanmadığı için 0xFF'dir. Başkası tarafından programlanmış bir kartımız olsaydı, ona erişebilmek için anahtarı bilmemiz gerekirdi. Bu anahtarın daha sonra bunun yerine 'anahtar'da saklanması gerekir.

Serial.begin(9600);        // Initialize serial communications with the PC
SPI.begin();               // Init SPI bus
mfrc522.PCD_Init();        // Init MFRC522 card (in case you wonder what PCD means: proximity coupling device)
Serial.println("Scan a MIFARE Classic card");
  
// Prepare the security key for the read and write functions.
for (byte i = 0; i < 6; i++) {
   key.keyByte[i] = 0xFF;  //keyByte is defined in the "MIFARE_Key" 'struct' definition in the .h file of the library
}

Döngü fonksiyonu: Önce görünümde bir kart olup olmadığını tararız, eğer varsa, o kart yazma ve okuma amacıyla seçilir.

// Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  Serial.println("card selected");

Bloğu sıkmak artık çok kolay, sadece writeBlock()iki parametre alan özel bir fonksiyon çağırmamız gerekiyor - biri veriyi ve veriyi yazmakla ilgilendiğimiz blok numarası.

//the blockcontent array is written into the card block
writeBlock(block, blockcontent);

Yazma işleminin başarılı olup olmadığını kontrol etmek için blok içeriğini tekrar okumamız gerekir. Bu, readBlock()yine iki parametre alan özel işlev kullanılarak yapılabilir - biri blok numarası ve diğeri blok içeriklerini depolamak için dizidir. PICC_DumpToSerial()1k hafızanın tamamını içine yazılan blok ile görmek istiyorsanız fonksiyonu kullanabilirsiniz .

//read the block back
readBlock(block, readbackblock);
//uncomment below line if you want to see the entire 1k memory with the block written into it.
//mfrc522.PICC_DumpToSerial(&(mfrc522.uid));

Son olarak, bir for döngüsü kullanarak readbackblock dizisinin içeriğini yazdırır ve içeriği seri monitörde görüntüleriz.

//print the block contents
 Serial.print("read block: ");
 for (int j=0 ; j<16 ; j++)
 {
   Serial.write (readbackblock[j]);
 }
 Serial.println("");

Arduino Projesi

RFID Kapı Kilidi Erişim Kontrol Sistemi

Basit bir RC522 RFID okuyucu modülünün bir RFID Kapı Kilidi Erişim Kontrol Sistemi yapmak için nasıl kullanılabileceğini göstermek için hızlı bir Arduino projesi oluşturalım Programımız, RC522 okuyucu tarafından enerjilendirilecek kadar yakın olduğunda her RFID etiketinin benzersiz kimliğini tarayacaktır. Etiketin UID'si, Arduino belleğinde depolanan önceden tanımlanmış bir değerle (Ana etiket) eşleşirse, erişim verilecektir. Ve herhangi bir bilinmeyen etiketi tararsak, erişim reddedilecektir.

RC522 RFID Okuyucu Yazar Kapı Kilidi Erişim Kontrolü Arduino Projesi
Kapı Kilidi Erişim Kontrolü Arduino Proje Çıkışı

Elbette bu proje, kapıları açmak, bir röleyi açmak, bir LED'i yakmak veya aklınıza gelebilecek herhangi bir şey için arayüz oluşturabilir.

16 × 2 karakter LCD'lere aşina değilseniz, eğitimin altındaki okumayı (en azından gözden geçirmeyi) düşünün.

Kod yüklemeye ve etiketleri taramaya başlamadan önce, proje için devre şemasına bakalım.

RC522 RFID Okuyucu ve LCD ile Arduino Kablolama Fritzing Bağlantıları
Arduino UNO ve 16 × 2 Karakter LCD ile Kablolama RC522 RFID Okuyucu Yazıcı Modülü

Bu kadar! Şimdi, aşağıdaki taslağı deneyin.

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

#define RST_PIN 9
#define SS_PIN 10

byte readCard[4];
String MasterTag = "20C3935E";	// REPLACE this Tag ID with your Tag ID!!!
String tagID = "";

// Create instances
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //Parameters: (rs, enable, d4, d5, d6, d7) 

void setup() 
{
  // Initiating
  SPI.begin(); // SPI bus
  mfrc522.PCD_Init(); // MFRC522
  lcd.begin(16, 2); // LCD screen

  lcd.clear();
  lcd.print(" Access Control ");
  lcd.setCursor(0, 1);
  lcd.print("Scan Your Card>>");
}

void loop() 
{
  
  //Wait until new tag is available
  while (getID()) 
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    
    if (tagID == MasterTag) 
    {
      
      lcd.print(" Access Granted!");
      // You can write any code here like opening doors, switching on a relay, lighting up an LED, or anything else you can think of.
    }
    else
    {
      lcd.print(" Access Denied!");
    }
    
      lcd.setCursor(0, 1);
      lcd.print(" ID : ");
      lcd.print(tagID);
      
    delay(2000);

    lcd.clear();
    lcd.print(" Access Control ");
    lcd.setCursor(0, 1);
    lcd.print("Scan Your Card>>");
  }
}

//Read new tag if available
boolean getID() 
{
  // Getting ready for Reading PICCs
  if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
  return false;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
  return false;
  }
  tagID = "";
  for ( uint8_t i = 0; i < 4; i++) { // The MIFARE PICCs that we use have 4 byte UID
  //readCard[i] = mfrc522.uid.uidByte[i];
  tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
  }
  tagID.toUpperCase();
  mfrc522.PICC_HaltA(); // Stop reading
  return true;
}

Program oldukça basit. Başlangıçta gerekli kitaplıkları dahil ediyoruz, Arduino pinlerini tanımlıyoruz, LCD ve MFRC522 nesnelerinin örneklerini oluşturuyoruz ve ana etiketi tanımlıyoruz.

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

#define RST_PIN 9
#define SS_PIN 10

byte readCard[4];
String MasterTag = "20C3935E";	// REPLACE this Tag ID with your Tag ID!!!
String tagID = "";

// Create instances
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //Parameters: (rs, enable, d4, d5, d6, d7)

Kurulum işlevinde, SPI arayüzünü, MFRC522 nesnesini ve LCD'yi başlatıyoruz. Bunu takiben LCD'ye hoş geldiniz mesajı yazdırıyoruz.

void setup() 
{
  // Initiating
  SPI.begin(); // SPI bus
  mfrc522.PCD_Init(); // MFRC522
  lcd.begin(16, 2); // LCD screen

  lcd.clear();
  lcd.print(" Access Control ");
  lcd.setCursor(0, 1);
  lcd.print("Scan Your Card>>");
}

Döngü işlevinde, yeni etiket taranana kadar bekleriz. İşlem tamamlandıktan sonra, bilinmeyen etiketi önceden kurulum işlevinde tanımlanan ana etiketle karşılaştırırız. Bu kadar! Kimliği ana kimlikle eşleşirse, erişim izni verilmezse reddedilir.

void loop() 
{
  
  //Wait until new tag is available
  while (getID()) 
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    
    if (tagID == MasterTag) 
    {
      
      lcd.print(" Access Granted!");
      // You can write any code here like opening doors, switching on a relay, lighting up an LED, or anything else you can think of.
    }
    else
    {
      lcd.print(" Access Denied!");
    }
    
      lcd.setCursor(0, 1);
      lcd.print(" ID : ");
      lcd.print(tagID);
      
    delay(2000);

    lcd.clear();
    lcd.print(" Access Control ");
    lcd.setCursor(0, 1);
    lcd.print("Scan Your Card>>");
  }
}

Projedeki en önemli şey getID () adında özel bir işlevdir Yeni kartı taradığında, bir for döngüsü içinde 4 baytlık UID'yi dizeye dönüştürür ve tek bir dize oluşturmak için birleştirir.

boolean getID() 
{
  // Getting ready for Reading PICCs
  if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
  return false;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
  return false;
  }
  tagID = "";
  for ( uint8_t i = 0; i < 4; i++) { // The MIFARE PICCs that we use have 4 byte UID
  //readCard[i] = mfrc522.uid.uidByte[i];
  tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
  }
  tagID.toUpperCase();
  mfrc522.PICC_HaltA(); // Stop reading
  return true;
}

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.