Detectar gestos con Arduino y sensor APDS-9960


¿Qué es un APDS-9960?

El APDS-9960 es un sensor de gestos, sensor de proximidad, sensor de color y sensor de luz ambiental, que podemos usar junto con un procesador como Arduino.

Esta pequeña joya tecnológica era un componente del ya retirado Samsung Galaxy S5. La gran producción de este móvil ha permitido que este sensor se fabrique en grandes cantidades, lo que permite su estupenda relación calidad/precio.

El APDS-9960 permite medir el color, medir la luz ambiental y detección de gestos. La detección de gestos sin contacto permite detectar un objeto moviéndose a 5-20cm, detectando gestos de izquierda, derecha, arriba, abajo, cerca y lejos.

Incorpora filtros de IR y UV. Dispone de ganancia y tiempo de integración controlado por software. Su alta sensibilidad hace que pueda funcionar incluso detrás de un cristal oscuro.

Anuncio:

La comunicación se realiza a través de I2C, por lo que es muy sencillo realizar su lectura con un procesador como Arduino. Adicionalmente, dispone de un pin de interrupción con umbrales configurables, evitando tener que preguntar constantemente el estado del sensor.

Precio

El APDS-9960 es un sensor muy barato para la gran cantidad de funciones que realiza. Podemos encontrar un módulo con APDS-9960 por 1.70€ en vendedores internacionales de eBay y AliExpress.

¿Cómo funciona un APDS-9960?

El APDS-9960 integra un emisor de infrarrojos, cuatro fotodiodos direccionales y cuatro fotodiodos para la medición de color. Además, incorpora la electrónica necesaria para la medición, con rechazo de luz ambiental y compensación de offset.

Para la detección de movimientos, el APDS-9960 compara las variaciones de luz registrada en cada uno de los fotodiodos, lo que le permite estimar el movimiento frente al sensor a una distancia de entre 5-20cm.

Para la detección de proximidad, el APDS-9960 mide la cantidad total de luz infrarroja registrada, lo que permite estimar la distancia a la que está un objeto frente al sensor.

Adicionalmente, los sensores RGB del dispositivo permiten que el APDS-9960 pueda actuar como colorímetro y como luxómetro.

Esquema de montaje

La conexión de los módulos que integran el APDS-9960 es sencilla, ya que la comunicación se realiza a través de I2C. Sin embargo, la tensión de alimentación del de alimentación del APDS-9960 es de 3.3V.

Si conectais el APDS-9960 a 5V lo dañareis inmediata y permanentemente.

Por tanto, para alimentar el módulo conectaremos los pines del módulo GND y Vin, respectivamente, y GND y 3.3V en Arduino.

Por otro lado, para la comunicación por I2C deberemos conectar los pines SCK y SDA con los pines correspondientes de nuestro modelo de Arduino. Los pines de comunicación deberían funcionar igualmente a 3.3V.

Si nuestro modelo de Arduino es de 5V, deberemos usar un adaptador de nivel lógico para realizar la conexión del bus I2C. No obstante, en los experimentos con comunicación a 5V el APDS-9960 funcionaba correctamente, pero nos arriesgamos a dañar el módulo o reducir su vida útil.

La conexión, vista desde Arduino, sería la siguiente.


No usar un adaptador de nivel en los pines de comunicación SDA y SCK puede acortar la vida útil del dispositivo, o incluso dañarlo.

Ejemplos de código

Para realizar la lectura del sensor usaremos la librería desarrollada por Adafruit, disponible en este enlace. La librería incorpora varios ejemplos de uso que conviene revisar

A continuación vamos a ver algunos ejemplos de uso del sensor APDS-9960.

Mostrar por puerto de serie

En este primer ejemplo, leemos los gestos y mostramos por puerto serie el resultado. Para probarlo, pasar la mano por encima del sensor a unos 4-20cm de distancia.

Este es el resultado de ejecutar este ejemplo

Mostrar por Led integrado

En este ejemplo, hacemos parpadear el LED integrado en la placa un número de veces, en función del gesto detectado. Esto nos permite comprobar el correcto funcionamiento del sensor sin necesidad de un ordenador para visualizar la salida.

Aquí tenéis un video con el resultado.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino

Anuncio:

Previous Como instalar un servidor Web con XAMPP
Next Digispark, placa con Attiny85 compatible con Arduino

¡Deja un comentario!...

1000
newest oldest

Por qué puede dañarse el dispositivo al utilizar un conversor de nivel para i2c? En teoría el dispositivo no debería no enterarse de que existe un conversor de nivel si está bien hecho.

Muchas gracias. ¿Seguro que la librería que has puesto es la correcta, y la que usa el script que muestras?

Que adaptador de nivel logico recomiendas para la conexión del bus I2C?

Gracias!