اتصال ماژول RFID RC522 به آردوینو
آیا تا به حال فکر کرده اید که سیستم ضد سرقت در سوپرمارکت چگونه کار می کند؟ یا سیستم های پرداخت خودکار عوارض مانند fast tag چگونه کار می کنند؟ تمام پاسخ به سوالات RFID یا شناسایی فرکانس رادیویی است. همانطور که از نام آن مشخص است، RFID از امواج الکترومغناطیسی در طیف فرکانس رادیویی برای ارتباطات و انتقال داده استفاده می کند. تگهای RFID در بسیاری از صنایع استفاده میشوند و میتوانید آنها را در برچسبهای محصولات از فروشگاهها یا کارت های دسترسی امنیتی بیابید. برچسب های RFID می توانند پرداخت را تسریع کنند و می توانند برای اقدامات ضد سرقت استفاده شوند. همچنین می توان از آنها برای شناسایی دام ها، محصولات و … استفاده کرد. در این آموزش یاد می گیریم که چگونه می توانیم ماژول RFID محبوب و ارزان قیمت RC522 را به آردوینو متصل کنیم.
ماژول RFID RC522
ماژول RC522 در مجموع دارای 8 پین است. این ماژول از پروتکل های ارتباطی مختلفی پشتیبانی می کند و هر پین عملکرد متفاوتی برای هر پروتکل ارتباطی دارد. پین اوت یک ماژول RFID Reader به شرح زیر است:
- SDA SCL پین های داده و ساعت پروتکل ارتباطی I2C
- پین های SS , SCK , MOSI , MISO برای پروتکل SPI
- پین های RX TX برای ارتباط UART
- سیگنال وقفه IRQ از ماژول برای نشان دادن تشخیص تگ RFID
- GND که باید به پایه GND در آردوینو متصل شود.
- RST پین ریست برای ماژول
- VCC ولتاژ تغذیه می تواند از 2.5 ولت تا 3.3 ولت باشد و باید به پایه 3.3 ولت آردوینو متصل شود.
RFID چگونه کار می کند؟
سیستم RFID از دو جزء تشکیل شده است: خواننده RFID و برچسب ها
ماژول RFID از یک آنتن برای انتشار امواج EM با فرکانس بالا و یک خواننده/نویسنده تشکیل شده است. از آنجایی که ما از امواج با فرکانس بالا در محدوده مگاهرتز استفاده می کنیم، اندازه آنتن می تواند کوچک باشد.
تگ RFID می تواند منفعل یا فعال باشد. تگ های فعال توسط باتری ها تغذیه می شوند در حالی که برچسب های غیرفعال RFID با انرژی امواج EM ماژول خواننده RFID تغذیه می شوند. تگ ها در اشکال مختلفی مانند کارت، برچسب، جاسوئیچی یا برچسب در دسترس هستند. هر شکلی که باشد، برچسب RFID از یک آنتن و تراشه RFID تشکیل شده است که تمام داده ها را ذخیره می کند. زمانی که برچسب (تگ) در محدوده فعالیت ماژول خواننده RFID باشد، اطلاعات ان از طریق آنتن دریافت میشود و به آردوینو انتقال داده میشود. برخلاف بارکد یا کد QR، برچسب لازم نیست در محدوده دید خواننده باشد. این کار پردازش آن را آسانتر میکند و میتوان از آن برای ردیابی اشیا در فضای بسته استفاده کرد
روشن و خاموش کردن LED با RFID
برای این کار، مطابق شکل زیر، یک LED را از طریق یک مقاومت محدود کننده جریان به پین D8 آردوینو متصل کنید.
حالا بیایید به کد نگاه کنیم. کد بسیار ساده است. خواننده RFID هر تگ را در مجاورت خودش بررسی می کند و اگر تگی پیدا شود، خواننده شناسه منحصر به فرد را از روی تگ می خواند. اگر UID تگ با UID موجود در کد مطابقت داشته باشد، آردوینو حالت LED را تغییر می دهد.
کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مهم کد را بررسی میکنیم. در ابتدا، ما تمام کتابخانه های لازم را گنجانده ایم، متغیرها را اعلام کرده و یک نمونه برای کتابخانه RFID ایجاد کرده ایم.
#include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 #define LED 8 byte readCard[4]; String tag_UID = "39C3BB99"; // این را با کد تگ خود جایگزین کنید String tagID = ""; MFRC522 mfrc522(SS_PIN, RST_PIN); // ایجاد یک نمونه
LED به پایه آردوینو D8 متصل می شود. tag_UID برای هر تگ منحصر به فرد است و آن را با UID تگ خود جایگزین کنید. با استفاده از مثال Dumpinfo می توانید UID را دریافت کنید.
در تابع setup() پین D8 را به عنوان خروجی مقداردهی کرده و حالت اولیه آن را روی LOW قرار داده ایم. و سپس گذرگاه SPI و نمونه MFRC522 را مقداردهی اولیه کردیم.
void setup() { pinMode(LED, OUTPUT);// خروجی کردن پین ال ای دی digitalWrite(LED, LOW); // خاموش ماندن ال ای دی در ابتدا SPI.begin(); // SPI bus mfrc522.PCD_Init(); // راه اندای MFRC522 }
تابع readID برای دریافت UID از تگ ها استفاده می شود. این تابع بررسی می کند که آیا یک برچسب در دسترس است یا نه و اگر یک برچسب در دسترس است، UID را از روی برچسب می خواند. سپس UID به یک رشته تبدیل می شود و در متغیری به نام tagID ذخیره می شود. در صورت موفقیت آمیز بودن خواندن، تابع readID مقدار true یا 1 را برمیگرداند.
boolean readID() { //بررسی وجود تگ if ( ! mfrc522.PICC_IsNewCardPresent() { return false; } //یررسی قابل خواندن بودن تگ if ( ! mfrc522.PICC_ReadCardSerial()) { return false; } tagID = ""; // Read the 4 byte UID for ( uint8_t i = 0; i < 4; i++) { //readCard[i] = mfrc522.uid.uidByte[i]; tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // تبدیل به هگز } tagID.toUpperCase(); mfrc522.PICC_HaltA(); // اتمام خواندن }
در تابع loop، آردوینو به صورت دوره ای خواندن تگ معتبر را بررسی می کند. اگر برچسب معتبری دریافت کند که UID آن با UID که قبلاً اعلام کردهایم مطابقت داشته باشد، وضعیت LED تغییر میکند.
void loop() { //منتظر ماندن برای وجود کارت while (readID()) { if (tagID == tag_UID) { digitalWrite(LED, !digitalRead(LED)); //روشن یا خاموش کردن ال ای دی } } }
موارد موجود در فایل : فایل سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام ایا می شود چند تگ را به برنامه اضافه کرد تا ال ای دی با چند تگ کار کند؟
سلام عزیز
بله میتونید اضافه کنید
برای یادگیری برنامه نویسی آردوینو و کار با این ماژول میتوانید دوره آردوینو را مشاهده کنید
سلام
این ماژول فقط قابلیت خواندن تگ رو داره یا میشه باهاش اطلاعات رو روی تگ آپلود کرد؟
سلام عزیز
قابلیت نوشتن هم داره
if (tagID == tag_UID)
{
digitalWrite(LED,!digitalRead(LED)); //روشن یا خاموش کردن ال ای دی
}
}
}
}
درود بر شما ، خسته نباشید ، مهندس جان دلیل فریفای نشدن این کد چیه؟
سلام عزیز
متن ارور و توضیحات کامل را در انجمن مطرح کنید
سلام ببخشید اتصالات مدار مشکل داره میشه یک عکس درست تر بزارید من کلی دفعه امتحان کردم ولی درست نشد
سلام عزیز
اتصالات صحیح هست اگر آموزش کامل در این زمینه میخواهید دوره آموزش آردوینو را مشاهده کنید در دوره این ماژول راه اندازی شده و برنامه نویسی و اتصالات کاملا آموزش داده شده
سلام خسته نباشید کد <include <MFRC522.h#
ارور میده چجوری باید رفعش کنم
سلام عزیز
احتمالا به خاطر نصب نبودن کتابخانه هست، کتابخانه را نصب کنید
سلام خسته نباشید مشکل قبلی حل شد یه مشکل دیگه دارم چطوری ID کارتمو بفهمم
منظورتون از کد تگ چیه
سلام عزیز
برای فهمیدن تگ همین کد رو آپلود کنید فقط در تابع Setup دستور زیر رو اضافه کنید
Serial.begin(9600);
و در تابع boolean readID() در انتها کد زیر رو اضافه کنید
Serial.println(tagID);
در ادامه پروژه رو راه اندازی کنید. سریال مانیتور رو باز کنید. بعد از اینکه کارت رو به ماژول نزدیک کنید کد تگ شما در سریال مانیتور نمایش داده میشه
سلام خسته نباشید من اون دوتا کد را داخل پرانتز بنویسم
اگر امکانش هست میشه آموزش شو بزارید ممنون
در انجمن اعلام کنید
سلام خسته نباشد در کد <include <MFRC522.h#
ارور میده به خاطره چیه؟ ممنون میشم راهنماییم کنید
سلام عزیز
متن خطا رو به صورت کامل ارسال کنید. احتمالا بخاطر نصب نبودن کتابخانه هست
سلام با تشکر از پروژه ای که قرار دادید.تو فایل سورسی که گذاشتید یه پرانتز باید گذاشته بشه.ارور به خاطر اونه while (readID())
سلام عزیز
ممنون از توجه شما
سلام کارت من روش کدی ندارد من چیکار کنم؟؟؟
سلام عزیز
کد رو به ماژول نزدیک کنید و کد رو بخونید
کدتون خطا میده
سلام عزیز
تمام کد ها تست شده و سالم هستند
اروری که دریافت کردید رو بفرمایید راهنماییتون کنم