Monik's bot¶
- Contenu
- 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) programmable par des enfants de primaire. 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...).
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 (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 : 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 : 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