Le tournoi de Mini-sumo de Nîmes existe depuis 2005. Pour résumer, il s'agit d'une confrontation entre des robots ne dépassant pas les 10cm de coté et pesant moins de 500 grammes où chaque robot tente de pousser l'autre en dehors des limites du terrain.
L'édition 2007 se déroulera à Montpellier, à l'université des sciences (Montpellier 2), que je connais très bien puisque c'est là que se trouve mon école d'ingénieur.
L'électronique d'un mini-sumo est relativement simple. Selon la motorisation, il faudra une carte de puissance pour les moteurs et un système de commande réagissant à des capteurs. Certains robots possèdent un système de relais, d'autre un microcontrôleur. Pour ma part, je dispose de deux moteurs à courants continus, et comme j'aime la programmation, je vais me servir d'un PIC 16F877. D'ailleurs par la suite, j'ajouterai une section sur la programmation.
Le matériel : Châssis et moteurs
Comme je le disais, je dispose de deux moteurs à courants continus. C'est avec ces moteurs que je ferais le premier robot. Si j'ai le temps, j'en ferais un second avec des servos.
Je me suis fourni chez Selectronic pour les moteurs. Ils sont de la marque Lynxmotion. La référence chez le revendeur est GHM-03. Voici les caractéristiques :
- Tension nominale : 7.2 VDC
- Rapport de réduction : 30:1
- Vitesse : 291 tr/mn
- Couple de blocage : 3.9kg.cm
Si j'ai choisi ces moteurs, c'est pour le compromis entre le couple de blocage, la vitesse et une tension plus basse, étant donné que je vais utiliser des piles de 9 V comme batteries. L'inconvénient, c'est leur poids : 116g pour chaque moteur, ainsi que leur encombrement. Je suis obligé de les monter en décalé pour les faire entrer dans les dimensions requises. Toutefois, malgré la perte de puissance mécanique que cela engendre, ces moteurs possèdent suffisement de couple pour pallier ce défaut.
Comme chassis, je vais utiliser une plaque de plexiglas transparente (de chez Conrad) de 10 cm de côté. L'avantage, c'est que cela correspond exactement aux dimensions maximales autorisée. Il suffira de découper la plaque pour laisser la place aux roues. Si jamais le robot est un peu trop lourd, on pourra toujours percer des trous pour allerger le chassis.
Ici, on voit le chassis en plexi du robot
Sur cette photo et les suivantes, on voit les entrailles su robot. Et on voit bien les énormes moteurs ^^. Actuellement, j'en suis à la finalisation de la programmation (euphémisme pour dire correction de bugs ^^). Ensuite je pourrais procéder aux essais.
Pour le moment, les finitions méca ne sont pas faite, c'est pour ça que le robot à cette allure peu flatteuse, mais ça va changer ^^.
Vue de coté du robot
On voit ici les entretoises qui supportent les cartes. L'avantage des entretoises en plastique, c'est la légèreté, l'inconvénient c'est le manque de rigidité. Lorsque tout est fixé, les entretoises ne sont pas aussi "tordues" que sur la photo. Une fois complètement terminé, si il me reste un peu de marge de poids je les remplacerais par des entretoises en métal.
Petite vue d'ensemble
On voit l'armature de la plaque avant avec les capteurs. Je prévois de fixer une plaque en propylène sur l'armature pour avoir le maximum de surface passant sous le robot adverse
Des entretroises serviront de support pour les cartes électroniques, ainsi que pour la plaque avant que j'ajouterai par la suite. Elles permettront aussi de fixer un capot en propylène, découpé dans des intercalaires inutilisées (j'avais prévu large quand j'étais encore étudiant).
Les roues "haute adhérence"
Toujours chez Selectronic, j'ai choisi des roues de Lynxmotion (ref : BBT-01), avec les moyeux qui vont avec pour des axes de 6mm. Il s'agit de gomme synthétique. Un peu cher, mais bonnes performances.
Le matériel : L'électronique
L'électronique de commande
Commençons par le commencement : le coeur de l'électronique de commande, j'ai nommé le PIC 16F877-04/P de la célèbre famille des PIC de Microchip. Il dispose de 5 ports d'entrées/sorties et de 3 timers entre autres. Ce sont surtout ces périphériques que le programme va utiliser.
Pour détailler un peu les choses, le port A (de 6 bits) est multipléxé avec des entrées analogiques (qui ne nous serviront pas). Il faudra donc faire attention à bien configurer tous les registres de contrôle dans le programme histoire de pas avoir de surprises ^^. Ce port sera utilisé à la fois pour la lecture des données (Ra0 et RA1) des capteurs et pour la commande du sens des moteurs (RA2 à RA5). Pourquoi? Eh bien j'ai besoin de deux entrées pour les deux capteurs, et la commande des moteurs avec le L298 (voir plus bas) nécéssite 4 signaux. Soit 6 signaux et le port dispose de 6 bits. Comme ceci, on utilise pleinement ce périphérique. De plus, comme nous avons une fonction de lecture et une fonction d'écriture sur ce port on peut modifier les commandes moteurs sans perturber la lecture et inversément. Attention à la patte RA4 qui est en "open drain" et qui nécessite une résistance de pull up pour pouvoir écrire dessus sans problèmes, chose que j'avais omis sur le schéma. J'ai du rajouter la résistance une fois la carte finie.
Le port B lui, sera utilisé pour les capteurs de ligne. Il dispose d'entrées d'intérruption sur le changement d'état sur ces mêmes entrées. C'est à dire qu'un flag d'interruption est activé si la dernière lecture du port B est différente de celle faite le coup précédent.
Le port C ne sera utilisé que pour envoyer les bit "ENABLE" du L298 pour les deux moteurs. En fait les moteurs sont tellement lents, qu'on peut les alimenter directement en continu pour bénéficier de leur vitesse maximale.
Le port D aura la charge de la gestion des signaux de commande pour les capteurs IR. Si je n'ai pas inclu ces deux dernières fonctions sur un seul port, c'est parce qu'il s'agit de deux fonction d'écriture de signaux indépendantes l'une de l'autre. Il aurait fallu intégrer la valeur à écrire sur le port C dans celles à écrire sur le port D sans que ces dernières ne modifient les premières : dans la fonction en C qui gère la commande des capteurs, il aurait fallu lui communiquer la commande enable précédente (je suis pas certain d'être clair là ^^ je reformulerai ça plus tard).
Le port E lui n'est pas utilisé.
Au niveau des timers, le timer 0 sera utilisé dans la gestion temporelle des signaux de commande des capteurs, et le timer 1 servira pour la tempo de départ de 5 secondes.
Et voici le schéma de la partie commande, réalisé avec Eagle light edition
L'électronique de puissance
Le coeur est le L298, double pont en H chargé de contrôler les deux moteurs.
Le schéma est classique. Les diodes utilisées sont à commutation rapide (Tr>200µs). c'est recommandé par la documentation de L298 mais des diodes de puissance usuelles doivent être suffisante. Les deux résistances sont optionnelles. Elles servent à contrôler le courant fourni aux moteurs (pour être utilisées pour activer un circuit de protection par exemple).
Les capteurs
j'ai utilisé les capteurs IR Sharp GP2D02. Ils fournissent la mesure de la distance en numérique sur une sortie série. Ils sont capables de mesurer de 10 à 80 cm. Si j'ai choisi ces capteurs à sortie numérique au lieu de simples capteurs à seuil, c'est pour pouvoir réaliser moi même le programme de gestion, plus complexe que pour des capteurs à seuil. Niveau rapidité de traitement de l'information, ces derniers seront plus performants. Mais j'avais envie de faire ça moi même au lieu de pomper sur des programmes trouvés sur le net. Aucun circuit annexe n'est nécessaire. Il suffit de connecter directement les capteurs au microcontôleur.
Ne pas oublier la diode de protection sur l'entrée de commande puisque la logique interne du capteur fonctionne sur du 3 volts alors que le micro fourni sur ses ports du 5 volts.
La page sur la programmation décrit l'algorithme de récupération des données.
J'utilise des HOA0149. Des capteurs tout simples. Il suffit de les monter avec des aop (LM324) en mode comparateur, avec un potentiomètre pour régler finement le seuil et on obtient un signal dès que la couleur sous le robot change. Les changements d'états doivent être des interruptions prioritaires dans le programme de gestion car toute sortie du terrain est éliminatoire.
Et voici la bête de concours entiérement montée et câblée
J'ai du enlever la plaque avant pour des raisons de poids : 501 grammes sans la plaque! Ce sont les moteurs (116 grammes chacun) qui posent problème, d'autant que leur inertie empêche de povoir changer le sens de rotation rapidement. De plus avec 174 tr/min, ils ne sont pas spécialement rapides.
Les résultats du concours
Voici un site avec les photos des participants et bientôt les vidéos des matchs :
photos/vidéos
Malheureusement pour moi, un problème d'alimentation des moteurs m'a empêché d'aller loin dans la compétition. Le circuit de puissance marchait très bien sur alim de labo mais à soudainement cessé de fonctionner avec du 9 volts pour une raison indéterminée (mais je soupçonne la qualité des pistes de la carte). Baisser la tension permettait de faire tourner les moteurs mais pour les matchs, je n'avais que des piles de 9 volts ......
Malgré ce problème les tests que j'ai pu faire avant cet incident étaient concluants. Toutefois, la portée des capteurs n'était pas optimale et les valeurs récupérées variaient beaucoup pour une distance identique. Des essais sur alim de labo en 7.5 volts m'ont quand même permi de valider les programmes écrits.
Ce fut un bon moment, et les matchs étaient passionnants. Vivement l'édition 2008 :)
Auteur : Nicolas LANGLOIS, ingénieur en microélectronique et automatique. 2007.