QuBéTank

IMG_20150406_183234

QuBéTank ? kesako ?
– « Qu » comme Quentin
– « Tank » comme tank lol
– « QuBéTank » comme cubetto Certes…mais cela ne nous avance pas beaucoup….

Tout a commencé il y a un peu plus d’un an en découvrant le projet d’une petite startup (Primo) qui a réalisé un outil éducatif (cubetto) permettant d’apprendre aux enfants de 3 ans (et plus) la logique de programmation d’une séquence d’actions sur un pupitre. Séquence, qui ensuite est transmise sans fil à un petit robot en forme de cube qui se déplace ensuite en conséquence. Ce concept pour ceux, comme moi, dont l’entrée dans le monde merveilleux de l’informatique c’est fait par le biais du plan informatique pour tous de Fabius en 1985 (ou inversement, pour ceux qui ont réussi à survivre au plan informatique pour tous 😉 ) , se souviendront du Logo… Ce langage qui à l’époque nous apprenait à déplacer une tortue pour réaliser des dessins (pour ceux qui ne connaissent pas, je recommande le très bon article de wikipedia sur le Logo).

J’ai voulu reprendre le principe du cubetto pour le repenser à ma sauce….Une télécommande avec afficheur LCD enregistre la séquence à réaliser (comme un accumulateur), puis lorsque l’on appuie sur le bouton « départ », la télécommande transmet via un port série sans fil crypté le tout au robot pour exécution. Le petit cube en bois du cubetto a été un peu déstructuré à la demande du futur utilisateur, qui du haut de ses quatre an et demi, a voulu un châssis à chenilles (« et avec un truc pour mettre canon, comme ça, ça fera un tank!!!! »).

Exit donc les petites formes en bois à poser sur des emplacements vides du pupitre, je suis parti d’un boiter plus compact ou les séquences seraient saisies en pressant quatre boutons poussoirs (avant – arrière – gauche – droite), le tout s’affichant sur un écran LCD. Deux autres boutons étant dédiés aux fonctions d’exécution et de remise à zéro de la séquence.

IMG_20150406_183141

Comme pour mes autres réalisations, j’ai fait découper et graver au laser la plaque de  fond du pupitre chez formulor.de

IMG_0844
La conception du pupitre est relativement simple et fait appel à un arduino . Mais pour une fois, j’ai voulu faire un peu plus dans le DIY (Do It Yourself), et je me suis appuyé sur une version à monter soi même: le Boarduino (un simple PCB sur lequel on soude les composants de base, puis on plug dessus un ATMEGA 328 avec un bootloader arduino).

IMG_0840

L’ensemble des boutons n’est relié qu’à une seule entrée analogique de l’arduino via un réseau de résistance connecté au +5V (l’appui sur un bouton précis génère une tension de sortie qui lui est propre). L’afficheur lcd 2×40 est piloté via un module lcd/I2C qui est directement relié aux bornes du bus I2C de l’arduino.  Pour le port série sans fil, j’ai utilisé un module APC220 dont le branchement est extrêmement simple (un TX et un RX)

Le code source du pupitre hébergé sur github:   https://github.com/Chnalex/arduino/blob/master/qubetank%28telecommande%29

IMG_0783

Cadeau de Noël oblige, la partie robot est basée sur un chassis plutôt bien fini acheté chez roboshop. L’ensemble est mu par deux moteurs DC  (un par bloc chenille).

Comme pour la partie pupitre, un boarduino relié à un deuxième module APC220 (pour recevoir la séquence envoyée par la télécommande). Et le hasard faisant bien les choses, j’ai pu utiliser l’antenne comme faux canon et satisfaire la demande du mini-commanditaire… Par contre, les arduino n’ayant pas d’étage de puissance capable de piloter les moteurs, j’ai du utiliser un double pont en H relié en amont à l’arduino et en aval aux moteurs, pour réaliser cet asservissement.

Afin d’ajouter un peu de réalisme j’ai utilisé l’une des pattes PWM de l’arduino pour attaquer un transistor connecté à un mini haut parleur, et via la bibliotheque PCM l’arduino joue le son d’un canon (en mono 8bit – 8khz) stocké dans son programme. Bon le son est un peu cracra (8khz comme échantillonnage c’est pas top), mais c’est sympa. Et comme un tank qui tire est soumis à un effet de recul, chaque exécution de séquence se termine donc par le bruit du canon suivi d’un leger recul (marche arriere toute pendant 80ms)

IMG_20150406_183215

le code source du robot/tank sur gtihub:
https://github.com/Chnalex/arduino/blob/master/qubetank

Et voila comment faire un cadeau de noël éducatif et drôle 😉

Puissance 4 …robotisé…

IMG_0400

Le puissance 4….un grand classique de notre enfance et un projet qui a muri  presque 3 ans !

Tout a commencé en 2011 quand j’ai fais l’acquisition d’un bras robotisé piloté par une carte lynxmotion SSC-32. Cette carte à la particularité d’accepter en entrée un ensemble de commandes textuelles via un port série, et en sortie de piloter jusqu’à 32 servomoteurs (type modélisme). Le commandes sont très simples et prennent la forme suivante:
par exemple pour déplacer le servo n°2 à la position 750 (0.75ms soit 45°), il suffit de passer le séquence suivante « #2 P750 T1000 » (T<duree> représente le temps en ms que le servo prendra pour effectuer le mouvement). un peu de théorie sur la commande des servomoteurs: ici
De son coté, le bras est constitué d’un ensemble de 6 servos, il comprend une épaule (2 axes), un avant bras (1 axe), un bras un poignet (1 axe), et une pince (1 axe).

Mon premier projet était de faire commander le bras par ma réplique d’Apple I, et de laisser cette antique bécane gérer la logique des mouvements et l’IA. Bon, c’était sans compter sur sa terrifiante puissance de calcul à 1mhz. Sachant que je suis une tanche en assembleur, le programme devait tourner en basic, donc en interprété….résultat très décevant: juste pour l’IA il fallait de 1 à 3 min pour déterminer le coup à jouer.
Néanmoins, en faisant tourner le programme sur mon macbook, on pouvait obtenir ceci:

Avec un embryon de plateau de jeu réalisé avec des glissières en alu….

Ok, ce n’est pas l’idéal…. il était temps de réfléchir à quelque chose de plus « pro » qui utilise le vrai plateau de jeu d’un puissance 4, d’un distributeur de jeton (en prenant en compte le coté « rugueux » des jetons d’origine). Bref, du boulot en perspective….et puis d’autre projets sont apparus (domotique, radio, machine inutile + plein d’autres choses….).
2 ans et demi plus tard, après quelques tentatives infructueuses, j’ai décidé de reprendre le projet de zéro:

1) utiliser un plateau de jeu d’origine

La seule solution a été de surélever considérablement le bras pour que celui-ci domine le plateau et qu’il puisse déposer convenablement les jetons dans chacune des têtes de colonne. Solution mise en pratique par l’utilisation de pieds de table en acier de chez « Lee Roy Mèreline »
IMG_0409

 

2) les jetons et les distributeurs de jetons

Concernant les jetons, j’ai rapidement abandonné ceux d’origine pour un ensemble de cylindre que j’ai fait découper au laser dans le l’acrylique de 5mm d’épaisseur (formulor.de).
Le gros avantage réside dans le fait de pouvoir, dans une pile,  faire glisser sans difficultés le jeton du bas sans frottement (pour peu que la dite pile soit maintenue bien évidement).  Le distributeur pouvant, dans ce cas, prendre simplement la forme d’un parallélépipède vertical contenant la pile  et possédant une ouverture en bas suffisante pour en saisir un.
Ce qui donne:

3) L’électronique

Ayant pris un peu d’assurance avec les arduino’s, j’ai abandonné interfaçage avec mon « Apple I » et je suis parti sur une solution à base de « micro » (toujours pour son coté compacte). L’arduino micro étant comme tous ses grands frères très à l’aise pour communiquer sur un port série, il n’y avait donc aucun soucis à piloter la carte SSC-32 avec cette solution.

IMG_0398

3) L’IHM

Interaction minimaliste mais fonctionnelle au maximum…donc un afficheur LCD 4×20 (sur bus I2c) pour indiquer les phases du jeu, et un ensemble « LED + bouton poussoir » au pied de chaque colonne numérotée de 1 à 7.
Pour intégrer le tout, je me suis à nouveau appuyé sur les possibilités offertes par formulor.de, j’ai donc dessiné et fait découper un assemblage de plaques d’acrylique de 3mm qui forment un réceptacle à jetons sous le plateau et qui se termine en console abritant les boutons et les leds, coté joueur. Les LEDs sont pilotées chacune individuellement par une sortie numérique. Les boutons poussoirs, pour leur part, sont montés sur des ponts diviseurs de tension et reliés en sortie à une unique entrée analogique de l’arduino (pour faire simple bouton1=0.5V, bouton2=1V, bouton3=1.5V, etc..)
IMG_0407
une petite démonstration par la pratique??

une partie gagnée

comme d’hab, un petit lien vers le source hébergé sur GitHub: https://github.com/Chnalex/arduino/blob/master/puissance4.ino