Zpět na články

ESP32 + APDS9960 (gesta, vzdálenost, světlo, barvy) – kompletní návod

APDS9960 s ESP32 umožňuje gesta, měření vzdálenosti, světla i barev v jednom modulu.

ESP32 + APDS9960 (gesta, vzdálenost, světlo, barvy) – kompletní návod

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.

ESP32 Blog image

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
ESP32 Blog image

Instalace knihovny

Použij knihovnu:

  • Adafruit APDS9960

Postup:

  1. Arduino IDE → Správce knihoven
  2. Vyhledej „APDS9960“
  3. 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)
ESP32 Blog image

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.

Nakupte svoje ESP32 ještě dnes!

Doprava Zásilkovnou za 89 Kč
Platba dobírkou
Vrácení do 30 dnů
Omezené zásoby - skladem

ESP32-S3 DevKit USB-C

Kompletní vývojová deska s USB-C

240MHz dvoujádrový
WiFi 802.11 b/g/n
Bluetooth 4.2 + BLE
4MB Flash paměť
520KB SRAM
38 GPIO pinů
209za kus

Množstevní slevy:

1
Celkem
209
Objednat

Bezpečná platba při převzetí zásilky nebo online platba přes Comgate, a.s.