Diseñe rápidamente su propio controlador de gestos 3D de bajo costo

Por Jacob Beningo

Colaboración de Editores de DigiKey de América del Norte

Las perillas, los botones, las palancas y las pantallas táctiles generalmente constituyen la forma en que los humanos interactúan con máquinas y dispositivos integrados. Sin embargo, las recientes mejoras en la tecnología de sensores abren el camino para que los desarrolladores agreguen el control de gestos tridimensional (3D) a los productos.

Según la tecnología utilizada, comprar e integrar un controlador de gestos puede ser costoso. Sin embargo, existe una amplia variedad de tecnologías de sensores de gestos, que abarcan desde los sensores económicos que usan fotodiodos y leds infrarrojos para detectar movimiento hasta las costosas cámaras con reconocimiento de gestos. Los sensores de gestos infrarrojos son económicos, pueden conectarse digitalmente a un microcontrolador de bajo costo y, con un poco de software, pueden ser lo suficientemente precisos para muchas aplicaciones.

Este artículo explora el control de gestos utilizando el APDS-9960 de Broadcom, un sensor infrarrojo (IR) de control de gestos que se puede incorporar fácilmente a casi cualquier sistema integrado.

Sensores de gestos basados en radiación IR

La teoría detrás de los sensores de gestos basados en radiación IR es relativamente simple. Al detectar el movimiento de una mano, es posible que los desarrolladores detecten múltiples gestos:

  • Arriba/abajo
  • Izquierda/derecha
  • Adelante/atrás

En cada uno de estos casos, el sensor debe ser capaz de detectar la dirección del movimiento. Esto se realiza utilizando dos componentes principales del sensor: un led y múltiples fotodiodos direccionales. Los fotodiodos direccionales son solo cuatro fotodiodos que se colocan a una distancia predeterminada del led IR. Por ejemplo, los fotodiodos del sensor de luz ambiental, proximidad y gestos APDS-9960 de Broadcom se colocan siguiendo un patrón de diamante en el que cada diodo tiene un especificador direccional, como arriba, abajo, izquierda y derecha (Figura 1).

Diagrama del APDS-9960 de BroadcomFigura 1: El APDS-9960 de Broadcom cuenta con un led IR integrado y cuatro fotodiodos direccionales que detectan la energía IR reflejada que se puede analizar para obtener un perfil de gestos. (Fuente de la imagen: Broadcom)

Cuando el led transmite energía IR, la energía se emite al espacio vacío a menos que haya un objeto, como una mano, para reflejarla. Los fotodiodos detectarán la energía reflejada a diferentes intensidades en función de dónde se coloque el objeto. Por ejemplo, un fotodiodo del borde delantero del gesto recibirá inicialmente menos energía reflejada que un fotodiodo del borde posterior, lo que provoca que un fotodiodo tenga un valor de conteo más alto que el otro. La toma de mediciones en los diferentes puntos de la realización del gesto dará como resultado la detección por parte de los fotodiodos de diferentes intensidades reflejadas en los diferentes diodos. Este caudal de información direccional se puede analizar para determinar el gesto.

Por ejemplo, si un usuario deslizara la mano desde la parte superior del sensor hacia la parte inferior, el fotodiodo hacia abajo detectaría al comienzo del gesto una mayor luz de incidente reflejada que la del fotodiodo hacia arriba. A medida que se realiza el gesto, la mano se mueve hacia un punto donde ambos diodos reciben la misma cantidad de energía. A medida que se complete el gesto, el fotodiodo hacia abajo recibirá menos luz reflejada y el fotodiodo hacia arriba, más luz reflejada, lo que invierte la curva y la fase para los fotodiodos (Figura 2).

Gráfico de las curvas del fotodiodo del APDS-9960 de BroadcomFigura 2: El movimiento de un gesto hacia abajo genera en el APDS-9960 de Broadcom estas curvas de fotodiodos en las que la curva principal indica la dirección del gesto. (Fuente de la imagen: Broadcom)

Si se comprende cómo se generan los datos para un gesto, el siguiente paso es ver cómo establecer conexión con el APDS-9960.

Conexión con el controlador de gestos APDS-9960 de Broadcom

El APDS-9960 está disponible en un paquete de montaje en superficie de ocho pines (SMD-8) que ocupa un espacio mínimo en la placa de CI (Figura 3). El sensor mide solo 3.94 × 2.36 × 1.35 mm (milímetro). El paquete contiene los pines de potencia y masa normales junto con una interfaz I2C para una conexión digital a un microcontrolador y pines para personalizar los circuitos de controladores de led. El paquete también contiene un pin de interrupción para notificarle al microcontrolador que se observan de gestos disponibles para el procesamiento.

Imagen del APDS-9960 de Broadcom en un paquete compacto de montaje en superficie SMD-8Figura 3: El APDS-9960 está disponible en un paquete compacto de montaje en superficie SMD-8 que minimiza el espacio de la placa. (Fuente de la imagen: Broadcom)

Existen varias opciones diferentes disponibles para construir un prototipo e interactuar con el APDS-9960. Por ejemplo, la placa de evaluación APDS-9960 de SparkFun proporciona una placa de circuito impreso relativamente pequeña que incluye circuitos controladores de led, por lo que está lista para usarse (Figura 4). A fin de comenzar a desarrollar el software integrado, todo lo que un desarrollador debe hacer es soldar una cabecera en su lugar para conectar la potencia y la masa y conectar el bus I2C y el pin de interrupción opcional a un microcontrolador. La placa de SparkFun también incluye orificios de montaje para que se le pueda dar un diseño con facilidad en caso de que sea lógico el uso de una placa existente para la aplicación.

Imagen de la placa de evaluación APDS-9960 de SparkFunFigura 4: La placa de evaluación APDS-9960 de SparkFun tiene todos los circuitos integrados necesarios para comenzar con el control de gestos. (Fuente de la imagen: DigiKey)

Los desarrolladores también pueden usar la placa de circuito impreso APDS-9960 de Adafruit, que es otra solución todo en uno (Figura 5). La placa de circuito impreso de Adafruit es interesante porque no solo es pequeña, sino que también contiene un regulador incorporado de 3 voltios que se puede utilizar para alimentar circuitos adicionales tales como un led de potencia o incluso un microcontrolador de baja potencia. Además de eso, Adafruit les brinda a los desarrolladores una guía completa para el usuario de la placa de circuito impreso APDS9960 de Adafruit, junto con varias bibliotecas de software para la conexión a placas de Arduino o a las placas de desarrollo que ejecutan Python. Esto hace que el uso del APDS-9960 sea una gran experiencia lista para disfrutarse y pueda disminuir espectacularmente la cantidad de tiempo que le lleva a un desarrollador comenzar a usar el sensor.

Imagen de la placa de circuito impreso APDS-9960 de AdafruitFigura 5: La placa de circuito impreso APDS-9960 de Adafruit incluye el APDS-9960 junto con un regulador incorporado de 3 voltios y circuitos de transmisión de voltaje I2C para admitir buses de 3 voltios o 5 voltios. (Fuente de la imagen: DigiKey)

La forma más fácil de conectar cualquiera de estas placas de circuito impreso es soldar las cabeceras separables 22-28-4255 de Molex a las placas. Se hace mejor con las cabeceras hacia abajo para proporcionar varias ventajas. Primero, permite que la placa se conecte a un tablero de prueba como el kit de tableros de prueba sin soldadura 340-002-1 de Digilent (Figura 6). En segundo lugar, mantiene la superficie superior del tablero despejada, lo que proporciona suficiente espacio para que una mano haga gestos sin atrapar accidentalmente los cables que cuelgan de las cabeceras.

Imagen de la placa de circuito impreso APDS-9960 de AdafruitFigura 6: La placa de circuito impreso APDS-9960 de Adafruit soldada y preparada en un tablero de prueba sin soldadura Digilent. (Fuente de la imagen: Adafruit)

En este punto, la potencia y la masa deben conectarse, y las líneas I2C deben conectarse a la placa de desarrollo del microcontrolador deseada. Se puede usar cualquier placa de desarrollo con un microcontrolador. Sin embargo, una buena opción es el kit de STMicroelectronics B-L475E-IOT01A2 STM32L475 IoT Discovery para el nodo IoT (Figura 7). Esta placa de desarrollo tiene cabeceras Arduino y también es compatible con MicroPython, el cual se puede programar en la placa con un mínimo esfuerzo. Una vez hecho esto, los scripts de Python se pueden usar para comunicarse con el sensor de gestos, lo que hace que el control de gestos no solo sea factible, sino casi trivial.

Imagen del kit STM32L475 Discovery de STMicroelectronics para el nodo IoTFigura 7: El kit STM32L475 Discovery de STMicroelectronics para el nodo IoT incluye cabeceras Arduino que se pueden conectar fácilmente a las placas de circuito impreso APDS-9960. (Fuente de la imagen: STMicroelectronics)

Detección de gestos mediante el uso de Python

Obtener datos de gestos del APDS-9960 no es complicado, pero es necesario que un desarrollador lea detenidamente la hoja de datos. El APDS-9960 tiene varias capacidades distintas que incluyen las siguiente:

  • Detección de gestos
  • Detección de luz ambiental
  • Detección de color RGB
  • Detección de proximidad

Todos estos se controlan a través de una máquina de estado que se ejecuta en función de cómo estén configurados los registros para la aplicación. Por ejemplo, una gran técnica para evitar que el motor de gestos se ejecute todo el tiempo es utilizar el motor de detección de proximidad para detectar cuándo hay una mano presente. Una vez que la energía IR reflejada alcanza un recuento preestablecido, el estado del motor de proximidad pasará al motor de gestos, que medirá los fotodiodos direccionales y colocará el valor medido en un búfer primero en entrar, primero en salir (FIFO). Para habilitar esta capacidad, el registro de control debe configurarse para permitir la proximidad, y debe establecerse un umbral de recuento.

En función de los gestos que necesita la aplicación, un desarrollador puede necesitar escribir algoritmos para detectar gestos específicos. Sin embargo, para gestos comunes como arriba/abajo e izquierda/derecha, los desarrolladores pueden aprovechar la biblioteca Adafruit APDS-9960 CircuitPython. Después de copiar la biblioteca al dispositivo Python, se puede importar utilizando el código que se muestra en el Listado 1. Este código importa la biblioteca APDS-9960 junto con varias bibliotecas que admiten el bus I2C.

Copy import board import busio import adafruit_apds9960.apds9960   i2c = busio.I2C(board.SCL, board.SDA) sensor = adafruit_apds9960.apds9960.APDS9960(i2c) 

Listado 1: Lo importado por el CircuitPython y el código de inicialización de la biblioteca para interactuar con el controlador de gestos APDS-9960. (Fuente de la imagen: Adafruit)

El objeto sensor es una instancia de la biblioteca APDS-9960. Enseguida veremos que es muy fácil de usar. Para habilitar los gestos, un desarrollador solo necesita habilitar la característica de gestos usando el siguiente código:

Copy sensor.enable_gesture = True La configuración principal del bucle del programa para leer el gesto constituye solo unas pocas líneas de código (Listado 2).
gesture = sensor.gesture() while gesture == 0: gesture = sensor.gesture() print('Saw gesture: {0}'.format(gesture)) 

Listado 2: Detectar un gesto es tan simple como hacer la llamada a un único método de biblioteca de forma repetida. (Fuente de la imagen: Adafruit)

Como notará al leer este código, si se ve un gesto, el gesto detectado se imprimirá en la pantalla (Figura 8).

Imagen de un ejemplo del resultado de salida de gestos de la biblioteca Adafruit APDS-9960 CircuitPythonFigura 8: Ejemplo del resultado de salida de gestos de la biblioteca Adafruit APDS-9960 CircuitPython. (Fuente de la imagen: Adafruit)

La salida de gestos está dada por un número, que se puede convertir fácilmente con las siguientes referencias:

0 = no se detectó ningún gesto

1 = gesto hacia arriba detectado

2 = gesto hacia abajo detectado

3 = gesto hacia la izquierda detectado

4 = gesto hacia la derecha detectado

Como se muestra, aprovechar una biblioteca preexistente puede facilitar el reconocimiento básico de gestos utilizando solo unas pocas líneas de código. Los gestos más complejos requerirán modificar la biblioteca para analizar los datos de gestos sin procesar.

Consejos y trucos para crear un controlador de gestos

La construcción y la integración de un sensor de control de gestos en un producto presentan algunos desafíos. Aquí hay una serie de consejos y trucos que los desarrolladores deben tener en cuenta al trabajar con controladores de gestos basados en infrarrojo:

  • Use el detector de proximidad interno del sensor de gestos para activar el motor de control de gestos y así minimizar los inicios de gestos que no son válidos.
  • Comience con una biblioteca de gestos existente y cree gestos adicionales por encima de las capacidades ya existentes.
  • Ajuste la ganancia en los fotodiodos a valores que mejor se adapten a la aplicación de gesto final.
  • Establezca la intensidad del controlador de salida led en los valores que mejor se adapten a la aplicación. Esto puede requerir algunas modificaciones para obtener resultados repetibles.
  • Un desarrollador debería comenzar el desarrollo de cualquier aplicación de gestos con un desarrollo de software de alto nivel hasta comprender el sensor y luego pasar a un código de nivel inferior.

Estos consejos garantizarán la reducción del tiempo que los desarrolladores le dedican a la puesta en funcionamiento de un controlador de gestos IR.

Conclusión

Hay un empuje constante a comenzar a interactuar con las máquinas de una manera más natural e intuitiva, y una de las principales opciones es utilizar la tecnología de control de gestos. Si bien existen muchos tipos diferentes de tecnologías de control de gestos, la de más bajo costo y más fácil de trabajar es la de un sensor de gestos basado en infrarrojo. Como se muestra, la integración de un sensor de gestos con un microcontrolador no necesita ser una actividad que requiera mucho tiempo, siempre y cuando los desarrolladores aprovechen las tecnologías de hardware y software ya existentes.

DigiKey logo

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.

Información sobre el autor

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo es un consultor de software integrado que actualmente trabaja con clientes en más de una docena de países para transformar drásticamente sus negocios mejorando la calidad del producto, el costo y el tiempo de comercialización. Ha publicado más de 200 artículos sobre técnicas de desarrollo de software embebido, es un conferenciante y entrenador técnico muy solicitado y tiene tres títulos que incluyen una Maestría en Ingeniería de la Universidad de Michigan. No dude en ponerse en contacto con él en jacob@beningo.com, en su sitio web www.beningo.com, y suscríbase a su boletín mensual Embedded Bytes Newsletter.

Información sobre la editorial

Editores de DigiKey de América del Norte