Search Code

হ্যান্ড জেসচার দ্বারা সার্ভো পজিশন নিয়ন্ত্রণ করা আর্দুইনোর জন্য

হ্যান্ড জেসচার দ্বারা সার্ভো পজিশন নিয়ন্ত্রণ করা আর্দুইনোর জন্য

এই টিউটোরিয়ালে, আমরা হাতের অঙ্গভঙ্গি ব্যবহার করে একটি সার্ভো মোটর নিয়ন্ত্রণ করা শিখব। আপনার হাত বাম বা ডানে সরিয়ে, আপনি সার্ভো মোটরকে সাড়া দিতে পারেন। এই প্রকল্পটি হাতের অঙ্গভঙ্গি সনাক্ত করতে এবং সেগুলিকে সার্ভো অবস্থানে রূপান্তর করতে APDS-9960 অঙ্গভঙ্গি সেন্সর ব্যবহার করে। বিস্তারিত ভিজ্যুয়াল ব্যাখ্যার জন্য, (ভিডিওতে 00:30) ভিডিওটি দেখার জন্য নিশ্চিত করুন।

APDS-9960 gesture sensor module -1

আমরা যে মূল উপাদানগুলি ব্যবহার করব সেগুলির মধ্যে একটি সার্ভো মোটর এবং APDS-9960 ইশারা সেন্সর অন্তর্ভুক্ত রয়েছে। সার্ভো মোটর সনাক্ত করা ইশারার ভিত্তিতে নির্দিষ্ট কোণে ঘুরবে, যখন APDS-9960 সেন্সর হাতের গতিবিধি ব্যাখ্যা করবে। এই সেটআপটি শারীরিক স্পর্শ ছাড়াই সার্ভো নিয়ন্ত্রণ করার একটি স্বজ্ঞাত উপায় প্রদান করে।

হার্ডওয়্যার ব্যাখ্যা করা

সার্ভো মোটর একটি ছোট ডিভাইস যা নির্দিষ্ট কোণে ঘুরতে পারে, যা সঠিক অবস্থান নির্ধারণের প্রয়োজনীয়তা সম্পন্ন অ্যাপ্লিকেশনগুলির জন্য আদর্শ। এর সাধারণত তিনটি তার থাকে: পাওয়ার (লাল), গ্রাউন্ড (কালো), এবং সিগন্যাল (কমলা)। সিগন্যাল তারটি সার্ভোকে নির্দিষ্ট কোণে সরানোর জন্য কমান্ড গ্রহণ করে।

APDS-9960 একটি বহুমুখী সেন্সর যা অঙ্গভঙ্গি, পরিবেশের আলো এবং রঙ সনাক্ত করতে পারে। এটি Arduino এর সাথে I2C এর মাধ্যমে যোগাযোগ করে এবং পাওয়ার এবং ডেটা স্থানান্তরের জন্য কয়েকটি পিনের প্রয়োজন। সেন্সরটি উপরে, নিচে, বামে এবং ডানে মতো গতিবিধি সনাক্ত করতে পারে, যা আমরা সার্ভো নিয়ন্ত্রণ করতে ব্যবহার করব।

ডেটাশিটের বিস্তারিত

উৎপাদকব্রডকম
পার্ট নম্বরAPDS-9960
লজিক/আইও ভোল্টেজ২.৪ - ৩.৬ ভি
সরবরাহ ভোল্টেজ২.৪ - ৩.৬ ভ
আউটপুট কারেন্ট (প্রতি চ্যানেল)২০ মি.এ. সর্বাধিক
পিডব্লিউএম ফ্রিকোয়েন্সি নির্দেশিকাপ্রযোজ্য নয়
ইনপুট লজিক থ্রেশহোল্ডস0.3 ভি (নিম্ন), 0.7 ভি (উচ্চ)
ভোল্টেজ ড্রপ / আরডিএস(অন)/ স্যাচুরেশনপ্রযোজ্য নয়
তাপীয় সীমা-40 থেকে 85 °C
প্যাকেজ৬.০ x ৩.০ মিমি
নোট / ভ্যারিয়েন্টসজেশ্চার সেন্সিং, আরজিবি লাইট সেন্সিং
  • সার্ভোটি যথাযথ ভোল্টেজ (সাধারণত ৫ ভি) দিয়ে চালিত হচ্ছে তা নিশ্চিত করুন।
  • APDS-9960 কে Arduino এর সাথে I2C যোগাযোগ ব্যবহার করে সংযুক্ত করুন।
  • জেশ্চার সেন্সরের জন্য ইন্টারাপ্ট পিনের প্রতি মনোযোগ দিন।
  • প্রয়োজন হলে স্থিতিশীল সংকেত সনাক্তকরণের জন্য পুল-আপ রেজিস্টর ব্যবহার করুন।
  • বিভিন্ন আলো পরিস্থিতিতে সেন্সরটি ক্যালিব্রেট করতে নিশ্চিত করুন যাতে সঠিকতা বাড়ে।
Arduino wiring of APDS9960 to control Servo motor using hand gesture

কম্পোনেন্টগুলো সংযোগ করতে, সার্ভো মোটর দিয়ে শুরু করুন। লাল তারটি আরডুইনোর 5V পিনে, কালো তারটি গ্রাউন্ড (GND) এ এবং কমলা সিগন্যাল তারটি পিনে সংযোগ করুন।9এটি আরডুইনোকে সার্ভোর অবস্থান নিয়ন্ত্রণ করতে সক্ষম করবে।

পরবর্তী, APDS-9960 অঙ্গভঙ্গি সেন্সরটি সংযোগ করুন। সংযোগ দিনV_Nআর্ডুইনোর 3.3V-এ পিনটি সংযুক্ত করুন, এবংGNDমাটিতে পিন করুন। এটিINTপিনটি পিনের সাথে সংযুক্ত হওয়া উচিত।2আর্ডুইনোতে, যখনSDAএবংSCLপিনগুলি পিনগুলিতে যায়A4এবংA5, যথাক্রমে। এই কনফিগারেশনটি সেন্সরটিকে আর্ডুইনোর সাথে কার্যকরভাবে যোগাযোগ করতে সক্ষম করে।

কোড উদাহরণ ও পদক্ষেপ নির্দেশিকা

সেটআপ ফাংশনে, আমরা সার্ভো এবং ইশারার সেন্সরটি প্রাথমিককরণ করি। লাইনmyservo.attach(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();গেসচারগুলির জন্য উপলব্ধ চেক করে এবং সংশ্লিষ্ট ক্রিয়াগুলি সম্পাদন করে। উদাহরণস্বরূপ, যদি শনাক্ত করা গেসচার বাম হয়, তবে সার্ভো ১৮০ ডিগ্রিতে চলে যাবে।

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;
    }
  }
}

অবশেষে, লুপটি ক্রমাগত অঙ্গভঙ্গির জন্য পরীক্ষা করে এবং সনাক্ত করা অঙ্গভঙ্গির ভিত্তিতে সার্ভো অবস্থান আপডেট করে। সঠিক অঙ্গভঙ্গি সনাক্তকরণের জন্য বিভিন্ন আলোতে সেটআপটি পরীক্ষা করতে নিশ্চিত করুন।

প্রদর্শনী / কী আশা করবেন

যখন সবকিছু সংযুক্ত করা হয় এবং কোড আপলোড করা হয়, তখন আপনাকে আপনার হাত বাম বা ডানে সরিয়ে সার্ভো নিয়ন্ত্রণ করতে সক্ষম হওয়া উচিত। বাম ইশারার জন্য সার্ভো ১৮০ ডিগ্রি ঘুরবে এবং ডান ইশারার জন্য ০ ডিগ্রিতে ফিরে আসবে। যদি ইশারাগুলি সনাক্ত না হয়, তবে সেন্সরের অবস্থান এবং চারপাশের আলো পরিস্থিতি পরীক্ষা করুন (ভিডিওতে ০৫:৩০)।

অধ্যায়সমূহ

  • প্রস্তাবনা - 00:00
  • হার্ডওয়্যার ওভারভিউ - 01:30
  • তারের নির্দেশনা - ০৩:০০
  • কোড ব্যাখ্যা - ০৪:৩০
  • ডেমোনস্ট্রেশন - ০৬:০০

ছবি

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");
    }
  }
}

সম্পদ ও রেফারেন্সসমূহ

এখনো কোনো সম্পদ নেই।

ফাইলসমূহ📁

কোনো ফাইল উপলব্ধ নেই।