آموزش آردوینوپروژه های آردوینو

تشخیص ژست حرکت دست با آردوینو و سنسور PAJ7620

در گذشته سوئیچ های فیزیکی کنترل را انجام میدادند، سپس از صفحه نمایش های لمسی استفاده شد و اکنون ما میتوانیم با ایجاد ژست و حرکت دست ماشین ها را کنترل کنیم. شاید این گفته تبلیغاتی به نظر برسد اما کاملا قابل انجام است و قابلیت اضافه شدن به هر پروژه ای را دارد.
در این مقاله ما از ماژول تشخیص حرکت PAJ7620 استفاده میکنیم. این یک ماژول مناسب برای انواع پروژه ها است زیرا قابلیت تشخیص 9 ژست را دارد و قیمت بسیار مناسبی دارد.

سنسور تشخیص حرکت PAJ7620

سنسور ژست PAJ7620 یک ماژول همه کاره و کاربرپسند است و برای علاقه مندان به الکترونیک ایده آل است. در قلب این ماژول تراشه PAC720 قرار دارد که قابلیت های تشخیص ژست را با پروتکل محبوب I2C ادغام می کند و یک سیستم حسگر تحلیلی تصویر جامع را ایجاد می کند. این ماژول پیشرفته می تواند انواع حرکات دست انسان را تشخیص دهد که آن را برای بسیاری از کاربرد های تعاملی بسیار مفید می کند.

این سنسور می تواند 9 حرکت مختلف را تشخیص دهد: حرکت به بالا، پایین، چپ، راست، جلو، عقب، جهت عقربه های ساعت، خلاف جهت عقربه های ساعت و تکان دادن.

تصویر ماژول تشخیص ژست PAJ7620

در تصویر بالا می توانید قسمت های جلو و عقب ماژول تشخیص ژست PAJ7620 را مشاهده کنید. این یک ماژول کوچک و کاربردی است.

مشخصات ماژول تشخیص ژست PAJ7620

پارامتر نماد محدوده محدوده محدوده واحد
Min Typical Max
ولتاژ تغذیه Vcc 3.3 5 6 V
ولتاژ پین IO Vio 1.8 3.3 v
جریان تغذیه Ic 370 800 mA
محدوده تشخیص ژست Dop 5 15 cm
دمای کاری Top -40 85 °C
دمای ذخیره Tstorage -40 125 °C

در بالا می توانید جدول کوچکی را مشاهده کنید که مشخصات در آن ذکر شده است. این ماژول با هر میکروکنترلری که از سخت افزار I2C پشتیبانی می کند سازگار است. تنها چیزی که باید به خاطر بسپارید سطح ولتاژ پین IO است. این ماژول فقط ولتاژ تا 3.3 ولت را می پذیرد. اگر از یک میکروکنترلر 5 ولت یا چیزی بالاتر از آن استفاده می کنید، پیشنهاد می کنم از یک تغییر دهنده سطح منطقی یا مدار تقسیم ولتاژ برای کاهش ولتاژ به 3.3 ولت بین خطوط داده استفاده کنید.

این سنسور تا 20 سانتی متر قابلیت تشخیص دارد اما بهترین محدوده آن زیر 15 سانتی متر است.
PAJ7620 پین اوت های ماژول تشخیص ژست در زیر جدولی وجود دارد که شامل توضیحات پین های این ماژول PAJ7620 است. همه چیز در اینجا بسیار ساده است.

شماره نام پین توضیحات
1 VCC ولتاژ +
2 GND ولتاژ –
3 SCL پین کلاک I2C
4 SDA پین داده I2C
5 INT پین وقفه

GIF بالا عملکرد پین وقفه راتوضیح می دهد.

ماژول تشخیص ژست PAJ7620 چگونه کار می کند؟

میخواهیم عملکرد این ماژول را در دو بخش داخلی و خارجی توضیح بدهیم.

عملکرد داخلی PAJ7620

عملکرد داخلی این سنسور اصلا گیج کننده نیست زیرا فقط یک دوربین دارد که این جادو! را انجام میدهد. در این بخش یک دوربین 60 در 60 پیکسل به همراه یک ال ای دی مادون قرمز به علاوه یک آی سی پردازنده وجود دارد. تصاویر از طریق دوربین گرفته میشود و واحد پردازش ژست را تشخیص میدهد و نتیجه از طریق ارتباط I2C به میکروکنترلر یا برد آردوینو شما ارسال میشود.
تصویر داخلی سنسور PAJ7620

عملکرد خارجی PAJ7620

عملکرد خارجی این سنسورنیز ساده است، شما در محدوده 5 تا 15 سانتی با زاویه دید 60 درجه نسبت به سنسور میتوانید حرکات را انجام بدهید.

PAJ7620 علامت تشخیص ژست در تصویر بالا میتوانید ژست های قابل تشخیص توسط این سنسور را مشاهده کنید.

مدار PAJ7620 ماژول سنسور ژست با Arduino UNO

ما برای نمایش ژست تشخیص داده شده از یک ماژول ال سی دی کاراکتری I2C استفاده میکنیم.مدار PAJ7620 ماژول سنسور ژست با Arduino UNO

ما از دو مقاومت برای اتصال سنسور به برد آردوینو استفاده کردیم تا باعث آسیب به ماژول نشود. این یک راه حل کاملا مناسب نیست و بهتر هست از مبدل های سطح منطقی یا حتی مدار های تقسیم ولتاژ استفاده کنید.

تصویر مونتاژ شده ماژول تشخیص حرکت PAJ7620

کد آردوینو برای تشخیص ژست

از آنجایی که در عصر آردوینو هستیم نیازی نیست نگران کدنویسی های پیچیده باشید زیرا همیشه کتابخانه های از پیش آماده برای سنسور ها و ماژول های مختلف داریم. من یک کتابخانه ساخته شده توسط DFRobot را انتخاب کردم که DFRobot_PAJ7620U2 است. میتوانید این کتابخانه را به سادگی از طریق library manager خود آردوینو نصب کنید.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

نصب کتابخانه DFRobot_PAJ7620U2 در Arduino IDE

شما میتوانید به سادگی در example های این کتابخانه کد مناسبی را پیدا کنید اما در این جا ما یک نمونه اصلاح شده برای شما قرار دادیم و یک ال سی دی کاراکتری به آن اضافه کردیم.

#include <DFRobot_PAJ7620U2.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

سه کتابخانه فوق در ابتدا اضافه می شوند.

uint8_t rightChar[8] = { B00000, B00000, B00100, B00010, B11111, B00010, B00100, B00000 };
uint8_t leftChar[8] = { B00000, B00000, B00100, B01000, B11111, B01000, B00100, B00000 };
uint8_t upChar[8] = { B00000, B00000, B00100, B01110, B10101, B00100, B00100, B00000 };
uint8_t downChar[8] = { B00000, B00100, B00100, B10101, B01110, B00100, B00000, B00000 };
uint8_t forwardChar[8] = { B00100, B10101, B01110, B00100, B00000, B00000, B01110, B01110 };
uint8_t backwardChar[8] = { B00100, B01110, B10101, B00100, B00000, B00000, B01110, B01110 };
uint8_t clockwiseChar[8] = { B01110, B10001, B00001, B00001, B01010, B01100, B01110, B00000 };
uint8_t antiClockwiseChar[8] = { B00000, B01110, B01100, B01010, B00001, B00001, B10001, B01110 };
uint8_t waveRightChar[8] = { B00111, B00011, B00101, B01000, B00010, B10100, B11000, B11100 };
uint8_t waveLeftChar[8] = { B11100, B11000, B10100, B00010, B01000, B00101, B00011, B00111 };

برای نمایش بهتر، ما چند کاراکتری سفارشی را مطابق کد بالا به برنامه اضافه میکنیم.

void setup() {
  Serial.begin(115200);
  delay(300);

  lcd.begin();
  lcd.createChar(1, waveRightChar);
  lcd.createChar(2, waveLeftChar);
  lcd.createChar(3, upChar);
  lcd.createChar(4, downChar);
  lcd.createChar(5, forwardChar);
  lcd.createChar(6, backwardChar);
  lcd.createChar(7, clockwiseChar);
  lcd.createChar(8, antiClockwiseChar);

  Serial.println("Gesture recognition system base on PAJ7620U2");
  while (paj.begin() != 0) {
    Serial.println("initial PAJ7620U2 failure! Please check if all the connections are fine, or if the wire sequence is correct?");
    delay(500);
  }
  Serial.println("PAJ7620U2init completed, start to test the gesture recognition function");

  paj.setGestureHighRate(false);
}

سپس باید در تابع void setup پیکربندی های اولیه از جمله ارتباط با ال سی دی و سنسور را انجام بدهیم.

  Serial.println("Gesture recognition system base on PAJ7620U2");
  while (paj.begin() != 0) {
    Serial.println("initial PAJ7620U2 failure! Please check if all the connections are fine, or if the wire sequence is correct?");
    delay(500);
  }
  Serial.println("PAJ7620U2init completed, start to test the gesture recognition function");

در مرحله بعدی بررسی میکنیم که ارتباط با سنسور به خوبی برقرار است و به خوبی داده ها دریافت میشود.

  paj.setGestureHighRate(false);

با کد بالا نرخ تازه سازی را پایین تر قرار میدهیم که در این حالت از 9 حرکت از پیش تعیین شده بدون حرکت های سفارشی میتوانیم استفاده کنیم.

void loop() {

  DFRobot_PAJ7620U2::eGesture_t gesture = paj.getGesture();
  if (gesture != paj.eGestureNone) {
    lcd.clear();

    String description = paj.gestureDescription(gesture);
    Serial.println("--------------Gesture Recognition System---------------------------");
    Serial.print("gesture code        = ");
    Serial.println(gesture);
    Serial.print("gesture description  = ");
    Serial.println(description);
    Serial.println();

    switch (gesture) {
      case 1:
        lcd.setCursor(3, 0);
        lcd.write(byte(1));
        lcd.print(" ");
        lcd.print("RIGHT");
        lcd.print(" ");
        lcd.write(byte(1));
        break;
     // … program for other conditions are used
      default:
        lcd.print("New Gesture");
        break;
    }
  }
}

در کد بالا خطوط مربوط به تابع void loop را مشاهده میکنید. در این قسمت ما کد هگز آخرین ژست شناسایی شده را دریافت میکنیم. اگر این کد 0 باشد، یعنی هیچ حرکتی تشخیص داده نشده است. اگر مورد دیگری باشد با توجه به لیست زیر متوجه میشویم چه حرکتی تشخیص داده شده است.

– None = 0
– Right = 1
– Left = 2
– Up = 4
– Down = 8
– Forward = 16
– Backward = 32
– Clockwise = 64
– AntiClockwise = 128
– Wave = 256
– WaveSlowlyDisorder = 512
– WaveSlowlyLeftRight = 3
– WaveSlowlyUpDown = 12
– WaveSlowlyForwardBackward = 48
– All = 255

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

نمایش عملکرد ماژول تشخیص حرکت PAJ7620 با آردوینو UNO

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

نمایش عملکرد ماژول تشخیص حرکت PAJ7620 با آردوینو UNO

موارد موجود در فایل : سورس کامل

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *