تگ RFID چیست و چگونه کار می کند؟ | معرفی و پیاده سازی عملی — به زبان ساده

۳۷۷۶ بازدید
آخرین به‌روزرسانی: ۱۱ اردیبهشت ۱۴۰۲
زمان مطالعه: ۱۶ دقیقه
تگ RFID چیست و چگونه کار می کند؟ | معرفی و پیاده سازی عملی — به زبان ساده

حفاظت از دارایی‌ها و اموال همواره یکی از دغدغه‌های انسان بوده است که برای آن راهکارهای مختلفی ارائه شده است. یکی از این راهکارها استفاده از تگ RFID است که در موارد گوناگون کاربرد دارد. در این آموزش، با سامانه RFID و اجزای آن، تگ RFID و بازخوان RFID، آشنا می‌شویم و روش پیاده‌سازی یک پروژه عملی را برای قفل کردن در با تگ RFID بررسی خواهیم کرد.

RFID چیست؟

«سامانه بازشناسی با امواج رادیویی» (Radio-frequency Identification) یا به اختصار RFID، روشی برای استفاده بدون تماس از امواج فرکانس رادیویی برای انتقال داده است که به کاربران این امکان را می‌دهد موجودی و دارایی‌ها را به طور خودکار و منحصر به فرد شناسایی و ردیابی کنند.

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

RFID چگونه کار می‌کند؟

یک سیستم RFID‌ شامل دو قسمت اصلی است؛ یک فرستنده یا «تگ» (Tag) که روی جسمی قرار داده شده که می‌خواهیم شناسایی شود و یک ترنسیوِر (فرستنده-گیرنده) یا یک بازخوان.

RFID چگونه کار می‌کند

«بازخوان» (Reader) از یک ماژول فرکانس رادیویی، یک واحد کنترل و یک آنتن تشکیل شده که یک میدان الکترومغناطیسی فرکانس بالا را تولید می‌کند. به دلیل القا، ولتاژی در سیم‌پیچ آنتن تولید می‌شود و این ولتاژ توان ریز تراشه را تأمین می‌کند.

RFID چگونه کار می‌کند؟

اکنون که تگ دارای توان است، می‌تواند سیگنال فرستاده شده از بازخوان را دریافت و برای فرستادن سیگنال به آن، از تکنیکی استفاده کند که «دستکاری بار» (Load Manipulation) نام دارد. قطع و وصل بار در آنتن تگ، بر مصرف توان آنتن بازخوان تأثیر گذاشته و می‌توان آن را به صورت افت ولتاژ اندازه گرفت. این تغییر ولتاژ که به عنوان صفر و یک در نظر گرفته می‌شود، راهی است که با آن داده از تگ به بازخوان انتقال می‌یابد.

همچنین، یک راه دیگر نیز وجود دارد تا داده‌ها را بین بازخوان و تگ انتقال داد که «کوپلینگ پراکنشی» (Backscattered Coupling) نامیده می‌شود. در این روش، تگ از بخشی از توان دریافتی برای تولید یک میدان الکترومغناطیسی دیگر استفاده می‌کند که با آنتن بازخوان دریافت می‌شود.

انواع RFID

در طیف الکترومغناطیسی، سه دامنه فرکانس اصلی برای انتقال RFID وجود دارد: فرکانس پایین، فرکانس بالا و فرکانس فرابالا.

مشخصات RFID فرکانس پایین به شرح زیر است:

  • محدوده فرکانس عمومی: ۳۰ تا ۳۰۰ کیلوهرتز
  • محدوده فرکانسی اولیه: ۱۳۵ تا ۱۳۴ کیلوهرتز
  • کاربردها: از قبیل ردیابی حیوانات، کنترل دسترسی، قفل خودرو، کاربردهایی با حجم بالای مایع و فلز
  • مزایا: در مجاورت مایعات و فلزات به خوبی کار می‌کنند، استانداردهای جهانی دارند.
  • معایب: محدودت قرائت بسیار کند، حافظه کم، نرخ انتقال داده کم، هزینه تولید بالا

مشخصات RFID فرکانس بالا به شرح زیر است:

  • محدوده فرکانس اولیه: ۱۳٫۵۶ مگاهرتز
  • محدوده بازخوانی: تماس نزدیک (۳۰ سانتی‌متر)
  • کاربردها: کتابخانه‌ها، کارت‌های شناسایی شخصی، تراشه‌های بازی، کاربردهای NFC
  • مزایا: پروتکل‌های جهانی NFC، انتخاب‌های حافظه بزرگ‌تر، استانداردهای جهانی
  • معایب: محدوده بازخواندن کوتاه، نرخ انتقال داده پایین

مشخصات RFID فرکانس فرابالا به شرح زیر است:

  • محدوده فرکانس عمومی: ۳۰۰ تا ۳۰۰۰ مگاهرتز
  • محدوده‌های فرکانس اولیه: ۴۳۳ مگاهرتز، ۸۶۰ تا ۹۶۰ مگاهرتز

تگ RFID چیست

RFID اکتیو

سیستم‌های RFID اکتیو شامل تگ‌هایی هستند که برای افزایش محدوده، منبع تغذیه داخلی خود را دارند. تگ‌های اکتیو یک باتری و معمولاً اجزای SMD بزرگ‌تری دارند. پس از پیش‌تنظیم زمان، تگ یک «چهچهه» فرکانس رادیویی ساطع می‌کند. یک بازخوان در مجاورت می‌تواند این چهچهه را بشنود. از آنجا که تگ اکتیو است، آن‌ها می‌توانند در فواصل بسیار بزرگ‌تر از تگ‌های پسیو بازخوانی شوند. برخی از ویژگی‌های RFID اکتیو به صورت زیر است:

  • محدوده فرکانس اولیه: ۴۳۳ مگاهرتز
  • محدوده بازخوانی: ۳۰ تا ۱۰۰ متر
  • کاربردها: ردیابی وسایل نقلیه، کارخانه‌های خودکار، معدن‌کاری، ساخت و ساز، ردیابی کالا
  • مزایا: محدوده بازخوانی بسیار طولانی، هزینه زیرساخت پایین‌تر (نسبت به RFID پسیو)، ظرفیت حافظه زیاد، نرخ انتقال داده بالا
  • معایب: هزینه بالا به ازای هر تگ، محدودیت‌های حمل و نقل (به دلیل باتری‌ها)، نرم‌افزار پیچیده، تداخل بالا در فلز و مایعات، استانداردهای جهانی کم

RFID پسیو

در سیستم RFID پسیو، تگ‌ها از باتری استفاده نمی‌کنند. در عوض، انرژی خود را از بازخوان دریافت می‌کنند. بازخوان یک میدان انرژی یک تا چند متری ساطع می‌کند و انرژی لازم را برای هر تگ در مجاورت خود فراهم می‌کند. تگ انرژی الکترومغناطیسی را از کارت‌خوان دریافت می‌کند، توان می‌گیرد و به اطلاعات شناسایی پاسخ می‌دهد. تگ‌های پسیو این مزیت را دارند که می‌توانند با سرعت بالایی (10 بار یا بیشتر از آن در ثانیه) خوانده شوند. این نوع RFIDها بسیار نازک (می‌توان آن‌ها را بین لایه‌های کاغذ قرار داد) و بسیار ارزان هستند.

برخی از ویژگی‌های RFID پسیو به صورت زیر هستند:

  • محدوده‌های فرکانس اولیه: ۸۶۰ تا ۹۶۰ مگاهرتز
  • محدوده قرائت: نزدیکی تماس (۲۵ متر)
  • کاربردها: ردیابی زنجیره تأمین، ساخت، داروسازی، عوارض الکترونیکی، ردیابی موجودی، زمان‌بندی مسابقه، ردیابی دارایی
  • مزایا: محدوده قرائت طویل، هزینه پایین به ازای هر تگ، تنوع اندازه‌ها و شکل‌های تگ‌ها، استانداردهای جهانی، نرخ انتقال داده بالا
  • معایب: هزینه‌ بالای تجهیزات، ظرفیت حافظه متوسط، تداخل زیاد فلز و مایعات

کاربردهای RFID چیست؟

کاربردهای متنوعی وجود دارد که در آن‌ها از RFID استفاده می‌شود. این کاربردها در حوزه‌های مختلفی از ردیابی موجودی کالا تا مدیریت زنجیره تأمین هستند و بسته به شرکت یا صنعت می‌توانند تخصصی‌تر شوند. نوع کاربردهای RFID می‌تواند از ردیابی دارایی IT گرفته تا ردیابی منسوجات و حتی موارد خاص مانند ردیابی اقلام اجاره‌ای را شامل شود.

آنچه یک کاربرد بالقوه RFID را از کاربردهای دیگر جدا می‌کند، نیاز به شناسایی منحصر به فرد با سرعت و کارایی بیشتر در مواردی است که سیستم‌های سنتی در آن ناتوان هستند. چند کاربرد که از فناوری RFID استفاده می‌کنند به این شرح هستند: زمان‌بندی مسابقه، مدیریت زنجیره تأمین، ردیابی دارویی، ردیابی موجودی، ردیابی دارایی IT، ردیابی لباس و پارچه، پیگیری پرونده، ردیابی مورد حمل و نقل برگشت‌پذیر (RTI)، پیگیری رویداد و شرکت‌کننده، کنترل دسترسی، ردیابی خودرو، عوارض، ردیابی نوزادان بیمارستان، ردیابی حیوانات، ردیابی ابزار، ردیابی جواهرات، ردیابی موجودی خرده‌فروشی، ردیابی لوله و قرقره، ردیابی لجستیک (مدیریت مواد)، کیوسک‌های DVD، پیگیری کتاب‌های کتابخانه، کمپین‌های بازاریابی و سیستم‌های مکان‌یابی زمان‌واقعی.

تگ RFID

تگ RFID

یک تگ RFID یا RFID Tag در ساده‌ترین شکل خود، از دو قسمت تشکیل شده است: یک آنتن برای ارسال و دریافت سیگنال‌ها و یک تراشه یا آی‌سی RFID که شناسه تگ و سایر اطلاعات را ذخیره می‌کند.

تگ RFID اطلاعات مربوط به شیء را از طریق امواج رادیویی به ترکیب آنتن/بازخوان منتقل می‌کند. تگ‌های RFID معمولاً باتری ندارند (مگر اینکه به عنوان تگ‌های اکتیو یا BAP مشخص شده باشند). در عوض، آن‌ها انرژی را از امواج رادیویی تولید شده توسط بازخوان دریافت می‌کنند. هنگامی که تگ سیگنال را از بازخوان/آنتن دریافت می‌کند، انرژی از طریق آنتن داخلی به تراشه تگ منتقل می‌شود. این انرژی تراشه را فعال و با اطلاعات مورد نظر مدوله می‌کند و سپس سیگنال را به سمت آنتن/بازخوان منتقل می‌کند.

در هر تراشه، چهار بانک حافظه وجود دارد: کد محصول الکترونیکی (EPC)، حافظه شناسایی تگ (TID)، یوزر و رزرو. هر یک از این بانک‌های حافظه حاوی اطلاعاتی در مورد چیزی است که برچسب‌گذاری یا تگ شده یا خود تگ بسته به بانک و موارد مشخص شده دارد. صدها تگ RFID مختلف در اشکال و اندازه‌های مختلف با ویژگی‌ها و مشخصات خاص برای محیط‌ها، مواد سطحی و کاربردهای مختلف در دسترس است.

از آنجا که کاربردهای RFID بسیار متنوع است، تگ‌های RFID و روش‌های دسته‌بندی آن‌ها نیز بسیار متنوع است. یک روش معمول برای تقسیم تگ‌ها، دسته‌بندی‌شان به دو نوع قابل انعطاف و سخت است. نوع قابل انعطاف ارزان‌تر است. در طرف مقابل، تگ‌های سخت معمولاً مقاوم‌تر هستند. تگ‌ها بر اساس موارد زیر دسته‌بندی می‌شوند:

  • فرم فاکتور: قابل انعطاف، لیبل (برچسب)، کارت، نشان و سخت
  • نوع فرکانس: فرکانس پایین (LF)،  ارتباطات میدان‌نزدیک (NFC)، فرکانس بالا (HF) و فرکانس بس‌بالا (UHF) پسیو، پسیو به کمک باتری (BAP) و اکتیو
  • عوامل محیطی:‌ مقاوم در برابر آب، سخت، مقاوم در برابر دما، مقاوم در برابر مواد شیمیایی
  • قابلیت تنظیم: شکل، اندازه، متن، رمزگذاری
  • ویژگی‌ها/کاربردهای خاص: تگ‌های لباسشویی، تگ‌های سنسور، تگ‌های قابل جاسازی، تگ‌های قابل انعطاف، تگ‌های خودرو، تگ‌های حافظه بالا
  • مواد مخصوص سطح: تگ‌های نصب فلزی، تگ‌های نصب شیشه، تگ‌ها برای موارد پر از مایع

برای انتخاب تگ RFID باید به پرسش‌های زیر پاسخ دهیم:

  • تگ RFID را می‌خواهیم روی چه سطحی قرار دهیم؟
  • محدوده بازخوانی مطلوب چقدر است؟
  • محدودیت‌های اندازه تگ چه هستند؟
  • شرایط محیطی از قبیل گرما، رطوبت، در معرض ضربه بودن و... چگونه‌اند؟
  • روش چسباندن تگ چگونه است؟ (چسب، اپوکسی، پرچ، پیچ و...)

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

بازخوان RFID

بازخوان RFID یا RFID Reader مغز سیستم RFID است و برای هر سیستمی که بر این اساس کار می‌کند، ضروری است. بازخوان‌ها، قطعاتی هستند که موج‌های رادیویی را ارسال و دریافت می‌کنند تا با تگ RFID ارتباط برقرار کنند. بازخوان‌های RFID معمولاً به دو نوع بازخوان RFID ثابت و بازخوان RFID سیار تقسیم می‌شوند.

بازخوان‌های ثابت در یک مکان ثابت قرار دارند و معمولاً روی دیوارها، میزها، ورودی‌ها یا سایر مکان‌های ثابت نصب می‌شوند. زیرمجموعه مشترک بازخوان‌های ثابت، بازخوان‌های یکپارچه هستند. یک بازخوان RFID یکپارچه بازخوانی با یک آنتن داخلی است که معمولاً شامل یک پورت آنتن اضافه برای اتصال یک آنتن خارجی اختیاری نیز هست. بازخوان‌های یکپارچه معمولاً ظاهر زیبایی دارند و برای استفاده در کاربردهای داخلی بدون ترافیک زیاد طراحی شده‌اند.

بازخوان‌های سیار قطعاتی هستند که امکان انعطاف‌پذیری بیشتری را فراهم می‌کنند و در هنگام بازخوانی تگ RFID می‌توانند با یک کامپیوتر میزبان یا دستگاه هوشمند ارتباط برقرار کنند. بازخوان‌های RFID سیار دو دسته اصلی دارند: بازخوان‌هایی با کامپیوتر آن‌برد به نام دستگاه محاسبات سیار، و بازخوان‌هایی که از اتصال بلوتوث یا کمکی به دستگاه یا تبلت هوشمند موسوم به «سورتمه» (Sleds) استفاده می‌کنند.

تگ RFID چیست

بازخوان‌های RFID ثابت معمولاً دارای پورت‌های آنتن خارجی هستند که می‌توانند از یک آنتن اضافه تا هشت آنتن مختلف را در هر نقطه متصل کنند. با افزودن مالتی پلکسر، برخی از بازخوان‌ها می‌توانند تا حداکثر به 32 آنتن RFID متصل شوند. تعداد آنتن‌های متصل به یک بازخوان به ناحیه مورد نیاز برای RFID بستگی دارد. در برخی از موارد، مانند بررسی پرونده‌های داخل و خارج، یک ناحیه کوچک برای پوشش کافی است، بنابراین یک آنتن به خوبی کار می‌کند. سایر کاربردها با ناحیه پوشش بیشتر، مانند خط پایان در زمان‌بندی مسابقه، معمولاً به آنتن‌های متعددی برای ایجاد منطقه پوشش مناسب نیاز دارند.

متداول‌ترین روش برای دسته‌بندی باز‌خوان‌ها دسته‌بندی آن‌ها به دو نوع ثابت و سیار است. موارد دیگری که می‌توان بر اساس آن‌ها بازخوان‌های RFID را دسته‌بندی کرد، اتصال، ویژگی‌ها، قابلیت پردازش، روش‌های تأمین توان، پورت‌های آنتن و... است. محدوده فرکانس بازخوان‌ها در آمریکا ۹۰۲ تا ۹۲۸ مگاهرتز و برای اروپا ۸۶۵ تا ۸۶۸ مگاهرتز است. بازخوان‌ها را می‌توان به وای‌فای، بلوتوث، LAN، رابط سریال، USB و پورت کمکی متصل کرد. این بخش از سیستم RFID، قابلیت پردازش آن‌برد و پردازش غیر آن‌برد را دارد. برای تأمین توان بازخوان‌ها می‌توان از آداپتور برق، PoE، باتری، یو اس بی و... استفاده کرد. بازخوان‌ها در انواع بدون پورت خارجی، یک پورت، دو پورت، ۴ پورت، ۸ پورت و ۱۶ پورت موجود هستند.

برای انتخاب بازخوان باید به پرسش‌های زیر پاسخ دهیم:

  • محدوده بازخوانی مورد نیاز چقدر است؟
  • شرایط محیطی، از قبیل گرما، رطوبت و... چگونه است؟
  • آیا می‌خواهیم بازخوان را به یک شبکه اضافه کنیم؟
  • بازخوان در چه مکانی قرار می‌گیرد؟
  • آیا نیاز است بازخوان سیار باشد؟
  • چه تعداد ناحیه یا نقطه برای بازخوانی نیاز است؟
  • چه تعداد تگ در یک لحظه لازم است؟
  • تگ‌ها باید چقدر سریع باشند؟ (یک تسمه نقاله کند یا یک مسابقه سریع تفاوت دارد)

آنتن RFID

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

برخلاف بازخوان‌های RFID، آنتن‌های RFID تجهیزات غیرهوشمندی هستند که توان خود را مستقیماً از بازخوان دریافت می‌کنند. وقتی انرژی بازخوان به آنتن منتقل می‌شود، آنتن یک میدان فرکانس رادیویی تولید می‌کند. در نتیجه، یک سیگنال فرکانس رادیویی به تگ‌های مجاور فرستاده می‌شود. بازده آنتن در تولید امواج در یک جهت خاص، به عنوان بهره آنتن شناخته می‌شود. به زبان ساده، هرچه بهره بالاتر باشد، آنتن قوی‌تر بوده و آنتن میدان فرکانس رادیویی گسترده‌تری تولید خواهد کرد.

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

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

آنتن RFID

آنتن قطبیده دایره‌ای امواجی را که به طور مداوم بین صفحه‌های افقی و عمودی می‌چرخند، ارسال می‌کند تا با اجازه دادن بازخوانی تگ‌های RFID در جهت‌های مختلف، انعطاف‌پذیری بیشتری ارائه دهد. با این حال، از آنجا که انرژی بین دو صفحه تقسیم می‌شود، محدوده بازخوانی آنتن با قطبش دایره‌ای در مقایسه با آنتن خطی با بهره مشابه، کوتاه‌تر است.

آنتن‌های RFID را مانند سایر تجهیزات RFID می‌توان به روش‌های مختلفی دسته‌بندی کرد. متداول‌ترین معیارهایی که می‌توان آنتن‌های RFID را بر اساس آن‌ها طبقه‌بندی کرد، قطبش (دایره‌ای و خطی) و محل نصب (داخلی و خارجی) است. محدوده فرکانسی آنتن‌های RFID معمولاً در یکی از بازه‌های ۹۰۲ تا ۹۲۸ مگاهرتز، ۸۶۵ تا ۸۶۸ مگاهرتز، ۸۶۰ تا ۹۶۰ مگاهرتز است و قطبش آن‌ها می‌تواند دایره‌ای یا خطی باشد. آنتن‌ها می‌توانند طبق استاندارد IP داخلی یا IP خارجی باشند. همچنین، محدوده بازخوانی می‌تواند میدان‌نزدیک یا میدان‌دور باشد. آنتن‌ها را می‌توان به شکل قفسه‌ای، زمینی، صفحه‌ای و آنتن دروازه‌ای تهیه کرد.

برای انتخاب آنتن RFID باید به پرسش‌های زیر پاسخ دهیم:

  • محدوده بازخوانی مورد نیاز چقدر است؟
  • شرایط محیطی، از قبیل گرما، رطوبت و... چگونه است؟
  • آنتن در محوطه داخلی نصب می‌شود یا محوطه بیرونی؟
  • محدودیت‌های اندازه آنتن چیست؟

پروژه تگ RFID قفل در با آردوینو

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

در این پروژه، از تگ‌های مبتنی بر پروتکل MIFARE و بازخوان MFRC522 استفاده می‌کنیم که هزینه کمی دارند.

پروژه تگ RFID قفل در با آردوینو

این تگ‌ها دارای ۱ کیلوبایت حافظه هستند و یک ریزتراشه دارند که عملیات حسابی را انجام می‌دهد. فرکانس کاری ۱۳٫۵۶ مگاهرتز و فاصله عملکردی، بسته به هندسه آنتن، تا ۱۰ سانتی‌متر است. اگر یکی از تگ‌ها را در مقابل یک منبع نور مثل چراغ قرار دهیم، می‌توانیم آنتن و ریزتراشه را که قبلاً درباره آن‌ها بحث کردیم، مشاهده کنیم.

تگ RFID

در ماژول بازخوان RFID، از پروتکل SPI برای ارتباط با برد آردوینو استفاده می‌شود. باید VCC را به ماژول برای 3٫3 ولت متصل کنیم و برای سایر پین‌ها نگرانی نداریم، زیرا ۵ ولت را تحمل می‌کنند.

تگ RFID در آردوینو

بعد از آنکه ماژول را وصل کردیم، باید کتابخانه MFRC522 را از این لینک دانلود کنیم. کتابخانه چندین مثال خوب دارد که با استفاده از آن‌ها می‌توانیم یاد بگیریم چگونه از ماژول استفاده کنیم. ابتدا می‌توانیم مثال "DumpInfo" را آپلود کرده و تست کنیم تا ببینیم سیستممان به خوبی کار می‌کند. اکنون، اگر «مانیتور سریال» (Serial Monitor) را اجرا کرده و تگ را به ماژول نزدیک کنیم، بازخوان شروع به بازخوانی تگ خواهد کرد و همه اطلاعات از تگ روی مانیتور سریال نمایش داده خواهد شد.

مانیتور سریال

در اینجا می‌توانیم عدد UID تگ و حافظه ۱ کیلوبایت را که دقیقاً به ۱۶ بخش تقسیم شده است، ببینیم. هر بخش به ۴ بلوک تقسیم شده و هر بلوک را می‌توان با ۲ بایت داده ذخیره کرد. در اینجا ما از حافظه تگ استفاده نمی‌کنیم، بلکه از عدد UID تگ استفاده می‌کنیم.

قبل از آنکه کد قفل در با تگ RFID را بررسی کنیم، اجزای مدار و شماتیک آن را ارائه می‌کنیم.

تگ RFID

علاوه بر ماژول RFID، از یک سنسور مجاورتی برای بررسی بسته یا باز بودن در استفاده می‌کنیم. همچنین از یک سروو موتور برای مکانیزم قفل کردن و نیز یک نمایشگر کاراکتر استفاده می‌کنیم.

فهرست عناصری که استفاده می‌کنیم، به شرح زیر است:

  • ماژول MFRC522
  • سروو موتور AZDelivery 5 x SG90
  • نمایشگر AZDelivery HD44780 1602
  • برد آردوینو [Arduino Mega 2560 [A000067
  • برد بورد AZDelivery MB 102 Breadboard Kit - 830
  • سنسور مجاورتی Oulensy SEMICONDUCTOR CNY70

روش کار پروژه بدین صورت است: ابتدا باید یک تگ مستر را تنظیم کنیم و سپس سیستم به حالت نرمال می‌رود. اگر یک تگ ناشناس را اسکن کنیم، با دسترسی مخالفت خواهد شد، اما اگر تگ مستر را اسکن کنیم، از جایی که می‌توانیم تگ ناشناس را اضافه و مجاز کنیم به «حالت برنامه» (Program Mode) وارد خواهیم شد. بنابراین، اکنون اگر یک بار دیگر تگ را اسکن کنیم، دسترسی برقرار خواهد شد و می‌توانیم در را باز کنیم.

تگ RFID

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

برای نوشتن کدها، ابتدا لازم است کتابخانه‌ها را برای ماژول RFID، نمایشگر و سروو موتور فراخوانی کرده و متغیرها را تعریف کنیم.

1#include <SPI.h>
2#include <MFRC522.h>
3#include <LiquidCrystal.h>
4#include <Servo.h>
5
6#define RST_PIN   9
7#define SS_PIN    10
8
9byte readCard[4];
10char* myTags[100] = {};
11int tagsCount = 0;
12String tagID = "";
13boolean successRead = false;
14boolean correctTag = false;
15int proximitySensor;
16boolean doorOpened = false;
17
18// Create instances
19MFRC522 mfrc522(SS_PIN, RST_PIN);
20LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Parameters: (rs, enable, d4, d5, d6, d7)
21Servo myServo; // Servo motor

در بخش setup، ابتدا ماژول‌ها را مقداردهی اولیه می‌کنیم، و مقدار اولیه سروو موتور را در وضعیت قفل قرار می‌دهیم. سپس پیام اولیه را برای نمایش چاپ می‌کنیم و با حلقه "while" صبر می‌کنیم تا یک تگ مستر اسکن شود. تابع ()getID تابعی است که UID تگ را می‌گیرد و آن را در مکان اول آرایه [myTags[0 قرار می‌دهیم.

1void setup() {
2  // Initiating
3  SPI.begin();        // SPI bus
4  mfrc522.PCD_Init(); //  MFRC522
5  lcd.begin(16, 2);   // LCD screen
6  myServo.attach(8);  // Servo motor
7  myServo.write(10); // Initial lock position of the servo motor
8  // Prints the initial message
9  lcd.print("-No Master Tag!-");
10  lcd.setCursor(0, 1);
11  lcd.print("    SCAN NOW");
12  // Waits until a master card is scanned
13  while (!successRead) {
14    successRead = getID();
15    if ( successRead == true) {
16      myTags[tagsCount] = strdup(tagID.c_str()); // Sets the master tag into position 0 in the array
17      lcd.clear();
18      lcd.setCursor(0, 0);
19      lcd.print("Master Tag Set!");
20      tagsCount++;
21    }
22  }
23  successRead = false;
24  printNormalModeMessage();
25}

اکنون می‌خواهیم تابع ()getID را بررسی کنیم. این تابع، ابتدا این موضوع را بررسی می‌کند که یک تگ جدید در نزدیکی بازخوان قرار دارد یا خیر و اگر چنین است، وارد حلقه "for" می‌شود که UID تگ را بگیرد. تگ‌هایی که در اینجا از آن‌ها استفاده کرده‌ایم، یک عدد UID چهار بایتی دارند. به همین دلیل باید ۴ تکرار را با این حلقه انجام دهیم و با استفاده از تابع ()concat چهار بایت را در یک متغیر رشته‌ای تکی قرار دهیم. همچنین، همه کاراکترهای رشته را در کیس‌های بالایی قرار می‌دهیم و در پایان بازخوانی را متوقف می‌کنیم.

1uint8_t getID() {
2  // Getting ready for Reading PICCs
3  if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
4    return 0;
5  }
6  if ( ! mfrc522.PICC_ReadCardSerial()) {   //Since a PICC placed get Serial and continue
7    return 0;
8  }
9  tagID = "";
10  for ( uint8_t i = 0; i < 4; i++) {  // The MIFARE PICCs that we use have 4 byte UID
11    readCard[i] = mfrc522.uid.uidByte[i];
12    tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
13  }
14  tagID.toUpperCase();
15  mfrc522.PICC_HaltA(); // Stop reading
16  return 1;
17}

پیش از اینکه وارد حلقه اصلی شویم، در پایان بخش setup، تابع ()printNormalModeMessage را فراخوانی می‌کنیم که پیام "Access Control" را روی نمایشگر چاپ می‌کند.

1void printNormalModeMessage() {
2  delay(1500);
3  lcd.clear();
4  lcd.print("-Access Control-");
5  lcd.setCursor(0, 1);
6  lcd.print(" Scan Your Tag!");
7}

در حلقه اصلی، با خواندن مقدار سنسور مجاورتی شروع می‌کنیم که به ما می‌گوید در بسته است یا خیر.

1int proximitySensor = analogRead(A0);

بنابراین، اگر در بسته باشد، با استفاده از خطوط مشابهی که در تابع ()getID توصیف کردیم، UID تگ جدید را اسکن می‌کنیم و می‌گیریم. ذکر این نکته در اینجا ضروری است که به دلیل "return" در گزاره‌های "if"، تا زمانی که یک تگ را اسکن نکنیم، کد پیش نمی‌رود.

به محض آنکه تگ را اسکن کنیم، بررسی می‌کنیم که آیا آن تگ، تگ مستری است که قبلاً ثبت کرده‌ایم یا خیر و اگر جواب مثبت باشد، وارد مد برنامه می‌شویم. در این مد، اگر تگی را که از قبل مجاز است اسکن کنیم، از سیستم حذف می‌شود، یا اگر تگ ناشناس باشد، به عنوان تگ مجاز به سیستم اضافه خواهد شد.

1// Checks whether the scanned tag is the master tag
2    if (tagID == myTags[0]) {
3      lcd.clear();
4      lcd.print("Program mode:");
5      lcd.setCursor(0, 1);
6      lcd.print("Add/Remove Tag");
7      while (!successRead) {
8        successRead = getID();
9        if ( successRead == true) {
10          for (int i = 0; i < 100; i++) {
11            if (tagID == myTags[i]) {
12              myTags[i] = "";
13              lcd.clear();
14              lcd.setCursor(0, 0);
15              lcd.print("  Tag Removed!");
16              printNormalModeMessage();
17              return;
18            }
19          }
20          myTags[tagsCount] = strdup(tagID.c_str());
21          lcd.clear();
22          lcd.setCursor(0, 0);
23          lcd.print("   Tag Added!");
24          printNormalModeMessage();
25          tagsCount++;
26          return;
27        }
28      }
29    }

بیرون از مد برنامه، با حلقه "for" بعدی بررسی می‌کنیم که آیا تگ اسکن شده برابر با تگ‌های ثبت شده است و باید در را باز کنیم یا اینکه از دسترسی به آن جلوگیری کنیم. در پایان، در گزاره "else" منتظر می‌مانیم تا زمانی که در بسته شود، آنگاه در را قفل می‌کنیم و پیام مد نرمال را مجدداً چاپ می‌کنیم.

1// Checks whether the scanned tag is authorized
2    for (int i = 0; i < 100; i++) {
3      if (tagID == myTags[i]) {
4        lcd.clear();
5        lcd.setCursor(0, 0);
6        lcd.print(" Access Granted!");
7        myServo.write(170); // Unlocks the door
8        printNormalModeMessage();
9        correctTag = true;
10      }
11    }
12    if (correctTag == false) {
13      lcd.clear();
14      lcd.setCursor(0, 0);
15      lcd.print(" Access Denied!");
16      printNormalModeMessage();
17    }
18  }
19  // If door is open...
20  else {
21    lcd.clear();
22    lcd.setCursor(0, 0);
23    lcd.print(" Door Opened!");
24    while (!doorOpened) {
25      proximitySensor = analogRead(A0);
26      if (proximitySensor > 200) {
27        doorOpened = true;
28      }
29    }
30    doorOpened = false;
31    delay(500);
32    myServo.write(10); // Locks the door
33    printNormalModeMessage();
34  }

اکنون کد زیر را برای تکمیل پروژه می‌نویسیم:

1/*
2* Arduino Door Lock Access Control Project
3*                
4* by Dejan Nedelkovski, www.HowToMechatronics.com
5* 
6* Library: MFRC522, https://github.com/miguelbalboa/rfid
7*/
8
9#include <SPI.h>
10#include <MFRC522.h>
11#include <LiquidCrystal.h>
12#include <Servo.h>
13
14#define RST_PIN   9
15#define SS_PIN    10
16
17byte readCard[4];
18char* myTags[100] = {};
19int tagsCount = 0;
20String tagID = "";
21boolean successRead = false;
22boolean correctTag = false;
23int proximitySensor;
24boolean doorOpened = false;
25
26// Create instances
27MFRC522 mfrc522(SS_PIN, RST_PIN);
28LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Parameters: (rs, enable, d4, d5, d6, d7)
29Servo myServo; // Servo motor
30
31void setup() {
32  // Initiating
33  SPI.begin();        // SPI bus
34  mfrc522.PCD_Init(); //  MFRC522
35  lcd.begin(16, 2);   // LCD screen
36  myServo.attach(8);  // Servo motor
37
38  myServo.write(10); // Initial lock position of the servo motor
39  // Prints the initial message
40  lcd.print("-No Master Tag!-");
41  lcd.setCursor(0, 1);
42  lcd.print("    SCAN NOW");
43  // Waits until a master card is scanned
44  while (!successRead) {
45    successRead = getID();
46    if ( successRead == true) {
47      myTags[tagsCount] = strdup(tagID.c_str()); // Sets the master tag into position 0 in the array
48      lcd.clear();
49      lcd.setCursor(0, 0);
50      lcd.print("Master Tag Set!");
51      tagsCount++;
52    }
53  }
54  successRead = false;
55  printNormalModeMessage();
56}
57
58void loop() {
59  int proximitySensor = analogRead(A0);
60  // If door is closed...
61  if (proximitySensor > 200) {
62    if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
63      return;
64    }
65    if ( ! mfrc522.PICC_ReadCardSerial()) {   //Since a PICC placed get Serial and continue
66      return;
67    }
68    tagID = "";
69    // The MIFARE PICCs that we use have 4 byte UID
70    for ( uint8_t i = 0; i < 4; i++) {  //
71      readCard[i] = mfrc522.uid.uidByte[i];
72      tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
73    }
74    tagID.toUpperCase();
75    mfrc522.PICC_HaltA(); // Stop reading
76
77    correctTag = false;
78    // Checks whether the scanned tag is the master tag
79    if (tagID == myTags[0]) {
80      lcd.clear();
81      lcd.print("Program mode:");
82      lcd.setCursor(0, 1);
83      lcd.print("Add/Remove Tag");
84      while (!successRead) {
85        successRead = getID();
86        if ( successRead == true) {
87          for (int i = 0; i < 100; i++) {
88            if (tagID == myTags[i]) {
89              myTags[i] = "";
90              lcd.clear();
91              lcd.setCursor(0, 0);
92              lcd.print("  Tag Removed!");
93              printNormalModeMessage();
94              return;
95            }
96          }
97          myTags[tagsCount] = strdup(tagID.c_str());
98          lcd.clear();
99          lcd.setCursor(0, 0);
100          lcd.print("   Tag Added!");
101          printNormalModeMessage();
102          tagsCount++;
103          return;
104        }
105      }
106    }
107    successRead = false;
108    // Checks whether the scanned tag is authorized
109    for (int i = 0; i < 100; i++) {
110      if (tagID == myTags[i]) {
111        lcd.clear();
112        lcd.setCursor(0, 0);
113        lcd.print(" Access Granted!");
114        myServo.write(170); // Unlocks the door
115        printNormalModeMessage();
116        correctTag = true;
117      }
118    }
119    if (correctTag == false) {
120      lcd.clear();
121      lcd.setCursor(0, 0);
122      lcd.print(" Access Denied!");
123      printNormalModeMessage();
124    }
125  }
126  // If door is open...
127  else {
128    lcd.clear();
129    lcd.setCursor(0, 0);
130    lcd.print(" Door Opened!");
131    while (!doorOpened) {
132      proximitySensor = analogRead(A0);
133      if (proximitySensor > 200) {
134        doorOpened = true;
135      }
136    }
137    doorOpened = false;
138    delay(500);
139    myServo.write(10); // Locks the door
140    printNormalModeMessage();
141  }
142}
143
144uint8_t getID() {
145  // Getting ready for Reading PICCs
146  if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
147    return 0;
148  }
149  if ( ! mfrc522.PICC_ReadCardSerial()) {   //Since a PICC placed get Serial and continue
150    return 0;
151  }
152  tagID = "";
153  for ( uint8_t i = 0; i < 4; i++) {  // The MIFARE PICCs that we use have 4 byte UID
154    readCard[i] = mfrc522.uid.uidByte[i];
155    tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
156  }
157  tagID.toUpperCase();
158  mfrc522.PICC_HaltA(); // Stop reading
159  return 1;
160}
161
162void printNormalModeMessage() {
163  delay(1500);
164  lcd.clear();
165  lcd.print("-Access Control-");
166  lcd.setCursor(0, 1);
167  lcd.print(" Scan Your Tag!");
168}

معرفی فیلم آموزش برد آردوینو (Arduino) با انجام پروژه های عملی 

آموزش برد آردوینو (Arduino) با انجام پروژه های عملی

برای آشنایی بیشتر با آردوینو پیشنهاد می‌کنیم به فیلم آموزش برد آردوینو (Arduino) با انجام پروژه های عملی «فرادرس» مراجعه کنید که مدت زمان آن ۱۹ ساعت و ۱۰ دقیقه است.

در درس اول این آموزش که در ۹ درس تدوین شده، معرفی اجمالی با برد آردوینو (Arduino) بیان شده است. در درس دوم، واحد ارتباط سریال در آردوینو مورد بحث قرار گرفته است. موضوع درس سوم واحد PWM و ADC در آردوینو است.

واحد وقفه و SPI در آردوینو نیز در درس‌های چهارم و پنجم معرفی شده‌اند. به واحد TWI و I2C در آردوینو نیز در درس ششم پرداخته شده است. حافظه EEPROM نیز موضوع درس هفتم است. آرایه‌ها و رشته‌ها در آردوینو از مباحث مهمی هستند که در درس هشتم گنجانده شده‌اند و در نایت، برنامه‌نویسی پیشرفته برد آردوینو در درس نهم آموزش داده شده است.

بر اساس رای ۷ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
How To MechatronicsAtlas RFID Store
۱ دیدگاه برای «تگ RFID چیست و چگونه کار می کند؟ | معرفی و پیاده سازی عملی — به زبان ساده»

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

نظر شما چیست؟

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