راه اندازی ماژول MFRC522 :

تکنولوژی Radio Frequency Identification یا به اختصار RFID اشاره به نوعی ارتباط بیسیم کوتاه برد بین یک دستگاه الکترونیکی و یک فرستنده خارجی با ابعاد کوچک دارد . از تکنولوژی RFID در بسیاری از اکسس کنترلر ها ، گیت های ورودی ، فروشگاه ها و غیره استفاده می شود . تگ های RFID در داخل خود آنتن هایی دارند که دستگاه کارت خوان با ایجاد امواج الکترومغناطیسی و دریافت آن توسط کویل تگ ها ، تگ فعال شده و سپس تبادل اطلاعات مابین تگ و دستگاه کارت خوان صورت میگیرد .

تکنولوژی RFID دارای استاندارد ها و همچنین فرکانس های کاری مشخصی است . به طور معمول سیستم های RFID شامل سه مدل UHF ، 125KHz و 13.56MHz هستند . مدل های UHF برد بیشتری نسبت به دو مدل دیگر دارند و به طور معمول در استفاده هایی همچون گیت های تردد خودرو و… استفاده می شود . تگ های 125KHz و 13.56MHz برد کمتر و در حد چند سانتیمتر را دارند . همچنین این دو مدل از کاربردی ترین تگ های RFID هستند . در هر سیستم RFID فرکانس کاری دستگاه گیرنده و تگ باید یکی باشد .

در این مقاله به راه اندازی ماژول MFRC522 می پردازیم . MFRC522 یک ماژول ارزان قیمت با کارایی بالا است که توانای خواندن و نوشتن بر روی کارت های 13.56MHz را دارد . این ماژول از اینترفیس های SPI ، UART و I2C پشتیبانی میکند . البته به صورت پیش فرض از طریق SPI راه اندازی می شود که می توان با تغییر ریجیستر های آن ، اینترفیس ماژول را عوض کرد .

 

با توجه به پیچدگی کانفیگ کردن این ماژول در این آموزش ما از کتابخانه Adafruit استفاده میکنیم که راه اندازی این ماژول را راحت تر می کند . ماژول MFRC522 توانایی خواندن و نوشتن انواع تگ های مایفر را دارد . تگ های مایفر به صورت 13.56MHz هستند که در مدل های 1KB تا 4KB ساخته می شوند . در این تگ ها حافظه به سکتور و بلوک هایی تقسیم می شوند که علاوه بر این هر کارت دارای یک UID انحصاری است . در بیشتر سیستم های کنترل تردد از UID این کارت ها استفاده می شود چرا که فرایند کل حافظه تگ می توان 1 تا 5 ثانیه طول بکشد .

کد های آردوینو :

ابتدا کتابخانه MFRC522 را نصب و سپس برنامه زیر را بر روی برد آردوینو خود آپلود کنید .

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

// INPUT
#define SS_PIN 10
#define RST_PIN 9
 
MFRC522 rfid(SS_PIN, RST_PIN);

// Init array that will store new NUID
byte nuidPICC[4];

void setup() {
 Serial.begin(9600);
 SPI.begin(); // Init SPI bus
 rfid.PCD_Init(); // Init MFRC522
 
 Serial.println(F("Scan RFID NUID..."));
}

void loop() {
      readRFID();
      delay(200);
}

//
void readRFID()
{ 
  // Look for new card
  if ( ! rfid.PICC_IsNewCardPresent()) 
  return;

    // Verify if the NUID has been readed
  if (  !rfid.PICC_ReadCardSerial())
  return;
  
  if (rfid.uid.uidByte[0] != nuidPICC[0] || 
    rfid.uid.uidByte[1] != nuidPICC[1] || 
    rfid.uid.uidByte[2] != nuidPICC[2] || 
    rfid.uid.uidByte[3] != nuidPICC[3] ) {
    Serial.println(F("A new card has been detected."));

    // Store NUID into nuidPICC array
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
   
    Serial.print(F("RFID tag in dec: "));
    printDec(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
  }
   
  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}


/**
 * Helper routine to dump a byte array as dec values to Serial.
 */
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], DEC);
  }
}

شماتیک مدار :

 

Tags:
About Author: USER_4