Cómo detectar gestos con Arduino y el sensor APDS-9960

  • El APDS-9960 detecta gestos, proximidad, color y luz ambiental.
  • Se comunica a través del bus I2C y funciona a 3.3V.
  • Es fácil de conectar y programar en plataformas como Arduino.
  • Existen librerías de Adafruit que facilitan su integración y uso.

apds-9960

El sensor APDS-9960, una pequeña joya de la ingeniería, es un componente asombroso que permite la detección de gestos y proximidad, además de medir la luz ambiental y el color. Utilizado en dispositivos electrónicos de última generación como el Samsung Galaxy S5, hoy en día está al alcance de cualquier aficionado a la electrónica que trabaje con plataformas como Arduino. Con su capacidad de detectar gestos en un rango de 5 a 20 cm y su fácil integración con otros dispositivos, es la opción ideal para aquellos que buscan incorporar control mediante gestos en sus proyectos.

En este artículo exploraremos a fondo cómo funciona este sensor y cómo conectarlo a un Arduino, prestando atención a los múltiples usos que puede tener y ofreciendo ejemplos de código que te permitirán empezar a trabajar con él de forma rápida.

¿Qué es el sensor APDS-9960?

El APDS-9960 es un sensor que combina cuatro funcionalidades principales: detección de gestos, proximidad, color y luz ambiental. Se trata de un dispositivo que comunica sus lecturas mediante el protocolo de comunicación I2C, lo que facilita enormemente su uso en con microcontroladores como Arduino. Entre sus virtudes, destaca su capacidad para medir el color y la luz ambiental y detectar gestos sin contacto, reconociendo movimientos como izquierda, derecha, arriba, abajo, cerca y lejos.

Este sensor funciona gracias a la integración de un emisor de infrarrojos y cuatro fotodiodos direccionales, que permiten detectar y calcular la dirección del movimiento de objetos cercanos. Además, cuenta con la capacidad de medir la cantidad de luz ambiental y detecta el color RGB.

Conexión del sensor APDS-9960 con Arduino

apds9960

Para conectar el APDS-9960 con Arduino, simplemente necesitas establecer una comunicación a través del bus I2C. Este sensor trabaja a un voltaje de 3.3V, por lo que resulta crucial hacer las conexiones apropiadas para evitar dañarlo, especialmente si trabajas con un Arduino de 5V. En este caso, es recomendable utilizar un adaptador de nivel lógico para bajar el voltaje del bus I2C.

Pines a conectar:
  • GND al pin GND de Arduino.
  • Vcc al pin de 3.3V de Arduino.
  • SDA al pin SDA de Arduino.
  • SCL al pin SCL de Arduino.

Si tu modelo de Arduino es de 5V, evidentemente hay que tomar precauciones adicionales, aunque en algunos casos se ha reportado que el sensor podría operar sin dañarse. Sin embargo, esto no es algo completamente seguro a largo plazo.

Librerías y código para Arduino

Para hacer uso del APDS-9960 con Arduino, una de las maneras más fáciles es emplear la librería desarrollada por Adafruit, que simplifica su utilización. Puedes descargarla desde GitHub e instalarla directamente en el entorno de desarrollo de Arduino.

Ejemplo básico: Mostrar gestos por puerto serie

En este primer ejemplo, se leerán los gestos detectados y se mostrarán por el puerto serie. Simplemente pasa la mano por encima del sensor a una distancia entre 5 y 20 cm para que los gestos sean detectados:

#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");
}

Este código es tan solo una muestra de lo que puedes hacer con un sensor de gestos como el APDS-9960. Al pasar la mano por encima del dispositivo, el programa detectará el gesto y mostrará el resultado en la consola del puerto serie.

Ejemplo avanzado: Parpadear LED en función del gesto

Para este segundo ejemplo, combinaremos los gestos detectados con el LED integrado en la placa. Dependiendo del gesto detectado, haremos parpadear el LED un número específico de veces:

#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);
  }
}

Problemas comunes y soluciones

Aunque el APDS-9960 es un sensor bastante robusto, es cierto que en entornos con mucha luz o interferencias, las lecturas pueden fallar. Además, si se usa en condiciones no ideales, puede fallar en la detección de movimientos o incluso generar falsos positivos.

Otro aspecto a tener en cuenta es que este sensor es bastante dependiente de una correcta iluminación ambiental y, si bien es muy sensible, puede no funcionar bien con objetos en condiciones como superficies brillantes o con guantes, ya que puede que estas no reflejen correctamente la luz infrarroja emitida.

El protocolo I2C que utiliza este dispositivo es bastante simple, pero aún así es fundamental asegurarse de que las conexiones sean correctas y que no haya problemas con el voltaje.

El sensor APDS-9960 es una excelente herramienta para proyectos que buscan integrar detección de gestos y proximidad. Es económico, fácil de integrar a través de I2C y cuenta con librerías que simplifican su uso. Si bien puede presentar problemas en algunos entornos, su sensibilidad ajustable y su capacidad para funcionar detrás de cristales lo hacen una opción versátil. Con los ejemplos de código proporcionados, puedes empezar a trabajar con este sensor y descubrir todo su potencial en tus proyectos.


Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.