TP IHMA : prototypage hardware
Dans ce TP vous allez réaliser un contrôleur gestuel à l'aide d'une carte Nucleo144 F446ZE et d'un IMU ICM 20649. Cette carte est basée sur un microcontrôleur STM32F446. Consultez les datasheets correspondantes.

L'ensemble des documentations est disponible ici.

Table des Matières

Installation

Assurez-vous d'avoir la version 2 de l'Arduino ou supérieure. Il faut ensuite ajouter la source :

https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
dans les paramètres
Additional boards manager URLs
. Ensuite installez
STM32 MCU based boards
. Vous pouvez ensuite configurer la carte après l'avoir banchée dans le menu
Outils
.

Testez avec ce code minimal, la led bleue doit s'allumer :

void setup() { pinMode(PB7, OUTPUT); } void loop() { digitalWrite(PB7, HIGH); }

Utilisation de l'IMU

Nous allons utiliser un Inertial measurement unit (IMU), qui est un ensemble de capteurs (accéléromètre, gyroscope, et thermomètre). Il se présente sous la forme d'une puce nommée ICM 20649 montée sur une petite carte. La documentation explique son fonctionnement, son installation et fournit un exemple sur lequel vous pouvez vous baser. La carte communique avec votre microcontrôleur avec un bus I2C. Le branchement est le suivant :

Branchement de l'IMU

Application

Notre objectif sera de contrôler une application web à l'aide de mouvements de la carte. Pour cela vous devez envoyer les données de l'accéléromètre et du gyroscope par le port série.

Côté application web, vous devez créer un backend NodeJS qui va récupérer les données du port série avec la librairie serialport. Pour installer NodeJS sur les ordinateurs du M5 il faut suivre ce tutoriel.

Pour le frontend, vous devrez afficher un objet 3D avec la librairie threejs et le faire tourner avec les données du gyroscope, et afficher un vecteur pour l'accélération.

Vous pourrez aussi afficher les courbes en temps réel (comme le serial plotter d'Arduino) pour chaque axe de l'accéléromètre et du gyroscope à l'aide de la librairie d3js.