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

