Search Code

ہاتھ کے اشاروں کے ذریعے آردوینو کے لیے سروو کی پوزیشن کنٹرول کرنا

ہاتھ کے اشاروں کے ذریعے آردوینو کے لیے سروو کی پوزیشن کنٹرول کرنا

اس سبق میں، ہم سیکھیں گے کہ ہاتھ کے اشاروں کا استعمال کرتے ہوئے سرور موٹر کو کیسے کنٹرول کیا جائے۔ اپنے ہاتھ کو بائیں یا دائیں حرکت دے کر، آپ سرور موٹر کو اس کے مطابق جواب دینے کے لیے کہہ سکتے ہیں۔ یہ منصوبہ APDS-9960 اشارہ سینسر کا استعمال کرتا ہے تاکہ ہاتھ کی حرکات کا پتہ لگایا جا سکے اور انہیں سرور کی پوزیشنز میں تبدیل کیا جا سکے۔ تفصیلی بصری وضاحت کے لیے، براہ کرم ویڈیو چیک کریں (ویڈیو میں 00:30 پر)۔

APDS-9960 gesture sensor module -1

ہم جو بنیادی اجزاء استعمال کریں گے ان میں ایک سرو موٹر اور APDS-9960 اشارہ سینسر شامل ہیں۔ سرو موٹر مخصوص زاویوں پر گھومے گا جو کہ معلوم کردہ اشاروں کی بنیاد پر ہوگا، جبکہ APDS-9960 سینسر ہاتھ کی حرکات کی تشریح کرے گا۔ یہ سیٹ اپ بغیر جسمانی رابطے کے سرو کو کنٹرول کرنے کا ایک بدیہی طریقہ فراہم کرتا ہے۔

ہارڈ ویئر کی وضاحت

سرو موٹر ایک چھوٹا آلہ ہے جو مخصوص زاویوں پر گھوم سکتا ہے، جو اسے ان ایپلیکیشنز کے لیے مثالی بناتا ہے جن میں درست پوزیشننگ کی ضرورت ہوتی ہے۔ اس میں عام طور پر تین تاریں ہوتی ہیں: پاور (سرخ)، گراؤنڈ (سیاہ)، اور سگنل (نارنجی)۔ سگنل تار کو سرو کو مخصوص زاویے پر منتقل کرنے کے لیے احکامات موصول ہوتے ہیں۔

APDS-9960 ایک متنوع سینسر ہے جو اشارے، ماحول کی روشنی، اور رنگ کا پتہ لگا سکتا ہے۔ یہ Arduino کے ساتھ I2C کے ذریعے بات چیت کرتا ہے اور طاقت اور ڈیٹا کی منتقلی کے لیے چند پنوں کی ضرورت ہوتی ہے۔ یہ سینسر اوپر، نیچے، بائیں، اور دائیں جیسے حرکات کا پتہ لگا سکتا ہے، جسے ہم سرو کو کنٹرول کرنے کے لیے استعمال کریں گے۔

ڈیٹا شیٹ کی تفصیلات

کارخانہ داربراڈکام
حصہ نمبرAPDS-9960
منطق/آئی او وولٹیج2.4 - 3.6 V
سپلائی وولٹیج2.4 - 3.6 V
آؤٹ پٹ کرنٹ (فی چینل)20 mA زیادہ سے زیادہ
PWM فریکوئنسی کی رہنمائینہیں لگو ہوتا
ان پٹ منطقی حدیں0.3 وی (کم), 0.7 وی (زیادہ)
وولٹیج ڈراپ / RDS(on)/ سچوریشنلا قابل اطلاق
حرارتی حدود-40 سے 85 °C
پیکج6.0 x 3.0 ملی میٹر
نوٹس / مختلف اقساماشارتی احساس، آر جی بی روشنی کا احساس
  • یقینی بنائیں کہ سرو کو مناسب وولٹیج (عام طور پر 5V) کے ساتھ پاور کیا گیا ہے۔
  • APDS-9960 کو I2C مواصلات کا استعمال کرتے ہوئے Arduino سے جوڑیں۔
  • اشارے کے سینسر کے لیے انٹرپٹ پن پر توجہ دیں۔
  • اگر ضروری ہو تو مستحکم سگنل کی شناخت کے لیے پل-اپ مزاحمتوں کا استعمال کریں۔
  • یقینی بنائیں کہ بہتر درستگی کے لیے مختلف روشنی کی حالتوں میں سینسر کو کیلیبریٹ کریں۔
Arduino wiring of APDS9960 to control Servo motor using hand gesture

اجزاء کو وائر کرنے کے لیے، سرور موٹر سے شروع کریں۔ سرخ تار کو آرڈینو کے 5V پن سے جوڑیں، سیاہ تار کو گراؤنڈ (GND) سے، اور نارنجی سگنل تار کو پن سے جوڑیں۔9یہ Arduino کو سرو کے مقام کو کنٹرول کرنے کی اجازت دے گا۔

اگلا، APDS-9960 اشارہ سینسر کو وائر کریں۔ جڑیںV_Nآرڈینو کے 3.3V پر پن، اورGNDزمین پر پن کریں۔ یہINTپن کو پن سے منسلک کیا جانا چاہیے۔2آردوینو پر، جبکہSDAاورSCLپنز پنز میں جاتے ہیںA4اورA5یہ ترتیب سینسر کو آرڈینو کے ساتھ مؤثر طریقے سے بات چیت کرنے کی اجازت دیتی ہے۔

کوڈ کی مثالیں اور رہنمائی

سیٹ اپ فنکشن میں، ہم سرور اور اشارہ سینسر کو شروع کرتے ہیں۔ لائنmyservo.attach(9);سرور کو پن 9 سے باندھتا ہے، جسے ہم نے پہلے جوڑا تھا۔ یہ سرور کو آرڈینو سے احکامات وصول کرنے کی اجازت دیتا ہے۔

APDS-9960 gesture sensor -3
void setup() {
 myservo.attach(9);  // attaches the servo on pin 9 to the servo object
 // Set interrupt pin as input
 pinMode(APDS9960_INT, INPUT);
 // Initialize Serial port
 Serial.begin(9600);
}

اگلا، ہم یہ بیان کرتے ہیں کہ نظام لوپ فنکشن میں اشاروں کو کس طرح سنبھالتا ہے۔ طریقہhandleGesture();دستیاب اشاروں کی جانچ کرتا ہے اور متعلقہ کارروائیاں انجام دیتا ہے۔ مثال کے طور پر، اگر پتہ چلا کہ اشارہ بائیں ہے، تو سروس 180 ڈگری کی طرف منتقل ہو جائے گا۔

void handleGesture() {
    if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_LEFT:
        myservo.write(180);  // added by RoboJax
        break;
      case DIR_RIGHT:
        myservo.write(0);   // added by RoboJax
        break;
    }
  }
}

آخر میں، لوپ مسلسل اشاروں کی جانچ کرتا ہے اور پتہ لگائے گئے اشارے کی بنیاد پر سروو کی پوزیشن کو اپ ڈیٹ کرتا ہے۔ درست اشارے کی شناخت کے لیے مختلف روشنی کی حالتوں میں سیٹ اپ کا ٹیسٹ کرنا یقینی بنائیں۔

نمائش / کیا توقع کریں

جب سب کچھ وائرڈ ہو جائے اور کوڈ اپ لوڈ ہو جائے، تو آپ کو اپنے ہاتھ کو بائیں یا دائیں حرکت دے کر سرور کو کنٹرول کرنے کے قابل ہونا چاہیے۔ سرور بائیں اشارے کے لیے 180 ڈگری تک گھومے گا اور دائیں اشارے کے لیے 0 ڈگری پر واپس آئے گا۔ اگر اشارے نہیں پکڑے جاتے، تو سینسر کی پوزیشننگ اور ارد گرد کی روشنی کی حالتوں کی جانچ کریں (ویڈیو میں 05:30 پر)۔

ابواب

  • تعارف - 00:00
  • ہارڈ ویئر کا جائزہ - 01:30
  • وائرنگ کی ہدایات - 03:00
  • کوڈ کی وضاحت - 04:30
  • ڈیمونستریشن - 06:00

تصاویر

APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -1
APDS-9960 gesture sensor module -1
Arduino wiring of APDS9960 to control Servo motor using hand gesture
Arduino wiring of APDS9960 to control Servo motor using hand gesture
APDS-9960 gesture sensor -3
APDS-9960 gesture sensor -3
12-Source code for controlling a servo with your hand
زبان: C++
++
/****************************************************************
Modified for RoboJax by A.B.S. on May 09, 2017
in Ajax, Ontario, Canada. www.RoboJax.com


Original Source:
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor


Distributed as-is; no warranty is given.
****************************************************************/

#include <Wire.h>

// added by RoboJax
#include <Servo.h>

#include <SparkFun_APDS9960.h>


Servo myservo;  // create servo object to control a servo // added by RoboJax

// Pins
#define APDS9960_INT    2 // Needs to be an interrupt pin

// Constants

// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup() {
 myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  // Set interrupt pin as input
  pinMode(APDS9960_INT, INPUT);

  // Initialize Serial port
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));
  
  // Initialize interrupt service routine
  attachInterrupt(0, interruptRoutine, FALLING);

  // Initialize APDS-9960 (configure I2C and initial values)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }
  
  // Start running the APDS-9960 gesture sensor engine
  if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
  }
}

void loop() {
  if( isr_flag == 1 ) {
    detachInterrupt(0);
    handleGesture();
    isr_flag = 0;
    attachInterrupt(0, interruptRoutine, FALLING);
  }
}

void interruptRoutine() {
  isr_flag = 1;
}

void handleGesture() {
    if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP:
        Serial.println("UP");
        break;
      case DIR_DOWN:
        Serial.println("DOWN");
        break;
      case DIR_LEFT:
        Serial.println("LEFT");
        myservo.write(180);  // added by RoboJax
        break;
      case DIR_RIGHT:
        Serial.println("RIGHT");
        myservo.write(0);   // added by RoboJax
        break;
      case DIR_NEAR:
        Serial.println("NEAR");
        break;
      case DIR_FAR:
        Serial.println("FAR");
        break;
      default:
        Serial.println("NONE");
    }
  }
}

وسائل اور حوالہ جات

ابھی تک کوئی وسائل نہیں۔

فائلیں📁

کوئی فائلیں دستیاب نہیں ہیں۔