Tortue

Remise en état d’un robot Pierron

J’ai eu la chance durant mes années de primaire d’utiliser la tortue Promobile de Jeulin avec le langage LOGO sur un Apple II. Je n’ai pas la chance d’en avoir trouvé une à un prix abordable mais je me suis procuré un robot Pierron assez similaire dans son principe : deux roues motorisés et un crayon qui peut se relever.

Le robot vue de dessus

Le robot vue de dessous

J’ai eu la déception cependant de constater que la carte électronique avait été bidouillée, et son microcontrôleur retiré. Je n’ai pas réussi à identifier le type de microcontrôleur qui était utilisé. J’ai par contre compris comment fonctionnait la carte de contrôle, et la présence de straps m’a permis d’interfacer un Arduino en lieu et place du µC original.

La carte de contrôle sans son microprocesseur

L’Arduino connecté à la carte de contrôle

La carte est alimentée en 12V et dispose d’un régulateur 5V. Seuls 6 signaux sont utilisés pour piloter le robot par l’Arduino. Pour chaque moteur un signal indique le sens, un autre provoque un pas. Deux sorties supplémentaires sont commandés par deux autres signaux tout ou rien. L’un est connecté au solénoïde du crayon, l’autre était connecté à un électro-aimant. Lorsque j’ai reçu le robot, ces six signaux et l’es deux al’alimentation avaient été pontés sur un connecteur DIN à 8 broches passablement abîmé qui sera changé pour un connecteur DIN 6 broches neuf.

Durant le développement du firmware de l’Arduino j’utilise le port USB, mais à terme je préfère implémenter une liaison série RS232 pour communiquer avec l’Arduino.

La communication ainsi que l’alimentation se font au travers d’un cordon ombilical à 6 broches : 4 pour la liaison série, et 1 pour l’alimentation. Le cordon est composé de deux câbles, l’un blindé à 4 fils en AWG 28, le second non blindé à 2 fils en AWG 22 : le robot consomme presque 10W (0,8A à 12V).

Il à été assez simple de trouver le nombre de pas par centimètre : 20 ainsi que le nombre de pas pour faire une rotation d’un degré : 4. Le crayon se trouve au cente de rotation, pour tourner il faut que les deux moteurs soient dans des sens opposés et effectuent le même nombre de pas. Il y à donc deux sens de rotation possibles.

Avec ces informations, la première version du programme permettait d’avancer ou de reculer d’une certaine distance, de tourner à droite ou à gauche d’un certain angle, de lever et baisser le crayon.

Je me suis attaqué au tracé de cercles et d’arcs. Deux approches étaient possibles, soit faire varier la fréquence des pas de chaque moteur indépendamment, soit effectuer de petits trajets pour s’approcher d’un cercle. J’ai opté pour la seconde solution pour son coté géométrique.

Imaginons que l’on souhaite réduire un arc de 90 degrés à 1 segment, le robot va devoir tourner de 45 degrés, avancer, et tourner à nouveau de 45 degrés.
Avec deux segments le robot devra tourner de 22,5 degrés, avancer, tourner de de 45 degrés, avancer, et enfin tourner à nouveau de 22,5 degrés.
Avec trois segments cela donne tourner de 15 degrés, avancer, tourner de 30 degrés, avancer, tourner de 30 degrés, avancer, puis tourner de 15 degrés.

On constate donc que deux valeurs d’angles sont à calculer, l’angle de départ et d’arrivée que j’appellerai A0, et l’angle à effectuer entre les segments que j’appellerai An. Pour N segments d’un angle A la formule est :

  • A0 = A/2N
  • An = A/N

Les longueurs L des segments pour un cercle de rayon R se calculent ensuite avec la formule :

  • L = R / sin((180-An)/2) * sin(An)

Avec ces données, la fonction « arc » deviens réalisable avec les primitives de déplacement déjà codées, mais le nombre de segments pouvant être important il à fallu revoir l’architecture du programme de manière à mettre en place un buffer de déplacements ainsi qu’un fonctionnement par interruptions.

Voici le code actuel de l’Arduino :

Prochaines étapes : faire la plaquette avec le MAX232, gérer les signaux RTC/CTS, puis enfin le pilotage en LOGO depuis un Apple II !