APDS9960 capteur de gestes, RVB et de proximité pour Arduino
Dans ce tutoriel, nous allons explorer comment utiliser le module capteur APDS9960, qui combine la détection de gestes, la détection des couleurs RVB et la détection de proximité. Ce capteur polyvalent peut détecter des mouvements dans différentes directions et peut être intégré dans des projets pour contrôler des moteurs, des lumières ou d'autres appareils en fonction des gestes de la main. À la fin de ce tutoriel, vous saurez comment câbler le capteur et implémenter une détection de gestes de base dans vos projets Arduino.

Le module APDS9960 est compact et nécessite un câblage minimal, ce qui en fait un excellent choix pour les projets interactifs. Nous utiliserons l'IDE Arduino pour programmer le capteur et afficher les gestes détectés sur le moniteur série. Pour un guide visuel, consultez la vidéo (dans la vidéo à 00:00).
Le matériel expliqué
Le composant clé de ce projet est le module capteur APDS9960. Ce module peut détecter des gestes tels que glisser vers la gauche, glisser vers la droite, glisser vers le haut et glisser vers le bas. Il mesure également les valeurs de couleur RVB ainsi que la proximité des objets environnants. Le capteur communique avec l'Arduino via I2C, ce qui simplifie le câblage et le processus de programmation.
L'APDS9960 contient plusieurs capteurs internes : un capteur de gestes, un capteur de couleurs RVB et un capteur de lumière ambiante. Le capteur de gestes utilise une LED infrarouge et un photodétecteur pour détecter les mouvements de la main, tandis que le capteur RVB mesure les intensités de lumière rouge, verte et bleue pour identifier les couleurs. Le capteur de proximité détermine à quelle distance se trouve un objet par rapport au capteur, ce qui peut être utile dans diverses applications.
Détails de la fiche technique
| Fabricant | Avago Technologies |
|---|---|
| Numéro de pièce | APDS-9960 |
| Tension logique/E/S | de 1,8 V à 3,6 V |
| Tension d'alimentation | 3,3 V |
| Courant de sortie (par canal) | 20 mA maximum |
| Courant de crête (par canal) | 100 mA |
| Directives sur la fréquence PWM | Sans objet |
| Seuils de la logique d'entrée | 0,3 V (faible), 0,7 V (élevé) |
| Chute de tension / RDS(on)/ saturation | 0,5 V max |
| Limites thermiques | -40 à 85 °C |
| Paquet | LGA à 6 broches |
| Notes / variantes | Aucun |
- Alimentez toujours l'APDS9960 en 3,3 V ; des tensions plus élevées peuvent endommager le capteur.
- Veillez à installer des résistances de pull-up appropriées sur les lignes I2C si vous connectez plusieurs appareils.
- Éloignez le capteur de la lumière directe du soleil pour éviter toute interférence.
- Utilisez un condensateur de découplage près des broches d'alimentation pour assurer la stabilité.
- Tenez compte de la portée de détection de proximité (environ 20 cm).
Instructions de câblage

Pour câbler le module capteur APDS9960 à votre Arduino, suivez ces étapes :
- Connectez le
VCCbroche de l'APDS9960 à la broche 3,3 V de l'Arduino. - Brancher le
GNDBranchez la broche sur l'une des broches GND de l'Arduino. - Connectez le
SDAbroche de l'ArduinoA4broche (ligne de données I2C). - Connectez le
SCLbroche sur l'ArduinoA5broche (ligne d'horloge I2C). - Branchez le
INTbroche vers broche numérique2sur l'Arduino pour la gestion des interruptions.
Notez que si vous utilisez un autre modèle d'Arduino, les broches SDA et SCL peuvent varier (par exemple, sur un Arduino Mega, utilisezSDAsur la broche 20 etSCLsur la broche 21). Assurez-vous de vérifier le brochage spécifique de votre carte. Pour d'autres configurations, consultez la vidéo (à 02:30).
Exemples de code et guide pas à pas
Dans la fonction setup, nous initialisons la communication série et le capteur APDS9960. La broche d'interruption est configurée pour écouter les événements de gestes. Voici un extrait du code de la fonction setup :
void setup() {
pinMode(APDS9960_INT, INPUT);
Serial.begin(9600);
Serial.println(F("APDS-9960 initialization..."));
if (apds.init()) {
Serial.println(F("Initialization complete"));
} else {
Serial.println(F("Initialization failed"));
}
}Ce code met en place les configurations nécessaires pour s'assurer que le capteur est prêt à l'emploi et fournit des informations dans le moniteur série.
Ensuite, nous définissons comment gérer les gestes détectés par le capteur. LehandleGestureLa fonction utilise une instruction switch pour déterminer la direction du geste. Voici un extrait ciblé :
void handleGesture() {
if (apds.isGestureAvailable()) {
switch (apds.readGesture()) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
// Additional cases for left, right, near, and far
}
}
}Cette fonction vérifie si un geste est disponible et lit sa direction, affichant le résultat sur le moniteur série pour obtenir un retour. Veillez à consulter le code complet chargé sous l'article pour les détails d'implémentation.
Démonstration / À quoi s'attendre
Lorsque vous exécutez le programme, vous devriez voir les gestes détectés s'afficher sur le moniteur série au fur et à mesure que vous déplacez votre main dans différentes directions. Par exemple, un balayage vers le haut devrait afficher "UP", tandis qu'un balayage vers le bas affiche "DOWN". Assurez-vous de maintenir votre main immobile pendant une seconde lorsque vous effectuez les gestes de proximité et d'éloignement (dans la vidéo à 10:00).
Faites attention à la détection de proximité du capteur ; si vous déplacez votre main trop rapidement ou trop loin du capteur, il peut ne pas enregistrer le geste avec précision. C'est un problème courant qui peut affecter les performances.
Horodatages vidéo
- 00:00- Introduction au capteur APDS9960
- 02:30- Instructions de câblage
- 05:15- Explications du code
- 10:00- Démonstration de la reconnaissance gestuelle
++
/*
This is code for an APDS9960 Gesture, RGB, Proximity sensor module (6 pin).
* Watch the video on how to use APDS9960: https://youtu.be/jjXx0V13rNs
*/
/*
* This code has been modified from the Arduino library.
* Explained by Ahmad S. on March 25, 2018 at 21:19
* in Ajax, Ontario, Canada
* for Robojax.com
*
*/
/****************************************************************
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 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 above (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>
// 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
// Robojax Video Tutorial
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!"));
}
// Robojax Video Tutorial
// 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);
// Robojax Video Tutorial
}
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
// Robojax Video Tutorial
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
// Robojax Video Tutorial
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");
// Robojax Video Tutorial
}
}
}
Ce dont vous pourriez avoir besoin
-
Amazon
-
AliExpressAchetez le capteur AM2302 ou DHT11 ou DHT22 sur AliExpresss.click.aliexpress.com
Ressources et références
-
Externe
Fichiers📁
Fichier Fritzing
-
Capteur de gestes et de couleur RGB APDS 9960
apds_9960_rgb_and_gesture_sensor.fzpz0.01 MB
Autres fichiers
-
Bibliothèque de gestes APDS9960 de RobojaxCette bibliothèque est utilisée pour le capteur de geste APDS9960 afin de détecter le mouvement de votre main et de détecter la couleur présente.
robojax-gesture-APDS9960-Library.zip