پروژه های بر پایه ماژول های RFID همواره جذاب بودهاند، اما در این آموزش قصد داریم یک سیستم تایید هویت بر پایه ماژول RC522 راهاندازی کنیم، همچنین از نمایشگر Oled و و یک رله استفاده خواهیم کرد. در این آموزش با استفاده از UID هر تگ rfid مراحل تایید هویت انجام خواهد شد. در پایان این آموزش شما یک سیستم rfid هوشمند خواهید داشت که در هر مکانی قابل استفاده خواهد بود. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
لینک اجرای این پروژه در لایو اینستاگرام
ماژول کارت خوان RC522
به لطف تکنولوژی Radio Frequency IDentification یا RFID در طول روز تنها با حمل یک کارت کوچک، قادر به پرداخت هزینه حمل نقل عمومی و تایید هویت در مکان های محتلف هستیم و این تنها دو نمونه از کاربرد های این تکنولوژی جذاب است، ماژول RC522 یک انتخاب خوب برای پروژه های این چنینی به حساب می آید. کم مصرف، کم هزینه، رابط کاربری آسان و بسیار محبوب بین علاقه مندان است. ماژول RC522 مبتنی بر MFRC522 IC از NXP یکی از ارزان ترین گزینه ها برای پروژه های بر پایه RFID است، که معمولاً با تگ RFID با حافظه ۱KB ارائه می شود. و از همه مهم تر، می تواند بر روی این تگ ها بنویسد، بنابراین می توانید نوعی پیام مخفی خود را در آن ذخیره کنید.
ماژول RC522 برای خواندن تگ های RFID اقدم به ایجاد یک میدان الکترومغناطیسی ۱۳٫۵۶MHz می کند که از آن برای برقراری ارتباط با تگ های RFID استفاده می کند. این تگ دارای استاندارد ISO 14443A هستند. RC522 می تواند با یک میکروکنترلر از طریق رابط سریال ۴ پین سریال (SPI) با حداکثر سرعت داده ۱۰Mbps اقدام به برقراری ارتباط کند. همچنین این ارتباطات از طریق پروتکل های I2C و UART نیز امکان پذیر می باشد.
ولتاژ کاری ماژول از ۲٫۵ تا ۳٫۳ ولت است، اما خبر خوب این است که پایه های منطقی، ۵ ولت را تحمل می کنند، بنابراین ما می توانیم بدون استفاده از مبدل سطح منطقی، آن را به راحتی به یک Arduino یا هر میکروکنترلر با ولتاژ ۵ ولت متصل کنیم.
برد آردوینو
مجموعه برد های آردوینو از جمله برد های توسعه پرطرفدار بین مهندسین امبدد هستند که در مدل های مختلفی از جمله Micro , proMini , Nano , Uno و همچنین Mega قابل تهیه هستند، هسته مرکزی این برد های محبوب از سری AtMega328 می باشد. آردوینو پلتفرم سختافزاری و نرمافزاری متنباز است. همان طور که قبل تر اشاره کردیم، پلتفرم آردوینو شامل یک میکروکنترلر تکبردی متنباز است که قسمت سختافزار آردوینو را تشکیل میدهد. علاوه بر این، پلتفرم آردوینو یک نرمافزار آردوینو IDE که به منظور برنامهنویسی برای بردهای آردوینو طراحی شدهاست و یک بوت لودر نرمافزاری که بر روی میکروکنترلر بارگذاری میشود را در بر میگیرد.
ماژول نمایشگر Oled 1306
معمولا در پروژه های اینترنت اشیا و دیگر پروژه های امبدد از برای نمایش متن و مقادیر مختلف از نمایشگر های Oled استفاده می شود، این ماژول ها بدر انواع مختلق بسته به نوع درایور اندازه یافت می شوند که یکی از پرطرفدار ترین آن ها SSD1306 می باشد، این نوع از Oled ها معمولا در اندازه های ۰٫۹۶ و ۱٫۳ اینچ ساخته می شوند همچنین پروتکل ارتباطی Oled ها I2C می باشد.
توضیح تکمیلی
در این پروژه با معرفی UID منحصر به فرد هر تگ RFID مجاز بودن هر کدام را برای عبور از مانع امنیتی و در نهایت فعال شده رله مشخص می کنیم، پس از اسکن شدن تگ معرفی شده به کد، نوشته موجود در oled تغییر خواهد کرد و رله به مدت ۵ ثانیه فعال خواهد شد. همچنین UID هر تگ بر روی نمایشگر Oled نمایش داده می شود.
وسایل موردنیاز
نصب کتابخانه مورد نیاز
ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مورد نیاز خواهیمکرد. مراحل زیر را دنبال کنید:
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه Adafruit SSD1306 را جستجو کنید.
- کتابخانه را نصب کنید.
- سپس کلمه “GFX” را جستجو کنید و آن را نصب کنید.
- در ادامه با جستجوی RC522 کتابخانه مورد نیاز برای ماژول RFID را نصب کنید.
بدست آوردن UID
هر تگ RFID یک شناسه منحصر به فرد دارد با نام UID که در این آموزش با معرفی این کد به کد اصلی اجازه عبور از مانع امنیتی را به تگ RFID مربوط خواهیم داد. اتصالات را مانند تصویر زیر برقرار کنید.
پس از برقراری اتصالات کد زیر را در آردوینو آپلود کنید و سپس در سریال مانیتور با اسکن کردن تگ RFID اطلاعات مورد نظر پرینت خواهد شد.
کد این بخش از پروژه سیستم RFID هوشمند
#include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 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() { // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. 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); } }
تست و راهاندازی
در این مرحله اتصالات مربوط به ماژول های Oled , RC522 و همچنین ماژول رله در جداول زیر با آردوینو مشخص شده، همچنین برای برقراری اتصالات می توانید از شماتیک موجود استفاده کنید.
- اتصالات مربوط به ماژول Oled
- اتصالات مربوط به ماژول رله.
شماتیک مربوط به پروژه سیستم RFID هوشمند
خب بعد از برقراری اتصالات، نوبت به کد پروژه میرسد. در ادامه باهم قسمت های مهمی از این کد را بررسی خواهیم کرد. در چند خط اول کتابخانه های مورد نیاز را معرفی میکنیم.
#include <MFRC522.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <SPI.h>
در این بخش، UID بدست آمده را وارد می کنیم.
int code[] = {231,114,158,58}; //UID مدنظر ما
کد کامل پروژه سیستم RFID هوشمند با ماژول کارت خوان RC522 و ماژول OLED
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
جمع بندی
در این آموزش یک سیستم تایید هویت بر پایه ماژول RFID rc522 ساختیم، که وضعیت تایید یا رد شدن هویت تگ را بر روی نمایشگر Oled نیز نمایش دادیم. و پس از اسکن شدن تگ مورد نظر ماژول رله فعال خواهد شد. از این پروژه می توانیم در مکان های مختلف برای کنترل عبور افراد استفاده کنیم.
- تنظیمات منوی tools در نرم افزار آردوینو نیز مانند تصویر زیر است.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام مهندس
در هنگام آپلود برنامه روی برد UNO این پیغام خطا رو میده
exit status 1
‘MFRC522’ does not name a type
سلام، با توجه به ارور بنظر میرسد کد بخش کتابخانه ها ویرایش شده یا کتابخانه مد نظر بدرستی نصب نشده.
وقت بخیر
من کد رو آپلود میکنم رو آردوینو و بدون مشکل انجام میشه
روی oled هم نوشته ی RFID Lock میاد
اما به هیچکدوم از تگ ها واکنش نشون نمیده
و توی بخش سریال مانیتور هم با اینکه بادریت رو طبق سایت تنظیم کردم، هیچ نوشته ای نمیاد
مشکل از چیه؟
سلام، خیلی ممنون. باید مطابق آموزش UID تگ مورد نظر را در کد معرفی کنید.
سلام یک سوال
اگر بخواهیم بجای اسکن اطلاعات کارت را اسکن کند و برای ما کپی کند مثلا شماره کارت و قسما هاای دیگر
اگر می شود می توان کاری کرد که از یک متری کارت های هوشمند را تشخیص دهد و اطلاعات را کپی کند ؟
سلام؛ امکان انجام چنین مواردی وجود دارد. در مورد رنج دریافت اطلاعات با چنین ماژول هایی این رنج قابل خواندن نیست.
سلام
مدار رو بستم و کد رو رو هم آپلود کردم و کارت و تگ های هم میشناسه ولی رله باز و بسته نمیشه ؟
با سلام، اتصالات را چک کنید که پین مربوط به ورودی سیگنال ماژول رله متصل شده باشد. همچنین بصورت جداگانه رله را تست کنید تا از صحت کار مطمئن شوید.
سلام میشه کارخوان برای بازی بسازید که مثلا فلان قدر پول کم کنه یا پول بده کسی؟ مثل مونوپولی کارتخوان دار
با سلام، بله با این ماژول سناریو های مختلفی قابل اجراست.
ببخشید میشه بگید که این کد روی اردوینو یونو هم میشه اپلود کرد با نه؟
بله آپلود میشه، مشکلی نیست.
با سلام و احترام
آیا امکان ساخت این دستگاه و جایگذاری در باکس و اعمال تغییرات مورد نظر وجود دارد
در صورت امکان و تمایل به همکاری لطفا اطلاعات تماس خود را جهت بررسی به ایمیل بنده ارسال بفرمائید
سپاس
با سلام، برای درخواست پروژه میتونید از طریق سایت دانشجوکیت یک تیکت با این عنوان باز کنید و یا از طریق اینستاگرام من با من در تماس باشید.
سلام ببخشید من برد آردوینو Mega2560 استفاده میکنم میشه پین های مربوط به این برد و RFID بگین چون پین های دیجیتال برد های آردوینو با هم فرق میکنه
با سلام بایستی از پایه های SPI استفاده کنید.
سلام من هر کاری کردم ماژول RFID من UID تگ رو نخواند. می شه به من کمک کنید.
با سلام
از اتصالات صحیح هست و برنامه کار میکند، بایستی فرکانس کارت و کارت خوان را بررسی کنید که یکسان باشند.
سلام…من میخواهم یک سیستم هوشمند بسازم که به هر شخص با استفاده از کارتخوان، اجازه دهد دستگاه یا وسایل مختلف را روشن کند و همچنین ساعت مشخصی را برای هر شخص تنظیم کند….و مثل کارت سوخت مثلا در ماه مقدار برداشت برای هر شخص محدود باشد…
آیا میتوانید در این مورد کمک کنید…
با تشکر .
با سلام
کاربر گرامی در کامنت ها امکان راهنمایی برای پروژه فراهم نیست و چنین خدماتی نداریم.