با پیشرفت روز افزون تکنولوژی در زمینه های مختلف، مدیریت افراد آسان تر شده است. به طوری که با تکنولوژی RFID می توان عبور و مرور، شمارش افراد و … را به راحتی کنترل کرد. فرض کنید یک ساختمان اداری دارای بخش های مختلفی است، هر کدام از این افراد با توجه به رتبه شغلی شان باید به مکان های مختلفی دسترسی داشته باشند. این کار توسط کارت های RFID به راحتی انجام می شود به طوری که برای ورود به هر بخش کافیست تگ RFID را در مقابل دستگاه مخصوص به خود قرار دهند تا علاوه بر ثبت حضور، اجازه ورود به بخش مورد نظر داده شود. در این سری از پروژه های آردوینو، نحوه خواندن کدهای تگ RFID به کمک مازول RC522 و نحوه اتصال به برد آردوینو و راه اندازی آن را به طور کامل توضیح داده ایم. پیشنهاد می کنیم اگر مایل به ساخت یک دستگاه حضور و غیاب پیشرفته و در عین حال کم هزینه برای اداره یا شرکت خود هستید پروژه زیر که در وب سایت الکترونیک98 منتشر گردیده است را به طور کامل مطالعه نموده تا بتوانید دستگاه مورد نظر را در سریعترین زمان بسازید.
RFID چیست؟
RFID مخفف Radio Frequency Identification به معنی شناسایی فرکانس رادیویی که قادر به تبادل اطلاعات است. در مفهوم RFID علاوه بر یک دستگاه کارت خوان که خواننده کارت یا Reader نامیده می شود یک سری تگ RFID یا کارت شناسایی نیز وجود دارد. زمانی که این تگ ها در محدوده تعیین شده در مقابل دستگاه کارت خوان قرار بگیرند، میدان مغناطیسی تولید شده توسط دستگاه کارت خوان باعث فعال شدن تگ می گردد و این تگ به طور مداوم اقدام به ارسال اطلاعات از طریق امواج رادیویی می کند و دستگاه کارت خوان داده ها را دریافت و به سیستم های دیگر جهت پردازش ارسال می کند.
همچنین لازم به ذکر است که این تگ ها ضد آب بوده و با توجه به شکل و اندازه آن ها به راحتی قابل حمل می باشند. از جمله کاربرد تگ های RFID به شرح زیر است:
1. دستگاه حضور و غیاب
2. شمارش افراد
3. مدیریت دارایی
4. دستگاه های هوشمند
5. دستگاه های ردیابی
6. ایمنی مواد غذایی
7. سیستم های پرداخت
8. زمان بندی مسابقه
9. سیستم های پرداخت تلفن و …
ماژول کارت خوان RFID RC522
ماژول RC522 برای خواندن غیر تماسی تگ های RFID در فرکانس 13.56MHz به کار برده می شود. این ماژول، قابل استفاده با بردهای آردوینو است و کاربردی بسیار مناسب در توسعه تجهیزات و کارت خوان های RF دارد. همچنین ارتباط این ماژول از طریق رابط SPI است. از جمله مشخصات و ویژگی های ماژول RFID RC522 به شرح زیر است:
1. راه اندازی با ولتاژ کم
2. قیمت بسیار پایین نسبت به کاربرد آن
3. اندازه کوچک و قابل حمل به راحتی
4. دارای 8 پایه جهت ارتباط با برد آردوینو
5. نوع فیبر به صورت فایبرگلاس
6. پروتکل ارتباطی به صورت SPI
7. ولتاژ مورد نیاز 2.5 تا 3.3 ولت
8. جریان 13 تا 26 میلی آمپر
9. فرکانس کاری در محدوده 13.56MHz
10. سرعت 10Mbit/S
11. محدوده دما 20- تا 80+ درجه سانتی گراد
12. محدوده اندازه گیری تگ در 8 تا 10 سانتی متر
13. دارای بافر 64 بیتی برای حافظه
14. ابعاد فیبر 40*60 میلی متر
دانلود دیتا شیت ماژولRFID RC522
لیست قطعات مورد نیاز
برد آردوینو Arduino UNO R3 مدل DIP | 1 عدد |
ماژول کارت خوان RFID مدل خواندن و نوشتن RC522 | 1 عدد |
تگ RFID مدل کارتی 13.56MHz | 1 عدد |
برد بورد (پروجکت برد) مدل GL | 1 عدد |
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی) | 1 عدد |
نحوه اتصال قطعات به یکدیگر و برد آردوینو بسیار ساده است به طوری که برای انجام این عمل می توانید طبق شماتیک و توضیحات زیر این کار را به راحتی انجام دهید.
1. در مرحله اول ابتدا پایه 3.3v مازول RC522 را به پین 3.3v برد آرددوینو اتصال دهید.
2. پایه GND ماژول را به پین زمین یا GND آردوینو متصل کنید.
3. پایه ریست RST را به پین دیجیتال شماره 9 یا D9 آردوینو متصل نمائید.
4. پایه SDA را به پین D10 آردوینو اتصال دهید.
5. پایه MOSI را به پین D11 آردوینو متصل کنید.
6. پایه MISO را به پین D12 آردوینو متصل نمائید.
7. پایه SCK را به پین D13 آردوینو اتصال دهید.
برنامه نویسی پروژه
قبل از برنامه نویسی در نرم افزار آردوینو ابتدا کتابخانه RFID را دانلود نموده و طبق توضیحات زیر، آن را به زیرمجموعه های کتابخانه خود در نرم افزار آردوینو اضافه کنید.
نصب کردن کتابخانه RFID
لازم به ذکر است که نرم افزار برنامه نویسی آردوینو به صورت پیش فرض توانایی پشتیبانی از RFID را ندارد بنابراین ما باید library (کتابخانه یا برنامه) مورد نیاز را بر روی آن نصب کنیم. این فرآیند بسیار ساده و راحت است که در زیر نحوه استفاده از آن را توضیح داده ایم.
1. در مرحله اول ابتدا آخرین (جدیدترین) نسخه کتابخانه (RFID ) را از لینک فوق دانلود کنید.
2. پس از دانلود فایل، نرم افزار آردوینو را باز کنید.
3. مسیر زیر را دنبال کنید و در پنجره باز شده فایل کتابخانه RFID را که قبلا دانلود کرده اید را انتخاب نمائید:
… Sketch > Include Library > Add .ZIP Library
برنامه نویسی کامل پروژه
بعد از اتصال قطعات به یکدیگر و نصب کتابخانه، کدهای زیر را در نرم افزار آردوینو کپی نموده سپس به برد آردوینو آپلود کنید.
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
#include <SPI.h> #include <MFRC522.h> constexpr uint8_t RST_PIN = 9; // Configurable, see typical pin layout above constexpr uint8_t SS_PIN = 10; // Configurable, see typical pin layout above MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class MFRC522::MIFARE_Key key; // 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 for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } Serial.println(F("This code scan the MIFARE Classsic NUID.")); Serial.print(F("Using the following key:")); printHex(key.keyByte, MFRC522::MF_KEY_SIZE); } void loop() { // Look for new cards if ( ! rfid.PICC_IsNewCardPresent()) return; // Verify if the NUID has been readed if ( ! rfid.PICC_ReadCardSerial()) return; Serial.print(F("PICC type: ")); MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); Serial.println(rfid.PICC_GetTypeName(piccType)); // Check is the PICC of Classic MIFARE type if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("Your tag is not of type MIFARE Classic.")); 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.println(F("The NUID tag is:")); Serial.print(F("In hex: ")); printHex(rfid.uid.uidByte, rfid.uid.size); Serial.println(); Serial.print(F("In dec: ")); printDec(rfid.uid.uidByte, rfid.uid.size); Serial.println(); } else Serial.println(F("Card read previously.")); // Halt PICC rfid.PICC_HaltA(); // Stop encryption on PCD rfid.PCD_StopCrypto1(); } /** * Helper routine to dump a byte array as hex values to Serial. */ void printHex(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } } /** * 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); } } |
سلام،ممنونم از سایت بسیار خوبتون
لطفا در مورد اینکه تگ رو چطور برای ماژول تعریف کنیم و همچنین اضافه کردن تگ های بیشتر نیز توضیح دهید.متشکرم
با تشکر از مطالب بسیار آموزنده و مفیدتون
من بوسیله ماژول rc522 ویک رله 5 ولتی دستگاه درب باز کن ساختم
در حالت معمولی که خروجی رله را به وسایل برقی وصل میکنم سیستم خوب جواب میده مثلا یک فن کوچک را استارت میکنه
ولی وقتی به بوبین درب منزل وصل میکنم و کارت را نزدیک میبرم بوبین فعال میشه و درب را باز میکنه ولی بصورت تحریک شده باقی میمونه و غیر فعال نمیشه
دومین مشکل اینه که در صورت قطع و وصل تغذیه چرا بوبین را فعال میکنه ؟
ممکنه درب منزل با قطع و وصل برق ناخودآگاه باز بشه؟
متشکرم
سلام دوست عزیز
من دقیقا متوجه سوال شما نشدم.
یعنی شما از برد آردوینو استفاده نکرده اید و تنها خروجی IRQ ماژول RC522 را به رله داده اید؟
اگر خروجی IRQ را مستقیم به یک رله وصل کرده اید، باید بدانید این خروجی تنها برای باخبر کردن دستگاه از کشیده شدن کارت است و با کشیدن هر کارتی این خروجی فعال می شود پس به هیچ عنوان این شیوه امنیت لازم را ندارد.
اما اگر از برد آردوینو استفاده کرده اید و ماژول RC522 را به برد آردوینو متصل کرده اید، تنها لازم است در برنامه خود زمانیکه رله را فعال کرده اید توسط دستور delay یک تاخیر یک ثانیه ای ایجاد کنید و بعد از آن مجدد رله را غیر فعال کنید.
با سلام.
تشکر بایت مطالب خوبتون.
سوالی داشتم در مورد محدوده اندازه گیری تگ در 8 تا 10 سانتی متر است. برای اینکه محدوده اندازه گیری به 1متر برسانیم چه راه حلی پیشنهاد می کنید.
سلام دوست عزیز
برای دسترسی به بردهای بیشتر از 10 سانتی متر باید از ماژول های RFID مدل UHF استفاده نمایید.
سلام وقت بخیر
ممنون بابت مطالب ارزشمندتون
مشکلی که دارم نیاز به یه ریدری دارم که از فاصله نیم متر رو بتونه بخونه و قیمتش پایین باشه زیر یک میلیون باشه آیا شما چنین ریدری مد نظرتون هس
سلام دوست عزیز
همانطور که در پاسخ به سوال قبلی دیگر کاربر، ذکر شد، برای دسترسی به بردهای بیشتر از 10 سانتی متر باید از ماژول های RFID مدل UHF استفاده نمایید. در حال حاضر از قیمت این ماژول ها اطلاعی ندارم، اما می توانید با یک جستجوی ساده در فروشگاه های اینترنتی، مدل های متفاوت این ماژول را هم از لحاظ فنی و هم قیمتی بررسی فرمائید.
سلام ببخشید من از این پروژه ی شما استفاده کردم خوب کار میکنه فقط 2 سانتی متر تا 3 سانتی متر رو جواب میده چطور تا 10سانتی متر جواب بگیرم
یه پروژه ی دیگه هم از شما دیدم با ماژول دیگه ای بود ولی دکمه ی حذف و اضافه کردن کارت رو داشت میخواستم بدونم با همین کد نویسی چطوری اون کارو انجام بدم اصلا میشه؟ که دیگه سیم پروگرم رو وصل نکنم
سلام دوست عزیز
به صورت کلی فاصله تشخیص ماژول های RFID در همین حدود است، در صورتیکه نیاز به فاصله بیشتر دارید باید از ماژول های RFID با فناوری UHF استفاده کنید.
ممنون
سلام وقت بخیر بنده یک سوالی در رابطه با کد دهی تک به دستگاه داشتم من تمام کد ها وارد کردم فقط تگ دستگاه وارد نمی شود و در سریال مانیتور این رو مینویسه
This code scan the MIFARE Classic NUID.
Using the following key:. FF. FF. FF. Ff. Ff. Ff