Search Code

Iṣakoso ipo servo pẹlu awọn iṣe ọwọ fun Arduino

Iṣakoso ipo servo pẹlu awọn iṣe ọwọ fun Arduino

Ninu ikẹkọ yii, a yoo kọ bi a ṣe le ṣakoso moto servo nipa lilo awọn iṣe ọwọ. Nipa gbigbe ọwọ rẹ si apa osi tabi ọtun, o le jẹ ki moto servo dahun ni ibamu. Ise agbese yii nlo sensọ iṣe APDS-9960 lati ṣe awari awọn gbigbe ọwọ ati tumọ wọn si awọn ipo servo. Fun alaye aworan ti o ni alaye, rii daju lati ṣayẹwo fidio naa ni (ni fidio ni 00:30).

APDS-9960 gesture sensor module -1

Awọn eroja pataki ti a yoo lo pẹlu motor servo ati sensọ iṣe APDS-9960. Motor servo yoo yipo si awọn igun pato da lori awọn iṣe ti a ṣe awari, nigba ti sensọ APDS-9960 yoo tumọ awọn gbigbe ọwọ. Eto yii gba laaye fun ọna ti o rọrun lati ṣakoso motor servo laisi ifọwọkan ti ara.

Itumọ Ẹrọ

Servo motor jẹ ẹrọ kekere ti o le yipo si awọn igun pato, ti o jẹ ki o dara fun awọn ohun elo ti o nilo ipo to pe. O ni awọn waya mẹta: agbara (pupa), ilẹ (dudu), ati ifihan (osan). Waya ifihan naa gba awọn aṣẹ lati gbe servo si igun ti a sọ.

APDS-9960 jẹ sensọ oniruuru ti o le ṣe idanimọ awọn iṣe, imọlẹ ayika, ati awọ. O n ba Arduino sọrọ nipasẹ I2C ati pe o nilo diẹ ninu awọn pin fun agbara ati gbigbe data. Sensọ naa le ṣe idanimọ awọn gbigbe bii oke, isalẹ, osi, ati otun, eyiti a yoo lo lati ṣakoso servo.

Alaye iwe data

OlùgbéejádeBroadcom
Nọmba apakanAPDS-9960
Iwọn folti logic/IO2.4 - 3.6 V
Iwọn folti ipese2.4 - 3.6 V
Iwọn lọwọlọwọ (nipasẹ ikanni)20 mA to pọ julọ
Itọsọna igbohunsafẹfẹ PWMKo si ohun ti o yẹ.
Iwọn aala logic input0.3 V (kekere), 0.7 V (giga)
Iwọn folti / RDS(on)/ idapọKo si ohun ti o yẹ.
Iwọn otutu to pọ julọ-40 si 85 °C
Pàkàjì6.0 x 3.0 mm
Akọsilẹ / awọn oniruuruIṣeduro iṣe, iṣeduro imọlẹ RGB
  • Rii daju pe servo naa ni agbara pẹlu folti to peye (nigbagbogbo 5V).
  • So APDS-9960 pọ̀ mọ́ Arduino nípa lílo ìbánisọ̀rọ̀ I2C.
  • San ifojusi si pin ti o da idiwọ fun sensọ iṣe.
  • Lo lo resistors ti o ba jẹ dandan fun idanimọ ifihan ti o ni iduroṣinṣin.
  • Rii daju pe ki o ṣe atunṣe sensọ naa ni awọn ipo ina oriṣiriṣi fun deede ti o dara julọ.
Arduino wiring of APDS9960 to control Servo motor using hand gesture

Lati so awọn ẹya pọ, bẹrẹ pẹlu moto servo. So okun pupa pọ si pin 5V ti Arduino, okun dudu si ilẹ (GND), ati okun ifihan osan si pin9Eyi yoo jẹ ki Arduino lati ṣakoso ipo servo.

Nibi, so APDS-9960 sensọ iṣe. So awọnV_Nfi si pin si 3.3V ti Arduino, ati GNDpin si ilẹ. IwọINTpin yẹ ki o so pọ si pin2ni Arduino, nigba ti aSDAatiSCLpins lọ si pinsA4atiA5, ni ibè. Àtúnṣe yìí jẹ́ kí sensọ náà lè bá Arduino sọ̀rọ̀ pẹ̀lú ìmúrasílẹ̀.

Àpẹẹrẹ Kóòdù & Irin-ajo

Ninu iṣẹ-ṣiṣe iṣeto, a bẹrẹ servo ati sensọ iṣe. Iwọnmyservo.attach(9);nso servo si pin 9, eyi ti a ti so pọ tẹlẹ. Eyi n jẹ ki servo naa gba awọn aṣẹ lati ọdọ 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);
}

Nítorí náà, a ṣe àlàyé bí eto ṣe n ṣiṣẹ́ pẹ̀lú àwọn ìfihàn nínú iṣẹ́ àtúnṣe. ỌnahandleGesture();n ṣayẹwo fun awọn iṣe ti o wa ati ṣiṣe awọn iṣe ti o baamu. Fun apẹẹrẹ, ti iṣe ti a ṣe awari ba jẹ osi, servo naa yoo gbe si 180 iwọn.

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

Nikẹhin, iyipo naa n ṣayẹwo nigbagbogbo fun awọn iṣe ati imudojuiwọn ipo servo da lori iṣe ti a ṣe awari. Rii daju lati ṣe idanwo eto naa ni awọn ipo ina oriṣiriṣi lati gba idanimọ iṣe to pe.

Iṣafihan / Kí ni láti retí

Nígbà tí gbogbo nkan bá ti wa ni asopọ àti pé kóòdù náà ti wa ni ikojọpọ, o yẹ ki o lè ṣakoso servo naa nipa gbigbe ọwọ rẹ si apa osi tabi ọtun. Servo naa yoo yí pada si 180 iwọn fun iṣe osi kan ati pada si 0 iwọn fun iṣe ọtun kan. Ti a ko ba ri awọn iṣe naa, ṣayẹwo ipo sensọ naa ati awọn ipo ina ti o wa ni ayika (ní fidio ni 05:30).

Iwe akọsilẹ

  • Ifáhàn - :00
  • Ibi ẹrọ - 01:30
  • Ilana Asopọ - 03:00
  • Itumọ Koodu - 04:30
  • Iṣafihan - 06:00

Aworan

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

Orisun & itọkasi

Ko si awọn orisun sibẹsibẹ.

Fáìlìs📁

Ko si awọn faili ti o wa.