RFID / NFC آردوینو آردوینو Arduino Uno آموزش آردوینو خانه هوشمند نمایشگر OLED

ساخت سیستم RFID هوشمند با ماژول کارت خوان RC522 و نمایشگر Oled

نوشته شده توسط CiferTech

پروژه های بر پایه ماژول های 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 نمایش داده می شود.

 


وسایل موردنیاز


ماژول کارت خوان RC522

برد آردوینو نانو Nano

نمایشگر Oled 0.96

 


نصب کتابخانه مورد نیاز


ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مورد نیاز خواهیم‌کرد. مراحل زیر را دنبال کنید:

  1. این مسیر را دنبال کنید Sketch Include Library > Manage Libraries
  2. کلمه Adafruit SSD1306  را جستجو کنید.
  3. کتابخانه را نصب کنید.
  • سپس کلمه “GFX” را جستجو کنید و آن را نصب کنید.
  • در ادامه با جستجوی RC522 کتابخانه مورد نیاز برای ماژول RFID را نصب کنید.

 


بدست آوردن UID


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

اتصالات ماژول کارت خوان RC522 به برد آردوینو - دیجی اسپارک

اتصالات ماژول کارت خوان RC522 به برد آردوینو نانو - دیجی اسپارک

 

پس از برقراری اتصالات کد زیر را در آردوینو آپلود کنید و سپس در سریال مانیتور با اسکن کردن تگ 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 و همچنین ماژول رله در جداول زیر با آردوینو مشخص شده، همچنین برای برقراری اتصالات می توانید از شماتیک موجود استفاده کنید.

اتصالات ماژول کارت خوان در سیستم RFID هوشمند - دیجی اسپارک

  • اتصالات مربوط به ماژول Oled

اتصالات ماژول OLED و برد آردوینو نانو - دیجی اسپارک

  • اتصالات مربوط به ماژول رله.

اتصالات ماژول رله و برد آردوینو نانو در سیستم RFID هوشمند - دیجی اسپارک

شماتیک مربوط به پروژه سیستم RFID هوشمند

شماتیک پروژه سیستم 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 و آردوینو - دیجی اسپارک

 


جمع بندی


در این آموزش یک سیستم تایید هویت بر پایه ماژول RFID rc522 ساختیم، که وضعیت تایید یا رد شدن هویت تگ را بر روی نمایشگر Oled نیز نمایش دادیم. و پس از اسکن شدن تگ مورد نظر ماژول رله فعال خواهد شد. از این پروژه می توانیم در مکان های مختلف برای کنترل عبور افراد استفاده کنیم.

  • تنظیمات منوی tools در نرم افزار آردوینو نیز مانند تصویر زیر است.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۰ دیدگاه

  • سلام مهندس
    در هنگام آپلود برنامه روی برد UNO این پیغام خطا رو میده
    exit status 1
    ‘MFRC522’ does not name a type

  • وقت بخیر
    من کد رو آپلود میکنم رو آردوینو و بدون مشکل انجام میشه
    روی oled هم نوشته ی RFID Lock میاد
    اما به هیچکدوم از تگ ها واکنش نشون نمیده
    و توی بخش سریال مانیتور هم با اینکه بادریت رو طبق سایت تنظیم کردم، هیچ نوشته ای نمیاد
    مشکل از چیه؟

  • سلام یک سوال
    اگر بخواهیم بجای اسکن اطلاعات کارت را اسکن کند و برای ما کپی کند مثلا شماره کارت و قسما هاای دیگر
    اگر می شود می توان کاری کرد که از یک متری کارت های هوشمند را تشخیص دهد و اطلاعات را کپی کند ؟

    • سلام؛ امکان انجام چنین مواردی وجود دارد. در مورد رنج دریافت اطلاعات با چنین ماژول هایی این رنج قابل خواندن نیست.

  • سلام

    مدار رو بستم و کد رو رو هم آپلود کردم و کارت و تگ های هم میشناسه ولی رله باز و بسته نمیشه ؟

    • با سلام، اتصالات را چک کنید که پین مربوط به ورودی سیگنال ماژول رله متصل شده باشد. همچنین بصورت جداگانه رله را تست کنید تا از صحت کار مطمئن شوید.

  • سلام میشه کارخوان برای بازی بسازید که مثلا فلان قدر پول کم کنه یا پول بده کسی؟ مثل مونوپولی کارتخوان دار

  • با سلام و احترام
    آیا امکان ساخت این دستگاه و جایگذاری در باکس و اعمال تغییرات مورد نظر وجود دارد
    در صورت امکان و تمایل به همکاری لطفا اطلاعات تماس خود را جهت بررسی به ایمیل بنده ارسال بفرمائید
    سپاس

    • با سلام، برای درخواست پروژه می‌تونید از طریق سایت دانشجوکیت یک تیکت با این عنوان باز کنید و یا از طریق اینستاگرام من با من در تماس باشید.

  • سلام ببخشید من برد آردوینو Mega2560 استفاده میکنم میشه پین های مربوط به این برد و RFID بگین چون پین های دیجیتال برد های آردوینو با هم فرق میکنه

  • سلام من هر کاری کردم ماژول RFID من UID تگ رو نخواند. می شه به من کمک کنید.

  • سلام…من میخواهم یک سیستم هوشمند بسازم که به هر شخص با استفاده از کارتخوان، اجازه دهد دستگاه یا وسایل مختلف را روشن کند و همچنین ساعت مشخصی را برای هر شخص تنظیم کند….و مثل کارت سوخت مثلا در ماه مقدار برداشت برای هر شخص محدود باشد…
    آیا میتوانید در این مورد کمک کنید…
    با تشکر .

    • با سلام
      کاربر گرامی در کامنت ها امکان راهنمایی برای پروژه فراهم نیست و چنین خدماتی نداریم.