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) 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 :

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