Luka Code

Kokamba ya Kopekola Esika ya Servo na Maboko na Arduino

Kokamba ya Kopekola Esika ya Servo na Maboko na Arduino

Na boyekoli oyo, tokoyekola ndenge ya kokamba moteur ya servo na misala ya maboko. Na kotambwisa loboko na yo na ngambo ya gauche to ya droite, okoki kosala ete moteur ya servo eyamba ndenge esengeli. Proje oyo esalelaka senseur ya geste APDS-9960 mpo na koyeba botambwisi ya maboko mpe kobongola yango na ba positions ya servo. Mpo na ndimbola ya vizueli ya malamu, tala video na (na video na 00:30).

APDS-9960 gesture sensor module -1

Ba composants ya liboso oyo tokosalela ezali moteur ya servo mpe senseur ya geste APDS-9960. Moteur ya servo ekobaluka na ba angles oyo esengeli kolandana na ba gestes oyo ekomonani, wana senseur APDS-9960 ekoyamba botambwisi ya maboko. Configuration oyo epesaka nzela ya kokamba servo na ndenge ya pete na kosimba te.

Matoko ya Hardware

Moteur ya servo ezali esaleli moke oyo ekoki kobaluka na ba angles oyo esengeli, mpo na ba applications oyo esengaka position ya malamu. Ezali na ba fils misato: courant (motane), terre (noir), mpe signal (orange). Fil ya signal ezali kozwa ba commandes mpo na kotambwisa servo na angle oyo esengeli.

APDS-9960 ezali senseur oyo ekoki koyeba ba gestes, pole ya environnement, mpe couleur. Ezali kosolola na Arduino na nzela ya I2C mpe esengaka ba pins moke mpo na courant mpe transfert ya ba données. Senseur ekoki koyeba botambwisi lokola likolo, na nse, gauche, mpe droite, oyo tokosalela mpo na kokamba servo.

Ba Détails ya Datasheet

FabricantBroadcom
Numéro ya partieAPDS-9960
Tension ya Logic/IO2.4 – 3.6 V
Tension ya alimentation2.4 – 3.6 V
Courant ya sortie (na canal)20 mA max
Guidance ya fréquence PWMEsengeli te
Seuils ya logique ya entrée0.3 V (na nse), 0.7 V (na likolo)
Chute ya tension / RDS(on) / saturationEsengeli te
Limites ya température–40 to 85 °C
Package6.0 x 3.0 mm
Notes / variantesKoyeba ba gestes, koyeba pole ya RGB
  • Kokamba ete servo ezala na tension ya malamu (mbala mingi 5V).
  • Kokangisa APDS-9960 na Arduino na nzela ya communication I2C.
  • Kotalela pin ya interrupt mpo na senseur ya geste.
  • Kosalela ba résistances ya pull-up soki esengeli mpo na détection ya signal ya malamu.
  • Kokamba senseur na ba conditions ya pole ndenge na ndenge mpo na précision ya malamu.
Arduino wiring of APDS9960 to control Servo motor using hand gesture

Mpo na kokangisa ba composants, banda na moteur ya servo. Kokangisa fil ya motane na pin ya 5V ya Arduino, fil ya noir na terre (GND), mpe fil ya signal ya orange na pin 9. Oyo ekopesa nzela na Arduino mpo na kokamba position ya servo.

Na sima, kokangisa senseur ya geste APDS-9960. Kokangisa pin ya V_N na 3.3V ya Arduino, mpe pin ya GND na terre. Pin ya INT esengeli kokangisama na pin 2 na Arduino, wana ba pins ya SDA mpe SCL bakokende na ba pins A4 mpe A5, na ndenge yango. Configuration oyo epesaka nzela na senseur mpo na kosolola malamu na Arduino.

Ba Exemples ya Code & Explication

Na fonction ya setup, tokomi na koyamba servo mpe senseur ya geste. Ligne myservo.attach(9); ekangisaka servo na pin 9, oyo tokangisaki liboso. Oyo epesaka nzela na servo mpo na kozwa ba commandes na 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);
}

Na sima, tokomi na koyeba ndenge système ekoyamba ba gestes na fonction ya loop. Méthode handleGesture(); etyelaka likebi na ba gestes oyo ezali mpe esalaka ba actions oyo esengeli. Na ndakisa, soki geste oyo emonani ezali gauche, servo ekokende na 180 degrés.

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

Na suka, loop ezali kotalela ba gestes mbala na mbala mpe kobongola position ya servo kolandana na geste oyo emonani. Komeka configuration na ba conditions ya pole ndenge na ndenge mpo na kozwa reconnaissance ya geste ya malamu.

Démonstration / Nini Okoki Kozela

Ntango nyonso esili kokangisama mpe code esili kotombolama, okoki kokamba servo na kotambwisa loboko na yo na gauche to na droite. Servo ekobaluka na 180 degrés mpo na geste ya gauche mpe ekozonga na 0 degrés mpo na geste ya droite. Soki ba gestes emonani te, tala position ya senseur mpe ba conditions ya pole oyo ezali zingazinga (na video na 05:30).

Ba Chapitres

  • Introduction - 00:00
  • Aperçu ya Hardware - 01:30
  • Ba Instructions ya Kokangisa - 03:00
  • Explication ya Code - 04:30
  • Démonstration - 06:00

Images

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

Mokili na bisika

Pas encore de ressources.

Fichiers📁

Aucun fichier disponible.