1. Introduction
Objectifs de l'atelier
Dans cet atelier de programmation, nous allons apprendre à utiliser TensorFlow Lite for Microcontrollers pour exécuter un modèle de deep learning sur l'Arduino Nano 33 BLE. L'utilisateur transforme le microcontrôleur en "baguette magique" numérique pour agiter et lancer différents sorts. Lorsque l'utilisateur déplace la baguette, ces données de capteur complexes et multidimensionnelles, qui seraient indéchiffrables pour un humain, sont transmises en entrée au modèle, qui génère une classification simple nous alertant si l'un des mouvements a eu lieu.

Machine learning sur microcontrôleurs
Le machine learning peut être utilisé pour créer des outils intelligents qui facilitent la vie des utilisateurs, comme l'Assistant Google. Cependant, ces expériences nécessitent souvent beaucoup de calculs ou de ressources, qui peuvent inclure un serveur cloud puissant ou un ordinateur de bureau. Il est désormais possible d'exécuter l'inférence de machine learning sur du matériel minuscule et à faible consommation d'énergie, comme les microcontrôleurs.
Les microcontrôleurs sont extrêmement courants, peu coûteux, nécessitent très peu d'énergie et sont très fiables. Ils sont intégrés à toutes sortes d'appareils ménagers : électroménager, voitures et jouets, par exemple. En fait, environ 30 milliards d'appareils alimentés par microcontrôleur sont produits chaque année.

Le fait d'exécuter le machine learning sur de très petits microcontrôleurs nous permet d'augmenter l'intelligence de milliards d'appareils utilisés au quotidien, sans être tributaires de matériel Internet onéreux ou de la fiabilité des connexions. Imaginez des appareils électroménagers connectés capables de s'adapter à vos habitudes quotidiennes, des capteurs industriels intelligents capables de faire la différence entre un problème et un fonctionnement normal, ou encore des jouets magiques qui aident les enfants à apprendre tout en s'amusant.
TensorFlow Lite for Microcontrollers (logiciel)

TensorFlow est le framework de machine learning Open Source de Google pour l'entraînement et l'exécution de modèles. TensorFlow Lite est un framework logiciel, une version optimisée de TensorFlow, conçue pour exécuter des modèles TensorFlow sur des appareils petits et relativement peu puissants, tels que les téléphones mobiles.
TensorFlow Lite for Microcontrollers est un framework logiciel, une version optimisée de TensorFlow, conçue pour exécuter des modèles TensorFlow sur du matériel minuscule et à faible consommation d'énergie, tel que les microcontrôleurs. Il respecte les contraintes requises dans ces environnements intégrés, c'est-à-dire qu'il a une petite taille binaire, ne nécessite aucune compatibilité avec le système d'exploitation, aucune bibliothèque C ou C++ standard, ni d'allocation de mémoire dynamique, etc.
Arduino Nano 33 BLE (matériel)

Arduino est une plate-forme Open Source populaire utilisée pour créer des projets électroniques. Elle se compose des éléments suivants :
- Une carte de circuit imprimé physique programmable (souvent un microcontrôleur), telle que l'Arduino Nano 33 BLE utilisée dans cet atelier de programmation.
- L'IDE Arduino (environnement de développement intégré), un logiciel utilisé pour écrire et importer du code informatique sur la carte physique.
Arduino Nano 33 BLE est une plate-forme basée sur un microcontrôleur : un petit ordinateur sur une seule carte de circuit imprimé. Il dispose d'un processeur, d'une mémoire et d'un matériel d'E/S qui lui permettent d'envoyer et de recevoir des signaux numériques vers d'autres appareils. Contrairement à un ordinateur, un microcontrôleur n'est pas puissant et n'exécute généralement pas de système d'exploitation. Au lieu de cela, il dispose de petits processeurs, de peu de mémoire et les programmes que vous écrivez s'exécutent directement sur le matériel. Toutefois, comme ils sont conçus pour être aussi simples que possible, un microcontrôleur peut consommer très peu d'énergie.
Objectifs de l'atelier
- Configurer le microcontrôleur Arduino Nano 33 BLE et le transformer en "baguette magique" numérique
- Configurer l'IDE Arduino et installer les bibliothèques requises
- Déployer le programme sur l'appareil
- Lancer différents sorts en agitant la baguette magique et afficher les prédictions
Prérequis
- Ordinateur portable Linux, MacOS ou Windows
- Arduino Nano BLE Sense 33 (sans connecteurs)
- Câble micro USB (si vous utilisez un ordinateur portable USB-C, procurez-vous plutôt un câble USB-C vers micro USB)
- (facultatif) Bâton d'environ 30 cm de long
- (facultatif) Ruban adhésif
2. Configurer le microcontrôleur Arduino
Déballer votre Arduino
Retirez-le de la boîte et de la mousse de protection. Il est conducteur et peut causer des problèmes dans le cas contraire.

Branchez-le à votre ordinateur portable
- Branchez le câble micro USB dans la prise de la puce.
- Branchez l'autre extrémité du câble dans une prise USB de votre ordinateur portable.
- La LED en bas à gauche de l'Arduino (en haut à gauche de l'image ci-dessous) doit s'allumer.

Familiarisez-vous avec le workflow

Comme illustré dans le schéma ci-dessus, l'interpréteur TFLite de l'Arduino exécute périodiquement l'inférence sur le modèle. Le modèle utilise les données de l'accéléromètre traitées comme entrée et génère une prédiction qui suggère le geste le plus probable. De plus, une sortie souhaitée est imprimée et les LED appropriées s'allument.
3. Configurer l'IDE Arduino
1. Télécharger l'IDE Arduino
Pour déployer le programme sur le microcontrôleur Arduino, nous utilisons l'IDE Arduino.
Après l'avoir téléchargé, installez et ouvrez l'IDE Arduino en cliquant sur l'application dont l'icône ressemble à ceci : 
La page de destination initiale s'ouvre comme suit :

2. Configurer le gestionnaire de cartes
- Dans le menu Arduino, sélectionnez
Tools -> Board: "Arduino .." —> Boards Manager. - Recherchez
"Arduino Nano 33 BLE"et installezArduino nRF528x Boards (Mbed OS). Cela garantit que notre microcontrôleur Arduino Nano 33 BLE est compatible avec l'IDE Arduino.
- Dans le menu Arduino, sélectionnez
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE".

- Enfin, vérifiez que la carte sélectionnée est "Arduino Nano 33 BLE" en bas à droite de l'IDE.

3. Configurer le port
Dans le menu Arduino, sélectionnez Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). Le résultat doit ressembler à ceci :

4. Vérifier la connexion de la carte
Dans le menu Arduino, sélectionnez Tools -> Get Board Info. Le résultat doit ressembler à ceci :

4. Installer des bibliothèques
1. Bibliothèque Arduino TensorFlow
Cette bibliothèque contient tous les exemples de TensorFlow Lite for Microcontrollers, y compris le code source de la baguette magique requis pour cet atelier de programmation.
- Dans le menu Arduino, sélectionnez
Sketch -> Include Library -> Add .ZIP Library.... - Ajoutez la bibliothèque Arduino TensorFlow
.zipque vous avez téléchargée.
2. Bibliothèque Arduino LSM9DS1
Cette bibliothèque vous permet de lire les valeurs de l'accéléromètre, du magnétomètre et du gyroscope de l'IMU LSM9DS1 sur votre Arduino Nano 33 BLE Sense.
- Dans le menu Arduino, sélectionnez
Sketch -> Include -> Manage Libraries.... - Recherchez et installez
"Arduino_LSM9DS1".
5. Charger et compiler l'exemple
1. Charger l'exemple
Dans le menu Arduino, sélectionnez File -> Examples -> Arduino_TensorFlowLite -> magic_wand pour charger l'exemple de code.

Le code source de la baguette magique est alors chargé.

2. Compiler l'exemple
Cliquez sur le bouton Upload dans la fenêtre de croquis.

Après quelques minutes, un texte rouge indiquant que le flashage est terminé doit s'afficher. Pendant l'importation, la LED de droite doit clignoter, puis s'éteindre à la fin.

6. Démo
La baguette magique peut actuellement détecter trois gestes, comme illustré ci-dessous : 
- Aile : commencez en haut à gauche et tracez soigneusement la lettre "W" pendant deux secondes.
- Anneau : commencez en position verticale et déplacez la baguette dans un cercle dans le sens des aiguilles d'une montre pendant une seconde.
- Pente : commencez par tenir la baguette vers le haut, les LED vers vous. Déplacez la baguette vers le bas en l'inclinant vers la gauche, puis horizontalement vers la droite pendant une seconde.
L'image suivante illustre deux gestes. Tout d'abord, une pente, puis une aile (utilisez-la comme référence pour votre démo).

Pour exécuter la démo, suivez les instructions ci-dessous :
- Une fois l'USB branché, sélectionnez
Tools -> Serial Monitordans le menu Arduino. Un écran vide s'ouvre initialement sans aucune sortie.

- Déplacez le microcontrôleur Arduino pour tracer soigneusement chacune des formes ci-dessus et vérifiez si le moniteur série détecte le geste.

- Dans la sortie du moniteur série, nous constatons que la baguette magique a bien détecté toutes les formes. Vous remarquerez également que la LED de droite s'allume.
7. Étapes suivantes
Félicitations, vous venez de créer votre première "baguette magique" de reconnaissance de gestes sur un microcontrôleur Arduino.
Nous espérons que cette brève présentation du développement avec TensorFlow Lite for Microcontrollers vous a plu. L'idée du deep learning sur les microcontrôleurs est nouvelle et passionnante. Nous vous encourageons à vous lancer et à expérimenter.
Documents de référence
- Entraînez votre propre modèle maintenant que vous avez de l'expérience avec le programme de base.
- En savoir plus sur TensorFlow Lite for Microcontrollers ( site Web, GitHub)
- Essayez d'autres exemples et exécutez-les sur l'Arduino, s'il est compatible.
- Essayez l'autre atelier de programmation : IA sur un microcontrôleur avec TensorFlow Lite et SparkFun Edge
- Consultez le livre O'Reilly TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers (TinyML : machine learning avec TensorFlow sur Arduino et microcontrôleurs à très faible consommation d’énergie), qui présente le machine learning sur de petits appareils et décrit plusieurs projets amusants. Cet atelier de programmation est basé sur le chapitre 11 de ce livre.

Merci et amusez-vous bien.