Sommaire
Présentation du capteur APDS-9960
Le capteur APDS9960 est un module polyvalent qui regroupe plusieurs fonctionnalités intéressantes pour les projets électroniques : il permet la détection de gestes, la détection de proximité, ainsi que la mesure de la lumière ambiante et des couleurs. Grâce à cette combinaison de capteurs, il est souvent utilisé dans les interfaces interactives, les dispositifs portables ou encore les systèmes d’éclairage intelligent.
On trouve sur le marché deux grandes versions de ce capteur : la version originale, produite par des fabricants reconnus comme SparkFun, et une version clone, plus économique et très répandue sur les plateformes de vente en ligne. Si les deux modèles reposent sur la même puce APDS9960, la version clone se distingue par son prix plus abordable et sa large disponibilité, ce qui en fait le choix privilégié des makers et des débutants en Arduino.
Dans cet article, nous verrons comment monter et programmer le capteur APDS9960 avec une carte Arduino Uno, afin d’exploiter tout le potentiel de ce petit composant multifonction.
Préparation du capteur APDS-9960
La première étape consiste à vérifier la présence de brasure sur les ponts de soudure “PS” et “I2C PU” du capteur APDS-9960.
Si votre module provient de notre boutique en ligne, aucune action n’est nécessaire : ces ponts sont déjà soudés en atelier, vous pouvez donc passer directement à l’étape suivante du tutoriel.
En revanche, si vous utilisez un module acheté ailleurs, assurez-vous de réaliser la brasure sur ces deux ponts avant de poursuivre.
Cette action va permettre d’une part d’activer la LED infrarouge pour la détection de proximité (PS), et d’autre part d’activer les résistances dites de “Pull-Up” qui assurent la stabilité du module lors des échanges de données avec la carte Arduino UNO (I2C PU).
Montage et programmation
Nous allons configurer et tester le module APDS-9960 avec une Arduino Uno, afin de :
- Détecter des gestes
- Détecter des couleurs
- Détecter la proximité
- Détecter la luminosité
Librairies nécessaires
- SparkFun_APDS9960.h (Version 1.4.2)
- Wire.h (inclus par défaut dans l’IDE Arduino)
Matériel nécessaire :
1 Carte Arduino UNO
- 1 Carte shield APDS9960 pour Arduino UNO
1 Capteur APDS-9960
1 Câble USB Type C
-
Câble USB Type C pour Arduino et ESP32 – Transfert Fiable et Rapide pour Projets Créatifs
4,99 € (4,16 € HT)
Vous économisez Ajouter au panier -
Capteur APDS-9960 – Reconnaissance de gestes, lumière, proximité et couleur
5,99 € (4,99 € HT)
Vous économisez Ajouter au panier -
Carte Shield APDS9960 pour Arduino Uno – Contrôle gestuel, servos et modules intelligents
11,99 € (9,99 € HT)
Vous économisez Ajouter au panier -
Carte UNO R3 – Microcontrôleur ATmega328 – compatible Arduino
8,99 € (7,49 € HT)
Vous économisez Ajouter au panier
Le montage
- Carte shield pour APDS-9960 compatible Arduino UNO
- Capteur APDS-9960
- Carte arduino UNO
Préparation logicielle
La préparation logicielle est nécessaire afin de s’assurer que le module APDS-9960 est bien fonctionnel. Cette étape permet aussi de déterminer si le capteur APDS-9960 est un Original ou un Clone.
Si le capteur APDS-9960 est une version Clone , une modification de la librairie “SparkFun_APDS9960″ sera nécessaire afin de pouvoir activer les fonctionnalités du capteur (Gestes, couleurs, proximité, luminosité). Autrement le capteur APDS_9960 ne s’initialisera pas et sera inutilisable.
Adresse I2C du module APDS-9960
La première étape de notre préparation logicielle consiste à rechercher l’adresse I2C du capteur APDS-9960. Il s’agit de l’adresse à laquelle la carte Arduino UNO se connecte pour communiquer avec le module APDS-9960.
Le code Arduino suivant va scanner 128 adresses I2C afin de déterminer l’adresse du capteur APDS-9960. Si l’adresse reçue est 0x39 alors tout va bien (pour l’instant!), sinon cela veut dire que votre module est surement défectueux :
#include
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("Scan du bus I2C...");
}
void loop() {
byte error, address;
int nDevices = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("Appareil trouvé à l’adresse 0x");
if (address < 16) Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
}
if (nDevices == 0) Serial.println("Aucun appareil I2C détecté");
else Serial.println("Scan terminé.");
delay(2000);
}
Numéro ID du module APDS-9960
La seconde étape consiste à retrouver le numéro d’identification (ID) de la puce du module APDS-9960. Cet ID va permettre de déterminer si la capteur APDS-9960 est un Original ou un Clone.
Si le numéro ID est:
- 0xAB ou 0x9C : Puce Originale => Aucune modification nécessaire.
- 0xA8 ou 0x9E : Puce Clone => Modification de la librairie SparkFun_APDS9960 obligatoire.
- Autre : Puce défectueuse.
#include
#define APDS9960_I2C_ADDR 0x39
#define APDS9960_ID_REG 0x92
void setup() {
Serial.begin(115200);
Wire.begin();
Wire.beginTransmission(APDS9960_I2C_ADDR);
Wire.write(APDS9960_ID_REG);
Wire.endTransmission();
Wire.requestFrom(APDS9960_I2C_ADDR, 1);
if (Wire.available()) {
byte id = Wire.read();
Serial.print("ID lu = 0x");
Serial.println(id, HEX);
} else {
Serial.println("Échec lecture ID !");
}
}
void loop() {}
Notre module a un ID 0xA8, ce qui signifie qu’il s’agit ici d’un clone et qu’une modification de la librairie SparkFun_APDS9960 est obligatoire.
Modification de la librairie "SparkFun_APDS9960"
Avant de commencer la modification de la librairie SparkFun_APDS9960, un logiciel permettant de lire et modifier les fichiers en .cpp ou .h est nécessaire. Il existe une pléthore de logiciels permettant cela mais nous vous conseillons l’éditeur Notepad++. Il s’agit d’un logiciel entièrement gratuit et dont le lien de téléchargement est disponible ici : https://notepad-plus-plus.org/downloads/ .
Une fois le logiciel Notepad++ téléchargé et installé, ouvrez-le puis cliquez sur “Fichier -> Ouvrir”. Allez dans le dossier où se situe la librairie SparkFun_APDS9960 : C:\Users\…\Arduino\Librairies\SparkFun_APDS9960_RGB_and_Gesture_Sensor\src\SparkFun_APDS9960.cpp . Cliquez sur “Ouvrir”
Allez ensuite dans la fonction “SparkFun_APDS9960::init()” (voir ligne 55). Cette fonction permet d’initialiser les ID des capteurs APDS_9960 autorisées par la librairie.
De base, seules les ID 0xAB (ID_1) et 0x90C (ID_2) sont reconnues dans la librairie SparkFun_APDS9960. Ce sont les ID des modules APDS_9960 Originaux. Nous allons donc rajouter manuellement les ID des modules APDS-9960 Clones en insérant les informations suivantes dans la parenthèse à la ligne 66 :
- || id == 0x9E || id == 0xA8
Puis on sauvegarde en cliquant sur “Fichier -> Enregistrer” ou sur l’icône représentant une disquette :
Fermez le logiciel Notepad++ et redémarrez le logiciel Arduino afin que la modification de la librairie soit prise en compte.
Code Arduino 1: Détection de gestes
Ce code Arduino va permettre au capteur APDS_9960 de faire de la détection de gestes et d’afficher le résultat dans le moniteur série de l’IDE Arduino. Les gestes reconnus sont : HAUT, BAS, GAUCHE, DROITE, PROCHE, LOIN :
#include
#include
// Objet capteur
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int gesture = 0;
void setup() {
Serial.begin(115200);
Wire.begin();
Serial.println("Initialisation du APDS-9960...");
// Initialisation
if (apds.init()) {
Serial.println("APDS-9960 initialisé avec succès !");
} else {
Serial.println("ERREUR: échec initialisation APDS-9960");
while (1);
}
// Démarre la reconnaissance de gestes
if (apds.enableGestureSensor(true)) {
Serial.println("Détection de gestes activée !");
} else {
Serial.println("Impossible d'activer la détection de gestes !");
while (1);
}
}
void loop() {
// Vérifie s'il y a un geste disponible
if (apds.isGestureAvailable()) {
gesture = apds.readGesture();
switch (gesture) {
case DIR_UP:
Serial.println("Geste : HAUT");
break;
case DIR_DOWN:
Serial.println("Geste : BAS");
break;
case DIR_LEFT:
Serial.println("Geste : GAUCHE");
break;
case DIR_RIGHT:
Serial.println("Geste : DROITE");
break;
default:
Serial.println("Gest inconnu / impossible à déterminer");
break;
}
}
}
Code Arduino 2 : Détection de proximité
Dans ce mode, le capteur APDS9960 renvoi une valeur comprise entre 0 et 255 avec :
- 0 – 10 : Rien devant le capteur
- 11 – 120 : Main approchée à quelques cm
- 121 – 255 : Main juste devant le capteur .
#include
#include
SparkFun_APDS9960 apds = SparkFun_APDS9960();
void setup() {
Serial.begin(115200);
Wire.begin();
Serial.println("Initialisation du APDS-9960...");
// Initialise le capteur
if (apds.init()) {
Serial.println("APDS-9960 initialisé !");
} else {
Serial.println("Erreur : impossible d'initialiser le APDS-9960");
while (1);
}
// Réglages pour la proximité
apds.setProximityGain(PGAIN_4X); // Gain maximum
apds.setLEDDrive(LED_DRIVE_100MA); // Puissance LED IR maximale
apds.setProximityIntLowThreshold(0); // Plage complète
apds.setProximityIntHighThreshold(255);
// Active le mode de proximité
if (apds.enableProximitySensor(true)) {
Serial.println("Détection de proximité activée !");
} else {
Serial.println("Impossible d'activer le mode proximité !");
while (1);
}
}
void loop() {
uint8_t prox;
// Lecture de la valeur de proximité
if (!apds.readProximity(prox)) {
Serial.println("Erreur lecture proximité !");
delay(200);
return;
}
Serial.print("Proximité : ");
Serial.println(prox);
delay(100);
}
En réglant un seuil de déclenchement ( par exemple 180), il est possible de réaliser des applications diverses comme:
- Ouverture /Fermeture de porte
- Allumage / extinction de lumière
- Déclenchement de système de sécurité
Code Arduino 3 : Détection de couleurs
Ce code permet de détecter les composantes Rouges (R) Vert (G) et Bleu (B) afin de déterminer la couleur de l’objet mis en face du capteur. Il est important d’éclairer l’objet en question afin d’améliorer le facteur de détection de couleurs.
#include
#include
SparkFun_APDS9960 apds;
uint16_t amb, r, g, b;
String detectColor(uint16_t r, uint16_t g, uint16_t b, uint16_t amb);
void setup() {
Serial.begin(115200);
Wire.begin();
if (!apds.init()) {
Serial.println("ERREUR init APDS-9960");
while (1);
}
if (!apds.enableLightSensor(false)) {
Serial.println("ERREUR activation capteur lumière");
while (1);
}
Serial.println("Détection de couleur APDS-9960 prête.");
delay(300);
}
void loop() {
apds.readAmbientLight(amb);
apds.readRedLight(r);
apds.readGreenLight(g);
apds.readBlueLight(b);
String color = detectColor(r, g, b, amb);
Serial.println(color);
delay(200);
}
// -----------------------------------------------------
// FONCTION : détection de couleur calibrée
// -----------------------------------------------------
String detectColor(uint16_t r, uint16_t g, uint16_t b, uint16_t amb) {
// Trop peu de lumière ?
if (amb < 20) return "NOIR";
// Normalisation (réduit l'effet de lumière ambiante)
float rn = (float)r / amb;
float gn = (float)g / amb;
float bn = (float)b / amb;
// --- Couleurs primaires ---
if (rn > 0.40 && rn > gn * 1.4 && rn > bn * 1.4) return "ROUGE";
if (gn > 0.40 && gn > rn * 1.4 && gn > bn * 1.4) return "VERT";
if (bn > 0.40 && bn > rn * 1.4 && bn > gn * 1.4) return "BLEU";
// --- Couleurs secondaires ---
if (rn > 0.35 && gn > 0.35 && bn < 0.25) return "JAUNE / ORANGE";
if (bn > 0.35 && rn > 0.35 && gn < 0.25) return "VIOLET / MAGENTA";
if (gn > 0.35 && bn > 0.35 && rn < 0.25) return "CYAN";
// --- Blanc / gris ---
if (rn > 0.25 && gn > 0.25 && bn > 0.25) return "BLANC / GRIS";
return "COULEUR INCONNUE";
}
Une bonne détection de lumière dépend entièrement du bon éclairage de l’objet observé par le capteur APDS9960.
Code Arduino 4 : Mesure de lumière ambiante
Ce code va nous permettre de mesurer et d’afficher dans le moniteur série de l’IDE Arduino la lumière ambiante exprimée en LUX :
#include
#include
SparkFun_APDS9960 apds;
uint16_t ambient_light = 0;
void setup() {
Serial.begin(115200);
Wire.begin();
Serial.println("Initialisation APDS-9960...");
// Init capteur
if (!apds.init()) {
Serial.println("ERREUR: impossible d'initialiser le capteur !");
while (1);
}
// Active le capteur de lumière (ALS + couleurs)
if (!apds.enableLightSensor(false)) {
Serial.println("ERREUR: impossible d'activer le capteur lumière !");
while (1);
}
Serial.println("Capteur lumière actif.");
delay(500); // temps de stabilisation
}
void loop() {
// ---- Lumière ambiante ----
if (apds.readAmbientLight(ambient_light)) {
Serial.print("Lumière ambiante : ");
Serial.print(ambient_light);
Serial.println(" lux approx.");
}
Serial.println("---------------------------");
delay(300);
}
Applications possibles en définissant un seuil de luminosité :
- Volets roulants
- Éclairage
- Arrosage automatique de plantes
Conclusion
Nous avons à présent finalisé l’assemblage et la programmation du module APDS9960 avec la carte Arduino Uno. Les différents modes — reconnaissance de gestes, détection de proximité, détection des couleurs et mesure de la luminosité ambiante — s’affichent correctement dans le Moniteur série de l’IDE Arduino, attestant du bon fonctionnement du capteur. Ce projet offre une base solide pour aller plus loin, par exemple en l’intégrant à notre kit DIY permettant de piloter un système Pan-Tilt équipé de servomoteurs MG995 à l’aide du capteur APDS9960 et de la carte shield dédiée :







