Un robot pour débutant

Un profilé en aluminium, deux roues et naturellement une touche d’électronique et le jeu est fait !

Un groupe d’élèves électroniciens a su mettre en pratique les connaissances acquises sur les bancs de l’école pour réaliser un robot simple dont “l’intelligence” tient dans un petit microcontrôleur adéquatement programmé. 

Caractéristiques techniques :

- Alimentation : 4 piles bâtons ;

- Courant maximum consommé 40 mA ;

- Mouvement par deux moteurs CC ;

- Détecteurs d’objets avec fin de course ;

- Détecteurs de bord de table à infrarouges ;

- Contrôle à microcontrôleur (16F84A).


La microrobotique représente pour les élèves des Écoles supérieures d’électronique une activité pluridisciplinaire à même de faire converger des études réalisées dans des domaines différents et d’accroître leur motivation, tout en les aidant à comprendre les potentialités et les limites propres au monde technologique qui nous entoure.


Notre réalisation

Cet article présente un projet qui arrive tout droit du labo d’une de ces Écoles. Pour sa réalisation, de nombreuses connaissances acquises dans les domaines de l’informatique et de l’électronique et, bien sûr, les derniers progrès des microcontrôleurs ont été mis à contribution. Le robot que nous allons à notre tour construire a été développé en tant que production finale par des élèves de cinquième année. Le point de départ du projet fut de concevoir un petit robot capable de se déplacer de manière autonome sur une table (et sans tomber par terre !).

La présence de deux capteurs à infrarouges tournés vers la surface de la table permet au robot de détecter le bord et, au moyen de manoeuvres programmées, de s’arrêter, de tourner sur lui-même et de reprendre son avancement sans tomber.

Les interrupteurs de fin de course situés sur sa partie antérieure détectent des obstacles éventuels et permettent au robot de s’arrêter et de les contourner. Le premier travail de robotique a consisté à faire simple et à n’utiliser que des composants faciles à trouver et bon marché : la partie mécanique a aussi été réduite à l’essentiel.


Description de la mécanique

Pour faire avancer le robot on a choisi deux motoréducteurs Micro-Motors modèle L149.12.43 dont la particularité est leur très faible composante inductive et leur consommation de courant très réduite. Elle nous a permis de relier directement les moteurs à la ligne du PIC et d’économiser ainsi un étage de puissance. Les diodes présentes à l’intérieur du microcontrôleur permettent d’atténuer les petites surtensions dues à la composante inductive des moteurs durant les commutations. Toujours dans ce but, nous avons prévu au niveau du logiciel l’adjonction d’une petite pause afin d’éviter une inversion de marche instantanée des moteurs.

Les dimensions réduites de ces derniers permettent de réaliser un robot petit, compact et facilement utilisable sur une table. La mécanique se réduit à une simple plaque métallique profilée (en aluminium) en U.

A l’intérieur du U sont fixés les moteurs et sur le plateau supérieur on a fixé le circuit imprimé principal.

Pour les connexions électriques on s’est servi de simples connecteurspour circuit imprimé. De chaque côté de la partie avant se trouvent des capteurs infrarouges câblés sur deux toutes petites platines et destinés à détecter les bords de la table ; les interrupteurs de fin de course sont eux aussi montés à l’avant mais sur le plateau supérieur.

Afin de permettre une détection très précoce de l’obstacle, le levier du fin de course a été allongé par un morceau de fil métallique. Comme on veut utiliser le robot sur une table lisse, sans aspérités, on a décidé de ne pas monter une roue supplémentaire (habituellement un élément pivotant) et de laisser le robot s’appuyer sur un des côtés de sa structure métallique. Ses dimensions sont d’environ 15 x 15 cm.

L’alimentation est constituée par un bloc de quatre piles bâtons (ou batteries rechargeables au Ni-Cad) : elles sont fixées par quatre Velcro à l’intérieur du U, de manière à maintenir le barycentre le plus bas possible et d’obtenir une stabilité optimale au cours de la marche. Les roues sont en plastique et ont été usinées spécialement pour cet usage ; elles ont été striées sur le bord externe afin d’augmenter l’élasticité et, partant, d’accroître l’adhérence.


Le schéma électrique

Les quatre batteries rechargeables fournissent une tension d’environ 4,8 V déjà stabilisée alimentant le circuit : aucun régulateur n’est ainsi nécessaire. Au moment des tests, le robot a été alimenté avec des piles : on arrive alors à la tension maximale admissible par le microcontrôleur mais la puce fonctionne parfaitement. Le PIC16F84A (U1) est le coeur du circuit et il sursoit à toutes les opérations : les deux moteurs lui sont donc directement connectés, ainsi que les deux capteurs à infrarouges CNY70.

Comme le montre le schéma électrique de la figure 1, ces capteurs se composent d’une diode émettrice à infrarouges et d’un phototransistor, les deux éléments étant inclus dans le même boîtier et tournés du même côté (voir figure 6).

Le faisceau émis par le phototransistor est reflété par la surface se trouvant en face (dans ce cas la surface de la table) et revient frapper le récepteur, ce qui fait conduire le phototransistor : cela confirme la présence de la surface réfléchissante utile (le support sur lequel le robot évolue) sous le capteur, c’est-à-dire sous les roues du robot.

Quand en revanche ce dernier arrive au bord de la table, le faisceau lumineux “tape” dans le vide, il n’est pas réfléchi et le récepteur n’est pas illuminé : le phototransistor est bloqué, le microcontrôleur s’en aperçoit et agit en conséquence. Deux trimmers sont associés aux capteurs : R1 et R2 permettent d’en régler la sensibilité.

Les trimmers sont réglés pour permettre aux capteurs et donc au micro de déterminer si la surface de la table est présente ou non : ainsi, quand le robot arrive au bord de la table, il s’arrête et retourne en arrière.

Cela fonctionne mieux avec une table de couleur claire, si possible bien lisse, permettant une réflexion plus intense.

Avec une table de couleur sombre et une surface faiblement réfléchissante, des problèmes pourraient se produire à propos de cette détection (de présence du “sol”). La reconnaissance d’obstacles éventuels sur la ligne de marche du robot est confiée à deux interrupteurs de fin de course mécaniques dont le contact est en série avec le signal provenant des capteurs infrarouges et ils font accomplir au robot les mêmes fonctions.

L’orientation correcte de la liaison des moteurs se fait simplement par essais : quand le robot est sur la table et qu’il ne rencontre pas d’obstacles, la marche en avant doit être rectiligne.

Sur le circuit imprimé principal on trouve peu de composants (voir figures 2a et 3) : un quartz et une LED signalant la mise sous tension du robot à l’aide de l’interrupteur à glissière SW3 ; plus quelques résistances et les deux trimmers dont nous avons traité. C’est tout et cela nous conduit à la réalisation pratique des platines.

Figure 1 : Schéma électrique de la platine de contrôle.


Liste des composants

R1 : trimmer 47 k

R2 : trimmer 47 k

R3 : 220 1%

R4 : 10 k 1%

R5 : 10 k 1%

R6 : 1 k

R7 : 1 k

C1 : 22 pF céramique

C2 : 22 pF céramique

C3 : 100 nF 63 V polyester

LD1 : LED 3 mm verte

T1 : CNY70

T2 : CNY70

Q1 : quartz 4 MHz

SW1 : interrupteur de fin de course

SW2 : interrupteur de fin de course

SW3 : commutateur à glissière vertical

U1 : PIC16F84A-EF659 déjà programmé en usine

M1 : motoréducteurs Micro-Motors L149.12.43

M2 : motoréducteurs Micro-Motors L149.12.43

Divers :

1 support 2 x 9

1 un porte-piles 4 x 1,5 V

2 barrettes mâles 4 broc hes

5 barrettes mâles 2 broches

Sauf spécification contraire, toutes les résistances sont des 1/4 W à 5 %.




La réalisation pratique

Il n’y a aucune difficulté particulière et un débutant, s’il est un peu soigneux, s’en sortira très bien.

Tout d’abord préparez le circuit imprimé simple face dont la figure 2b vous donne le dessin à l’échelle 1:1 ou procurez-vous le. Montez tout d’abord le support du PIC, les deux barrettes et les cinq connecteurs périphériques, puis vérifiez bien ces premières soudures (ni court-circuit entre pistes ou pastilles ni soudure froide collée).

Ensuite, en suivant scrupuleusement les indications de la figure 2a (et la liste des composants) et de la figure 3, montez tous les composants en commençant par ceux ayant le plus bas profil (comme les résistances, la LED, les condensateurs céramiques et polyesters et en terminant par les plus encombrants comme le quartz (à monter couché), le commutateur à glissière et les deux trimmers. Faites bien attention à l’orientation des composants actifs (LED et PIC, repèredétrompeur en U vers l’extérieur de la platine pour ce dernier, mais ne l’insérez qu’à la fin).

A côté réalisez les deux petites platines des photocoupleurs dont la figure 4b vous donne le dessin à l’échelle 1: 1 ou procurez-vous le. Montez-y les photocoupleurs, comme le montrent les figures 4a et 5.

Fixez la grande platine sur le dessus du profilé d’aluminium, comme le montrent les photos de l’article. Montez les deux petites platines à l’avant, à l’intérieur du U. Toujours à l’avant, mais sur le dessus du profilé, fixez les deux interrupteurs de fin de course (dont vous aurez prolongé les leviers avec du fil rigide et de la gaine thermorétractable). Fixez les deux moteurs sur le bâti (voir sur le site de la revue). Fixez le bloc de batteries rechargeables à l’intérieur du U avant du Velcro et reliez-le à la platine.

Reliez, au moyen de nappes à connecteurs, les deux petites platines à la grande et à cette dernière les deux interrupteurs et les moteurs. Le robot alimenté est prêt à fonctionner.

Comme réglage, vous n’avez qu’à régler l’orientation des moteurs pour une marche rectiligne et la sensibilité des capteurs au moyen des trimmers en fonction de la réflectivité du support (le plateau de la table).

Figure 2a : Schéma d’implantation des composants de la platine de contrôle.


Figure 2b : Dessin, à l’échelle 1, du circuit imprimé de la platine de contrôle.


Figure 3 : Photo d’un des prototypes de la platine de contrôle.


Toutes les fonctions sont gérées par un microcontrôleur PIC16F84 qui analyse les informations provenant des deux capteurs optiques CNY70 et pilote directement les moteurs CC.

Les deux capteurs sont montés sur deux petites platines (voir détails figure 5) et sont en mesure de détecter quand et de quel côté du bord de la table sur laquelle le robot se déplace.


Figure 4a : Schéma d’implantation des composants d’une des deux platines supportant les capteurs.


Figure 4b : Dessin, à l’échelle 1, du circuit imprimé d’une des deux platines supportant les capteurs.


Figure 5 : Photos du prototype d’une des deux platines supportant les capteurs et du capteur.


Figure 6 : La réflexion du rayon infrarouge produit et détecté par le CNY70 permet d’établir quand, sous le robot, la surface de la table sur laquelle il évolue cesse d’être présente.


Le programme résident du PIC

Ce “listing”, écrit en Assembleur, configure en entrées les lignes RB0 et RB1 et comme sorties RA0-RA3. Il est prévu que le robot évite de la même façon les obstacles et le bord de la table : les signaux à gérer sont ceux que le Tableau 1 reporte.


TABLEAU 1



Les quatre sorties, comme le montre le Tableau 2, commandent les moteurs.


TABLEAU 2



Figure 7 : Organigramme


Figure 8 : “Listing” en Assembleur.


LIST    P=16F84A

        INCLUDE     <P16F84a.INC>

conta   EQU     0CH

        org     0

        goto    setup

        org     4

Interrupts

        decf    conta             ;décompte compteur chaque 0.065 sec

        movlw   0H

        movwf   TMR0              ;met «timer» à zéro

        bcf     INTCON,T0IF       ;détecte l’interruption

        retfie                    ;retourne au point du programme

                                  ;avant les interrupts

setup

        clrf    conta             ;met compteur à zéro

        bsf     STATUS,RP0        ;sélectionne pupitre1

        movlw   0FFH

        movwf   TRISB             ;port B en sortie

        movlw   00H

        movwf   TRISA             ;port A en entrée


        movlw   B’11010111’       ;prescaler (256) sur TMR0

        movwf   OPTION_REG


        bcf     STATUS,RP0        ;sélectionne pupitre0

        bsf     INTCON,T0IE       ;habilite interrupts du timer

        bsf     INTCON,GIE        ;habilite les interrupts

        clrf    PORTA             ;met à zéro toutes les sorties

RIPETI

        movlw   0AH               ;avance

        movwf   PORTA

        btfsc   PORTB,0           ;collision FCDX

        goto    FCDX

        btfsc   PORTB,1           ;collision FCSX

        goto    FCSX

        goto    RIPETI

        ;*********************************************************

                                  ;le robot a rencontré un objet sur sa DX

FCDX

        ;*********************************************************

        ;moteur arrêté

        clrf    PORTA             ;arrête moteur

        movlw   0BH               ;paramètre retard

        call    delay

        ;*********************************************************

        ;active commande arrière

        movlw   05H               ;arrière toute

        movwf   PORTA

        movlw   19H               ;paramètre retard

        call    delay

        ;**********************************************************

        ;moteur arrêté

        clrf    PORTA

        movlw   0BH               ;paramètre retard

        call    delay

        ;*********************************************************

        ;tourne à SX

        movlw   06H

        movwf   PORTA             ;tourne SX

        movlw   19H               ;paramètre retard

        call    delay

        ;**********************************************************

        ;arrêt des moteurs

        clrf    PORTA

        movlw   0BH               ;paramètre retard

        call    delay

        goto    RIPETI

        ;*********************************************************

                                  ;le robot a rencontré un objet sur sa SX

FCSX

        ;*********************************************************

        ;moteur arrêté

        clrf    PORTA             ;arrête moteur

        movlw   0BH               ;paramètre retard

        call    delay

        ;*********************************************************

        ;active commande arrière

        movlw   05H               ;arrière toute

        movwf   PORTA

        movlw   19H               ;paramètre retard

        call    delay

        ;**********************************************************

        ;moteur arrêté

        clrf    PORTA

        movlw   0BH               ;paramètre retard

        call    delay

        ;*********************************************************

        ;tourne à DX

        movlw   09H

        movwf   PORTA             ;tourne DX

        movlw   19H               ;paramètre retard

        call    delay

        ;**********************************************************

        ;arrêt des moteurs

        clrf    PORTA

        movlw   0BH               ;paramètre retard

        call    delay

        goto    RIPETI

        ;**********************************************************

                                  ;sous programme de retard (le retard est passé avec W)

                                  ;chaque comptage=0,065sec (pour retard de 1sec W=15)

delay

        movwf   conta             ;met la valeur de W sur compteur

atd

        movf    conta,0           ;met la valeur du compteur sur W

        btfss   STATUS,2          ;contrôle si compteur=0

        goto    atd

        return

        end


Le robot contourne les obstacles et le bord de table car chaque fois que les capteurs s’activent il réagit immédiatement en exécutant la manoeuvre appropriée.

D’abord il revient légèrement en arrière, puis il tourne sur lui même dans le sens opposé à la présence de l’obstacle et il poursuit sa marche.

Pour mieux comprendre le fonctionnement, regardez l’organigramme de la figure 7 et le “listing” en Assembleur de la figure 8.

On voit qu’un premier bloc nommé “setup” configure le PIC et prédispose l’interrupt du “timer” qui nous servira à obtenir les temps de pause des moteurs. Le bloc principal (“Ripeti”) contrôle constamment l’état des capteurs : dès qu’il détecte le signal d’alarme, il saute aux sous programmes “FCDX” ou bien “FCSX” lesquels font exécuter au robot la manoeuvre d’évitement.

Le retard est reporté dans le sous programme “delay” lequel reçoit, par la valeur contenue dans le registre Working, la valeur de retard.


Conclusion

Les objectifs qu’ils s’étaient fixés ont été atteints par les élèves et cela les a beaucoup récompensés de leur investissement en temps et en travail. Au cours de la réalisation, de nouvelles pistes sont apparues pour des développements futurs.

L’intérêt suscité par ce projet a été utile, non seulement à des fins didactiques, mais aussi en tant qu’expérience de travail en groupe (c’est-à-dire de respect mutuel et de nécessaire collaboration).

À Découvrir

Schema Electronique