Features:
- Gesture detection using 4 directional photodiodes and IR LED
- Ambient light sensing for brightness control
- RGB color detection (red, green, blue)
- Communication via I2C or SPI
- Wide operating voltage: 2.4V - 3.6V
- Low power consumption
- Compact form factor for easy integration
- Programmable control registers
- High sensitivity for subtle motion detection
- Ideal for mobile, wearable, and smart home applications
Principle of Work:
Using its IR LED and photodiodes, the APDS-9960 detects light reflected by nearby objects. These signals are processed by internal circuits to detect motion and direction. The module's engine recognizes gesture patterns and outputs usable data over I2C or SPI interfaces. Additionally, it senses ambient light and RGB values with dedicated sensors.
Pinout:

- GND: Ground
- VCC: 3.3V - 5V Power Supply
- SDA: I2C Data Line
- SCL: I2C Clock Line
- INT: Interrupt Output
- VL: Not connected
Applications:
- Gesture recognition for touchless control
- Proximity-based automation
- Ambient light sensing for display adjustment
- RGB color recognition for object identification
Circuit Diagram:

Library Setup:
- Download from GitHub: SparkFun_APDS9960 Library
- Extract and add via Arduino IDE: Sketch → Include Library → Add .ZIP Library
Example Arduino Code:
#include "Wire.h"
#include "SparkFun_APDS9960.h"
#define APDS9960_INT 2
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
attachInterrupt(0, interruptRoutine, FALLING);
if (apds.init()) {
Serial.println("APDS-9960 initialization complete");
} else {
Serial.println("Initialization failed");
}
if (apds.enableGestureSensor(true)) {
Serial.println("Gesture sensor running");
} else {
Serial.println("Gesture sensor failed");
}
}
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()) {
int gesture = apds.readGesture();
switch (gesture) {
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");
}
}
}
Technical Details:
- Operating Voltage: 3.3V - 5V
- Max Current: 100 mA
- Interface: I2C (up to 400kHz)
- Proximity Range: up to 20 cm
- Gesture Range: up to 10 cm
- Ambient Light: 0.01 to 22000 lux
- Detection Angle: ±15°
- Temperature: -40°C to +85°C
- Dimensions: 2.36 x 2.36 x 0.76 mm
Comparison with CJMCU-7620:
- Gestures: CJMCU-7620 supports additional circular and wave gestures.
- Voltage: APDS-9960 (2.4–3.6V) vs. CJMCU-7620 (3.3V)
- Interface: Both support I2C; APDS-9960 also supports SPI.
- Availability: APDS-9960 is more common and widely supported.
- Cost: CJMCU-7620 is generally more affordable.
Features:
- Gesture detection using 4 directional photodiodes and IR LED
- Ambient light sensing for brightness control
- RGB color detection (red, green, blue)
- Communication via I2C or SPI
- Wide operating voltage: 2.4V - 3.6V
- Low power consumption
- Compact form factor for easy integration
- Programmable control registers
- High sensitivity for subtle motion detection
- Ideal for mobile, wearable, and smart home applications
Principle of Work:
Using its IR LED and photodiodes, the APDS-9960 detects light reflected by nearby objects. These signals are processed by internal circuits to detect motion and direction. The module's engine recognizes gesture patterns and outputs usable data over I2C or SPI interfaces. Additionally, it senses ambient light and RGB values with dedicated sensors.
Pinout:

- GND: Ground
- VCC: 3.3V - 5V Power Supply
- SDA: I2C Data Line
- SCL: I2C Clock Line
- INT: Interrupt Output
- VL: Not connected
Applications:
- Gesture recognition for touchless control
- Proximity-based automation
- Ambient light sensing for display adjustment
- RGB color recognition for object identification
Circuit Diagram:

Library Setup:
- Download from GitHub: SparkFun_APDS9960 Library
- Extract and add via Arduino IDE: Sketch → Include Library → Add .ZIP Library
Example Arduino Code:
#include "Wire.h"
#include "SparkFun_APDS9960.h"
#define APDS9960_INT 2
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
attachInterrupt(0, interruptRoutine, FALLING);
if (apds.init()) {
Serial.println("APDS-9960 initialization complete");
} else {
Serial.println("Initialization failed");
}
if (apds.enableGestureSensor(true)) {
Serial.println("Gesture sensor running");
} else {
Serial.println("Gesture sensor failed");
}
}
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()) {
int gesture = apds.readGesture();
switch (gesture) {
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");
}
}
}
Technical Details:
- Operating Voltage: 3.3V - 5V
- Max Current: 100 mA
- Interface: I2C (up to 400kHz)
- Proximity Range: up to 20 cm
- Gesture Range: up to 10 cm
- Ambient Light: 0.01 to 22000 lux
- Detection Angle: ±15°
- Temperature: -40°C to +85°C
- Dimensions: 2.36 x 2.36 x 0.76 mm
Comparison with CJMCU-7620:
- Gestures: CJMCU-7620 supports additional circular and wave gestures.
- Voltage: APDS-9960 (2.4–3.6V) vs. CJMCU-7620 (3.3V)
- Interface: Both support I2C; APDS-9960 also supports SPI.
- Availability: APDS-9960 is more common and widely supported.
- Cost: CJMCU-7620 is generally more affordable.