راه اندازی ماژول RFID مدل RC522 با آردوینو

راه اندازی ماژول RFID مدل RC522 با آردوینو
نوشته شده توسط

سلام به همه مایکروالکامی ها. در مطالب قبلی نحوه راه اندازی ماژول EM-19 در 2 قسمت بررسی شد. در این مطلب قراره ماژول RFID ریدر (Reader) مایفر RC522 را بررسی و راه اندازی کنیم. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتونید سایر مطالب من رو از این قسمت مطالعه کنید.


RFID چیست؟

RFID به معنی بازشناسی با امواج رادیویی و مخفف عبارت Radio Frequency Identification می‌باشد.

مورد استفاده ماژول های RFID را به وفور در رختکن و کمد ورزشگاه، استخر، خانه هوشمند، سیستم حضور و غیاب و… دیده اید. سیستم RFID از دو بخش با نام های گیرنده یا ریدر و تگ تشکیل شده است. علاوه بر این آنتن هم نیز داخل این دسته بندی قرار دادر. در واقع ریدر یا کدخوان همان ماژول های RFID Reader/Writer می‌باشد.

در تصویر زیر اجزای یک سیستم مبتنی بر RFID را مشاهده می‌کنید.

اجزای یک سیستم مبتنی بر RFID
اجزای یک سیستم مبتنی بر RFID

آشنایی با ساختار کارت Mifare

کارت های مایفر دارای حافظه داخلی 1 کیلوبایت می‌باشند. در کارت های نوع مایفر، حافظه داخلی به 16 بخش یا سکتور تقسیم می‌شود. همچنین هر سکتور نیز به 4 بخش کوچکتر بنام بلوک تقسیم بندی خواهد شد. از آنجا که حافظه داخلی کارت های مایفر 1 کیلوبایت و از نوع EEPROM می‌باشند، هر سکتور به 64 بایت و هر بلوک به 16 بایت تقسیم بندی می‌شود.

تقسیم بندی حافظه داخلی مارت های RFID نوع مایفر
تقسیم بندی حافظه داخلی مارت های RFID نوع مایفر

در بلوک صفر از سکتور صفر اطلاعات کارخانه سازنده و شناسه یا همان UID اختصاصی کارت ذخیره شده است. این بلوک فقط قابل خواندن است و قابل تغییر نمی‌باشد. در کارت های مایفر کلاسیک، 7 بایت اول مشخص کننده شناسه اختصاصی کارت (UID) و مابقی نشان دهدهکارخانه سازنده می‌باشد.

ساختار داخلی بلوک و سکتور صفر ام کارت RFID نوع مایفر
ساختار داخلی بلوک و سکتور صفر ام کارت RFID نوع مایفر

امنیت کارت های RFID نوع مایفر

همانطور که گفته شد هر سکتور دارای 4 بلوک می‌باشد. بلوک آخر از هر سکتور برای ذخیره و نگهداری کلید های امنیتی استفاده می‌شود. پس به این شکل هر سکتور دارای 2 کلید امنیتی (A و B) بوده که توسط بیت های Access در سکتور آخر قابل برنامه ریزی می‌باشد. مثلا اینطور که یک سکتور فقط قابل نوشتن، قابل خواندن و… باشد. 3 بلوک دیگر هر سکتو برای ذخیره اطلاعات کاربر است.

کلید های امنیتی هر سکتور از کارت های RFID نوع مایفر
کلید های امنیتی هر سکتور از کارت های RFID نوع مایفر

طبق مسائل رمزنگاری برای رمزگشایی یا دیکد کردن، اگر کلید رمزنگاری را داشته باشیم براحتی عملیات رمرزگشایی انجام خواهد شد. پس کلید دارای اهمیت زیاد است و باید حفظ شود. از آنجا که هر سکتور دارای 2 کلید امنیتی می‌باشد، به این صورت هر کارت با توجه به داشتن 16 سکتور، دارای 32 کلید امنیتی می‌باشد. هر کلید دارای 6 بایت (48 بیت) است. پس میتوان گفت تعداد حالات هر کلید 2 به توان 48 یعنی 281474976710656 حالت خواهد بود.‌

این تعداد حالات خیلی زیاد است. پس برای هک کردن این نوع کارت (مایفر کلاسیک) به زمان خیلی زیادی نیاز می‌باشد. فرض کنید هر 10 هزار حالت را در مدت 1 ثانیه انجام شود. با این وجود برای پیدا کردن تعداد حالات یک کلید به زمان 281474976710656/10000 یا  28147497671.0656 ثانیه یا تقریبا 28147497671 که معادل 892 سال است برای هر سکتور نیاز می‌باشد.!!!


ماژول RC522

ماژول RC522 از تراشه MFRC522 بهره گرفته است. علاوه بر قابلیت خواندن اطلاعات تگ یا کارت های RFID، قابلیت رایت کردن یا نوشتن روی آن نیز در این ماژول وجود دارد. با این قابلیت شما میتونید اطلاعات مورد نیاز خودتون رو روی تگ نیز رایت کنید. پروتکل ارتباطی این ماژل SPI می‌باشد. پس برای راه اندازی این پروتکل نیاز به 4 پایه هست. علاوه بر این، پروتکل های I2C و UART نیز توسط این تراشه پشتیبانی می‌شوند. فرکانس این ماژول 13.56MHz هست و از تگ و کارت های مایفر پشتیبانی می‌کند. علاوه بر این روی ماژول یک پایه وقفه به نام IRQ نیز وجود دارد.

مشخصات و پایه های ماژول RFID Reader RC522
مشخصات و پایه های ماژول RFID Reader RC522

مشخصات ماژول RC522

پروتکل های ارتباطی SPI/I2C/UART
فرکانس 13.56MHz
تغذیه ماژول 3.3V
جریان مورد نیاز 13-26mA

قطعات مورد نیاز


شماتیک راه اندازی RC522

برای اتصال و راه اندازی ماژول با استفاده از SPI از شماتیک زیر استفاده کنید.

شماتیک راه اندازی ماژول RC522
شماتیک راه اندازی ماژول RC522

پین های پروتکل SPI آردوینو های UNO و Nano:

10 SDA
11 MOSI
12 MISO
13 SCK

نصب کتابخانه مخصوص RC522

ابتدا از طریق این لینک کتابخانه RC522 را دانلود کنید. و از مسیر زیر این کتابخانه را نصب کنید. بعد از نصب نرم افزار را بسته و مجددا باز کنید و بعد از آن به سراغ برنامه نویسی خواهیم رفت.

Sketch > Include Library > Add .ZIP Library


برنامه نویسی

برای خواندن کامل اطلاعات کارت یا تگ مایفر، برنامه زیر را برروی آردوینو خود آپلود کنید. سپس سریال ماینتور را باز کرده و کد های تگ خود را مشاهده کنید. این کد از مسیر زیر نیز قابل دسترس هست. البته باید کتابخانه را نصب کنید.

File > Examples > MFRC522 > DumpInfo

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

constexpr uint8_t RST_PIN = 9;          // Configurable, see typical pin layout above
constexpr uint8_t SS_PIN = 10;         // Configurable, see typical pin layout above

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance

void setup() {
    Serial.begin(9600);		// Initialize serial communications with the PC
    while (!Serial);		// Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
    SPI.begin();			// Init SPI bus
    mfrc522.PCD_Init();		// Init MFRC522
    mfrc522.PCD_DumpVersionToSerial();	// Show details of PCD - MFRC522 Card Reader details
    Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
}

void loop() {
    // Look for new cards
    if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
    }

    // Select one of the cards
    if ( ! mfrc522.PICC_ReadCardSerial()) {
        return;
    }

    // Dump debug info about the card; PICC_HaltA() is automatically called
    mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

بعد از آپلود کد های بالا، مادامی که کارت RFID نزدیک ماژول باشد، اطلاعات کامل آن خوانده شده و روی سریال مانیتور نمایش داده خواهد شد. پس تا نمایش آخرین سکتور، کارت یا تگ را نزدیک ماژول نگاه دارید.

نمایش و خواندن اطلاعات داخلی کارت RFID مایفر
نمایش و خواندن اطلاعات داخلی کارت RFID مایفر

برای ساخت یک سیستم کنترل تردد مانند قفل درب باز کن برقی میتوانید از برنامه زیر استفاده کنید. چنانچه کارتی که نزدیک ماژول می‌شود با UID تعریف شده در برنامه برابر باشد LED متصل به پایه 2 به مدت 500ms روشن خواهد شد. میتوانید با در نظر گرفتن تمهیدات لازم و درایور لازم بجای آن قفل برقی خود را متصل کنید.

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

#define SDA_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SDA_PIN, RST_PIN);

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();   // آماده کردن MFRC522 
  Serial.println("کارت خود را نزدیک ماژول کنید...");
  pinMode(2,OUTPUT);

}
void loop()
{
  //بررسی کارت جدید
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // انتخاب و خواندن کارت
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }
  //نمایش شناسه UID کارت
  Serial.print("UID tag :");
  String content = "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "C6 68 B2 F6") //شناسه UID کارت خود را اینجا جایگزین کنید
  {
    Serial.println("کارت مورد تایید است.");
    digitalWrite(2, HIGH);
    delay(500);
    digitalWrite(2, LOW);
  }

  else
  {
    Serial.println(" کارت غیر مجاز");
    delay(1000);
  }
}

UID کارت خود را در خط زیر بین دابل کوتیشن ها جایگزین کنید.

if (content.substring(1) == “کارت خود UID”)

مشاهده نتیحه

مشاهده نتیجه خواندن و مقایسه کارت FRID
مشاهده نتیجه خواندن و مقایسه کارت FRID

نتیجه گیری

در این مطلب به بررسی تخصصی کارت های مایفر کلاسیک و نحوه راه اندازی و استفاده از ماژول RC522 پرداخته شد. همچنین نحوه خواندن اطلاعات کامل  کارت های مایفر نیز مورد بررسی قرار گرفت.

امیدوارم از این آموزش کمال بهره را برده باشید. در صورتی که هرگونه نظر یا سوال داشتید درباره این آموزش لطفا اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو حتما به اشتراک بگذارید. همینطور میتونید این آموزش را پس از اجرای عملی توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.

۲ دیدگاه برای “راه اندازی ماژول RFID مدل RC522 با آردوینو

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.