Пребарување код

Сензор за гести APDS-9960 со Arduino

Сензор за гести APDS-9960 со Arduino

Сензорот за гести APDS-9960 овозможува детекција на гести со рака, како што се движења и близина. Во ова упатство, ќе покажеме како да го поврзете APDS-9960 со Arduino и да го програмирате да препознава гести. Резултатот ќе биде едноставна поставка што може да детектира движења и да ги пријави преку серискиот монитор. Овој водич ќе ви помогне да ги разберете жиците и кодот потребни за да започнете со сензорот за гести. (во видео на 00:30)
APDS-9960 gesture sensor module -1

Објаснување на хардверот

APDS-9960 е разновиден сензор што комбинира можности за детекција на RGB боја, амбиентална светлина, близина и гести. Тој комуницира со Arduino преку I2C, што овозможува лесна интеграција со минимално жицирање. Сензорот работи само на 3.3V, што го прави неопходно да се обезбедат соодветни нивоа на напон за да се избегне оштетување на уредот. Во оваа поставка, ќе го користиме Arduino за читање на податоци за гести. Сензорот испушта информации за гести преку прекини, што му овозможува на Arduino да реагира брзо на движењата на раката. Интеграцијата на APDS-9960 со Arduino отвора многу можности за интерактивни проекти, вклучувајќи уреди контролирани со гести.

Детали од податочната листа

ПроизводителBroadcom
Број на делAPDS-9960
Логички/IO напон2.7 - 3.6 V
Напон на напојување3.3 V
Излезна струја (по канал)1 mA
Врвна струја (по канал)10 mA
Насоки за PWM фреквенција100 Hz
Влезни логички прагови0.3 x VDD (ниско), 0.7 x VDD (високо)
Пад на напон / RDS(on) / заситување0.5 V макс.
Термички граници-40 до +85 °C
Пакет6-пински LGA
Белешки / варијантиПоддржува I2C комуникација

  • Осигурете се дека напонот на напојување не надминува 3.6 V за да спречите оштетување.
  • Користете pull-up отпорници на I2C линиите за сигурна комуникација.
  • Држете го сензорот подалеку од директна сончева светлина за точни читања.
  • Проверете дали правилно го иницијализирате сензорот во кодот.
  • Проверете ги жиците за да избегнете лебдечки влезови.

Инструкции за жицирање

Arduino wiring for APDS9960 Gesture sensor
Arduino wiring for APDS9960 Gesture sensor
За да го поврзете APDS-9960 со Arduino, започнете со поврзување на напојувањето. Користете црвена жица за да го поврзете VCC пинот на APDS-9960 со 3.3V пинот на Arduino. Потоа, поврзете го GND пинот на сензорот со ground пин на Arduino користејќи црна жица. Сега, за I2C комуникација, поврзете го SDA пинот на APDS-9960 со A4 пинот на Arduino. Слично, поврзете го SCL пинот со A5 пинот на Arduino. На крај, поврзете го INT пинот на сензорот со пин 2 на Arduino. Ова ќе му овозможи на Arduino да реагира на прекини генерирани од сензорот.

Примери на код и објаснување

Обезбедениот код го иницијализира сензорот APDS-9960 и го поставува Arduino да чита гести. Еве краток извадок од функцијата за поставување:
void setup() {
  pinMode(APDS9960_INT, INPUT);
  Serial.begin(9600);
  attachInterrupt(0, interruptRoutine, FALLING);
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  }
}
Во овој дел, го иницијализираме серискиот монитор и го поставуваме пинот за прекин. Сензорот се иницијализира и се печати потврдна порака на конзолата. Следно, проверуваме за гести во функцијата loop:
void loop() {
  if( isr_flag == 1 ) {
    detachInterrupt(0);
    handleGesture();
    isr_flag = 0;
    attachInterrupt(0, interruptRoutine, FALLING);
  }
}
Овде, loop континуирано проверува за гести. Кога ќе се детектира гест, прекинот се оневозможува и функцијата `handleGesture` се повикува за да го обработи гестот. Конечно, функцијата `handleGesture` ги обработува детектираните гести:
void handleGesture() {
  if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP:
        Serial.println("UP");
        break;
      case DIR_DOWN:
        Serial.println("DOWN");
        break;
      // Дополнителни случаи...
    }
  }
}
Во оваа функција, гестот се чита и се презема соодветната акција врз основа на детектираната насока. Ова овозможува интерактивна контрола врз основа на движењата на раката. За целосно разбирање на кодот, ве молиме погледнете ја целата програма вчитана под статијата.

Демонстрација / Што да очекувате

Кога поставката е завршена, можете да очекувате Arduino да чита гести и да ја прикажува детектираната насока на серискиот монитор. Едноставни тестови вклучуваат движење на раката нагоре, надолу, лево или десно пред сензорот. Ако сè е правилно поврзано, треба да го видите соодветниот излез на серискиот монитор, што потврдува препознавање на гестот. Бидете внимателни со лебдечки влезови, бидејќи тие можат да доведат до неконзистентни читања (во видео на 05:20).

Временски ознаки на видеото

  • 00:00 - Вовед
  • 01:15 - Преглед на хардверот
  • 03:00 - Инструкции за жицирање
  • 04:30 - Објаснување на кодот
  • 06:15 - Демонстрација
APDS-9960 gesture sensor -3

Слики

APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -1
APDS-9960 gesture sensor module -1
APDS-9960 gesture sensor -3
APDS-9960 gesture sensor -3
Arduino wiring for APDS9960 Gesture sensor
Arduino wiring for APDS9960 Gesture sensor
1-Code for an APDS-9960 gesture sensor for Arduino
Јазик: C++
/*
 * Code for APDS-9960 Gesture sensor for Arduino
 * This code is to detect gestures of your hand, either moving it up, down, left, or right; other gestures.
 * can be detected and used to control something else.

 * Watch the APDS-9960 Gesture sensor video https://youtu.be/qzSgZV_fbxI
 * Get this code from https://robojax.com


 * Code used in video by Ahmad Shamshiri for Robojax.com
 * on December 31, 2016, at 6:53 AM in Ajax, Ontario, Canada
  * Permission granted to share this code, given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.

GestureTest.ino
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor

Tests the gesture sensing abilities of the APDS-9960. Configures
APDS-9960 over I2C and waits for gesture events. Calculates the
direction of the swipe (up, down, left, right) and displays it
on a serial console. 

To perform a NEAR gesture, hold your hand
far above the sensor and move it close to the sensor (within 2
inches). Hold your hand there for at least 1 second and then move it
away.

To perform a FAR gesture, hold your hand within 2 inches of the
sensor for at least 1 second and then move it away (out of
range) of the sensor.

Hardware Connections:

IMPORTANT: The APDS-9960 can only accept 3.3V!
 
 Arduino Pin  APDS-9960 Board  Function
 
 3.3V         VCC              Power
 GND          GND              Ground
 A4           SDA              I2C Data
 A5           SCL              I2C Clock
 2            INT              Interrupt

Resources:
Include Wire.h and SparkFun_APDS-9960.h

Development environment specifics:
Written in Arduino 1.0.5
Tested with SparkFun Arduino Pro Mini 3.3V

This code is beerware; if you see me (or any other SparkFun 
employee) at the local, and you've found our code helpful, please
buy us a round!

Distributed as-is; no warranty is given.
***************************************************************
*/

#include <Wire.h>
#include <SparkFun_APDS9960.h>
Servo myservo;  // create servo object to control a servo

// 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() {

  // 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");
        break;
      case DIR_RIGHT:
        Serial.println("RIGHT");
        break;
      case DIR_NEAR:
        Serial.println("NEAR");
        break;
      case DIR_FAR:
        Serial.println("FAR");
        break;
      default:
        Serial.println("NONE");
    }
  }
}
2-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");
    }
  }
}

Работи што можеби ќе ви требаат

Ресурси и референци

Сè уште нема ресурси.

Датотеки📁

Други датотеки

  • APDS9960 Податоци
    ова се податоците за APDS9960 чипот. погледнете ја оваа датотека за да дознаете повеќе за него.
    robojax-gesture-APDS9960_datasheet.pdf 0.89 MB
  • Библиотека за гестови APDS9960
    Arduino библиотека за сензорот за гестови, близина и боја APDS9960. Обезбедува функции за иницијализација на сензорот, читање податоци за гестови и конфигурирање на прагови за детекција. Поддржува I2C интерфејс и работи на 3.3V.
    robojax-APDS9960-gesture-library.zip 0.30 MB
  • APDS9960 Гестур податочен лист
    Податочен лист за APDS9960 дигитален сензор за близина, амбиентална светлина, RGB и гестови. Карактеристики: I2C интерфејс, детекција на гестови со насочен излез, работи на 2.4-3.6V.
    robojax-APDS9960-gesture-datasheet.pdf 0.89 MB
  • APDS-9960 Gesture сензор библиотека
    од Robojax.com
    robojax-gesture-APDS9960-Library.zip 0.30 MB