راه اندازی ماژول 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); } }
شماتیک مدار :