Reading Time: proyecto completo y real de Machine Learning con Arduino Nano BLE 33

Machine Learning con Arduino BLE 33 Sense

Machine Learning es una rama de la inteligencia artificial responsable de que las máquinas realicen tareas sin estar expresamente programadas para ese fin. En su lugar se recopilan datos y se los clasifica. Luego se le informa a la máquina “todo esto es X”, “todo esto es Y” y se proveen nuevos datos no utilizados en el entrenamiento para realizar inferencias y acciones consecuentes. Es una simplificación extrema, pero sirve como introducción.

¿Es posible utilizar Machine Learning en un proyecto REAL con Arduino? Absolutamente y de hecho existe una placa llamada Arduino Nano 33 BLE, diseñada entre otras cosas para este fin. Arduino Nano 33 BLE trae procesador Nina b3, varios sensores, clock de 64MHZ, 1MB Flash, 256K SRAM, es decir que tiene recursos lo suficientemente potente para implementar Machine Learning de manera autónoma, sin conexión al cloud.

Ahora bien ¿es sencillo implementar Machine Learning con Arduino? La tecnología está en un punto donde la complejidad comienza a ceder pero aún requiere varios pasos y el manejo de distintas areas.

Reading Time: tiempo de lectura para libros de papel

Después de evaluar varios ejemplos con Arduino BLE 33 Sense y Machine Learning decidí llevar a cabo un dispositivo un poco extravagante, pero completo que integre la placa Arduino BLE, una pantalla Oled, un potenciómetro y un gabinete a medida.

El dispositivo se llama Reading Time y su propósito es determinar el tiempo restante de lectura para un libro en papel, tal como hace el Kindle.

El Arduino BLE fue previamente entrenado para detectar los sonidos de hojas y es capaz de determinar la posición actual de lectura y el tiempo restante apenas “escuchando” las hojas cuando son pasadas. De más está decir que pasar una hoja no suena siempre igual y acá es donde se aplica el fascinante mundo del Machine Learning. De hecho, el dispositivo no se confunde con otros sonidos del mismo volumen como puede ser una silla moviéndose o un llamado del Gobierno de la Ciudad para recordarte de pagar el ABL.

Entrenamiento de la red neuronal

Para capturar los sonidos y entrenar la red fue utilizada una interesante plataforma gratuita llamada Edge Impulse, compatible con Arduino BLE 33.

Edge Impulse

La plataforma simplifica muchas de las tareas relacionadas a un proyecto de este tipo como cortar el audio, rebalancear sets, aplicar MFCC, Neural Network Classifier y testear el accuracy.

En este caso se grabaron 5 minutos de audio con hojas siendo pasadas y 5 minutos de sonido base de lectura. Los sonidos se cortaron y se empezó el entrenamiento modificando los settings y buscando un nivel aceptable de accuracy.

Una vez que se verificó el funcionamiento teórico, se exportó desde Edge Impulse el código base en C++ para Arduino y sobre este código se trabajó para agregar la pantalla, la lectura análoga del potenciómetro y otros detalles de lógica del proyecto.

Probando el proyecto de Machine Learning con Arduino

Estado del proyecto

Los detalles y circuitos estan publicados en Hackster.

El código del Reading Time con Arduino BLE 33 y TinyML en Github

El gabinete en Thingiverse.

Gabinete en Fusion 360

Demo del Reading Time con Machine Learning para Arduino Nano BLE 33

Strange machines department