Difference between revisions of "APDS-9960 RGB and Gesture Sensor Module"
(Created page with " == '''Introduction''' == File:APDS-9960_1.jpg<br> File:APDS-9960_2.jpg<br> The RGB and Gesture Sensor is a small breakout board with a built in APDS-9960 sensor that...") |
(→Pin Description) |
||
Line 43: | Line 43: | ||
|External interrupt pin. Active LOW on interrupt event | |External interrupt pin. Active LOW on interrupt event | ||
|} | |} | ||
+ | |||
+ | == '''Working Principle''' == | ||
+ | Gesture detection utilizes four directional photodiodes to sense reflected IR energy (sourced by the integrated LED) to convert physical motion information (i.e. velocity, direction and distance) to a digital information. The architecture of the gesture engine features automatic activation (based on Proximity engine results), ambient light subtraction, cross-talk cancelation, dual 8-bit data converters, power saving inter-conversion delay, 32-dataset FIFO, and interrupt driven I2C communication. The gesture engine accommodates a wide range of mobile device gesturing requirements: simple UP-DOWN-RIGHT-LEFT gestures or more complex gestures can be accurately sensed. Power consumption and noise are minimized with adjustable IR LED timing.<br> | ||
+ | [[File:APDS-9960_5.jpg]]<br> | ||
+ | |||
+ | == '''Experimental Procedures for Arduino''' == | ||
+ | '''Step 1:''' Connect the circuit:<br> | ||
+ | [[File:APDS-9960_6.jpg]]<br> | ||
+ | '''Step 2:''' Compile and upload the code.<br> | ||
+ | <pre> | ||
+ | /****************************************/ | ||
+ | #include <Wire.h> | ||
+ | #include <SparkFun_APDS9960.h> | ||
+ | |||
+ | |||
+ | // Constants | ||
+ | |||
+ | // Global Variables | ||
+ | SparkFun_APDS9960 apds = SparkFun_APDS9960(); | ||
+ | int isr_flag = 0; | ||
+ | |||
+ | void setup() { | ||
+ | |||
+ | // Set interrupt pin as input | ||
+ | pinMode(2, 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!")); | ||
+ | } | ||
+ | |||
+ | // 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); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void interruptRoutine() { | ||
+ | isr_flag = 1; | ||
+ | } | ||
+ | |||
+ | void handleGesture() { | ||
+ | if ( apds.isGestureAvailable() ) { | ||
+ | switch ( apds.readGesture() ) { | ||
+ | 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"); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </pre> | ||
+ | After the upload of code is done, please open the serial port, place a gesture on the module, and the serial port will output the gesture you have done. |
Revision as of 08:48, 16 September 2019
Introduction
The RGB and Gesture Sensor is a small breakout board with a built in APDS-9960 sensor that offers ambient light and color measuring, proximity detection, and touchless gesture sensing. With this RGB and Gesture Sensor, you are able to control a computer, microcontroller, robot, and so on. It is the same sensor as Samsung Galaxy S5 uses and it is probably one of the best gesture sensors with this price on the market.
APDS-9960
It has many functions, including gesture detection, approaching detection, digital ambient light sensing and so on. It uses an 8-pin package and can be a digital RGB, an ambient light, a short range or a gesture sensing equipment. The device has many ports compatible with I2C, in different colors: red, green, blue, clear (RGBC). The short range and the gesture sensing have infrared LEDs. RGB and ambient light sensing can detect the intensity of light under many light conditions, through many vibration-absorptive materials and the deep tinted window. Besides, integrated UV-IR blocking filter can sense the ambient light and correlated colour temperature accurately.
- Main Features
- Type: GY-APDS9960-3.3
- Chip: APDS-9960
- Power Supply Voltage: 3.3V
- Communication Mode: IIC communication protocol
- Size: 20mm x 15.3mm
Pin Description
Pin Description | |
---|---|
VL | Optional power to the IR LED if PS jumper is disconnected Must be 3.0 – 4.5V |
GND | Connect to ground. |
VCC | Used to power the APDS-9960 sensor. Must be 2.4 – 3.6 |
SDA | I²C data |
SCL | I²C clock |
IN | External interrupt pin. Active LOW on interrupt event |
Working Principle
Gesture detection utilizes four directional photodiodes to sense reflected IR energy (sourced by the integrated LED) to convert physical motion information (i.e. velocity, direction and distance) to a digital information. The architecture of the gesture engine features automatic activation (based on Proximity engine results), ambient light subtraction, cross-talk cancelation, dual 8-bit data converters, power saving inter-conversion delay, 32-dataset FIFO, and interrupt driven I2C communication. The gesture engine accommodates a wide range of mobile device gesturing requirements: simple UP-DOWN-RIGHT-LEFT gestures or more complex gestures can be accurately sensed. Power consumption and noise are minimized with adjustable IR LED timing.
File:APDS-9960 5.jpg
Experimental Procedures for Arduino
Step 1: Connect the circuit:
Step 2: Compile and upload the code.
/****************************************/ #include <Wire.h> #include <SparkFun_APDS9960.h> // Constants // Global Variables SparkFun_APDS9960 apds = SparkFun_APDS9960(); int isr_flag = 0; void setup() { // Set interrupt pin as input pinMode(2, 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!")); } // 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); } } void interruptRoutine() { isr_flag = 1; } void handleGesture() { if ( apds.isGestureAvailable() ) { switch ( apds.readGesture() ) { 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"); } } }
After the upload of code is done, please open the serial port, place a gesture on the module, and the serial port will output the gesture you have done.