Search Code

Arduino үшін қол қимылдарымен сервоприводтың орнын басқару

Arduino үшін қол қимылдарымен сервоприводтың орнын басқару

Бұл оқулықта біз қол қимылдарын пайдаланып, сервомоторды қалай басқаруды үйренеміз. Қолыңызды солға немесе оңға қозғау арқылы сервомотордың сәйкесінше жауап беруін қамтамасыз ете аласыз. Бұл жоба қол қозғалыстарын анықтау және оларды сервопозицияларға аудару үшін APDS-9960 қимыл сенсорын пайдаланады. Толық визуалды түсініктеме үшін (00:30-дағы видеода) видеоны қарауды ұмытпаңыз.

APDS-9960 gesture sensor module -1

Біз пайдаланатын негізгі компоненттерге сервомотор мен APDS-9960 жест сенсоры кіреді. Сервомотор анықталған жесттерге негізделген нақты бұрыштарға айналады, ал APDS-9960 сенсоры қол қозғалыстарын түсіндіреді. Бұл конфигурация физикалық байланыссыз сервомоторды интуитивті түрде басқаруға мүмкіндік береді.

Аппараттық құралдар түсіндірілді

Серво мотор - бұл нақты бұрыштарға айналуға қабілетті шағын құрылғы, оны дәл позициялауды талап ететін қолданбалар үшін тамаша етеді. Әдетте, оның үш сымы болады: қуат (қызыл), жер (қара) және сигнал (сары). Сигнал сымы сервоны белгіленген бұрышқа жылжыту үшін командаларды алады.

APDS-9960 - бұл қимылдарды, қоршаған жарықты және түсті анықтай алатын әмбебап сенсор. Ол Arduino-мен I2C арқылы байланысады және қуат пен деректерді беру үшін бірнеше пинді қажет етеді. Сенсор жоғары, төмен, солға және оңға сияқты қозғалыстарды анықтай алады, оларды сервоны басқару үшін пайдаланамыз.

Техникалық сипаттама мәліметтері

ӨндірушіBroadcom
Бөлшек нөміріAPDS-9960
Логика/Кернеу вх.2.4 - 3.6 В
Жабдықтау кернеуі2.4 - 3.6 В
Шығыс токы (арна бойынша)20 мА макс
PWM жиілігі бойынша нұсқаулықҚолданылмайды
Кіріс логика шектер0.3 В (төмен), 0.7 В (жоғары)
Кернеу түсуі / RDS(қосулы)/ қанығуҚолданылмайды
Жылу шектеулері-40-тан 85 °C-қа дейін
Пакет6.0 x 3.0 мм
Ескертпелер / нұсқаларИллюзияны сезу, RGB жарықты сезу
  • Сервоның жеткілікті кернеумен (әдетте 5В) қуатталғанына көз жеткізіңіз.
  • APDS-9960-ды Arduino-ға I2C байланысы арқылы қосыңыз.
  • Илгерткіш сенсоры үшін үзіліс пиніне назар аударыңыз.
  • Қажет болса, тұрақты сигналды анықтау үшін тарту резисторларын пайдаланыңыз.
  • Сенсорды әртүрлі жарық жағдайларында калибрлеуді қамтамасыз етіңіз, бұл дәлдікті арттырады.
Arduino wiring of APDS9960 to control Servo motor using hand gesture

Компоненттерді қосу үшін, серво мотордан бастаңыз. Қызыл сымды Arduino-ның 5V пиніне, қара сымды жерге (GND) және қызғылт сары сигнал сымын пинге қосыңыз.9Бұл Ардуиноға сервомотордың орнын басқаруға мүмкіндік береді.

Келесі, APDS-9960 жест сенсорын сыммен қосыңыз. ҚосыңызV_NArduino-ның 3.3V-ына пин, жәнеGNDжерге бекітіңіз. БұлINTпин қосылуы тиіс пинге2Arduino-да, ал...SDAжәнеSCLпиндер пиндерге барадыA4жәнеA5, тиісінше. Бұл конфигурация сенсордың Arduino-мен тиімді байланыс орнатуына мүмкіндік береді.

Код мысалдары мен нұсқаулықтар

Орнату функциясында біз серво мен жест сенсорын инициализациялаймыз. Жол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");
    }
  }
}

Ресурстар мен сілтемелер

Әлі ресурстар жоқ.

Файлдар📁

Файлдар жоқ.