سلام به همه مایکروالکامی ها. در مطالب قبلی نحوه راه اندازی ماژول EM-19 در 2 قسمت بررسی شد. در این مطلب قراره ماژول RFID ریدر (Reader) مایفر RC522 را بررسی و راه اندازی کنیم. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتونید سایر مطالب من رو از این قسمت مطالعه کنید.
RFID چیست؟
RFID به معنی بازشناسی با امواج رادیویی و مخفف عبارت Radio Frequency Identification میباشد.
مورد استفاده ماژول های RFID را به وفور در رختکن و کمد ورزشگاه، استخر، خانه هوشمند، سیستم حضور و غیاب و… دیده اید. سیستم RFID از دو بخش با نام های گیرنده یا ریدر و تگ تشکیل شده است. علاوه بر این آنتن هم نیز داخل این دسته بندی قرار دادر. در واقع ریدر یا کدخوان همان ماژول های RFID Reader/Writer میباشد.
در تصویر زیر اجزای یک سیستم مبتنی بر RFID را مشاهده میکنید.
آشنایی با ساختار کارت Mifare
کارت های مایفر دارای حافظه داخلی 1 کیلوبایت میباشند. در کارت های نوع مایفر، حافظه داخلی به 16 بخش یا سکتور تقسیم میشود. همچنین هر سکتور نیز به 4 بخش کوچکتر بنام بلوک تقسیم بندی خواهد شد. از آنجا که حافظه داخلی کارت های مایفر 1 کیلوبایت و از نوع EEPROM میباشند، هر سکتور به 64 بایت و هر بلوک به 16 بایت تقسیم بندی میشود.
در بلوک صفر از سکتور صفر اطلاعات کارخانه سازنده و شناسه یا همان UID اختصاصی کارت ذخیره شده است. این بلوک فقط قابل خواندن است و قابل تغییر نمیباشد. در کارت های مایفر کلاسیک، 7 بایت اول مشخص کننده شناسه اختصاصی کارت (UID) و مابقی نشان دهدهکارخانه سازنده میباشد.
امنیت کارت های RFID نوع مایفر
همانطور که گفته شد هر سکتور دارای 4 بلوک میباشد. بلوک آخر از هر سکتور برای ذخیره و نگهداری کلید های امنیتی استفاده میشود. پس به این شکل هر سکتور دارای 2 کلید امنیتی (A و B) بوده که توسط بیت های Access در سکتور آخر قابل برنامه ریزی میباشد. مثلا اینطور که یک سکتور فقط قابل نوشتن، قابل خواندن و… باشد. 3 بلوک دیگر هر سکتو برای ذخیره اطلاعات کاربر است.
طبق مسائل رمزنگاری برای رمزگشایی یا دیکد کردن، اگر کلید رمزنگاری را داشته باشیم براحتی عملیات رمرزگشایی انجام خواهد شد. پس کلید دارای اهمیت زیاد است و باید حفظ شود. از آنجا که هر سکتور دارای 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 نیز وجود دارد.
مشخصات ماژول RC522
پروتکل های ارتباطی | SPI/I2C/UART |
فرکانس | 13.56MHz |
تغذیه ماژول | 3.3V |
جریان مورد نیاز | 13-26mA |
قطعات مورد نیاز
شماتیک راه اندازی RC522
برای اتصال و راه اندازی ماژول با استفاده از SPI از شماتیک زیر استفاده کنید.
پین های پروتکل 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 نزدیک ماژول باشد، اطلاعات کامل آن خوانده شده و روی سریال مانیتور نمایش داده خواهد شد. پس تا نمایش آخرین سکتور، کارت یا تگ را نزدیک ماژول نگاه دارید.
برای ساخت یک سیستم کنترل تردد مانند قفل درب باز کن برقی میتوانید از برنامه زیر استفاده کنید. چنانچه کارتی که نزدیک ماژول میشود با 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”)
مشاهده نتیحه
نتیجه گیری
در این مطلب به بررسی تخصصی کارت های مایفر کلاسیک و نحوه راه اندازی و استفاده از ماژول RC522 پرداخته شد. همچنین نحوه خواندن اطلاعات کامل کارت های مایفر نیز مورد بررسی قرار گرفت.
امیدوارم از این آموزش کمال بهره را برده باشید. در صورتی که هرگونه نظر یا سوال داشتید درباره این آموزش لطفا اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو حتما به اشتراک بگذارید. همینطور میتونید این آموزش را پس از اجرای عملی توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.
سلام در کد اخر چند تا تگ یا کارت میتونیم اضافه کنیم
سلام بستگی به میزان حافظه میکرو داره و اینکه چقدر براش در نظر گرفتید.
سلام چگونه میتونم رله رو به کد اضافه کنم و با رله ماژول سنتر رو فعال کنم خیلی ممنون
باید پایه خروجی میکرو رو برای کنترل قطع و وصل رله استفاده کنید.
برای راه اندازی و اتصال رله به میکرو میتونید از آموزش مربوطه (لینک زیر) استفاده کنید.
https://blog.microele.com/interface-relay-with-microcontroller/