La programmation va se découper en deux parties :
A - Programmation de votre finger starter
B - Programmation de la main complète
Une interface homme machine IHM permet à un utilisateur de commander un système et contrôler son état sans avoir à accéder au programme de ce système, éventuellement en étant à distance, à travers un écran par exemple.
Le programme à élaborer devra permettre de :
Contrôler le finger starter par :
des sprites
les touches du clavier de l'ordinateur
un bouton physique
Visualiser le mouvement du doigt sur l'ordinateur
Vous allez avoir besoin de votre finger starter monté et connecté avec :
Une carte Arduino UNO
Le servo-moteur connecté sur une broche digitale (Dx)
Un joystick monté sur une broche analogique (Ax)
Le câble USB
Option : une alimentation externe pour la carte Arduino (pile ou alimentation secteur)
Le programmation se fera sur la plateforme en ligne mBlock.
⚠ Si ce n'est pas déjà fait, connectez-vous avec votre compte Google afin de pouvoir sauvegarder vos programmes en ligne.
Connectez la carte Arduino au PC avec le câble USB
Choississez l'option de connexion "Série"
Cliquez sur "Connecter"
Sélectionner l'option "USB Serial Port COM X" où X est un numéro quelqueconque
Un message "Connecté !" doit s'afficher quelques instants
Vous allez réaliser un programme simple qui plie et déplie le doigt automatiquement :
Ecrire l'algorithme d'un programme permettant de :
Plier le doigt puis attendre 1 secondes, déplier le doigt, attendre 1 seconde
Recommencer cela une 2eme fois
Reproduire cet algorithme dans mBlock et l'enregistrer comme "FingerStarter simple"
L'angle du doigt tendu est autour de 45° (⚠ à avoir bien placé la poulie lors du montage!!)
L'angle du doigt déplié est autour de 135°
Téléverser ce programme sur la carte et tester
Adapter les angles pour le doigt s'ouvre et se ferme correctement
Dans la suite, nous allons élaborer l'Interface Homme Machine (IHM) indiqué dans l'introduction de cette partie.
▶Le modèle d'IHM avec les éléments essentiels est accessible sur ce lien et via le bouton ci-contre (Merci M Losfeld).
Une fois le modèle ouvert cliquer sur "Remixer" pour l'enregistrer et commencer les modifications.
Dans mBlock vous aurez besoin de :
Un arrière-plan (déjà fourni)
Un « objet/lutin » statique Doigt ayant deux « costumes » possibles (tendu ou plié)
Deux « objets/lutins » statiques à choisir, l'un symbolisant un poing fermé, l'autre l'index tendu
Deux variables (attention à bien sélectionner "Pour tous les objets" lors de la création des variables) :
"Tendu / Plié" : indique l’état du doigt
"Joystick" : indique la valeur renvoyée par le joystick connecté.
⚠️ Vous allez programmer en mode LIVE sur la carte Arduino ⚠️
Une mise à jour du firmware de la carte Arduino sera peut-être nécessaire.
Nous allons d'abord programmer la carte Arduino pour que le doigt puisse se plier et se déplier en fonction de la valeur de la variable Tendu/Plié. On verra dans les étapes suivantes comment changer la valeur de cette variable.
Au lancement du programme (drapeau vert), le doigt bougera en fonction de la valeur de la variable "Tendu / Plié". Voici l'algorithme du programme à réaliser dans cette étape :
Lorsque la variable Tendu/Plié prend la valeur 1, le doigt prend la position tendue.
Lorsque la variable Tendu/Plié prend la valeur 0, le doigt prend la position pliée.
▶ Dans le programme principal (lancement par le drapeau), coder cet algorithme avec les blocs appropriés. N'oubliez pas le "Pour toujours" !
Un appui sur la flèche haut du clavier provoque :
l’apparition du doigt en position tendue sur l’IHM (changement de costume)
le changement de la variable Tendu/plié qui passe à 1
Un appui sur la flèche bas du clavier provoque :
l’apparition du doigt en position repliée sur l’IHM (changement de costume)
le changement de la variable Tendu/Plié qui passe à 0
Un clic sur l’objet représentant l’index tendu provoque :
l’apparition du doigt en position tendue sur l’IHM (changement de costume)
le changement de la variable Tendu/plié qui passe à 1
Un clic sur l’objet représentant l’index plié provoque :
l’apparition du doigt en position repliée sur l’IHM (changement de costume)
le changement de la variable Tendu/Plié qui passe à 0
Connectez un joystick avec un câble grove sur un des connecteurs analogiques (Ax) de la carte Arduino (où x sera le numéro à utiliser dans le programme)
La variable Joystick prend la valeur analogique lue sur le joystick connecté (utiliser le bloc approprié, cf image ci-contre)
La variable Joystick peut prendre des valeurs entre 0 et 1023 : faites des tests et déterminez la valeur (ou l'intervalle de valeurs) renvoyée lorsque l'on appuie sur le joystick
A programmer :
Si le joystick est pressé, la variable Tendu/Plié prend la valeur 0
Tester l'utilisation de toutes les options de votre programme complet
Observations :
La fermeture et l'ouverture du doigt peut être actionnée avec le clavier ou la souris.
La fermeture du doigt peut être commandée par le joystick
Le sprite "doigt" affiche correctement l'état du finger starter
Vous allez programmer tout d'abord des mouvements simples pour la main complète
puis des programmes permettant des combinaisons de ces mouvements.
La main sera pilotée par une carte Arduino MEGA.
Elle se programme avec mBlock (lancer pour cela mLink d'abord)
Pas d'extension particulière nécessaires pour le servo-moteur
Vous aurez besoin de connectique "Dupont" pour connecter le servo-moteur à la carte :
Le fil rouge correspond au 5V
Le fil marron correspond au GND
Le fil jaune correspond aux données : une des broches entre D2 à D8.
Paramétrage à utiliser :
Pouce = broche 2
Index = broche 3
Majeur = broche 4
Annulaire = broche 5
Auriculaire = broche 6
Poignet = broche 7
Angles :
Main fermée ✊ : 0°
Main ouverte ✋: 90° à 110°
Poignet : 0° = à plat; 20° = légère rotation
Cette partie vous permet d'avoir un premier programme pour faire des mouvements simples :
Fermer le poing (✊)
Ouvrir le poing (🖐)
Pointer du doigt (☝️)
Faire le signe "ciseau" (✌️)
Le programme comprendra une partie IHM (Interface Homme Machine), c'est à dire que l'utilisateur.rice doit pouvoir interagir avec la main par l'intermédiaire du programme. Vous allez donc programmer :
Des sprites qui permettront d'interagir avec l'utilisateur
Un programme principal qui s'exécutera sur l'objet "Arduino Méga 2560"
Le lien entre sprite et programme se fera SOIT par l'envoi de "message", SOIT par une variable (comme dans la partie A).
Utilisez le modèle de programme mis à votre disposition ci-contre pour démarrer ==> ==>
💡 L'utilisation du mode "LIVE" vous permettra d'avoir une IHM interactive.
⚠️ Pour avoir tous les blocs nécessaires, il faudra que la carte programmable soit connectée.
Créer 4 blocs personnalisés :
OuvrirMain
FermerMain
PointerDoigt
FaireCiseaux
Créer 2 variables :
ANGLE_FERMETURE (définir la variable à 0 en début de programme)
ANGLE_OUVERTURE (définir la variable à 110)
A programmer : Chaque bloc doit contenir le code nécessaire pour que les 5 servo-moteurs de la main fassent le mouvement correspondant. ⚠ Utilisez les 2 variables créés et non les angles directement.
Un appui sur une touche du clavier permet à la main de faire le mouvement correspondant.
Dans le programme, associer l'appui sur une touche à ces différents actions (une touche pour chaque mouvement simple) :
0 pour fermer le poing
5 pour ouvrir le poing
1 pour pointer du doigt
2 pour faire "ciseau"
Un appui sur un sprite permet à la main de faire le mouvement correspondant.
Dans le programme, associer le clic sur un sprite à ces différents actions (un sprite pour chaque mouvement simple):
✊ pour fermer le poing
🖐 pour ouvrir le poing
☝️ pour pointer du doigt
✌️ pour faire "ciseau"
Un appui sur la touche "espace" permet à la main de faire l'un des mouvements choisi aléatoirement.
Dans le programme, associer l'appui sur la touche au choix aléatoire de l'une des actions.
Un appui sur le joystick permet à la main de faire l'un des mouvements choisi aléatoirement.
-- EN TRAVAUX --
Vous allez programmer un jeu de Chifoumi. Dans cette première version, le programme choisira aléatoirement le signe à effectuer.
A l'appui sur la touche espace, le programme choisit aléatoirement l'une des positions :
pierre (poing fermé)
feuille (main ouverte)
ciseau
Éventuellement, un léger mouvement du poignet peut être ajouté.e avant le choix du mouvement. Par exemple, en faisant varier l'angle du poignet (broche 7) entre 0° à 20°.
Vous pouvez aussi ajouter un bouton "Play" pour lancer le jeu par un clic de souris.
🍃🥔✂️ N'oubliez pas de créer une IHM afin que le jeu soit plus fun !!
Voici un exemple ci-contre avec des images générées par IA (ChatGPT Images) ▶
💡 L'utilisation de blocs personnalisés vous permettra de bien structurer votre code. C'est donc vivement recommandé ! 🔽
Cette fois, le programme ne doit pas choisir aléatoirement le symbôle à faire mais à la place utiliser la détection faite par Webcam pour décider quoi faire. En l'occurrence, il faudra écrire un programme permettant d'avoir une main robotisée imbattable !
Vous devrez utiliser le mode "Live" avec un sprite et l'extension "Teachable machine" pour communiquer des messages ou des variables avec la carte.
⚙️ A faire :
Bien lire les informations disponibles sur la page d'aide des "Teachable Machines" et faites un essai d'entrainement pour comprendre le fonctionnement
Entrainer votre modèle d'IA our reconnaitre pierre, feuille, ciseaux . ATTENTION : Utiliser un fond neutre pour faire les différents mouvements
Vérifier que le programme arrive à détecter les mouvements. Pour cela, faire des tests sur le résultat de la reconnaissance IA en utilisant le bloc "Confiance de ... ".
Coder le programme permettant à la main de faire le mouvement pour gagner selon ce que le joueur a joué
Ajouter une IHM avec des images, textes et sons pour pouvoir informer l'utilisateur, lui permettre de rejouer, arrêter le jeu, ... Les éléments de l'IHM peuvent aussi être générés par IA.
🚧⬇️ EN TRAVAUX⬇️ 🚧
Vous allez d'abord entraîner un bloc d'IA de mBlock à reconnaitre les chiffres 1 à 9 effectués dans une caméra.
Une fois le modèle entraîné, vous utiliserez ce bloc pour que la main exécute les signes des différents nombres lorsqu'ils sont faits devant la caméra.