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.

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.

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)

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)

Arduino es una plataforma popular de código abierto que se usa para crear proyectos electrónicos. Consta de lo siguiente:
- Una placa de circuito programable física (a menudo, un microcontrolador), como Arduino Nano 33 BLE que se usa en este codelab
- 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
- Laptop con Linux, MacOS o Windows
- Arduino Nano BLE Sense 33 (sin encabezados)
- Cable micro USB (si tienes una laptop USB-C, obtén un cable USB-C a micro USB)
- (opcional) Palo de aproximadamente 30 cm de largo
- (opcional) Cinta adhesiva
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.

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.

Familiarízate con el flujo de trabajo

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í: 
La página de destino inicial se abrirá de la siguiente manera:

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

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

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:

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:

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.
- En el menú de Arduino, selecciona
Sketch -> Include Library -> Add .ZIP Library.... - Agrega la biblioteca de Arduino de TensorFlow
.zipque 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.
- En el menú de Arduino, selecciona
Sketch -> Include -> Manage Libraries... - Busca e instala
"Arduino_LSM9DS1".
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.

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

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

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.

6. Demostración
Actualmente, la varita mágica puede detectar 3 gestos, como se muestra a continuación: 
- Wing: Comienza desde la esquina superior izquierda y traza con cuidado la letra "W" durante dos segundos.
- 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.
- 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).

Para ejecutar la demostración, sigue las instrucciones que se indican a continuación:
- Con el USB conectado, selecciona
Tools -> Serial Monitoren el menú de Arduino. Inicialmente, se abrirá una pantalla en blanco sin salida.

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

- 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
- Entrena tu propio modelo ahora que tienes experiencia trabajando con el programa básico.
- Obtén más información sobre TensorFlow Lite para microcontroladores ( sitio web, GitHub).
- Prueba otros ejemplos y ejecútalos en Arduino, si es compatible.
- Prueba el otro codelab: IA en un microcontrolador con TensorFlow Lite y SparkFun Edge
- Consulta el libro de O'Reilly TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers, que presenta el aprendizaje automático en dispositivos pequeños y explica varios proyectos divertidos. Este codelab se basa en el Capítulo 11 de este libro.

Gracias y diviértete compilando.