Varita mágica con IA con TensorFlow Lite para microcontroladores y Arduino

1. Introducción

Qué compilarás

En este codelab, aprenderemos a usar TensorFlow Lite para microcontroladores para ejecutar un modelo de aprendizaje profundo en Arduino Nano 33 BLE. El usuario convierte el microcontrolador en una "varita mágica" digital para agitarla y lanzar una variedad de hechizos. A medida que el usuario mueve la varita, estos datos complejos y multidimensionales del sensor, que serían indescifrables para un humano, se pasan como entrada al modelo, que genera una clasificación simple que nos alerta si se produjo uno de varios movimientos.

9208eb1207211349.gif

Aprendizaje automático en microcontroladores

El aprendizaje automático se puede usar para crear herramientas inteligentes que faciliten la vida de los usuarios, como el Asistente de Google. Sin embargo, a menudo, estas experiencias requieren mucha computación o recursos que pueden incluir un potente servidor en la nube o una computadora de escritorio. Ahora, es posible ejecutar la inferencia de aprendizaje automático en hardware pequeño y de baja potencia, como los microcontroladores.

Los microcontroladores son muy comunes, económicos, requieren muy poca energía y son muy confiables. Forman parte de todo tipo de dispositivos domésticos: electrodomésticos, autos y juguetes. De hecho, cada año se producen alrededor de 30 mil millones de dispositivos con microcontroladores.

1914a419dfacf0b5.jpeg

Con la incorporación del aprendizaje automático en pequeños microcontroladores, podemos potenciar la inteligencia de millones de dispositivos que usamos en nuestra vida, sin depender de hardware costoso ni de una conexión a Internet estable. Imagina electrodomésticos inteligentes que se adapten a la rutina diaria, sensores industriales inteligentes que entiendan la diferencia entre los problemas y el funcionamiento normal, y juguetes mágicos que puedan ayudar a los niños a aprender de formas divertidas y agradables.

TensorFlow Lite para microcontroladores (software)

864114d0c2b4c919.png

TensorFlow es el framework de aprendizaje automático de código abierto de Google para entrenar y ejecutar modelos. TensorFlow Lite es un framework de software, una versión optimizada de TensorFlow, diseñada para ejecutar modelos de TensorFlow en dispositivos pequeños y de potencia relativamente baja, como teléfonos celulares.

TensorFlow Lite para microcontroladores es un framework de software, una versión optimizada de TensorFlow, diseñada para ejecutar modelos de TensorFlow en hardware pequeño y de baja potencia, como los microcontroladores. Se adhiere a las restricciones requeridas en estos entornos incorporados, es decir, tiene un tamaño de objeto binario pequeño, no requiere compatibilidad con el sistema operativo, ninguna biblioteca C o C++ estándar, ni asignación de memoria dinámica, etcétera.

Arduino Nano 33 BLE (hardware)

bcd452d4d660efa9.jpeg

Arduino es una plataforma popular de código abierto que se usa para crear proyectos electrónicos. Consta de lo siguiente:

  1. Una placa de circuito programable física (a menudo, un microcontrolador), como Arduino Nano 33 BLE que se usa en este codelab
  2. El IDE de Arduino (entorno de desarrollo integrado), software que se usa para escribir y subir código de computadora a la placa física

Arduino Nano 33 BLE es una plataforma basada en microcontroladores: una computadora pequeña en una sola placa de circuito. Tiene un procesador, memoria y hardware de E/S que le permite enviar y recibir señales digitales a otros dispositivos. A diferencia de una computadora, un microcontrolador no es potente y, por lo general, no ejecuta un sistema operativo. En cambio, tienen procesadores pequeños, no mucha memoria y los programas que escribes se ejecutan directamente en el hardware. Sin embargo, debido a que están diseñados para ser lo más simples posible, un microcontrolador puede usar muy poca energía.

Actividades

  • Configura el microcontrolador Arduino Nano 33 BLE y conviértelo en una "varita mágica" digital.
  • Configura el IDE de Arduino y instala las bibliotecas requeridas.
  • Implementa el programa en el dispositivo.
  • Lanza una variedad de hechizos agitando la varita mágica y mira las predicciones.

Requisitos

2. Configura el microcontrolador Arduino

Desempaca tu Arduino

Quítalo de la caja y sácalo de la espuma de embalaje. Es conductivo y puede causar problemas.

6ed84a651c871a58.jpeg

Conéctalo a tu laptop

  • Conecta el cable micro USB a la toma del chip.
  • Conecta el otro extremo del cable a una toma USB de tu laptop.
  • El LED inferior izquierdo de Arduino (superior izquierdo en la imagen de abajo) debería encenderse.

c6936696f9659104.jpeg

Familiarízate con el flujo de trabajo

99852afbed7e78b0.png

Como se muestra en el diagrama anterior, el intérprete de TFLite en Arduino ejecuta la inferencia en el modelo de forma periódica. El modelo usa los datos procesados del acelerómetro como entrada y genera una predicción que sugiere el gesto que probablemente ocurrió. Además, se imprimirá un resultado deseado y se encenderán los LEDs correctos.

3. Configura el IDE de Arduino

1. Descarga el IDE de Arduino

Para implementar el programa en el microcontrolador Arduino, usamos el IDE de Arduino.

Después de descargarlo, instala y abre el IDE de Arduino haciendo clic en la aplicación cuyo ícono se ve así: 75717f13527f36b9.png

La página de destino inicial se abrirá de la siguiente manera:

933c91e6e1997c61.png

2. Configura el administrador de placas

  1. En el menú de Arduino, selecciona Tools -> Board: "Arduino .." —> Boards Manager
  2. Busca "Arduino Nano 33 BLE" y, luego, instala Arduino nRF528x Boards (Mbed OS). Esto garantizará que el IDE de Arduino admita nuestro microcontrolador Arduino Nano 33 BLE. 817c63346152eda9.png
  1. En el menú de Arduino, selecciona Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE".

9357691e1a1348eb.png

  1. Por último, verifica que la placa seleccionada sea "Arduino Nano 33 BLE" en la parte inferior derecha del IDE.

aa08706bb84fa9b2.png

3. Configura el puerto

En el menú de Arduino, selecciona Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). Deberías ver un resultado similar a este:

8c25990d0c6fb6f8.png

4. Verifica la conexión de la placa

En el menú de Arduino, selecciona Tools -> Get Board Info. Deberías ver un resultado similar a este:

ccd8f5305be6cf59.png

4. Instala bibliotecas

1. Biblioteca de Arduino de TensorFlow

Esta biblioteca contiene todos los ejemplos de TensorFlow Lite para microcontroladores, incluido el código fuente de la varita mágica que se requiere para este codelab.

  1. En el menú de Arduino, selecciona Sketch -> Include Library -> Add .ZIP Library....
  2. Agrega la biblioteca de Arduino de TensorFlow .zip que descargaste.

2. Biblioteca de Arduino de LSM9DS1

Esta biblioteca te permite leer los valores del acelerómetro, el magnetómetro y el giroscopio de la IMU LSM9DS1 en tu Arduino Nano 33 BLE Sense.

  1. En el menú de Arduino, selecciona Sketch -> Include -> Manage Libraries...
  2. Busca e instala "Arduino_LSM9DS1". ac2f78a737c5f233.png

5. Carga y compila el ejemplo

1. Carga el ejemplo

En el menú de Arduino, selecciona File -> Examples -> Arduino_TensorFlowLite -> magic_wand para cargar el código de muestra.

de349f2d3cb49b98.png

Se cargará el código fuente de la varita mágica.

cda8c35a597b0798.png

2. Compila el ejemplo

Haz clic en el botón Upload en la ventana de boceto.

71cb1474d5e14669.png

Después de unos minutos, deberías ver texto rojo que indica que se completó el parpadeo. Durante la carga, el LED derecho debe parpadear y, luego, oscurecerse al final.

3df1d0858c6e40a4.png

6. Demostración

Actualmente, la varita mágica puede detectar 3 gestos, como se muestra a continuación: 99a607da66af9fc8.png

  1. Wing: Comienza desde la esquina superior izquierda y traza con cuidado la letra "W" durante dos segundos.
  2. Anillo: Comienza en posición vertical y mueve la varita en un círculo en el sentido de las manecillas del reloj durante un segundo.
  3. Slope: Comienza sosteniendo la varita hacia arriba, con los LEDs hacia ti. Mueve la varita hacia abajo en una inclinación hacia la izquierda y, luego, horizontalmente hacia la derecha durante un segundo.

En la siguiente imagen, se muestran dos gestos. Primero, una pendiente y, luego, un ala (usa esto como referencia para tu demostración).

9208eb1207211349.gif

Para ejecutar la demostración, sigue las instrucciones que se indican a continuación:

  1. Con el USB conectado, selecciona Tools -> Serial Monitor en el menú de Arduino. Inicialmente, se abrirá una pantalla en blanco sin salida.

38e8d53652eb28f2.png

  1. Mueve el microcontrolador Arduino para trazar cada una de las formas anteriores con cuidado y ver si el monitor serial detecta el gesto.

60b8a0017bcae419.png

  1. En el resultado del monitor serial, notamos que la varita mágica detectó todas las formas. También notarás que se enciende el LED derecho.

7. Próximos pasos

Felicitaciones, creaste correctamente tu primera "varita mágica" que reconoce gestos en un microcontrolador Arduino.

Esperamos que hayas disfrutado de esta breve introducción al desarrollo con TensorFlow Lite para microcontroladores. La idea del aprendizaje profundo en microcontroladores es nueva y emocionante, y te recomendamos que salgas y experimentes.

Documentos de referencia

647c3ef0dc103804.png

Gracias y diviértete compilando.