APDS-9960 Gebaarsensor met Arduino
Die APDS-9960 gebaarsensor maak die opsporing van handgebare soos vee-bewegings en nabyheid moontlik. In hierdie tutoriaal sal ons demonstreer hoe om die APDS-9960 aan 'n Arduino te koppel en dit te programmeer om gebare te herken. Die uitkoms sal 'n eenvoudige opstelling wees wat bewegings kan opspoor en dit via die seriële monitor kan rapporteer. Hierdie gids sal jou help om die bedrading en kode te verstaan wat nodig is om met die gebaarsensor te begin.

Hardeware Verduidelik
Die APDS-9960 is 'n veelsydige sensor wat RGB-kleurwaarneming, omgewingsligwaarneming, nabyheidswaarneming en gebaarbespeuringsvermoëns kombineer. Dit kommunikeer met die Arduino via I2C, wat maklike integrasie met minimale bedrading moontlik maak. Die sensor werk slegs teen 3.3V, wat dit noodsaaklik maak om behoorlike spanningsvlakke te verseker om skade aan die toestel te voorkom. In hierdie bouprojek sal ons die Arduino gebruik om gebaardata te lees. Die sensor voer gebaarinligting uit deur middel van onderbrekings, wat die Arduino in staat stel om vinnig op handbewegings te reageer. Die integrasie van die APDS-9960 met die Arduino maak baie moontlikhede oop vir interaktiewe projekte, insluitend gebaarbeheerde toestelle.
Datablad Besonderhede
| Vervaardiger | Broadcom |
|---|---|
| Onderdeelnommer | APDS-9960 |
| Logika/Invoer-Uitvoer spanning | 2.7 tot 3.6 V |
| Toevoerspanning | 3.3 V |
| Uitsetstroom (per kanaal) | 1 mA |
| Piekstroom (per kanaal) | 10 mA |
| PWM-frekwensie riglyne | 100 Hz |
| Invoerlogikadrempels | 0.3 x Vgepaste ywer(laag), 0.7 x VDOhoog |
| Spanningsval / RDS aanversadiging | 0.5 V maks. |
| Termiese grense | -40 tot +85 °C |
| Pakkie | 6-pen LGA |
| Notas / variante | Ondersteun I2C kommunikasie |
- Maak seker dat die toevoerspanning nie 3.6 V oorskry nie om skade te voorkom.
- Gebruik optrekweerstande op die I2C-lyne vir betroubare kommunikasie.
- Hou die sensor weg van direkte sonlig vir akkurate lesings.
- Maak seker om die sensor korrek in die kode te initialiseer.
- Gaan die bedradingsverbindings na om swewende insetke te vermy.
Bedradingsinstruksies

Om die APDS-9960 aan die Arduino te bedraad, begin deur die krag aan te sluit. Gebruik 'n rooi draad om die VCC-pen van die APDS-9960 aan die 3.3V-pen op die Arduino te koppel. Vervolgens, koppel die GND-pen op die sensor aan 'n grondpen op die Arduino met 'n swart draad. Nou, vir die I2C-kommunikasie, koppel die SDA-pen van die APDS-9960 aan die Arduino se A4-pen. Net so, koppel die SCL-pen aan die A5-pen op die Arduino. Laastens, koppel die INT-pen van die sensor aan pen 2 op die Arduino. Dit sal die Arduino toelaat om te reageer op onderbrekings wat deur die sensor gegenereer word.
Kodevoorbeelde & Deurloop
Die verskafde kode initialiseer die APDS-9960 sensor en stel die Arduino op om gebare te lees. Hier is 'n kort uittreksel van die opstel-funksie:
void setup() {
pinMode(APDS9960_INT, INPUT);
Serial.begin(9600);
attachInterrupt(0, interruptRoutine, FALLING);
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
}
}In hierdie brokkie inisialiseer ons die seriële monitor en stel die onderbrekingspen. Die sensor word geïnisialiseer, en 'n bevestigingsboodskap word na die konsole gedruk. Vervolgens kontroleer ons vir gebare in die lusfunksie:
void loop() {
if( isr_flag == 1 ) {
detachInterrupt(0);
handleGesture();
isr_flag = 0;
attachInterrupt(0, interruptRoutine, FALLING);
}
}Hier, die lus kyk deurlopend vir gebare. Wanneer 'n gebaar bespeur word, word die onderbreking gedeaktiveer, en die `handleGesture`-funksie word geroep om die gebaar te verwerk. Uiteindelik verwerk die `handleGesture`-funksie die bespeurde gebare:
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
// Additional cases...
}
}
}In hierdie funksie word die gebaar gelees, en die ooreenstemmende aksie word geneem volgens die bespeurde rigting. Dit maak interaktiewe beheer moontlik deur handbewegings. Vir 'n volledige begrip van die kode, verwys asseblief na die volledige program wat onder die artikel gelaai is.

Demonstrasie / Wat om te verwag
Sodra die opstelling voltooi is, kan jy verwag dat die Arduino gebare sal lees en die bespeurde rigting op die seriele monitor sal vertoon. Eenvoudige toetse sluit in om jou hand op, af, links of regs voor die sensor te beweeg. As alles korrek bedraad is, behoort jy die ooreenstemmende uitset op die seriele monitor te sien, wat die gebaarderkenning bevestig. Wees versigtig vir swewende insette, aangesien dit kan lei tot inkonsekwente lesings (in video by 05:20).
Video Tydstempels
- 00:00Inleiding
- een uur vyftienHardeware Oorsig
- 03:00Bedrading Instruksies
- half vyfKode-deurloop
- kwart oor sesDemonstrasie
/*
* 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");
}
}
}
/****************************************************************
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");
}
}
}
Goedere wat jy dalk nodig het
-
Amazon
-
eBay
-
AliExpressPurchase APDS-9960 gesture sensor from AliExpresss.click.aliexpress.com
Hulpbronne en verwysings
Geen hulpbronne nog.
Lêers📁
Ander lêers
-
APDS9960 Datasheetthis is the datasheet for APDS9960 chip. have a look at this file to learn more about it.
robojax-gesture-APDS9960_datasheet.pdf0.89 MB -
APDS9960 Gesture LibraryArduino library for the APDS9960 gesture, proximity, and color sensor. Provides functions to initialize the sensor, read gesture data, and configure detection thresholds. Supports I2C interface and operates at 3.3V.
robojax-APDS9960-gesture-library.zip0.30 MB -
APDS9960 Gesture DatasheetDatasheet for the APDS9960 digital proximity, ambient light, RGB and gesture sensor. Features I2C interface, gesture detection with directional output, and operates at 2.4-3.6V.
robojax-APDS9960-gesture-datasheet.pdf0.89 MB -