در این مقاله میخواهیم نحوه استفاده از RFID ریدر مدل RC522 را بیان کنیم. با سیسوگ همراه باشید تا با مشخصات این RFID بیشتر آشنا شوید و همچنین نمونه پروژهای از آن با استفاده از آردوینو را ببینید.
RFID:
در واقع RFID کلمه اختصاری بازشناسایی با امواج رادیویی است. RFID از میدان مغناطیسی برای انتقال اطلاعات در فاصله کوتاه استفاده میکند. میتوان در مواردی همچون شناسایی افراد، معاملات و … از آن استفاده کرد.
میتوانید از سیستم RFID برای باز کردن درب استفاده کنید. بدین صورت که تنها شخص با کارت دارای اطلاعات مناسب میتواند وارد شود.
سیستم RFID به منظور شناسایی از برچسبهایی که به اشیاء متصل میشوند استفاده میکند. به عنوان مثال در تصویر زیر، یک جا کلیدی (keychain) و یک کارت الکترومغناطیسی را میبینید که هر تگ شناسه (UID) مخصوص به خود دارد.
سیستم RFID از فرستنده و گیرنده رادیویی دو طرفه نیز استفاده میکند. بدین صورت که ریدر یک سیگنال به تگ ارسال می کند و پاسخ آن را می خواند.
مشخصات ماژول RC522 :
ولتاژ ورودی: 3.3V
قیمت: حدود 21 هزار تومان (البته بهتر است قیمت روز بازار ایران را مد نظر قرار دهیم)
فرکانس: 13.56 مگاهرتز
دانلود کتابخانه RC522 :
در اینجا کتابخانه ای که برای این پروژه نیاز دارید قرار دارد:
- کتابخانه RFID نوشته شده توسط miguelbalboa را از اینجا دانلود کنید.
- کتابخانه RFID را از حالت زیپ خارج کنید.
- کتابخانه RFID را در آردوینو IDE خود نصب کنید.
- آردوینو IDE خود را دوباره راه اندازی کنید.
اتصالات پینها:
پین | اتصال به Arduino Uno |
SDA | Digital 10 |
SCK | Digital 13 |
MOSI | Digital 11 |
MISO | Digital 12 |
IRQ | unconnected |
GND | GND |
RST | Digital 9 |
3.3V | 3.3V |
توجه داشته باشید که تغذیه باید 3.3 ولت باشد.
مدار:
خواندن اطلاعات از تگ RFID :
پس از اینکه مدارتان آماده شد به File > Examples > MFRC522 > DumpInfo بروید و کدتان را آپلود کنید. پس از نصب کتابخانه RFID این کد در کتابخانه شما در دسترس است.
سپس سریال مانیتور را باز کنید. تصویری مشابه شکل زیر را میببینید.
کارت RFID یا keychain را به ریدر نزدیک کنید و تا زمانی که تمام اطلاعات نمایش داده شود، ریدر و تگ را نزدیک هم نگه دارید.
این اطلاعاتی است که می توانید از کارت بخوانید، از جمله UID کارت که در تصویر با کادر زرد مشخص شده است. این اطلاعات در حافظه ذخیره میشود و همانطور که در تصویر مشاهده کردید به سطر و ستون تقسیم میشود.
شما 1024 بایت ذخیره سازی داده دارید که به 16 بخش تقسیم شده و هر بخش توسط دو کلید A و B محافظت میشود.
UID کارت خود را یادداشت کنید، زیرا بعداً به آن نیاز دارید.
کد زیر را آپلود کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | /* * * All the resources for this project: http://randomnerdtutorials.com/ * Modified by Rui Santos * * Created by FILIPEFLOP * */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. void setup() { Serial.begin(9600); // Initiate a serial communication SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 Serial.println("Approximate your card to the reader..."); Serial.println(); } void loop() { // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor Serial.print("UID tag :"); String content= ""; byte letter; for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } Serial.println(); Serial.print("Message : "); content.toUpperCase(); if (content.substring(1) == "BD 31 15 2B") //change here the UID of the card/cards that you want to give access { Serial.println("Authorized access"); Serial.println(); delay(3000); } else { Serial.println(" Access denied"); delay(3000); } } |
در قسمتی از کد بالا شما باید (”if (content.substring(1) == “REPLACE WITH YOUR UID را تغییر دهید و UID کارت خود را که قبلاً یادداشت کردهاید بنویسید.
نمایش:
اکنون کد خود را روی آردوینو آپلود کنید و پنجره سریال مانیتور را باز کنید.
اگر کارتی که UID آن را وارد کردهاید نزدیک کنید تصویر زیر را خواهید دید:
و اگر کارت با UID غیر منطبق نزدیک شود پیغام عدم پذیرش نمایش داده میشود:
سلام من برای oled میخوام نمایش بدم وضعیت rfid رو ولی هر کاری میکنم اجرا نمیشه به این شکل برنامه هست که اولتراسونیک وضعیت کاربر چک میکنه و در نهایت تمامی مراحل در oled نمایش داده میشه 🙂
یک سوال دیگه هم داشتم که چجوری میشه توی آردینو از کاربر ورودی uid گرفت و بر اساس چیزی که وارد میکنه اعتبارسنجی انجام بشه میشه این کار ؟
لینک گیتهاب
https://gist.github.com/Mohammadgeek/1e7b780f8b3f4be6c39521d80e2de0c5
با سلام ، ممنون بابت مطالب خوبتون
من ی مشکل دارم : برنامه فقط id دو تا کارت همراه پک RFID را شناسایی میکنه ، من 5 عدد تگ جاسوئیچی هم خریدم اما ان ها را شناسایی نمیکنه ، چیکار کنم ؟
لطفا جواب بدین.
سلام دوست عزیز
شاید اونها RFID نیستند و کارتهایی مثل مافیر هستند
دوستان میتونند یه نگاهی هم به https://github.com/esprfid/esp-rfid بندازند.
جامع و کامل با رابط گرافیکی و…
ممنون برای پیشنهادتون اتفاقا مقاله خیلی جالبی هم هست
سلام چطور میشه کارت دیگه ای هم اضافه کرد یو آی دی کارت دوم رو کجا باید بنویسیم.
خوب اونجایی که داره ایدی کارت رو مقایسه میکنه یه else if بذارید و همون الگوی بالا رو تکرار کنید یا توی همون شرط اول or کنید 🙂
سلام،
با تشکر بابت این آموزش خوب!
فقط یه سوال؛ آیا تگ های 125 کیلوهرتز هم بهش میخوره ؟
سلام دوست عزیز
این ماژول در واقع ماژولی هست که قادر به خودندن کارت های ۱۳.۵ مگاهرتزه و قادر نیست کارت های ۱۲۵ کیلوهرتز رو بخونه
سلام . آیا امکانش هست اموزش راه اندازی این ماژول رو با زبان C ترجیحا کدویژن قرار بدید ؟ هیچ سورس خوب و کاملی در مورد این ماژول برای زبان C نیست توی اینترنت و واقعا خیلی ماژول پر کاربرد و خوش قیمتی هست
اگه توی لیست برنامه هاتون برای آینده هست جوابم رو به ایمیلم بفرستید ممنون
سلام دوست عزیز
احتمالا سورسی در این خصوص منتشر میکنیم ولی با GCC
توصیه میکنم شما هم از Codevition به GCC مهاجرت کنید
دلیلشم مشخصه توصیه میکنم مقاله کامپایلر Codevisionavr در مقابل کامپایلر GCC و مقایسه تخصصی آنها رو مطالعه کنید.
ممنون از پاسختون
شاید کسای دیگه هم این مطلب رو خونده باشن و دوست داشته باشن با GCC کار کنن ولی منبع اموزش خوب کاملی برای این کامپایلر وجود نداره در صورتی که چند تا سایت اموزش کامل کدویژن رو قرار دادن و اکثر کتاب ها و فیلم های اموزشی هم بر مبنای کدویژن تولید شده
در هر حال با GCC هم اگه کد رو قرار بدید ممنون میشم چون این 2 کامپایلر تفاوت های جزئی توی دستورات با هم دارن و میشه تبدیلشون کرد
سلام دوست عزیز ؛ واقعا جای تامل داره که چرا جامعه آکادمیک به این سمت حرکت کرده ! ای کاش در کشور قانون کپی رایت بهتر پیگیری میشد.
در حال حاظر در نظر دارم آموزش GCC رو برای میکروکنترلر ARM سری ST منتشر کنیم
قبلا نرم افزار Atmel Studio رو معرفی کردیم و نحوه کار با اون رو آموزش دادیم که اونم از GCC استفاده میکنه
می تونم خواهش کنم شما کدو قرار بدید چون وارد نیستم اخه شدید نیاز دارم
سلام چطوری led بهش وصل کنیم لطفا بگید
سلام دوست عزیز شما LED را برای چه کاری نیاز دارید؟
در واقع این برنامه نیازی به LED نداره چون تمام اطلاعات در سریال مانیتور نمایش داده میشه ولی اگه نیاز به LED دارید باید دستور روشن شدن LED را متناسب با نیازتون در برنامه اضافه کنید.
من حقیقتا می خام باهاش رله راه اندازی کنه که اگه کارت درست بود رله روشن شه واگه اشتباه بود نه لطفا بگید
اگه می شه به ایمیلم پیام دهید به کدش نیاز شدید دارم
سلام. شما میتونید در بطن شرط if خط 52 برنامه که درست بودن کارت را چک می کند دستور روشن شدن رله یا هر چیز دیگه ای که نیاز دارید را اضافه کنید.
موفق باشید.
می شه شما برام این کارو بکنید چون وارد نیسنم وبه کدش احتیاج زیاد دارم
سلام
من توی برنامه رله رو به پایه 11 وصل کردم که خودتون میتونین پایه رو تغییر بدید. اگه کارت درست باشه رله 1 ثانیه وصل میشه. کد را میتونین از لینک زیر دانلود کنین:
https://paste.ofcode.org/