Сензор за гести APDS-9960 со Arduino
Сензорот за гести APDS-9960 овозможува детекција на гести со рака, како што се движења и близина. Во ова упатство, ќе покажеме како да го поврзете APDS-9960 со Arduino и да го програмирате да препознава гести. Резултатот ќе биде едноставна поставка што може да детектира движења и да ги пријави преку серискиот монитор. Овој водич ќе ви помогне да ги разберете жиците и кодот потребни за да започнете со сензорот за гести. (во видео на 00:30)
Објаснување на хардверот
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 линиите за сигурна комуникација.
- Држете го сензорот подалеку од директна сончева светлина за точни читања.
- Проверете дали правилно го иницијализирате сензорот во кодот.
- Проверете ги жиците за да избегнете лебдечки влезови.
Инструкции за жицирање

Примери на код и објаснување
Обезбедениот код го иницијализира сензорот 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 - Демонстрација

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");
}
}
}
Работи што можеби ќе ви требаат
-
Amazon
-
eBay
-
AliExpressPurchase APDS-9960 gesture sensor from AliExpresss.click.aliexpress.com
Ресурси и референци
Сè уште нема ресурси.
Датотеки📁
Други датотеки
-
APDS9960 Податоциова се податоците за APDS9960 чипот. погледнете ја оваа датотека за да дознаете повеќе за него.
robojax-gesture-APDS9960_datasheet.pdf0.89 MB -
Библиотека за гестови APDS9960Arduino библиотека за сензорот за гестови, близина и боја APDS9960. Обезбедува функции за иницијализација на сензорот, читање податоци за гестови и конфигурирање на прагови за детекција. Поддржува I2C интерфејс и работи на 3.3V.
robojax-APDS9960-gesture-library.zip0.30 MB -
APDS9960 Гестур податочен листПодаточен лист за APDS9960 дигитален сензор за близина, амбиентална светлина, RGB и гестови. Карактеристики: I2C интерфејс, детекција на гестови со насочен излез, работи на 2.4-3.6V.
robojax-APDS9960-gesture-datasheet.pdf0.89 MB -