el sensor APDS-9960, una petita joia de l'enginyeria, és un component sorprenent que permet la detecció de gestos i proximitat, a més de mesurar la llum ambiental i el color. Utilitzat en dispositius electrònics d'última generació com el Samsung Galaxy S5, avui dia és a l'abast de qualsevol aficionat a l'electrònica que treballi amb plataformes com Arduino. Amb la capacitat de detectar gestos en un rang de 5 a 20 cm i la fà cil integració amb altres dispositius, és l'opció ideal per a aquells que busquen incorporar control mitjançant gestos en els seus projectes.
En aquest article explorarem a fons com funciona aquest sensor i com connectar-lo a un Arduino, prestant atenció als múltiples usos que pot tenir i oferint exemples de codi que et permetran començar a treballar-hi de forma rà pida.
Què és el sensor APDS-9960?
El APDS-9960 és un sensor que combina quatre funcionalitats principals: detecció de gestos, proximitat, color i llum ambiental. Es tracta d'un dispositiu que comunica les seves lectures mitjançant el protocol de comunicació I2C, cosa que facilita enormement el seu ús amb microcontroladors com Arduino. Entre les seves virtuts, destaca la seva capacitat per mesurar el color i la llum ambiental i detectar gestos sense contacte, reconeixent moviments com a esquerra, dreta, a dalt, a baix, a prop i lluny.
Aquest sensor funciona grà cies a la integració d'un emissor d'infrarojos i XNUMX fotodÃodes direccionals, que permeten detectar i calcular la direcció del moviment d'objectes propers. A més a més, compta amb la capacitat de mesurar la quantitat de llum ambiental i detecta el color RGB.
Connexió del sensor APDS-9960 amb Arduino

Per connectar el APDS-9960 amb Arduino, simplement necessites establir una comunicació a través del bus I2C. Aquest sensor treballa a un voltatge de 3.3V, per la qual cosa resulta crucial fer les connexions apropiades per evitar malmetre'l, especialment si treballes amb un Arduà de 5V. En aquest cas, és recomanable utilitzar un adaptador de nivell lògic per baixar el voltatge del bus I2C.
- GND al pin GND d'Arduino.
- Vcc al pin de 3.3V d'Arduino.
- SDA al pin SDA d'Arduino.
- SCL al pin SCL d'Arduino.
Si el teu model d'Arduino és de 5V, evidentment cal prendre precaucions addicionals, encara que en alguns casos s'ha reportat que el sensor podria operar sense fer-se malbé. No obstant això, això no és una cosa completament segura a llarg termini.
Llibreries i codi per a Arduino
Per fer ús de l'APDS-9960 amb Arduino, una de les maneres més fà cils és emprar la llibreria desenvolupada per Adafruit, que simplifica la seva utilització. Pots descarregar-la des de GitHub i instal·lar-la directament a l'entorn de desenvolupament d'Arduino.
Exemple bà sic: Mostrar gestos per port sèrie
En aquest primer exemple, es llegiran els gestos detectats i es mostraran pel port sèrie. Simplement passa la mà per sobre del sensor a una distà ncia entre 5 i 20 cm perquè els gestos siguin detectats:
#include "Adafruit_APDS9960.h"
Adafruit_APDS9960 apds;
void setup() {
Serial.begin(115200);
if (!apds.begin()) {
Serial.println("Error al inicializar el sensor, comprueba el cableado");
while (1);
}
apds.enableGesture(true);
}
void loop() {
uint8_t gesture = apds.readGesture();
if (gesture == APDS9960_DOWN) Serial.println("Abajo");
if (gesture == APDS9960_UP) Serial.println("Arriba");
if (gesture == APDS9960_LEFT) Serial.println("Izquierda");
if (gesture == APDS9960_RIGHT) Serial.println("Derecha");
}
Aquest codi només és una mostra del que pots fer amb un sensor de gestos com l'APDS-9960. En passar la mà per sobre del dispositiu, el programa detectarà el gest i mostrarà el resultat a la consola del port sèrie.
Exemple avançat: Parpellejar LED en funció del gest
Per aquest segon exemple, combinarem els gestos detectats amb el LED integrat a la placa. Depenent del gest detectat, farem parpellejar el LED un nombre especÃfic de vegades:
#include "Adafruit_APDS9960.h"
Adafruit_APDS9960 apds;
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
if (!apds.begin()) {
Serial.println("Error al inicializar el sensor");
while (1);
}
apds.enableGesture(true);
}
void loop() {
uint8_t gesture = apds.readGesture();
if (gesture == APDS9960_DOWN) blink(1);
if (gesture == APDS9960_UP) blink(2);
if (gesture == APDS9960_LEFT) blink(3);
if (gesture == APDS9960_RIGHT) blink(4);
}
void blink(int times) {
for (int i = 0; i < times; i++) {
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
}
}
Problemes comuns i solucions
Tot i que el APDS-9960 és un sensor força robust, és cert que en entorns amb molta llum o interferències, les lectures poden fallar. A més, si es fa servir en condicions no ideals, pot fallar en la detecció de moviments o fins i tot generar falsos positius.
Un altre aspecte a tenir en compte és que aquest sensor és força dependent d'una correcta il·luminació ambiental i, si bé és molt sensible, pot no funcionar bé amb objectes en condicions com a superfÃcies brillants o amb guants, ja que pot ser que aquestes no reflecteixin correctament la llum infraroja emesa.
El protocol I2C que utilitza aquest dispositiu és força simple, però tot i aixà és fonamental assegurar-se que les connexions siguin correctes i que no hi hagi problemes amb el voltatge.
El sensor APDS-9960 és una excel·lent eina per a projectes que busquen integrar detecció de gestos i proximitat. És econòmic, fà cil d'integrar a través de I2C i compta amb llibreries que en simplifiquen l'ús. Tot i que pot presentar problemes en alguns entorns, la seva sensibilitat ajustable i la seva capacitat per funcionar darrere de vidres ho fan una opció versà til. Amb els exemples de codi proporcionats, pots començar a treballar amb aquest sensor i descobrir-ne tot el potencial en els teus projectes.