Projet

Général

Profil

Maxime Roux

Le Robot Gommettes

Fonctionnement du robot

Programmation du robot

Le robot gommettes fonctionne grâce à un système de lecture de code binaire utilisant des gommettes noires disposées sur une feuille blanche. Ce système repose sur 5 bits, représenté physiquement par la présence (bit = 0) ou l’absence (bit=1) d’une gommette a une position donnée sur une ligne de lecture.

Parmi ces 5 bits, le premier joue un rôle particulier, il est toujours positionné à 0. Il ne sert pas à donner une instruction en tant que telle, il joue le rôle d’impulsion d’horloge, il va permettre au robot de savoir quand il doit lire les 4 bits suivants. Cela aide la synchronisation de l’analyse des données lues sur la feuille et d'éviter toute erreur de décodage.
Les 4 bits suivants correspondent alors à un code qui représente une instruction précise que le robot doit exécuter.
Les codes sont les suivants :
0110 pour avancer,
1001 pour reculer,
1100 pour tourner de 45° à droite,
0011 pour tourner de 45° à gauche,
0101 pour tourner à gauche de 90°,
1010 pour tourner à droite de 90°,
1101 pour actionner la petite pompe à eau à l’avant du robot.

L’entièreté du code inclus dans l’ESP32 a été écrit par Marin Gerard, ancien service civique au sein du Fablab.


Figure 1 : Code correspondant aux 4 bits codés pour avancer


Figure 2 : Code correspondant aux 4 bits codés pour activer la pompe

Lorsque la feuille est passée dans le lecteur, il détecte la première ligne de gommette grâce à ses capteurs infrarouges, qui différencient le noir des gommettes du fond blanc de la feuille.

Ce processus de lecture et d'exécution est géré par un ensemble de drapeaux (flags) et de variables globales dans le programme. Ces drapeaux permettent de suivre l'état du robot et de coordonner ses actions.

Reader.init : indique si le lecteur a été initialisé par l’utilisateur (par un bouton poussoir installé sur le robot). Le robot ne commence à lire les gommettes que si cette variable est activée,
Command.running : informe si une commande est en cours d'exécution ou si le robot attend une nouvelle ligne à lire,
Command.counter : sert à compter combien de fois l’instruction doit être répétée (qui est utile lorsque l’on fait des actions continues comme avancer sur plusieurs “pas”),
Reader.counter : permet de gérer le positionnement du capteur, en contrôlant précisément l'avancée du robot entre les lignes,
Command.name : Permet au robot d'exécuter l’instruction voulue.

Toutes les commandes présentées ci-dessus sont présentes dans la fonction « paper_loop() ». Ce système permet d’avoir un robot entièrement autonome, capable de lire ligne après ligne les gommettes posées par l’enfant, puis enchaîner les actions avec fluidité, le tout en restant simple d’utilisation.

L’électronique du robot

La structure électronique du robot gommette comporte plusieurs composants.
Au cœur du système on retrouve un microcontrôleur l’ESP 32 (Voir Annexe 4), qui assure la gestion de l’ensemble des fonctions logiques, des capteurs et des actionneurs. Ce microcontrôleur a été choisi pour sa puissance, sa flexibilité, son prix et sa connectivité sans fil.

Le robot est équipé de cinq capteurs infrarouges (Voir figure 5), disposés de manière à lire les gommettes noires collées sur un fond blanc. Ces capteurs fonctionnent par détection de réflexion, en fonction de la lumière réfléchie par la feuille ils transmettent un signal logique à l’ESP 32, qui l'interprète comme une commande.


Figure 3 : Lecteur Infrarouges

Le déplacement du robot est assuré par deux moteurs pas à pas, un moteur gauche et un moteur droit qui permettent au robot d’avancer tourner et reculer.
Un troisième moteur pas à pas est nécessaire pour entraîner la feuille de papier à travers le lecteur de gommettes, qui permet d’assurer une lecture régulière et stable.
Chaque moteur est piloté par un driver, qui reçoit des signaux PWM générés par l’ESP 32. Cela garantit un contrôle précis du mouvement, tout en réduisant la charge sur le microcontrôleur.
Une pompe à eau miniature est également intégrée, activée lorsque le robot reçoit l’instruction d’arroser. Elle est contrôlée sur le premier prototype par un driver dédié, permettant d’adapter la tension et l’intensité selon les besoins sans endommager les circuits.

Au niveau des commandes, le robot dispose de deux interrupteurs, le premier permet de mettre le robot sous tension ou de l’éteindre. Le deuxième interrupteur active ou désactive la fonction Wifi de l’ESP 32. Cette connectivité permet à l'utilisateur d’envoyer les instructions depuis son smartphone, remplaçant ainsi l’usage des gommettes si nécessaire.

Figure 4 : Interrupteur Wifi(gauche) et Interrupteur alimentation générale (droite)

Un bouton poussoir permet de lancer la lecture des gommettes. Une LED témoin, éventuellement intégrée, pourrait compléter le dispositif pour donner un retour visuel aux usagers lors du traitement des instructions car les codes sont déjà présents dans l’ESP 32 pour activer ou désactiver la LED.

Enfin la carte d’extension de l’ESP 32 intègre une régulation d’alimentation, elle abaisse la tension d’entrée a 5V pour alimenter en toute sécurité les différents composants. Elle facilite également les connexions entre les broches de sortie du microcontrôleur, les drivers des moteurs et le lecteur infrarouge. Après avoir détaillé le fonctionnement du robot Gommettes, de la détection des gommettes jusqu'à l'exécution des instructions via les moteurs, il est essentiel de prendre du recul sur les aspects techniques de ce système.

En effet, la mise en œuvre du robot a soulevé plusieurs défis, tant sur le plan électronique, mécanique ou logiciel. Cette partie vise à présenter les principaux problèmes rencontrés lors des utilisations des 4 robots prototypes, ainsi que les solutions envisagées et mises en œuvre pour répondre à ces problèmes. Cette démarche permet non seulement d’optimiser les performances du robot, mais aussi de préparer son amélioration pour de futures versions plus robustes, efficaces ou pédagogiquement pertinentes.

Problèmes rencontrés et solutions techniques apportées
Lors du prototypage des quatre premiers robots des modules déjà prêts ont été utilisé, c’est le cas des moteurs à pas. En effet, lors de l’achat de ceux-ci, le constructeur livre aussi les drivers qui permettent un fonctionnement idéal du moteur. De part ce fait, les cartes des drivers ULN2003A (Voir Annexe 4) ont été directement implémenté sur le robot de tel sorte à ce que les LED qui indiquent le bon fonctionnement du moteur soient visible, néanmoins cela prend une place considérable sur la plaque supérieure du robot et demande aussi un perçage de 12 trous, 8 sur la plaque supérieure du robot et 4 sur le module du lecteur infrarouge. Par ailleurs, ces drivers sont connectés à l'ESP 32 par des câbles qui permettent à celui-ci d’envoyer les signaux d’entrée pour le moteur en passant par l’ULN2003A. Malheureusement le nombre important de câbles se connectant sur ce petit module ne permet pas d’avoir une bonne fiabilité, en effet les câbles se débranchent facilement, et des erreurs de câblage sont fortement possible lors du montage du robot.

De même, la carte ESP 32 situé sur une carte d’extension fixée elle-même sur la plaque supérieure du robot a elle aussi les mêmes problèmes que les cartes des moteurs. Elle demande plus d’attention car tous les pins de sortie de l’ESP 32 sont représentés sur des pin header le long de la carte ce qui fait qu’il y a un grand nombre de câble qui y converge et ne permet pas forcément une bonne compréhension et visualisation lors de son montage ou de la maintenance.

Pour remédier à ces problèmes de câble débranché, de parasitage des signaux et de place sur le robot j’ai effectué une étude comparative entre deux solutions possibles et envisageables.
Pour ce faire j’ai étudié les coûts (Les composants, la maintenance et la production), la fiabilité, la compacité, les pertes et le volume de production.


Tableau 1 : Etude comparative des deux solutions envisageables

A l’issue de l’analyse comparative, une solution s’est clairement démarquée par sa pertinence technique, sa fiabilité et sa compatibilité avec les contraintes spécifiques du projet. L’étude de cas n°1 a donc été retenue comme base pour la refonte du système électronique du robot.
Cette solution repose sur une approche plus intégrée, visant à réduire drastiquement le câblage externe, améliorer la lisibilité du montage et renforcer la robustesse mécanique.
Elle s’articule autour des éléments suivants :
Une intégration des drivers moteur connectés directement à l'ESP 32 par des pistes, réduisant ainsi le nombre de câbles.
Remplacement de la carte d’extension par une carte personnalisée, alimentation de la carte changée.
Optimisation de la disposition physique des composants pour faciliter l’assemblage, la maintenance et la fabrication en série.

Ce choix s’appuie non seulement sur des critères techniques, mais aussi une logique d'ingénierie orientée vers l’industrialisation du prototype. La solution retenue permet en effet de réduire les coûts de montage et les erreurs humaines et augmenter la fiabilité en fonctionnement.

Néanmoins, cela demande une certaine attention, le robot étant alimenté avec une batterie délivrant du 7,4V et 3000mAH ne convient pas à un ESP 32. Avec le retrait de la plaque d’extension du microcontrôleur nous ne pouvons plus alimenter car la gestion de puissance n’existe plus, dans ce cas-là on doit recréer sur le PCB une gestion d’alimentation. En effectuant des recherches mon choix s’est porté sur le composant « TPS563240 » (Voir Annexe 4), régulateur abaisseur synchrone de 3A. Il permet une conversion de puissance efficace et compacte.

En effet, il peut recevoir une tension allant de 4.5V à 17V et délivrer une tension de 0.6V a 7V. Ayant une fréquence de commutation fixée à 1.4MHz cela lui permet d’avoir une réponse transitoire plus rapide et une meilleure régulation.
Avoir une réponse transitoire rapide le rend idéal pour des applications nécessitant une régulation spécifique de tension précise et réactive, pour notre cas abaisser la tension de 7.4V à 5V.

Enfin sa capacité à fonctionner efficacement en charge légère et sa faible consommation en mode veille le rendent adapté aux systèmes alimentés par batterie.

Pour faire fonctionner efficacement cet abaisseur de tension on doit rajouter plusieurs composants. Il faut deux condensateurs d’entrée Cin et Cinx qui sont deux condensateurs de découplage servant à stabiliser la tension Vin (7,4V). Par la suite nous avons une inductance qui va venir lisser le courant après le découplage, suivi de deux résistances RfbT et RfbB positionné de telle sorte à faire un diviseur de tension, qui permet au régulateur de réguler la tension de sortie a une valeur précise en la comparant à une référence interne.
Finalement on retrouve Cout un condensateur de sortie pour réduire l’effet d’ondulation sur la sortie Vout et Cboot un condensateur de bootstrap qui permet d’activer le transistor MOSFET high-side intégré.
La tension de sortie est-elle réglée selon la formule suivante :
Vout=Vref(1+RfbT/RffB)
Vout=0.6(1+73200/10000)=5V

On choisit les résistances RfbT à 73.2KΩ et RfbB a 10KΩ


Figure 5 : Schéma de câblage de la gestion de puissance du robot

En ce qui concerne la sécurité du circuit, j’ai rajouté en amont du circuit de gestion de puissance un interrupteur lui-même précédé d’un fusible qui permet en cas de problème de batterie, de ne pas atteindre le circuit principal ainsi que l’ESP 32 et ses moteurs.
Enfin l’ESP 32 permet de recevoir une tension Vin = 5V pour cela on envoie Vout vers son pin Vin afin que le microcontrôleur soit alimenté.

J’ai par ailleurs choisi de conserver les drivers ULN2003A, qui assurent un pilotage fiable et simple des moteurs pas à pas utilisés sur le robot. Lors de l’analyse du schéma de câblage, j’ai constaté que chaque driver dispose de 7 broches d’entrée et 7 broches de sortie, alors que chaque moteur à pas nécessité uniquement 4 lignes de commande. Cela implique que 3 broches par driver restent inutilisées dans la configuration standard.

Afin d’optimiser l’espace disponible sur la plaque supérieure du robot et réduire le nombre de composants, j’ai décidé de supprimer l’un des trois drivers initialement prévus. Les broches restantes sur les deux autres drivers sont réaffectées intelligemment, le troisième moteur est commandé en partageant les lignes de sortie inutilisées sur les deux drivers conservés.
En revanche le moteur de la mini pompe à eau ne peut être commandé via un ULN2003A, bien qu’il soit un driver de puissance. En effet, les ULN2003A sont conçus pour piloter des moteurs à pas unipolaire ou de petites charges logiques, et ne sont pas adaptés aux moteurs à courant continu nécessitant un courant de démarrage plus important.
La pompe étant équipée d’un petit moteur DC, son fonctionnement repose sur un signal PWM. Or l’ULN2003A ne permet pas une gestion fine de ce type de signal, il agit comme un simple interrupteur, sans possibilité de réguler précisément l'énergie délivrée.
C’est pourquoi j’ai opté pour une solution plus stable, un montage de commutation a transistor NPN. Le circuit utilise un transistor 2N2222A (Voir Annexe 4), monté en commutation. Le moteur lui est alimenté en 3.3V sur sa borne positive, tandis que sa borne négative est connectée au collecteur du transistor. L'émetteur est relié à la masse, et la base est commandée par une sortie de l’ESP 32 via une résistance de 1KΩ.

Une diode de roue libre 1N4001 est placée en parallèle avec le moteur, orientée en inverse, afin de protéger le transistor et le circuit contre les pics de tension lors de l'arrêt du moteur.
Ce montage présente plusieurs avantages, il est simple et économique, il permet une commande en tout ou rien ou PWM avec l’ESP 32 et est adapté aux faibles tensions.

Figure 6 : Circuit électrique de la mini pompe à eau

Après avoir identifié les limitations techniques du prototype initial et proposer des solutions plausibles aux problèmes, la phase suivante consiste à la conception de la carte électronique dédiée permettant d’intégrer l’ensemble des améliorations apportées.
Conception de la carte électronique

L’étape de conception consiste à déterminer les composants nécessaires au bon fonctionnement de la carte c’est à dire, savoir si l’on souhaite des composants traversants (THD) ou des composants montés en surface (CMS).
Le choix entre composants traversants et (CMS) est effectué en fonction de plusieurs critères :
La facilité d’assemblage, la compacité et la fréquence de remplacement.
Les composants dit critiques ou fréquemment modifiés, dans notre cas le fusible, les connecteurs ou encore le transistor ont été choisi en version traversante. Leur montage est plus robuste et permet des soudures manuelles fiables, tout en restant accessibles pour des interventions ou des ajustements. Les ULN2003A ainsi que l’ESP 32 sont des composants dis traversants mais ils sont montés sur des pin sockets pour éviter de les dessouder en cas de problèmes et les changer rapidement.

Pour ce qui est des composants CMS, on préfère utiliser cette technique pour les composants passif tel que les résistances ou encore les condensateurs, pour gagner de la place sur la carte et réduire la longueur des pistes, ce qui permettra de limiter les parasites et améliorer la lisibilité du routage.

Pour ce qui est du placement et du routage sur la carte, avec KiCad j’ai créé les schémas électriques de chaque partie : Bouton poussoir, interrupteur, ESP 32, Drivers, la pompe à eau.
J’ai pu par la suite aller directement sur l’interface de création de PCB, où j’ai prédéfini une taille pour la carte avec le mode Contour, puis j’y ai ajouté les composants et réalisé le routage le plus simple possible. Néanmoins les difficultés étaient de faire rentrer les trous aux bonnes distances les uns des autres avec le bon diamètre pour y faire passer les entretoises. Ces entretoises tiennent la partie du lecteur infrarouge au-dessus de la plaque supérieure du robot.

Enfin on vérifie le DRC, qui va permettre d’inspecter automatiquement que la carte respecte toutes les contraintes électriques mécaniques définies pour la fabrication. Plus en détail, il vérifie les espacements minimums entre les pistes, Vias, pads et zones de cuivre. La largeur minimale des pistes (pour supporter le courant prévu), les connexions non faites ou incorrectes et le chevauchement ou superposition de composants. Une fois cette étape validée on commande la carte chez un fabriquant et une fois les composants et les cartes reçus nous pouvons passer à l’étape de la soudure.


Figure 7 : Carte PCB sans composants
La soudure des composants utilise deux techniques : la première celle utilisée pour les composants traversants, consiste à être soudé manuellement au fer à souder. C’est utilisé principalement pour les connecteurs, transistors ou encore condensateurs. En revanche, pour les composants CMS, comme les résistances, condensateurs ou diodes au format 1206, on utilise la deuxième technique, la soudure par four a refusion. On positionne d’abord les composants à leurs emplacements avec de la pâte à braser en dessous, une fois tout placé on insère la carte dans le four où la température suit un profil contrôlé qui permet à la pâte de fondre et de souder les composants en place de manière uniforme.

Résultat et modifications à apporter

Lors de l’assemblage du circuit, j’ai rencontré plusieurs problèmes. Tout d’abord, les interrupteurs choisis les MTS103 (Voir Annexe 4) se sont révélés trop volumineux pour le PCB du moins à l’emplacement choisis. Ce qui a gêné l’insertions de l’ESP 32 sur les pins socket prévu à cet effet. Il sera donc nécessaire de sélectionner des composants plus compacts ou de repositionner les interrupteurs pour éviter toute interférence mécanique.
Ensuite pour ce qui est du connecteur jack PJ-050BH (Voir Annexe 4) initialement commandé ne correspondait pas aux dimensions attendues. J’ai heureusement trouvé des modèles compatibles au Fablab pour pouvoir tester correctement, ce qui m’a permis de continuer les tests et le montage.
Un autre point critique concerne les fusibles, ceux commandés étaient prévus pour un courant de 160mA, bien inférieur aux 3A nécessaires. Afin de ne pas griller immédiatement les fusibles lors des tests, j’ai temporairement remplacé le fusible par un fil. Cette solution provisoire permet de continuer tous les tests nécessaires et sera corrigé pour garantir la sécurité du circuit lorsqu’ils seront mis en service.

Enfin, une erreur de câblage a été identifiée sur le schéma de l’alimentation de puissance. La broche ENABLE (EN) du régulateur a découpage à être directement connectée au +7.5V, sans résistance de limitation ni séparation entre les signaux de commande et l’alimentation. Cela empêche toute gestion logique de l’activation du régulateur, et pourra être corrigé en ajoutant une résistance dans une prochaine version du PCB. (Voir Figure 10)


Figure 8 : Schéma électrique corrigé de la gestion d’alimentation

Par ailleurs la disposition des pins header qui assures la connexion avec le lecteur infrarouge sont mal disposés en effet ils sont trop proches de l’ESP 32 ce qui ne permet pas une connexion de certains câbles. Pour régler ce souci il faudra revenir sur le schéma KiCad et le disposer d’une autre façon sur la carte.