کوډ ولټوئ

د آردوینو لپاره د لاس اشارو سره د سروو موقعیت کنټرول

د آردوینو لپاره د لاس اشارو سره د سروو موقعیت کنټرول

په دې ټیوټوریل کې به موږ زده کړو چې څنګه د لاس د اشارو په کارولو سره د سروو موټور کنټرول کړو. د خپل لاس په کیڼ یا ښي خوا په خوځولو سره، تاسو کولی شئ د سروو موټور دې ته اړ کړئ چې په مطابق ځواب ووایی. دا پروژه د APDS-9960 د اشارې سینسر څخه کار اخلي ترڅو د لاس حرکتونه کشف کړي او دوی د سروو موقعیتونو ته واړوي. د تفصیلي بصري توضیح لپاره، ډاډ ترلاسه کړئ چې ویډیو وګورئ (په ویډیو کې په 00:30).

APDS-9960 gesture sensor module -1

اصلي اجزا چې موږ به یې کاروو د سروو موټور او د APDS-9960 د اشارې سینسر شامل دي. د سروو موټور به د کشف شویو اشارو پر بنسټ ځانګړو زاویو ته وګرځي، پداسې حال کې چې د APDS-9960 سینسر به د لاس حرکتونه تفسیر کړي. دا ترتیب د فزیکي لمس پرته د سروو کنټرول لپاره یوه هوښیارانه لار برابروي.

هارډویر تشریح شوی

د سروو موټور یو کوچنی وسیله ده چې کولی شي ځانګړو زاویو ته وګرځي، دا د هغو غوښتنلیکونو لپاره مثالی کوي چې دقیق موقعیت ته اړتیا لري. دا معمولا درې تارونه لري: بریښنا (سور)، ځمکه (تور)، او سیګنال (نارنجي). د سیګنال تار د سروو د ځانګړې زاویې ته د حرکت کولو لپاره امرونه ترلاسه کوي.

APDS-9960 یو څو اړخیز سینسر دی چې کولی شي اشارې، محیطي رڼا، او رنګ کشف کړي. دا د I2C له لارې له Arduino سره اړیکه نیسي او د بریښنا او معلوماتو لیږد لپاره یو څو پنونو ته اړتیا لري. سینسر کولی شي داسې حرکتونه کشف کړي لکه پورته، ښکته، کیڼ، او ښي، کوم چې موږ به د سروو کنټرول لپاره کاروو.

د ډیټاشیټ تفصیلات

جوړونکیBroadcom
د پرزې شمېرهAPDS-9960
د منطق/IO ولټاژ2.4 – 3.6 V
د بریښنا رسولو ولټاژ2.4 – 3.6 V
د تولید جریان (په هر چینل)20 mA اعظمي
د PWM فریکونسۍ لارښوونهد تطبیق وړ نه ده
د داخلولو منطق حدونه0.3 V (ټیټ)، 0.7 V (لوړ)
د ولټاژ کمښت / RDS(on) / سنتریشند تطبیق وړ نه ده
حرارتي حدونه–40 to 85 °C
بسته بندي6.0 x 3.0 mm
یادښتونه / ډولونهد اشارې احساس، د RGB رڼا احساس
  • ډاډ ترلاسه کړئ چې سروو د کافي ولټاژ سره بریښنا کیږي (معمولا 5V).
  • APDS-9960 د I2C اړیکو په کارولو سره له Arduino سره وصل کړئ.
  • د اشارې سینسر لپاره د مداخلې پن ته پاملرنه وکړئ.
  • د باثباته سیګنال کشف لپاره که اړتیا وي د پل-اپ ریزسټرونو څخه کار واخلئ.
  • ډاډ ترلاسه کړئ چې سینسر په مختلفو رڼا شرایطو کې د ښه دقت لپاره کیلیبریټ کړئ.
Arduino wiring of APDS9960 to control Servo motor using hand gesture

د اجزاو د تارولو لپاره، د سروو موټور سره پیل وکړئ. سور تار د Arduino د 5V پن سره، تور تار د ځمکې (GND) سره، او نارنجي سیګنال تار د پن 9 سره وصل کړئ. دا به Arduino ته اجازه ورکړي چې د سروو موقعیت کنټرول کړي.

بیا، د APDS-9960 د اشارې سینسر تار کړئ. د V_N پن د Arduino د 3.3V سره، او د GND پن له ځمکې سره وصل کړئ. د INT پن باید د Arduino په پن 2 سره وصل شي، پداسې حال کې چې د SDA او SCL پنونه په ترتیب سره پنونو A4 او A5 ته ځي. دا ترتیب سینسر ته اجازه ورکوي چې له Arduino سره په مؤثره توګه اړیکه ونیسي.

د کوډ مثالونه او واک ترو

د سیٹ اپ فنکشن کې، موږ سروو او د اشارې سینسر initiālize کوو. کرښه myservo.attach(9); سروو د پن 9 سره تړي، کوم چې موږ مخکې وصل کړی و. دا سروو ته اجازه ورکوي چې له Arduino څخه امرونه ترلاسه کړي.

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

سرچینې او حوالې

تر اوسه هیڅ سرچینې نشته.

فایلونه📁

هیڅ فایل شتون نلري.