Projet

Général

Profil

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 :

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