Senzor de gesturi, RGB și proximitate APDS9960 pentru Arduino
În acest tutorial, vom explora cum să folosim modulul senzor APDS9960, care combină capacități de detectare a gesturilor, detectare a culorilor RGB și detectare a proximității. Acest senzor versatil poate detecta mișcări în diverse direcții și poate fi integrat în proiecte pentru controlul motoarelor, luminilor sau altor dispozitive pe baza gesturilor mâinii. Până la sfârșitul acestui tutorial, veți înțelege cum să conectați senzorul și să implementați detectarea de bază a gesturilor în proiectele voastre Arduino.

Modulul APDS9960 este compact și necesită un minim de cabluri, fiind o alegere excelentă pentru proiecte interactive. Vom folosi Arduino IDE pentru a programa senzorul și a afișa gesturile detectate pe monitorul serial. Pentru un ghid vizual, consultați videoclipul la (în videoclip la 00:00).
Hardware Explicat
Componenta cheie a acestui proiect este modulul senzor APDS9960. Acest modul este capabil să detecteze gesturi precum glisare la stânga, glisare la dreapta, glisare în sus și glisare în jos. De asemenea, măsoară valorile culorilor RGB și proximitatea față de obiectele din apropiere. Senzorul comunică cu Arduino folosind I2C, ceea ce simplifică procesul de cablare și programare.
APDS9960 conține mai mulți senzori interni: un senzor de gesturi, un senzor de culoare RGB și un senzor de lumină ambientală. Senzorul de gesturi folosește un LED infraroșu și un fotodetector pentru a detecta mișcările mâinii, în timp ce senzorul RGB măsoară intensitățile luminii roșii, verzi și albastre pentru a identifica culorile. Senzorul de proximitate determină cât de aproape este un obiect de senzor, ceea ce poate fi util în diverse aplicații.
Detalii din Fișa Tehnică
| Producător | Avago Technologies |
|---|---|
| Număr de piesă | APDS-9960 |
| Tensiune logică/IO | 1,8 V până la 3,6 V |
| Tensiune de alimentare | 3,3 V |
| Curent de ieșire (pe canal) | 20 mA max |
| Curent de vârf (pe canal) | 100 mA |
| Ghid frecvență PWM | Nu se aplică |
| Praguri logice de intrare | 0,3 V (jos), 0,7 V (sus) |
| Cădere de tensiune / RDS(on) / saturație | 0,5 V max |
| Limite termice | -40 până la 85 °C |
| Pachet | LGA cu 6 pini |
| Note / variante | Niciuna |
- Alimentați întotdeauna APDS9960 cu 3,3V; tensiuni mai mari pot deteriora senzorul.
- Asigurați rezistențe de pull-up adecvate pe liniile I2C dacă conectați mai multe dispozitive.
- Țineți senzorul departe de lumina directă a soarelui pentru a evita interferențele.
- Folosiți un condensator de decuplare aproape de pinii de alimentare pentru stabilitate.
- Fiți conștienți de raza de detectare pentru proximitate (de obicei în jur de 20 cm).
Instrucțiuni de Cablare

Pentru a conecta modulul senzor APDS9960 la Arduino, urmați acești pași:
- Conectați pinul
VCCal APDS9960 la pinul de 3,3V de pe Arduino. - Conectați pinul
GNDla unul dintre pinii GND de pe Arduino. - Conectați pinul
SDAla pinulA4al Arduino (linia de date I2C). - Conectați pinul
SCLla pinulA5al Arduino (linia de ceas I2C). - Conectați pinul
INTla pinul digital2de pe Arduino pentru gestionarea întreruperilor.
Rețineți că dacă folosiți un alt model de Arduino, pinii SDA și SCL pot varia (de exemplu, pe un Arduino Mega, folosiți SDA pe pinul 20 și SCL pe pinul 21). Asigurați-vă că verificați mapările specifice ale pinilor pentru placa voastră. Pentru configurații diferite, consultați videoclipul la (în videoclip la 02:30).
Exemple de Cod & Explicații
În funcția de configurare, inițializăm comunicarea serială și senzorul APDS9960. Pinul de întrerupere este configurat pentru a asculta evenimentele de gesturi. Iată un fragment din codul de configurare:
void setup() {
pinMode(APDS9960_INT, INPUT);
Serial.begin(9600);
Serial.println(F("Inițializare APDS-9960..."));
if (apds.init()) {
Serial.println(F("Inițializare completă"));
} else {
Serial.println(F("Inițializare eșuată"));
}
}
Acest cod configurează setările necesare pentru a asigura că senzorul este gata de utilizare și oferă feedback în monitorul serial.
În continuare, definim cum să gestionăm gesturile detectate de senzor. Funcția handleGesture folosește o instrucțiune switch pentru a determina direcția gestului. Iată un extras relevant:
void handleGesture() {
if (apds.isGestureAvailable()) {
switch (apds.readGesture()) {
case DIR_UP:
Serial.println("SUS");
break;
case DIR_DOWN:
Serial.println("JOS");
break;
// Cazuri suplimentare pentru stânga, dreapta, aproape și departe
}
}
}
Această funcție verifică dacă un gest este disponibil și citește direcția acestuia, afișând rezultatul pe monitorul serial pentru feedback. Asigurați-vă că consultați codul complet încărcat mai jos în articol pentru detalii complete de implementare.
Demonstrație / Ce să Vă Așteptați
Când rulați programul, ar trebui să vedeți gesturile detectate afișate pe monitorul serial pe măsură ce vă mișcați mâna în diferite direcții. De exemplu, glisarea în sus ar trebui să afișeze "SUS", în timp ce glisarea în jos afișează "JOS". Asigurați-vă că țineți mâna stabilă pentru o secundă când efectuați gesturile de aproape și departe (în videoclip la 10:00).
Fiți atenți la detectarea proximității senzorului; dacă vă mișcați mâna prea repede sau prea departe de senzor, este posibil să nu înregistreze gestul cu precizie. Aceasta este o problemă comună care poate afecta performanța.
Marcaje Temporale din Videoclip
- 00:00 - Introducere în senzorul APDS9960
- 02:30 - Instrucțiuni de cablare
- 05:15 - Explicații despre cod
- 10:00 - Demonstrație a recunoașterii gesturilor
++
/*
This is code for an APDS9960 Gesture, RGB, Proximity sensor module (6 pin).
* Watch the video on how to use APDS9960: https://youtu.be/jjXx0V13rNs
*/
/*
* This code has been modified from the Arduino library.
* Explained by Ahmad S. on March 25, 2018 at 21:19
* in Ajax, Ontario, Canada
* for Robojax.com
*
*/
/****************************************************************
GestureTest.ino
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
Tests the gesture sensing abilities of the APDS-9960. Configures
APDS-9960 over I2C and waits for gesture events. Calculates the
direction of the swipe (up, down, left, right) and displays it
on a serial console.
To perform a NEAR gesture, hold your hand
far above the sensor and move it close to the sensor (within 2
inches). Hold your hand there for at least 1 second and move it
away.
To perform a FAR gesture, hold your hand within 2 inches of the
sensor for at least 1 second and then move it above (out of
range) of the sensor.
Hardware Connections:
IMPORTANT: The APDS-9960 can only accept 3.3V!
Arduino Pin APDS-9960 Board Function
3.3V VCC Power
GND GND Ground
A4 SDA I2C Data
A5 SCL I2C Clock
2 INT Interrupt
Resources:
Include Wire.h and SparkFun_APDS-9960.h
Development environment specifics:
Written in Arduino 1.0.5
Tested with SparkFun Arduino Pro Mini 3.3V
This code is beerware; if you see me (or any other SparkFun
employee) at the local, and you've found our code helpful, please
buy us a round!
Distributed as-is; no warranty is given.
****************************************************************/
#include <Wire.h>
#include <SparkFun_APDS9960.h>
// Pins
#define APDS9960_INT 2 // Needs to be an interrupt pin
// Constants
// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
// Set interrupt pin as input
// Robojax Video Tutorial
pinMode(APDS9960_INT, 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!"));
}
// Robojax Video Tutorial
// 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);
// Robojax Video Tutorial
}
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
// Robojax Video Tutorial
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
// Robojax Video Tutorial
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");
// Robojax Video Tutorial
}
}
}
Lucruri de care ai putea avea nevoie
-
Amazon
-
AliExpressPurchase AM2302, DHT11, or DHT22 sensor from AliExpresss.click.aliexpress.com
Resurse și referințe
-
ExternAdafruit APDS9960 library (from GitHub)github.com
Fișiere📁
Fișier Fritzing
-
APDS 9960 rgb and gesture sensor
apds_9960_rgb_and_gesture_sensor.fzpz0.01 MB
Alte fișiere
-
Biblioteca de gesturi APDS9960 de la RobojaxAceastă bibliotecă este utilizată pentru senzorul de gesturi APDS9960 pentru a detecta mișcarea mâinii tale și a detecta culoarea prezentă.
robojax-gesture-APDS9960-Library.zip0.30 MB -
Foaie de date APDS9960acesta este fișa tehnică pentru cipul APDS9960. aruncă o privire asupra acestui fișier pentru a învăța mai multe despre el.
robojax-gesture-APDS9960_datasheet.pdf0.89 MB -
APDS9960 Gesture LibraryArduino library for the APDS9960 gesture, proximity, and color sensor. Provides functions to initialize the sensor, read gesture data, and configure detection thresholds. Supports I2C interface and operates at 3.3V.
robojax-APDS9960-gesture-library.zip0.30 MB -
APDS9960 Gesture DatasheetDatasheet for the APDS9960 digital proximity, ambient light, RGB and gesture sensor. Features I2C interface, gesture detection with directional output, and operates at 2.4-3.6V.
robojax-APDS9960-gesture-datasheet.pdf0.89 MB