
Je vous présente la dernière version de mon module GBC qui écrit du texte. La présentation est tardive puisqu’il tourne depuis fin 2017 dans les expo de l’Est.
J'ai mis des GIF au fur et à mesure des explications pour que la review soit plus explicite, ouai le MOC est pas simple... mais ca vaut le coup d'essayer de le comprendre!
Cahier des charges :
- Objectif :
- Ecrire du texte
- Optimiser les moteurs et mécanismes
- Fiabilité pour tourner en expo
- Structure type Akiyuki : ça fait bien fini et ça facilite le transport.
- Cheminement « lisible »
- Montrer le tri par couleur
- Visuelle : les balles doivent être toujours visibles dans le cheminement principal
- Utiliser qu’un set EV3 pour les composants électriques
- Couleur Dark Bluish Gray avec quelques touches aux couleurs de l’EV3 : Blanc/Rouge/Gris


Architecture du MOC :
Un des objectifs était de n’utiliser qu’un seul set EV3 pour faire ce MOC, je vais vous décrire comment j’y suis parvenu en combinant les fonctions et mécanismes par moteur et les capacités des capteurs pour optimiser leur nombre.
Le circuit du module est semi-fermé car il nécessite un grand nombre de balles pour fonctionner. Le plateau se vide dans le bac d’entrée plutôt qu’en sortie du module pour ne pas engorger les modules suivants.
La montée par chaine et la descente en "S" sont à considérer comme un autre module permettant de faire la boucle du circuit.
- Le bac d’entrée : 1 moteur Power Fonction XL
La première contrainte est de stocker un grand nombre de balles. Pour réguler l’alimentation du module avec la contrainte du poids de toutes les balles, il y a un double ascenseur pour monter 6 balles puis une roue (inspirée d’Akiyuki). La rotation de la roue est synchronisée avec l’ascenseur ce qui évite un engorgement et permet d’avoir une roue tout le temps chargée sans surplus. - Trieur de balle : 1 moteur EV3 Medium, 1 capteur de couleur
Le but était de cacher le capteur de couleur comme dans le module d’Akiyuki et d’avoir un trieur simple et « lisible » pour le public.
Un capteur de couleur (situé dessous, avant l’hélice) mesure la réflexion de la lumière. Le blanc réfléchissant le plus la lumière, cela permet de le distinguer de l’orange ou de l’absence de balle.
J’ai fait beaucoup de prototype avant d’arriver à ce trieur qui d’apparence parait simple.
En fonction de la couleur, il tourne de 120° ou -120° (1/3 de tour car 3 branches). S’il y a une succession de balles identiques il tournera dans le même sens ce qui est assez esthétique plutôt que de revenir dans une position initiale. La rotation de 120° se fait en 2 temps, la pause permet à la balle de se caler dans le creux pour ne pas générer de blocage, cela diminue énormément la rapidité de tri mais c’est en cohérence avec la cadence de la suite du module.
Je vous parlais d’optimisation de capteur : J’ai utilisé une astuce pour calibrer l’hélice car le moteur perd quelques degrés de précision à force de tourner. Il se calibre, à chaque envoi de colonne, en tournant degré par degré², jusqu’à trouver la réflexion maximum de lumière, dès que la réflexion diminue, c’est que la position de calibrage est le degré d’avant.
Une fois triées, ces balles vont dans 2 chargeurs de 9 balles. Il y a une déviation spécifique (slope rouge) permettant de gérer le surplus de balle. Par exemple si on attend une balle orange et que l’on a 13 balles blanches successives, il faut mettre les 4 balles dans un rebus.
Le chemin des balles du rebus est caché car il n’apportait rien dans la lisibilité du MOC. Les balles remontent par une pompe à balle. J’utilise un patin en caoutchou de 2 tenonspour maintenir les balles en position verticale (je ne suis pas fan des pompes à balles qui redescendent quand il n’y a pas de balle qui arrive).
L’alimentation du module est volontairement plus rapide que la capacité de tri afin de faire tourner des balles dans le reste du circuit. Quand le chargeur avant l’hélice est rempli, il y a une déviation qui court-circuite tout le module pour arriver directement dans la sortie. Cela est utile quand le module a fini d’écrire car le tri s’arrête ainsi les balles font leur petit tour dans les modules suivants. Un ralentisseur en bas de la pente (beam 3L rouge) assure une vitesse contenue pour passer sereinement le zig-zag de fin.
Deux sorties possibles, soit latérale soit en ligne droite. - Sélection des balles : 1 moteur EV3 Large
Un seul moteur sélectionne soit une balle blanche, soit une balle orange.
Ici la contrainte est le poids des 9 balles du chargeur, il fallait un mécanisme qui retienne les balles et qui évite que les balles « sautent ». La solution est d’exercer un mouvement perpendiculaire à la force exercée par le poids des balles. La première balle se loge dans un demi-liftarm 3x3 (rouge), en tournant pour libérer la balle un demi-liftarm 3x3 avec quart d’ellipse (rouge) vient bloquer les balles suivantes.
Le maintien en position « quart de tour » se fait par un montage liftarm 2x4 (vert sur l’image) contre un coté du knob (jaune). Le moteur (axe du centre) fait tourner un liftarm rouge 3L pour actionner soit le knob de gauche ou de droite suivant la couleur à envoyer .
Autre optimisation de capteur : Ici j’utilise dans le code l’état=bloqué du moteur détecté par « on note la position du moteur, on demande au moteur de tourner, on reprend de suite la position du moteur. Si la position n’a pas changé c’est qu’il est bloqué. ». On tourne dans un sens, une butée (en bleu) permet de bloquer le moteur (fig. 1), en sens inverse on compte le nombre de degré jusqu’à retoucher la butée (fig. 2) puis on divise le nombre de degrés par 2 et le moteur est ainsi calibré en position centrale (fig. 3) ! - Envoi colonne et vidange : 1 moteur EV3 Large, 1 capteur pression
Première problématique : Les balles font 14mm de diamètre, la mesure d’une unité Lego (tenon pour les intimes) est de 8mm. Un rail du plateau fait 2 tenons soit 16mm ; il y a donc un décalage au bout de 5 balles et la 5ème ne tombe plus en face du rail (fig. 1). Pour aligner les balles aux rails, il y a un décroché d’un demi tenon à la 1ère balle (fig. 2), ainsi en basculant chaque balle va dans le rail adéquat.
Les rails sont constitués d’une tile et d’un panel, l’espace de 2 tenons moins l’épaisseur du panel approche le diamètre d’une balle, ainsi elles sont parfaitement guidées jusqu'au bout du plateau et ne sautent pas. Pour accentuer la couleur orange de l’écriture, le plateau est blanc comme la seconde couleur des balles.
Fonction 1 : La colonne est envoyée par basculement.
Fonction 2 : La vidange des balles se fait en levant le plateau par un mécanisme type « scissor lift » (~ élévation ciseau) actionné par rack.
Pour éviter un engorgement les rails sont vidés par 2 à la fois grâce à des butées à différentes hauteurs. La purge des balles est assez jolie à voir.
Un seul moteur envoie la colonne (basculement) et vidange les balles du plateau (levée). Le rack étant actionné par une vis sans fin, il faut beaucoup de tour pour le faire bouger alors que le basculement nécessite moins d’un tour. Ainsi en utilisant un différentiel pour le basculement, j’ai pu mettre les deux mécanismes sur le même moteur.
Quelques explications :
- En entrée du différentiel : le moteur
- La « cage » du différentiel: relié à une « gear 8t avec axe 1,5L »
(par le liftarm rouge ci-dessous) qui actionne une crémaillère pour le basculement
- Sortie du différentiel : relié à une démultiplication 12t/20t avec un pin à friction pour avoir une force supérieure au mouvement du basculement.
Ainsi, une fois basculée la cage du différentiel est bloquée et la force d’entrée fuite par la sortie
Programmation :
Dans mes premières versions, j’utilisais l’éditeur de bloc fourni par Lego, on arrive très vite aux limites du logiciel avec un programme conséquent.
Pour cette version, j’utilise ev3dev et le programme est intégralement scripté en python. Maitrisant le script shell, le python s’en approche beaucoup.
Note : Pour ceux qui ont lu le détail de la précédente version du MOC, la programmation est sensiblement identique.
- Sélection du texte :
On choisit le texte dans le programme. Les caractères possibles sont : de A à Z, de 0 à 9, espacement et quelques ponctuations. Le plateau permet d'écrire 9 à 10 caractères. - Ecriture du texte :
Chaque caractère est traduit en séquence de balle.
Prenons l’exemple du A, en considérant que 1=écriture, 0=l’arrière-plan, on traduit cela :
Ligne1= 010
Ligne2= 101
Ligne3= 111
Ligne4= 101
Ligne5= 101
Ainsi l’affichage en balle donnerait (écriture = balles orange, arrière-plan = balles blanches) :
OOO
OOO
OOO
OOO
OOO
Cette traduction est faite pour tous les caractères.
Le programme analyse le texte à écrire pour déterminer la séquence des balles orange/blanches par ligne.
Prenons l’exemple d’écrire LEGO :- Le programme va prendre chaque lettre et y insérer un espacement (traduit par une colonne de balles blanches) entre chaque lettre.
Ainsi, la finalité est :
OOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOO
- Le programme va créer la séquence de balle pour chaque ligne
La séquence est- Code: Tout sélectionner
Ligne1 : 100011101110111
Ligne2 : 100010001000101
Ligne3 : 100011001010101
Ligne4 : 100010001010101
Ligne5 : 111011101110111
Le but est d’écrire colonne par colonne en commençant par la dernière ligne, car la première balle envoyée se retrouvera en bas. - Le programme en déduit le nombre de colonne, ici nbColonne=15
- Il positionne un avancement à 1
- Il prend comme séquence de balle la valeur de la colonne en commençant par la dernière ligne (Ligne 5)
Donc :
1ere balle : Ligne5 [avancement] = Ligne5 [1] = 1 = O
2eme balle : Ligne4 [avancement] = Ligne4 [1] = 1 = O
3eme balle : Ligne3 [avancement] = Ligne3 [1] = 1 = O
4eme balle : Ligne2 [avancement] = Ligne2 [1] = 1 = O
5eme balle : Ligne1 [avancement] = Ligne1 [1] = 1 = O
La séquence va donc être 5 balles couleur écriture, donc 5 balles orange - On incrémente avancement de 1 : avancement=2
- On continue avec la colonne suivante : Il prend comme séquence de balle la valeur de la colonne en commençant par la dernière ligne (Ligne 5)
Donc :
1ere balle : Ligne5 [avancement] = Ligne5 [2] = 1 = O
2eme balle : Ligne4 [avancement] = Ligne4 [2] = 0 = O
3eme balle : Ligne3 [avancement] = Ligne3 [2] = 0 = O
4eme balle : Ligne2 [avancement] = Ligne2 [2] = 0 = O
5eme balle : Ligne1 [avancement] = Ligne1 [2] = 0 = O
La séquence va donc être 1 balles couleur écriture et 4 balles couleur arrière-plan: 1 balle orange, 4 balles blanches.
Ce qui donne sur le plateau
OO
OO
OO
OO
OO - Ainsi de suite, on poursuit jusqu’à ce que avancement=nbColonne
- Le programme va prendre chaque lettre et y insérer un espacement (traduit par une colonne de balles blanches) entre chaque lettre.
Vidéo :
Voila, je pense avoir bien détaillé le fonctionnement de cette création, et encore je vous ai épargné les astuces pour la fiabilité.
J'en suis vraiment content et il est aprécié en expo ; J'ai fais les 8 expos suivantes et ca tournait plutot bien tout au long des weekends, ce GBC est assez fiable (et les personnes qui exposent du GBC savent à quel point c'est compliqué!) avec un peu de graisse au teflon pour huiller la mécanique ca se fait bien.
- NANCY 2017 (3/4/5 Novembre) LUDIBRIQUES
- REIMS 2018 (17/18 MARS) BRICK EN BULLES
- COLMAR 2018 (29/30 JUIN) FANABRIQUES
- CLENAY/DIJON 2018 (6/7 OCTOBRE) FESTIBRIQUES
- NANCY 2018 (10/11 NOVEMBRE) LUDIBRIQUES
- REIMS 2019 (9/10 MARS) BRICK EN BULLES
- EPINAL 2019 (4/5 MAI) SPINABRICK
- METZ 2019 (1 JUIN) MAKERLAND
Je pense ne plus l'exposer dans l'EST car il a déjà fait 2 éditions, mais le conserver encore 1 an au cas où je ferais une expo dans l'ouest ou sud-est.
J'ai déjà le cahier des charges du successeur, l'objectif sera toujours d'écrire avec les billes, avec 1 seul moteur cette fois ci
.gif)