Monik's bot¶
Introduction¶
Objectifs du projet¶
Ce projet est réalisé avec Thierry Bombardier et avec l'aide de Monique Nguyen.
L'objectif est de créer un robot (de type véhicule) qui permet de sensibiliser des enfants de cinq à six ans à la programmation.
Le principe de programmation sera un système de gommettes représentant des bits logique (4 bits et une horloge). Les gommettes seront collées sur une feuille de papier et selon leur position seront traduites vers une instruction (avancer, reculer, tourner...).
Outre le fait que la programmation de ce robot ne nécessite pas d'ordinateurs ou de tablette pour le programmer. Cette méthodes renoue avec les premières heures de l'informatique qui utilisait des cartes perforées.
Elle permet de limiter significativement le temps passé devant les écrans.
Robot Gommette
Présentation des différentes parties¶
1. Base motorisée : supporte la batterie la batterie, la carte microcontrôleur, les contrôleurs pour les moteurs pas à pas, une pompe à eau pour des scénarios tel que pompier, jardinier ...
2. Lecteur de gommettes : fait défiler la "feuille programme" et lit les instructions à l'aide d'une barre de capteurs infrarouges.
3. Feuille programme : facilement intégrable, le codage s'inspire des codes visuels qu'emploie certains professionnels (Marshallers, grutiers ...)
Le codage des instructions¶
- Intuitif, le codage des instructions s'inspire des codes visuels qu'emploient certains professionnels.
Construction - Paramétrage¶
La construction de la base motorisée ainsi que le mise au point du programme ont été validés au cours de trois ateliers de découverte de la robotique avec de jeunes (makers).
Fabrication du robot¶
L'objectif est de pouvoir fournir des enseignants d'écoles primaires avec des robots à environ 30 euros. Il faudra en produire une certaine quantité et les stagiaires de seconde pourraient travailler sur la fabrication.
Cahier des charges¶
On résume ici les objectifs à atteindre sur le robot.
Lecteur de gommettes | Détecte la couleur noire, 4 bits (16 instructions différentes), doit s’arrêter à la fin des instructions |
Autonomie | Doit pouvoir tenir plusieurs heures |
Instructions | Avancer, reculer, 90° gauche, 90° droite, arroser, demi tour droite, demi tour gauche |
Prix | environ 30€ l'unité |
Conception¶
Mécanique¶
La partie mécanique du robot a été conçue par Thierry, après une première version un peu petite et mal équilibrée au niveau des masses, le modèle actuel est le suivant :
Nom de la pièce | Description | Fichier FreeCAD | Image |
Plaque inférieure | Partie inférieure du "châssis" du véhicule | attachment:V2_Plaque_Inf.FCStd | |
Flancs moteurs | Côtés du véhicule qui vont maintenir les moteurs du robot (pas de distinction entre la gauche et la droite) | attachment:V2_Flanc_Moteur.FCStd | |
Plaque supérieure | Partie supérieure du véhicule, c'est sur cette plaque que l'on pourra fixer les cartes électroniques notamment. | attachment:V_Beta_Plaque_Sup.FCStd | |
Jantes | Ce sont les roues que l'on fixe directement en sortie des moteurs, le "pneu" est un joint torique en caoutchouc. | attachment:2xJante_40.stl (version avec 3 pneus pour plus d'adhérence) |
Les différentes pièces du châssis s'assemblent avec de la colle assez simplement. Les pièces sont dessinées de sorte à ce qu'on ne se trompe pas dans le sens d'assemblage.
Les moteurs sont vissés sur les flancs et on utilisera des entretoises pour fixer les cartes.
Le lecteur de gommettes est au dessus de la carte ESP32 et fixé sur des entretoises.
La liste du matériel et le prix est disponible sur le tableur suivant : attachment:prix fabrication_v2.ods (attention le fichier n'est peut etre pas à jour) disponible dans le dossier du projet (attachment:moniksbot.zip).
Sur la page d' Inès_Fualdes se trouve son travail concernant le support de la pompe à eau. EDIT : Thierry a finalement repris ce travail pour modéliser un nouveau support, voir avec lui pour récupérer le bon fichier.
Électronique¶
Le véhicule sera alimenté par une batterie de type 18650 au lithium. Elle délivre une tension de 7.5V ce qui est parfait pour les moteurs mais trop élevé pour le contrôleur. Ce dernier est un ESP32 qui sera programmé en C++ et connecté aux deux moteurs de mouvement, au moteur du lecteur de gommettes ainsi qu'au lecteur de gommettes. Le lecteur de gommettes est un ensemble de 5 émetteurs/récepteurs d'infrarouges et qui renvoie 5 bits (1 s'il y a réflexion, 0 sinon). La dernière partie est l'arrosoir qui est une pompe à courant continu et un réservoir d'eau.
Programmation¶
Lecteur de gommettes¶
Comme vu précédemment, il y a 5 bits sur le lecteur de gommettes. Le premier sera tout le temps noir (0) pour faire office d'horloge et indiquer au robot quand est ce qu'il doit lire les autres bits. Les 4 autres bits servent à contrôler le robot. Les codes utilisés ont été pensés pour être visuels et refléter des gestes que l’enseignant(e) peut faire avec les mains pour indiquer les instructions. La table de traduction est disponible ci-après :
Code | Description |
0110 | Avancer |
1001 | Reculer |
0011 | 45° à gauche |
1100 | 45° à droite |
1010 | 90° à droite |
0101 | 90° à gauche |
1101 | Arroser |
0000 | Fin du programme |
Lorsque le premier bit passe de 1 à 0, le moteur avance pour arriver à environ la moitié de la gommette, puis on lit les autres bits, et selon le code obtenu on appelle les fonctions correspondante.
Dans le détail, le code fonctionne avec des drapeaux indiquant l'état des commandes et des variables globales :Nom du drapeau | Type de variable | Commentaire |
Reader.init | Booléen | Drapeau permettant d'indiquer si le lecteur de gommettes a été initialisé en appuyant sur le bouton poussoir. Lorsqu'il est initialisé, le lecteur lit les gommettes et exécute les taches. Lorsqu'il ne l'est pas, le robot attend l'initialisation. |
command.running | Booléen | Drapeau permettant de savoir si le robot est entrain d'effectuer une tache ou s'il est en attente d'une nouvelle ligne de gommettes. |
command.name | Chaine de caractères | Ensemble des 4 bits du dernier code lu par le lecteur. Permet d'exécuter l'instruction voulue. |
command.counter | Nombre entier | Compteur pour savoir combien d'itérations le robot doit encore exécuter l'instruction "command.name". |
reader.counter | Nombre entier | Compteur permettant d'ajuster la position de la feuille pour avoir le capteur en face du centre de la gommette. |
D'autres variables sont évidemment présentes dans le code, mais celles ci sont les plus importantes et permettent de comprendre le fonctionnement du code.
A chaque itération le robot vérifie l'initialisation du lecteur, mesure le temps pour faire clignoter la LED, vérifie si une action est en cours ou s'il faut lire la ligne suivante. Tout cela est dans la fonction paper_loop() du fichier paper_control.ino. Lorsqu'il effectue une action (avancer par exemple) il fait tourner les moteurs d'un pas à chaque itération et utilise le compteur pour savoir quand s’arrêter.
Commande à distance¶
Une autre fonctionnalité du robot est la commande par WiFi. Pour le contrôle à distance, le robot utilise également un système de drapeaux et un serveur web asynchrone qui écoute les requêtes GET qu'il reçoit. Un interrupteur permet de changer le mode (gommettes ou wifi) AVANT la mise sous tension du robot. Le détail du fonctionnement de la partie commande sans fil peut être retrouvée sur la page de l'atelier vacances de l'été 2024.
Fusion des programmes¶
L'objectif est que le robot puisse fonctionner soit avec les gommettes, soit avec la commande sans fil. Lors de la mise sous tension du robot, l'état de l'entrée switchMode est lu et on appelle ainsi la fonction d'initialisation correspondante. Puis dans la fonction loop(), selon le mode choisi on utilisera donc différentes fonctions pour lire et exécuter les commandes.Le programme regroupe toutes les fonctions ensemble et est un peu complexe à lire. Des commentaires sont placés régulièrement pour aider la compréhension du programme. Le programme est disponible dans le fichier commande_gommettes.zip
Les librairies suivantes seront nécessaires :
- esp32 (librairie de cartes édité par Espressif Systems et en version 2.0.17)
- AsyncTCP (par dvarell)
- ESPAsyncTCP (par dvarell)
- ESPAsyncWebServer (par lacamera)
Le dossier complet est téléchargeable ici : attachment:moniksbot.zip
Guide de fabrication¶
On va maintenant décrire comment fabriquer ce robot. Vous pouvez télécharger le dossier complet avec tous les fichiers ici : attachment:moniksbot.zip
La liste des pièces est présentée dans le tableau suivant :
AJOUTER TABLEAU AVEC TOUS LES ELEMENTS
Fabrication des pièces¶
Châssis¶
Pour commencer, on découpe les plaques de bois pour fabriquer le chassis, dans le dossier vous pouvez choisir la version pour le contre-plaqué (5mm d'épaisseur) ou la version MDF (3mm).Vous pouvez sinon télécharger ces fichiers ici :
- Contre plaqué 5mm : CP5_Flanc_Moteur.svg (à découper en double) , CP5_Plaque_Bas.svg et CP5_Plaque_Dessus.svg.
- MDF 3mm : V5_Flanc.svg (à découper en double), Plaq_Dessous.svg et V5_Plaq_Dessus.svg.
Une fois découpées, vous pouvez les peindre ou les vernir. Nous verrons plus tard les étapes d'assemblage.
Jantes¶
Dans le dossier, vous trouverez le fichier Jante_40-BodyChamfer.stl qui est le meme quelque soit la version (CP ou MDF). La jante est à importer dans un slicer pour pouvoir l'imprimer en deux fois. Vous pouvez également trouver dans le dossier le fichier FreeCAD pour pouvoir modifier la forme de la jante.
Une fois les 2 jantes imprimées, on peut insérer un insert fileté pour des vis de 3mm.
AJOUTER PHOTO
Lecteur de gommettes¶
Pliage des tiges de ferraille¶
Des tiges métalliques sont utilisées sur le lecteur de gommettes pour surélever la feuille de papier par rapport au capteur infrarouges. Pour plier ces tiges correctement, il faut découper au laser les fichiers suivants :Assemblage¶
AJOUTER INSTRUCTIONS D'ASSEMBLAGE DANS L'ORDRE
Etapes de montage du robot gommette :
1 - Moteur gauche et droite avec roue
2 - Montage composant électronique
3 - Branchement cable moteur / carte électronique (cf : schéma de cablage)
4 - Cintrage support gommette
Unité : 2 / robots
5 - Découpe tige métallique lecture gommette
Longueur : 89.40 mm
Unité : 4 / robots
6 - Fabrication et montage dérouleur lecteur gommette
7 - Fabrication et montage boitier lecteur gommette
8 - Soudure alimentation électrique robots