کاور بیرونی آموزش RC522

آموزش جامع خواندن و نوشتن روی تگ های RFID با ماژول RC522 و آردوینو

کاور درونی آموزش RC522

مقدمه

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

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

تاحالا به نحوه ی کار بلیت های مترو و اتوبوس، کارت های دانشجویی، کارت های ورود و خروج کارکنان، دستبند های استخر و  … فکر کردید؟ این تکنولوژی که این روزا همه ی ما باهاش سر وکار داریم و به طور فزاینده ای در اطراف ما در حال زیاد شدنه، آر اف آی دی (RFID) نام داره. با این تکنولوژی، شما می تونید اطلاعاتی رو روی یک کارت ( حتی میتونه کارت هم نباشه و مثلا یک جاکلیدی باشه!)  ذخیره کنید و اون رو به صورت غیر تماسی بخونید.

آنچه در این آموزش یاد می گیرید

  • RFID چیست و چگونه کار می کند
  • تگ ها و فرکانس های مختلف RFID چه هستند
  • آَشنایی با ماژول RC522
  • راه اندازی ماژول RC522 با آردوینو و خواندن و نوشتن اطلاعات روی تگ

تکنولوژی RFID چیست و چگونه کار می کند؟

RFID مخفف عبارت Radio Frequency Identification و به معنای شناسایی (تعیین هویت) با امواج رادیوئیه. این تکنولوژی دارای 2 بخش اصلیه، یکیش دستگاه خواننده و نویستنده اطلاعات و دیگری تگ ها (مثل کارت و جاکلیدی و دستبند و …)

ماژول های RFID

دستگاهی که اطلاعات را روی تگ ها می نویسد و یا اطلاعات را از روی تگ ها می خواند شامل یک بخش تولید کننده ی امواج رادیویی و یک آنتن برای پخش کردن این امواج به وسیله ی ساخت یک میدان مغناطیسی است. این دستگاه ها برای کار کردن  باید همیشه به منبع تغذیه (مثل باتری یا برق شهر و… متصل باشند)

ماژول های مختلفی برای خواندن و نوشتن روی تگ های RFID وجود داره و این ماژول ها با فرکانس های مختلفی کار می کنند.

فرکانس های متدوال برای تکنولوژی RFID سه فرکانس 125kHz، 13.56MHz و یا UHF می باشد.

اکثر ماژول ها فقط با یک فرکانس کار می کنند. پس موقع خرید ماژول RFID، باید به فرکانس کاری اون دقت کنید.

همچنین این ماژول ها برای ارتباط  با پردازنده ها از پروتکل های ارتباطی مختلفی از جمله UART، SPI، I2C و … استفاده می کنند. برخی از ماژول ها فقط یکی از این پروتکل های ارتباطی رو داره و برخی دیگر دارای دو یا چند راه ارتباطی هستند.

تگ های RFID

تگ های RFID داری یک تراشه برای ذخیره ی اطلاعات و یک آنتن برای ارسال و دریافت امواج هستند. این تگ ها معمولا به صورت پسیو (passive) هستند، یعنی نیازی به اتصال به باتری و منبع تغذیه ندارند. (پس چجوری کار می کنند؟؟!!)

برای خواندن و نوشتن اطلاعات روی تگ ها فقط کافیست آن ها را نزدیک دستگاه قرار داد،  با این کار، تگ ها امواج تولید شده توسط دستگاه را دریافت می کنند. این امواج مانند یک منبع تغذیه عمل می کنند و تگ را برای لحظه ای فعال می کنند. در این زمان اطلاعات ذخیره شده رو تراشه ی تگ به دستگاه خواننده فرستاده می شود و امکان نوشتن و خواندن اطلاعات روی تگ ها وجود دارد.

تگ RFID

هر تگ یک کد یکتا داره که این کد با باقی تگ هایی که توی دنیا وجود داره متفاوته! (مثل اثر انگشت آدما)

تگ RFID

تگ ها هم مثل ماژول ها با 3 فرکانس 125kHz، 13.56MHz و یا UHF کار می کنند. همچنین تگ هایی با میزان حافظه ی مختلفی و شکل های متنوعی در بازار موجوده.

اکثر تگ ها فقط با یک فرکانس کار می کنند. دقت کنید که فرکانس تگ ها باید با فرکانس کاری ماژول یکسان باشد.

ماژول RC522

ماژول های RC522 بر پایه ی تراشه ی MFRC522 شرکت NXP ساخته شدند. این ماژول ها از پرطرفدار ترین ماژول های RFID موجود در بازار هستند.

دو نوع مختلف از این ماژول در بازار موجوده. هر دو این ماژول ها با فرکانس 13.56MHz کار می کنند.

ماژول RC522 نوع اول
ماژول RC522 نوع دوم

ماژول سمت راستی هم توی بازار راحت تر گیر میاد و هم قیمت ارزون تری داره. ما هم در این آموزش از همون استفاده می کنیم و هرجا گفتیم ماژول RC522 منظور همین مدله. برخی از مهم ترین مشخصات فنی این ماژول رو می تونید در جدول زیر ببینید:

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

برای راه اندازی این ماژول با آردوینو اول باید کتابخونه ی مورد نیازشو نصب کنیم. فایل کتابخونه رو می تونید از اینجا دانلود کنید و اونو به IDE آردوینو اضافه کنید.

اگر با نصب کتابخونه برای آردوینو آشنا نیستید و یا کلا با نرم افزار Arduino IDE آشنایی ندارید اصلا نگران نباشید کافیه این مطلب رو اول بخونید.

فرکانس کاری MHz 13.56
پروتکل ارتباطی SPI/I2C/UART
ولتاژ 3.3 ولت
جریان تا 26 میلی آمپر
جریان در حالت power down 10 میکرو آمپر
فاصله تشخیص تگ حدود 5 سانتی متر

این ماژول 8 پایه داره که نقشه ی پایه های اون به صورت زیره:

پایه بندی ماژول RC522

VCC: این پایه برای تغذیه ی ماژوله و باید ولتاژی بین 2.5 تا 3.3 ولت به اون بدیم. وصل کردن ولتاژ بیشتر به این پایه به ماژول صدمه میزنه.

RST: برای ریست کردن و یا خاموش کردن (power down) ماژول استفاده میشه. وقتی این پایه زمین (LOW) بشه، ماژول خاموش میشه. برای روشن کردن ماژول کافیه این پایه به ولتاژ تغذیه (HIGH) وصل بشه.

GND: پایه زمین ماژول.

IRQ: زمانی که یک تگ به ماژول نزدیک می شه، این پایه یک وقفه (interrupt) ایجاد می کنه.

MISO/SCL/Tx: این پایه سه کار رو میتونه انجام بده. ولی نه همزمان! میتونه در ارتباط SPI نقش MISO رو داشته باشه، یا در ارتباط I2C به عنوان SCL باشه و یا در ارتباط سریال نقش Tx رو ایفا کنه.

MOSI: این پایه فقط در ارتباط SPI استفاده میشه

SCK: در ارتباط SPI نقش کلاک رو ایفا میکنه

SS/SDA/Rx: این پایه هم میتونه 3 نقش رو ایفا کنه. SS در ارتباط SPI ویا SDA در ارتباط I2C ویا Rx در ارتباط سریال

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

سیم بندی

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

سیم بندی ماژول RC522

پایه های MISO و MOSI و SCK ماژول رو حتما باید مطابق همین نقشه وصل کنید ولی پایه های SS و RST رو میتونید به پایه های دیگه ی آردوینو هم وصل کنید.

اگر از آردوینو NANO یا MEGA استفاده می کنید، از جدول زیر برای اتصال سیم ها استفاده کنید.

نوع بورد SCK MISO MOSI
UNO 13 12 11
NANO 13 12 11
MEGA 52 50 51

خواندن اطلاعات تگ RFID با ماژول RC522

از منوی فایل < Examples < MFRC522 < مثال DumpInfo رو باز کنید.

کتابخانه RC522

این کد تنها اطلاعات رو از روی تگ می خونه و اطلاعاتی روی اون نمی نویسه.

حواستون باشه که شماره ی پایه های RST و SS که در کد تعریف شده با مداری که بستید یکی باشه. اگه نبود توی کد شماره پایه مد نظر خودتون رو وارد کنید.

مثال برای RC522

حالا میتونید کد رو روی آردوینو آپلود کنید. بعد از اتمام آپلود، Serial Monitor رو باز کنید . بعد یک تگ رو نزدیک ماژول کنید و تگ رو نزدیک ماژول نگه دارید تا اطلاعات آن نمایش داده بشه.

مثال برای RC522

در تصویر بالا، شما می تونید کد یکتای این تگ (UID)، میزان حافظه ی تگ و اطلاعات موجود در حافظه ی اون رو ببینید.

حافظه تگ های RFID

تگ ها با حافظه های مختلفی در بازار موجود هستند. یکی از متداول ترین آن ها تگ هایی با میزان حافظه ی 1 کیلو بایت است. میزان حافظه ی تگ ها به این صورت محاسبه می شود:

16 sectors x 4 blocks x 16 bytes = 1024 bytes = 1K

همانطور که در تصویر فوق هم مشخصه، حافظه هر تگ به تعدادی Sector تقسیم میشه. هر Sector دارای 4 Block هست و هر Block 16 بایته.
بلوک سوم هر سکتور، Sector Trailer نام داره. این بلوک دارای مشخصات دسترسی (Access Bits) هر بلوک است و مشخص می کنه که اجازه ی نوشتن و خوندن اون بلوک وجود داره یا نه. پس، از هر بلوک فقط 3 سکتور اون قابلیت ذخیره ی اطلاعات مارو داره. (بلوک شماره 0 و 1 و 2)

همچنین بلوک 0 از سکتور 0 به عنوان  Manufacturer Block/Manufacturer Dataهست. این بلوک شامل اطلاعات شرکت سازنده و UID تگ می باشد.

بهتره روی بلوک Manufacturer اطلاعاتی ننویسید. این کار ممکنه کارت شمارو کلا غیرقابل استفاده کنه.

نوشتن اطلاعات روی تگ RFID با ماژول RC522

در این بخش سعی می کنیم روی تگ هامون اطلاعاتی که دوست داریم رو بنویسیم.

کد

کد زیر یک متن 16 بایتی دلخواه را روی سکتور 0 و بلوک 2 می نویسه.

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

مثال برای RC522

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

مثال برای RC522

اگر قبلا دقت کرده بودید، تمام بایت های بلوک 2 مقدار صفر داشتن و الان مقدارشون تغییر کرده. این مقادیر به صورت HEX هستند. برای تبدیل کد HEX به ASCII میتونید از مبدل های آنلاین استفاده کنید.

مبدل HEX به متن

خب حالا وقتشه کد رو بیشتر کنکاش کنیم.

در ابتدای کد، 2 کتابخونه ی مورد نیاز به کد اضافه شدن. بعدش شماره پایه های آردوینو که قراره به SS و RST ماژول وصل بشن تعریف شدن.

در خط بعد یک شی از کلاس MFRC522 تعریف شده و در خط آخر یک متغیر به نام key برای نگه داری اطلاعات تگ تعریف شده است.

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

متغیر blockcontent[16] متن مورد نظر ما رو در خودش نگه می داره. برای پاک کردن یک بلوک فقط کافیه روی اون مقدار 0 بنویسیم.

برای اطمینان از صحت نوشتن روی تگ، بعد از انجام عملیات نوشتن، محتویات اون بلوک رو می خونیم. آرایه ی readbackblock[18] برای همین موضوع تعریف شده است تا محتویاتی از بلوک را که می خوانیم در آن بریزیم.

چرا طولش 18 تائیه؟ درسته که سایز هر بلوک 16 بایته ولی متد (تابع) MIFARE_Read در کتابخونه ی MFRC522 نیاز به حداقل 18 بایت داره تا بتونه ی بلوک 16 بایتی رو بخونه.

در بخش Setup بخش های سریال و SPI و … راه اندازی میشن. بعدش متن “Scan a MIFARE Classic card” روی پورت سریال نوشته میشه تا کاربر تگ رو نزدیک به ماژول کنه.

برای خواندن و نوشتن هر کار نیاز به رمز اون تگ داریم. رمز تگ ها به صورت پیش فرض مقدار 0xFF هستند. با حلقه ی نوشته شده در کد فوق، مقدار تمام 6 بایت رمز با 0xFF مقدار دهی می شن.

در کد فوق ابتدا محیط رو برای یافتن تگ جدید اسکن می کنیم و تاگر تگی یافت شد، اون تگ برای نوشتن اطلاعات ما انتخاب می شه و عبارت card selected روی پوت سریال نوشته می شه.

برای چک کردن صحت نوشتن، با تابع readBlock(block, readbackblock) محتویات همان بلاکی که چند لحضه ی پیش روی آن نوشتیم رو می خوانیم.

برای نوشتن اطلاعات روی بلوک مورد نظر فقط کافیه تابع writeBlock رو فراخوانی کرد و دو پارامتر شماره ی بلاک و متن مورد نظر رو به آن بدیم.

با کد بالا محتویات خوانده شده روی پورت سریال نوشته می شن.

پس از الان ببعد براحتی میتونید به کمک ماژول RC522 و آردوینو روی تگ های RFID هرچی دلتون خواست بنویسید.

نتیجه گیری

توی این آموزش با مفهوم RFID آشنا شدید و یادگرفتید چجوری با ماژول RC522 یک سیستم RFID بسازید.

حالا که انقدر کارتون توی بحث RFID درست شده، چطوره یه در باز کن کارتی برای اتاقتون بسازید؟

یک نظر برای کار با RFID به کمک ماژول RC522”

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *