Un châssis motorisé de lego technic est souvent très pratique pour réaliser une base pour un robot. L’idée de cet article est de vous présenter une librairie pour arduino qui permet de commander le récepteur infrarouge des lego power functions. Le principe de l’interface est d’émuler les signaux de la télécommande. En effet le protocole lego n’est pas très complexe, et surtout il ouvre la possibilité d’adresser le récépteur légo différemment et donc d’accéder  a de nouvelles fonctionnalités tels que la vitesse de rotation de chaque moteur (sur 7 niveaux) et la fonction de frein qui permet d’immobiliser l’axe du moteur. Pour mettre en exemple cette librairie je vous propose de réaliser une télécommande améliorée pour lego technic power function.

Les récepteurs Lego Power Functions

Les lego power functions sont devenu assez courants dans des lots de taille considérable de lego technics. Les power functions se composent d’un moteur assez gros pour la motorisation généralement, d’un moteur de taille moyenne généralement pour contrôler des bras ou autres, d’un récepteur infrarouge d’un pack d’alimentation et de l’émetteur infrarouge. Chaque récepteur comporte deux connecteurs pour des moteurs et possède un switch pour régler le canal sur lequel il doit attendre les commandes. Chaque émetteur infrarouge comporte évidement la fonction de sélection de canal pour déterminer sur quel canal émettre.

Intégrer l’Arduino à la télécommande

La télécommande que je vous présente ici est très simple. Son cout global n’excède pas une trentaine d’euros. En effet son composant principal est un teensy2.0++ qui est compatible à 100% avec l’IDE arduino. La télécommande comporte 8 boutons en tout :

  • Deux boutons servent a régler la vitesse et changer de sens pour chaque moteur
  • Un bouton permet d’envoyer un signal de vitesse nulle pour chaque moteur
  • Un autre bouton permet d’envoyer la commande de frein pour chaque moteur.

La librairie Arduino

Le code source permettant de communiquer avec le récepteur légo est une classe. Le constructeur de cette classe prend en paramètre la broche sur laquelle vous avez branché la diode infrarouge. On utilisera que trois méthodes publiques:

  • sendCommand(int n1, int n2, int n3);
  • sendSignalString(String msg);
  • autoSend();

Chaque signal infrarouge se compose de 3 mots de 4 bits et d’un mot de vérification (checksum des 3 mots). SendCommand vous permet d’envoyer les 3 mots en entiers compris entre 0 et 15. La méthode sendSignalString, vous permet d’envoyer une chaine de caractères contenant les caractères ‘1’ ou ‘0’. Cette chaine correspond a la concaténation des trois commandes en binaire. Cette chaine devra obligatoirement faire 16 caractères. Vous aurez donc dans ce cas là calculer la valeur du checksum vous mêmes.

Le protocole

Le protocole utilisé par le récepteur légo est expliqué en détail dans le document: Lego Power Function RC v120.pdf. En effet dans ce document on comprends rapidement quels commande envoyer pour chaque comportement des moteurs voulus. J’attire votre attention sur le Combo PWM mode. Ce mode permet de contrôler les deux moteurs avec une seule commande envoyé. Pour envoyer les commandes au récepteur vous allez pouvoir utiliser la méthode sendCommand de la classe LegoRC. En effet les mots correspondent aux « nibble » de la documentation. Donc le premier mot sera un mot de configuration. Le deuxième la commande pour le moteur B et le troisième la commande pour le moteur A. Vous pouvez explorer ce document qui comporte tous les modes d’adressage supporté par le récepteur. J’ai choisi d’utiliser le Combo PWM mode car ce dernier permet d’avoir le contrôle de la vitesse. En effet chaque moteur a 7 niveaux de vitesse différente pour chaque sens.

La télécommande

telecommande lego electronique
Comme dis ci dessus, la partie électronique ne présente vraiment aucune difficulté particulière. En effet tout le travail est assuré par le micro contrôleur Teensy2.0++. J’attire cependant votre attention sur quelques détails. Je vous recommande de ne pas oublier de mettre une résistance sur la led infrarouge. Résistance d’environ 220 Ohm. Par ailleurs pour bien distinguer chaque état des boutons il faut une résistance de rappel a la masse. Il s’agit de connecter la pin d’entrée de l’inter a la masse à travers d’une résistance d’environ 30 kOhm. et le bouton positionnera cette pin au +5V lorsque le bouton est enfoncé. Par ailleurs le ciruit est entièrement auto alimenté par l’USB du teensy. Il ne faudra donc surtout pas oublier de relier les broches GND et +5V du teensy à celles du circuit.

Un grand merci à Artiom Fedorov qui nous a autorisé à reprendre son article disponible ici