APDS9960 je multifunkční senzor, který v jednom modulu zvládá:
- detekci gest (nahoru, dolů, doleva, doprava)
- měření vzdálenosti (proximity cca do 10–20 cm)
- měření okolního světla
- detekci RGB barev
Komunikuje přes I2C, takže ho snadno připojíš k ESP32, Arduino i dalším deskám.

Zapojení k ESP32
Zapojení je jednoduché:
- VCC → 3.3V
- GND → GND
- SDA → GPIO 21
- SCL → GPIO 22
- INT → libovolný digitální pin (volitelné)
- VL → většinou se nepřipojuje
Poznámky:
- Modul má obvykle interní pull-up rezistory (není potřeba přidávat)
- Napájení musí být 3.3 V

Instalace knihovny
Použij knihovnu:
- Adafruit APDS9960
Postup:
- Arduino IDE → Správce knihoven
- Vyhledej „APDS9960“
- Nainstaluj Adafruit verzi + závislosti
I2C adresa a ID senzoru
Standardní hodnoty:
- I2C adresa:
0x39 - Chip ID:
0xAB
Pozor:
- některé klony mají jiné ID (např.
0xA8) - v tom případě je potřeba upravit knihovnu (odstranit kontrolu ID)

1) Detekce gest (kompletní kód)
gestures.cpp
1#include <Wire.h>
2#include "Adafruit_APDS9960.h"
3
4Adafruit_APDS9960 apds;
5
6void setup() {
7 Serial.begin(115200);
8
9 if(!apds.begin()){
10 Serial.println("Chyba inicializace senzoru!");
11 while(1);
12 }
13
14 // zapnutí proximity a gest
15 apds.enableProximity(true);
16 apds.enableGesture(true);
17
18 Serial.println("Pripraveno na gesta");
19}
20
21void loop() {
22 uint8_t gesture = apds.readGesture();
23
24 if (gesture == APDS9960_DOWN) {
25 Serial.println("DOLU");
26 }
27 if (gesture == APDS9960_UP) {
28 Serial.println("NAHORU");
29 }
30 if (gesture == APDS9960_LEFT) {
31 Serial.println("DOLEVA");
32 }
33 if (gesture == APDS9960_RIGHT) {
34 Serial.println("DOPRAVA");
35 }
36}2) Detekce vzdálenosti (proximity)
Princip:
- senzor spustí interrupt, když je objekt blízko
- rozsah cca do 20 cm
Zapoj:
- LED → GPIO 23
Kompletní kód:
proximity.cpp
1#include <Wire.h>
2#include "Adafruit_APDS9960.h"
3
4Adafruit_APDS9960 apds;
5
6#define INT_PIN 4
7#define LED_PIN 23
8
9void setup() {
10 Serial.begin(115200);
11
12 pinMode(INT_PIN, INPUT);
13 pinMode(LED_PIN, OUTPUT);
14
15 if(!apds.begin()){
16 Serial.println("Chyba senzoru");
17 while(1);
18 }
19
20 apds.enableProximity(true);
21 apds.enableProximityInterrupt();
22
23 apds.setProximityInterruptThreshold(0, 175);
24}
25
26void loop() {
27 if(!digitalRead(INT_PIN)) {
28 uint8_t proximity = apds.readProximity();
29 Serial.println(proximity);
30
31 digitalWrite(LED_PIN, HIGH);
32
33 apds.clearInterrupt();
34 } else {
35 digitalWrite(LED_PIN, LOW);
36 }
37}3) RGB a světlo
Senzor měří:
- červenou (R)
- zelenou (G)
- modrou (B)
- celkové světlo (C)
Kompletní kód:
rgb.cpp
1#include <Wire.h>
2#include "Adafruit_APDS9960.h"
3
4Adafruit_APDS9960 apds;
5
6void setup() {
7 Serial.begin(115200);
8
9 if(!apds.begin()){
10 Serial.println("Chyba senzoru");
11 while(1);
12 }
13
14 apds.enableColor(true);
15}
16
17void loop() {
18 uint16_t r, g, b, c;
19
20 while(!apds.colorDataReady()){
21 delay(5);
22 }
23
24 apds.getColorData(&r, &g, &b, &c);
25
26 Serial.print("R: "); Serial.print(r);
27 Serial.print(" G: "); Serial.print(g);
28 Serial.print(" B: "); Serial.print(b);
29 Serial.print(" C: "); Serial.println(c);
30
31 delay(500);
32}Shrnutí
Tenhle senzor je docela OP na to, jak je malej:
- gesta → ovládání bez dotyku
- proximity → detekce přiblížení
- RGB → rozpoznání barev
- světlo → měření intenzity
Stačí jeden modul a máš 4 funkce v jednom.
