Construire un robot chercheur de Lumière

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

Hardware

AuthorImage:[Here we need a little image from you]

[Photo des Auteurs]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Katja et Guido Socher 

en to fr John Perr 

AboutTheAuthor:[A small biography about the author]

Katja est l'éditrice allemande de LinuxFocus. Elle aime Tux, l'infographie, les films & la photographie et la mer. Sa page personnelle est .

Guido est fan de Linux depuis la première heure parce que ce système vous donne le choix et la liberté. Cela permet de choisir et développer des solutions en accord avec ses besoins.

Abstract:[Here you write a little summary]

Dans cet article, nous décrivons comment construire un robot autonome, avec un microcontrolleur, qui essaie de se déplacer vers le point le plus lumineux.

ArticleIllustration:[One image that will end up at the top of the article]

[Illustration]

ArticleBody:[The main part of the article]

Introduction

Il y deux ans, nous avons décrit dans LinuxFocus un robot marcheur contrôlé par Linux. Il avait une conception très spéciale car il marchait sur ses pattes sans l'aide de moteurs conventionnels. Ce fut un aspect très intéressant du robot. Toutefois, il était très lent, demandait de fort courants et nécessitait des composants spécifiques ainsi qu'un certain doigté pour sa construction.

La conception de notre nouveau robot est très différente. Il est bon marché et vous pourrez le construire à partir de composants facilement disponibles partout dans le monde. C'est un robot contrôlé par un microcontrolleur AVR. Comme il est autonome (c'est à dire non contrôlé par une personne) nous l'avons programmé pour qu'il se dirige vers la source de lumière la plus brillante de la pièce.

La mécanique


[Moteur conrad]
Le petit moto-réducteur de chez Conrad
[servo-moteur]
Un servomoteur standard modifié pour fonctionner comme un moteur. Il s'agit sûrement de la meilleur solution, mais l'idée ne nous est venue qu'après la construction du robot

Le robot n'a que deux roues entraînées par deux moteurs indépendants. La troisième roue est une balle de ping-pong. Cette configuration permet au robot de tourner sur place. Les roues en caoutchouc provienne d'un jouet mais vous n'aurez pas à cassez les vôtres. Le couvercle d'un pot à confiture, pourvu d'un élastique constitue une roue très acceptable.

Il est évident qu'un robot autonome doit pouvoir fonctionner à partir de piles. Étant donné que le microcontrolleur fonctionne avec une tension de 4,5 à 5 Volts, il doit en être de même avec les moteurs. Il doivent aussi avoir une consommation qui permette d'avoir des piles et un circuit de contrôle de taille raisonnable. Nous utilisons pour cela un circuit intégré dédié au contrôle des moteurs, le l293d. Il peut supporter des charges jusqu'à 0,5A. Les moteurs devront par conséquent avoir besoin de moins de 0,5A dans le pire des cas.
Nous avons utilisé deux petit moto-réducteurs de chez Conrad (www.conrad.fr, référence 242802) mais vous pouvez utiliser n'importe quel petit moto-réducteur. Nous pensons que le meilleur solution aurait été d'utiliser des servomoteur de modélisme comme ceux montés sur les bateaux, les voitures ou les avions. Normalement, ces servomoteurs sont limités angulairement mais cela peut être corrigé en ouvrant la boite et en enlevant la butée, le potentiomètre et l'électronique. C'est un parfait petit moteur puissant et facile à trouver.

[moteur sur planchette 1]

Pour construire le robot, monter les moteurs sous une planchette de bois (12cm x 9cm) et placer les quasiment au milieu afin que la charge repose sur les deux axes. La troisième roue, la balle de ping-pong, ne devra supporter qu'un faible partie du poids du robot afin qu'elle glisse facilement dans son logement (voir les dessins).

[moteur sur planchette 2]

Le logement de la balle de ping-pong est réalisé à partir du couvercle d'une petite bouteille en plastique qui se trouve avoir la bonne taille.
[Boîte de pilules]


L'alimentation est assurée par trois piles de taille AAA. Les positions des trois supports sont indiquées ci-dessous. Les piles sont plutôt lourdes, c'est pourquoi il faut faire attention à placer la majorité du poids sur les roues et un peu sur la balle de ping-pong. Un interrupteur marche-arrêt peut être placé sur le coté.

[position des piles]

Les capteurs

Notre robot a deux types de capteurs: Les capteurs de contact sont de simple interrupteurs faits de tige d'acier. Elles sont pliées comme indiqué ci-dessous:
[Fil d'acier]


Il y a quatre capteurs de contact, montés avec des vis sur les coins de la planchette.

Quand le robot rencontre un objet, la tige d'acier (2, figure ci-dessous) touche le second conducteur sur la planche (3) et cela ferme un circuit.

Afin d'éviter de tordre les fils d'acier quand la balle de ping-pong n'est pas dans son logement, nous avons ajouté un support en bois (1) sous le châssis. Il doit être 5 mm au dessus du sol quand la balle de ping pong est dans son logement.
Les tiges d'acier des contacts doivent avoir une garde de 5-7mm au dessus du sol.
[Capteurs de contact]

Les capteurs de lumière sont 3 photo résistances entre lesquelles nous avons placé des masques en carton comme le montre la figure ci-dessous. Ces masques créent des ombres sur les résistances quand la lumière vient de coté. Au cas où la lumière vient exactement du dessus, les trois capteurs recevront la même quantité de lumière. La comparaison des valeurs des trois résistances permettra de déterminer la direction à prendre.

Vous pouvez souder les trois résistances sur un petit morceau de circuit imprimé d'expérimentation (ceux avec beaucoup de trous) et fixer l'ensemble au robot avec une unique vis.
[Capteurs photo-sensibles] [position des capteurs photo-sensibles]

La façon de connecter les capteurs et les moteurs au circuit imprimé du microcontrolleur sera expliquée plus tard. Maintenant que la partie mécanique est réalisée, jetons un oeil au cerveau du robot.

Le Circuit

Nous utilisons un microcontrolleur AT90S4433 comme cerveau de notre robot mais ce cerveau ne peut délivrer suffisamment de puissance pour faire marcher les moteurs. C'est là que le circuit de puissance L293D intervient. Il contient quatre amplificateurs digitaux munis de diodes de protection contre les surtensions dues aux bobinages des moteurs. Cela permet aussi de piloter le moteur dans un sens ou dans l'autre.
l293d

Un des moteur est relié entre les sorties 1 et 2 et l'autre entre les sorties 3 et 4. La broche "enable" permet de contrôler la vitesse des moteurs en changeant la longueur des impulsions envoyées à cette broche.

Le reste du circuit est très simple: Nous utilisons encore le microcontrolleur Amtel AT90S4433. Nous avons déjà utilisé ce microcontrolleur dans des articles précédents de LinuxFocus. Ses entrées analogiques peuvent être utilisées pour mesurer la quantité de lumière perçue par les photo résistances et les entrées digitales permettront de connecter les détecteurs de contact comme montré ci-dessous.

Les informations détaillées sur le microcontrolleur se trouvent dans l' article de Mars 2002 : Programmer le Microcontrolleur AVR avec GCC du même auteur.

circuit

Le circuit est alimenté en 4.5V. Trois piles de taille AAA batteries sont par conséquent suffisantes pour le fonctionnement du robot.

Le circuit de notre robot autonome devrait maintenant être prêt. Toutefois, se pose la question de savoir quoi faire si le robot ne fonctionne pas comme prévu à cause du logiciel. Rien n'est accessible, ni les valeurs des photo-résistances ni les décisions prises par le robot. Il nous faut une sorte d'écran ou d'affichage pour comprendre ce que fait le robot. L'interface série RS232 est bien adaptée à ce besoin car il est possible d'y afficher des contenus de variables et même de communiquer avec le robot. On peut par conséquent implanter le max232 et les autres composants nécessaires à la liaison série sur une platine séparée et la connecter à la demande:
Adaptateur rs232

Un lien donné en fin de cet article permet de télé-charger le circuit complet au format Eagle, avec le dessin du circuit imprimé et l'implantation des composants ainsi que le logiciel du robot. Nous ne décrirons pas l'implantation des composants ici, elle est visible avec Eagle. Le circuit est suffisamment petit pour se loger entre les piles.

Le dessin ci-dessous montre le brochage des capteurs de contact ainsi que comment connecter les moteurs. La polarité des moteur est choisie de telle sorte que le robot avance (dans le sens de la flèche) si +3V sont appliqués à la broche "+" et la masse à la broche "-". 1y à 4y sont les noms des broches du l293d.

[Connexions]

Le Logiciel

Nous n'entrerons pas dans les détails ici. Le programme principal se trouve dans le fichier linuxrobot.c (Télé-chargez le à la fin de l'article). Il y a beaucoup de commentaires dans le programme ce qui devrait en rendre la lecture facile pour un programmeur C. La boucle principale mesure d'abord les valeurs des photo résistances en activant 3 fois le convertisseur analogique-digital interne du microcontrolleur en mode "single shot". Les capteurs de contact sont ensuite testés et si l'un d'eux est actif, alors il a priorité sur les capteurs de lumière car le robot à probablement heurté un obstacle. Le moteur opposé au détecteur sera alors activé quelques millisecondes. Si aucun détecteur de contact n'est actif, alors les photo résistances sont comparées entre elles. La comparaison se fait dans la fonction compare_with_tol(). Pour éviter les perturbations dues au bruit, deux valeurs sont dites égales si leur différence est inférieure à 5 pour cent.

Selon les résultats de la comparaison des photo résistances, le choix du moteur à faire tourner est fait. Comme il n'y a que deux roues sur notre robot, il peut tourner sur place en faisant tourner une des roues plus vite ou même en faisant tourner les deux en sens inverse. La mesure étant effectuée plusieurs fois par secondes, le mouvement du robot semble continue même si nous arrêtons un moteur une fraction de seconde afin de tourner un peu à droite ou à gauche.

Montage final

En montant l'électronique, c'est toujours une bonne idée de procéder par étapes. Ceci permet de mieux cerner les éventuels défauts.

Il y a trois programmes de test différents inclus dans le paquetage logiciel du robot. Le programme ledtest fait clignoter les deux leds. Il se charge avec la commande "make ledtestload". Ceci compilera le programme et le chargera dans le microcontrolleur. Les deux leds doivent commencer à clignoter immédiatement après le chargement du programme. Une fois ce test réussi vous êtes certain que le microcontrolleur avec son oscillateur et les connexions de chargement depuis le PC sont fonctionnels.

Viens ensuite le programme de test du moteur. Il réalise une "balle en caoutchouc électronique" et se charge avec la commande "make motortestload". Le programme motortest vérifie les les capteurs de contact en permanence et déplace le robot à l'opposé de tout capteur actif. En touchant le robot avec une main d'un coté il rebondira. En mettant la deuxième main derrière le robot il rebondira d'avant en arrière entre vos deux mains comme une balle de caoutchouc. Si le robot réussi cet essai alors tout aura été vérifié excepté les capteurs de lumière et la liaison RS232.

Viens ensuite le programme d'essai final appelé adctest (compiler et charger le avec make adctestload). Le programme teste la connexion RS232 qui sert à déverminer le robot et à tester les 3 photo résistances. Chargez le programme dans le microcontrolleur et connectez l'adaptateur RS232 à votre PC. Lancer ensuite les 3 commandes suivante dans un terminal:
make ttydevinit
./ttydevinit /dev/ttyS0
cat /dev/ttyS0
Le robot devrait périodiquement afficher les valeurs des intensité lumineuses qu'il a mesuré avec les capteurs photo sensibles.

Une fois tous les essais réussis, vous pouvez charger le programme final dans le robot avec la commande "make load". La meilleure aire pour les premiers essais est une pièce avec juste une lampe en son centre. Le robot devrait aller droit dans la direction de la lampe et s'arrêter là.

Il est amusant de voir comment il se retourne si vous le poser sur le sol le dos à la lumière ou comment il évite les ombres.

Problèmes et améliorations

Nous avons commencé ce robot à titre d'essai. ce fut amusant de construire un robot autonome, capable de prendre seul des décisions et qui n'a pas de connexion au PC. Le programme inclus dans le paquetage que vous pouvez télé-charger à la fin de cet article est encore petit et simple mais fait ce que nous lui avons demandé: Le robot court vers le point le plus lumineux.

Voici quelques idées de développements complémentaires: Dans sa version actuelle le programme du robot linux est suffisamment petit et simple pour être compris et étendu. Il n'utilise que 50% de la mémoire disponible du microcontrolleur 4433, ce qui laisse beaucoup de place pour des extensions.

Un point positif de ce robot est son matériel qui est générique: Il est constitué de deux moteurs et quelques capteurs attachés au microcontrolleur. Toute la logique est logicielle. Cela signifie que tout peut être changé à souhait.

Voici une photo du robot en position d'essai. Nous avons juste mis un bloc de post-it dessous afin d'éviter qu'il ne se sauve. La ligne RS232 est connectée pour des besoins de déboguage.


... et le robot robot fini cherchant la lumière....:

Références