5
Elektor 12/99 Un robot n’étant pas en mesure de connaître les positions d’objets pou- vant se mouvoir, il faut lui donner les moyens de détecter des obstacles en temps réel. Les êtres humains ont, pour cela, leur vue. Si donner la vue à un robot paraît une solution idéale, il est relativement coûteux et extrême- ment difficile de concevoir un système de vision pour robots. Heureusement, la détection d’obstacles ne requiert pas nécessairement un dis- positif aussi complexe qu’une « machine à voir ». On pourra se contenter d’un système bien plus simple. Certains robots utilisent un RADAR ou SONAR (que l’on appelle également SODAR lorsqu’il est utilisé non pas dans l’eau mais dans l’air). Un système encore plus simple consiste à utiliser de la lumière infrarouge pour illuminer le chemin du robot et détec- ter la réflexion de ce rayonnement sur un objet. De par la popularité crois- sante des télécommandes à infrarouge (IR), les émetteurs et détecteurs IR sont devenus monnaie courante et ce pour 3 fois rien. Nous allons voir, dans le présent article, comment doter le BoE-Bot de capteurs IR et s’en servir pour permettre au robot de contourner des objets placés sur son chemin. Nous verrons du même coup comment programmer des calculs simples dans le BASIC Stamp et générer des nombres aléatoires. La liste des composants requis est donnée à proximité du schéma de la figure 18. En tant que conducteur d’un véhi- cule quel qu’il soit, vous connais- sez l’application pratique du prin- cipe d’exclusion de Pauli : il est impossible, à 2 objets, d’occuper simultanément le même endroit. Ce qui vaut pour des voitures vaut tout autant, sinon plus, pour des robots. Un robot autonome se doit s’éviter d’entrer en collision avec des obstacles. Ces obs- tacles peuvent être inanimés, un mur, une chaise, ou mobiles comme un chien, une personne voire un autre robot. 24 par Al Williams cours de programmation du BASIC Stamp (4) 4 ème partie : l’allée des obstacles Servo P3 V in V SS V SS Servo P15 990050 - 4 - 11 V in V DD V DD V SS 10k 10k 3300µF 1k 1k2 500discharge threshold trigger control output reset Timer 555 GND DD 2 7 6 3 8 V 1 4 5 10n 10n P5 P6 17 Figure 17. Circuits de l’oscillateur et de la commande du moteur. MICROPROCESSEURS

cours de programmation du BASIC Stamp (4) - …a.moirier.free.fr/Vibrations/Parallax/Basic Stamp/Programmation... · Circuits de l’oscillateur et de la ... Elektor 12/99 25 Servo

Embed Size (px)

Citation preview

Page 1: cours de programmation du BASIC Stamp (4) - …a.moirier.free.fr/Vibrations/Parallax/Basic Stamp/Programmation... · Circuits de l’oscillateur et de la ... Elektor 12/99 25 Servo

Elektor 12/99

Un robot n’étant pas en mesure deconnaître les positions d’objets pou-vant se mouvoir, il faut lui donner lesmoyens de détecter des obstacles entemps réel. Les êtres humains ont,pour cela, leur vue. Si donner la vue àun robot paraît une solution idéale, ilest relativement coûteux et extrême-ment difficile de concevoir un systèmede vision pour robots.Heureusement, la détection d’obstaclesne requiert pas nécessairement un dis-positif aussi complexe qu’une« machine à voir ». On pourra secontenter d’un système bien plussimple. Certains robots utilisent unRADAR ou SONAR (que l’on appelleégalement SODAR lorsqu’il est utilisénon pas dans l’eau mais dans l’air). Un

système encore plus simple consiste àutiliser de la lumière infrarouge pourilluminer le chemin du robot et détec-ter la réflexion de ce rayonnement surun objet. De par la popularité crois-sante des télécommandes à infrarouge(IR), les émetteurs et détecteurs IR sontdevenus monnaie courante et ce pour3 fois rien.Nous allons voir, dans le présent article,comment doter le BoE-Bot de capteursIR et s’en servir pour permettre aurobot de contourner des objets placéssur son chemin. Nous verrons dumême coup comment programmer descalculs simples dans le BASIC Stamp etgénérer des nombres aléatoires. La listedes composants requis est donnée àproximité du schéma de la figure 18.

En tant que conducteur d’un véhi-cule quel qu’il soit, vous connais-sez l’application pratique du prin-

cipe d’exclusion de Pauli : il estimpossible, à 2 objets, d’occupersimultanément le même endroit.

Ce qui vaut pour des voitures vauttout autant, sinon plus, pour des

robots. Un robot autonome sedoit s’éviter d’entrer en collision

avec des obstacles. Ces obs-tacles peuvent être inanimés, un

mur, une chaise, ou mobilescomme un chien, une personnevoire un autre robot.

24

par Al Williams

cours de programmation duBASIC Stamp (4)4ème partie : l’allée des obstacles

Ser

vo

P3

Vin

VSS

VSS

Ser

vo

P15

990050 - 4 - 11

Vin

VDD

VDD

VSS

10k

10k

3300µF

1k1k

2

500Ω

discharge

threshold

trigger

control

output

reset

Timer

555

GND

DD

2

7

6

3

8

V

1

4

5

10n 10n

P5

P6

17

Figure 17. Circuits del’oscillateur et de lacommande du moteur.

MICROPROCESSEURS

Page 2: cours de programmation du BASIC Stamp (4) - …a.moirier.free.fr/Vibrations/Parallax/Basic Stamp/Programmation... · Circuits de l’oscillateur et de la ... Elektor 12/99 25 Servo

B A S E S D E L ’ I RIl est simple, en théorie, de détecter unobjet par rayonnement IR. Il suffit eneffet de projeter de la lumière IR (pro-duite par une LED) vers l’avant etd’utiliser un détecteur pour capter lalumière réfléchie. Les choses se com-pliquent quelque peu en pratique. Sil’on s’en tient à cette approche sim-pliste, le détecteur ne cessera de géné-rer des fausses alarmes en raison de laprésence d’un rayonnement IRambiant naturel.Pour éviter ces déclenchements intem-pestifs, on préfère utiliser des capteurssensibles à de l’IR modulé à une fré-quence donnée et moduler la source IRà cette même fréquence. Sur les télé-commandes du commerce, la fré-quence de modulation est de 38 kHz.On trouve des capteurs IR sensibles àcette fréquence.Si le BASIC Stamp serait bien enmesure de moduler la source lumi-neuse, il n’est pas capable, simultané-ment, et de piloter la LED et d’interro-ger le capteur. Il va donc nous falloirutiliser un circuit externe pour lamodulation de la LED.Une autre amélioration consiste à doterle robot de 2 capteurs (et, si possible,également de 2 LED). On disposeral’un des capteurs sur le côté gauche durobot, l’autre sur sa partie droite. Cecipermet de détecter un objet et dedéterminer sa position relative par rap-port au robot. Si un seul des capteursest activé cela signifie que l’objet setrouve sur le côté correspondant. Uneactivation des 2 capteurs signifie quel’objet se trouve « à midi » commedisent les aéronautes.

L ’ O S C I L L A T E U RLes LED IR sont des composants cou-rants aujourd’hui; leur fonctionnementest celui d’une LED ordinaire. On peututiliser un oscillateur à base de tempo-risateur 555 (cf. le schéma de lafigure 17) pour la modulation des LED.Les LED émettent lorsque l’entrée P5(RAZ du 555) se trouve au niveau haut.La sortie de l’oscillateur attaque labroche 6 du BASIC Stamp. Cetteconnexion n’est requise pour le fonc-tionnement du robot, mais elle permetune calibration de l’oscillateur pour lefaire travailler à 38 kHz.On chargera et lancera le programmedu listage 4 pour effectuer la calibra-tion. L’affichage donne la fréquence enhertz. L’ajustage de la fréquence se faitpar action sur le potentiomètre. Lesignal de sortie doit être proche de38000. Le 555 n’est pas un modèle destabilité mais l’affichage devrait resteraux alentours de 38 kHz.Comme les LED IR n’émettent pas delumière visible, il se peut que l’on aitdes doutes sur leur fonctionnement.On pourra mesurer le courant directedes LED, de l’ordre de 1,2 V, entre les

broches de la LED. Si vous mesurez del’ordre de 5 V, il est probable que vousayez commis une erreur de polarité(normalement, la connexion la pluslongue est, dans le cas d’une LEDintacte, l’anode; c’est la patte à relier auBASIC Stamp).Un autre moyen de vérifier le fonc-tionnement des LED IR consiste à uti-liser une carte de plastique spécial quipermet de visualiser la lumière infra-rouge, outil dont disposent les servicesaprès-vente pour tester les télécom-mandes. On doit pouvoir acheter cetype de carte chez certains magasins deréparation de TV. On peut égalementutiliser le « testeur de télécommandesI.R. » décrit dans le numéro 241/242(juillet/août 1998) d’Elektor.

D É T E C T I O N I . R .Une fois que vous vous êtes assuré dufonctionnement correct des LED ilvous faudra connecter les capteurs IR(cf. figure 18). Ces capteurs ont la formed’un transistor doté d’un côté bombé.Cette bosse constitue la zone sensible.En dépit de leurs 3 broches, il ne s’agitpas de transistors. 2 des broches véhi-culent la tension d’alimentation (+ etmasse) vers capteur. La dernièrebroche génère un niveau logique bas(« 0 ») en cas de détection, par ce com-posant, de lumière IR. Nous avons sou-vent utilisé le SFH505/6 de Siemens etla série ISU de Sharp dans nos mon-tages. Nous suggérons cette fois d’uti-liser un 4602 de Panasonic.Le montage des capteurs et des LEDpeut être délicat, vu qu’il dépend de laconstruction de votre robot. Il vousfaudra orienter les LED vers l’avant etréduire les fuites latérales. On pourraitpenser à utiliser une courte longueurde gaine thermorétractable à position-ner sur les LED, voire un morceau de« paille » –pour diabolo-menthe ouautre boisson– que l’on recouvrirad’un tour d’isolant plastique pour le

rendre opaque.Vous constaterez que le positionne-ment des capteurs est crucial. Il faudrales monter aussi écartés l’un de l’autreque possible et les décaler légèrementpar rapport aux LED (cf. figure 19). Onpourra utiliser le programme du lis-tage 5 pour essayer de trouver lemeilleur positionnement relatif desLED et des capteurs. Le programme nedevrait, en l’absence d’obstacle, pasdonner d’indication. Il est fort pro-bable, en cas de lectures erronées, qu’ily ait « fuite », latéralement, de lumièreIR au niveau des LED.Une fois les capteurs alignés correcte-ment, commander le mouvement durobot à partir des informations fourniespar les capteurs devient un jeu d’en-fant. Le listage 6 est celui d’un pro-gramme de contrôle simple faisantavancer le robot jusqu’à ce qu’il détectequelque chose. Lorsque le robot ren-contre un obstacle il s’arrête et tournepour éviter l’objet se trouvant sur sonchemin.

P L U S S O P H I S T I Q U ÉUne fois que vous avez le programme

25Elektor 12/99

Ser

vo

P3

P0

Vin

VSS

VSS

VSS

Ser

vo

P15

990050 - 4 - 12

Vin

VDD

VDD

VSS

10k

10k

3300µF

VDD

1k1k

2

500Ω

discharge

threshold

trigger

control

output

reset

Timer

555

GND

DD

2

7

6

3

8

V

1

4

5

10n 10n

100n

100n

P5

P6

47

47

récepteur IR

LED IR LED IR

P9

VSS

VDD

récepteur IR

18

Figure 18. L’ensemblede l’électronique.

Liste des composants

Nombre Composant1 BOE-Bot fonctionnel1 condensateur électrolytique de

3 300 µF/16V1 potentiomètre de 500 Ω2 condensateur de 0,01 µF2 condensateur de 0,1 µF1 résistance de 1 kΩ (1/8 ou 1/4 W)1 résistance de 1kΩ2 (1/8 ou

1/4 W)2 LED IR, LD271 ou équivalent2 capteur IR, Panasonic 4602 ou

équivalent2 résistance de 470 Ω (1/4 W)1 555 (temporisateur)

Page 3: cours de programmation du BASIC Stamp (4) - …a.moirier.free.fr/Vibrations/Parallax/Basic Stamp/Programmation... · Circuits de l’oscillateur et de la ... Elektor 12/99 25 Servo

de contrôle simple bien en main, pour-quoi ne pas vous intéresser au pro-gramme du listage 7. La complexité dece programme est un peu plus grande.Comme le faisait son prédécesseur, luiaussi fait avancer le robot jusqu’à cequ’il détecte un objet. Si ledit objetn’est « visible » que sur la gauche ousur la droite, le robot tournera dans ladirection opposée. Si l’objet se trouvedroit devant, le robot fera marchearrière et tournera soit à gauche soit àdroite.Ce programme fait appel, à différentsendroits, à des nombres aléatoires. Ils’en sert en premier lieu pour choisir ladirection qu’il prendra après avoirstoppé et reculé en face d’un objet. De

même, à chaque fois que le robottourne à gauche ou à droite, il le feraun nombre aléatoire de fois.

N O M B R E S A L É A T O I R E SLe BASIC Stamp utilise l’instructionRANDOM pour la génération denombres pseudo-aléatoires. Cette ins-truction charge un nombre se trouvantdans une variable et le manipule pourgénérer un autre nombre. Le nombre àbeau être aléatoire, un nombre donnése traduit à chaque fois par le mêmenombre aléatoire.Dans le cas présent, le qualificatifd’aléatoire concerne en fait la distribu-tion aléatoire dans le sens mathéma-tique du terme. Il faudra, pour avoir unnombre vraiment imprévisible, faire ensorte que le nombre original, le germe(seed), varie lui aussi de façon imprévi-sible. Le programme du robot ajoute 1à la variable rnd à chaque fois qu’il par-cours la boucle principale. Ceci signifie

que lorsque le programme appelleRANDOM on ne connaît pas la valeurdu germe de sorte que l’on se trouvedans l’impossibilité de prévoir le résul-tat.Le nombre aléatoire est distribué sur latotalité de la plage de nombres pos-sibles, il faudra utiliser une variableWORD avec RANDOM. On peut alorsutiliser un opérateur AND (&) ou mod(//) pour limiter la valeur du nombre.Un exemple : si l’on veut limiter lenombre à 15 (%1111 en binaire), onpourra écrire :

RANDOM rndX=rnd & %1111

Ceci ne marche que parce que 15 estune puissance de 2 diminuée de 1. Unetechnique d’usage plus général pourlimiter le nombre est d’utiliser l’opéra-teur mod (//). Cet opérateur fournit lereste d’une division de nombres

26 Elektor 12/99

Listage 4. Calibration du temporisateur 555.

freq var wordhigh 5 ‘ oscillateur en fonctionstart:count 6,100,freqdebug dec 5 freq*10,crgoto start

Listage 5. Ce programme aide à aligner les cap-teurs.high 5 ‘ oscillateur en fonctiontop:if in9=1 then noleftdebug ”left”noleft:debug 9 ‘ tabif in0=1 then norightdebug ”right”norightdebug crgoto top

Listage 6. Programme de contrôle de mouvementsimple.

‘ Robot évitant toute collision - Williamsi var word ‘ compteur de boucleright_IR var in0 ‘ oeil IR droitleft_IR var in9 ‘ oeil IR gaucheright_servo con 3 ‘ moteur de servo droitleft_servo con 15 ‘ moteur de servo gaucheIR_out con 5 ‘ valider 38kHzdelay con 10 ‘ durée de cycle-moteurcenter con 750speed con 100

high IR_out ‘ turn on IRpause 50

sense:

if left_IR=0 or right_IR=0 then turn‘ si rien en vue, poursuivre vers l’avantforward:

for i=1 to delay*2pulsout left_servo,center-speedpulsout right_servo,center+speedpause 20

nextgoto sense

turn:pause 50for i=1 to delay*5pulsout left_servo,center-speedpulsout right_servo,center-speedpause 20

nextgoto sense

Figure 19. Sugges-tions concernant lepositionnement desLED et du capteur.

Page 4: cours de programmation du BASIC Stamp (4) - …a.moirier.free.fr/Vibrations/Parallax/Basic Stamp/Programmation... · Circuits de l’oscillateur et de la ... Elektor 12/99 25 Servo

entiers. Ainsi 11//3 = 2 vu que 11/3 = 3et que le reste est 2 . Si donc, on veutlimiter un nombre aléatoire à unevaleur maximale de 100, on pourraitécrire :

RANDOM rndX=rnd // 100

Il est facile, pourvu de ces simpleséquations, de générer des nombresaléatoires dans une plage donnée.Attention à ne pas limiter la variablernd dans l’exemple ci-dessus. Si on lefaisait, on limiterait la valeur du germepour le nombre aléatoire suivant etpartant limiterait la plage des nombresque l’instruction générerait ultérieure-ment.

E X P R E S S I O N SM A T H É M A T I Q U E SOn trouve, en différents endroits duprogramme du robot, des expressionsrequérant plus d’un unique opérateur.Dans le cas du BASIC Stamp ces lignesrequièrent une attention spéciale. Sil’on écrit :

5+2*3

la réponse sera 21 ou sera-t-elle 11 ?Vous avez sans doute appris à l’école

que la multiplication a préséance surl’addition, de sorte que la réponse est11. Le BASIC Stamp n’a pas été sur lesmêmes bancs de classe que vous, desorte qu’il évalue les expressionsmathématiques en les prenant de lagauche vers la droite sans s’embêteravec quelque règle de préséance que cesoit. Dans le cas du BASIC Stamp, laréponse correcte sera donc 21.Le BASIC Stamp vous permet heureu-sement d’utiliser des parenthèses pourregrouper des expressions. Il nous fau-dra donc écrire, pour avoir le résultatque tout mathématicien attend l’ex-pression suivante :

5+(2*3)

ou :

2*3+5

Regardons, à titre d’exemple, la partiedu listage 7 forçant le robot à tourner àgauche (juste après l’étiquette left). À ceniveau, le programme génère unnombre aléatoire et exécute ensuite lepas :

for i=1 to delay +(rnd&3*5) ‘ rotation d’unequantité aléatoire

27Elektor 12/99

Listage 7. Programme de contrôle de mouvementplus complexe.

‘ Robot évitant toute collision - Williamsrnd var word ‘ quantité aléatoirei var word ‘ compteur de boucleright_IR var in0 ‘ oeil IR droitleft_IR var in9 ‘ oeil IR gaucheright_servo con 3 ‘ moteur de servo droitleft_servo con 15 ‘ moteur de servo gaucheIR_out con 5 ‘ valider 38kHzdelay con 10 ‘ durée de cycle-moteurcenter con 750speed con 100

high IR_out ‘ turn on IRpause 50

sense:rnd=rnd+1 ‘ bump random number

‘ si l’obstacle se trouve devant les 2yeux reculer et tournerif left_IR=0 and right_IR=0 then back‘ si l’obstacle se trouve à gauche, tour-ner à droite ou vice versaif left_IR=0 then rightif right_IR=0 then left‘ si rien en vue, poursuivre vers l’avantforward:

for i=1 to delay*2pulsout left_servo,center-speedpulsout right_servo,center+speedpause 20

nextgoto sense

back:pause 50for i=1 to delay*3

pulsout left_servo,center+speedpulsout right_servo,center-speedpause 20

next‘ rotation aléatoire vers la droite ou lagauche après ‘ avoir reculérandom rndif rnd&1 then right

left:pause 50random rndfor i=1 to delay + (rnd&3*5) ‘ rotation

d’une quantité aléatoirepulsout left_servo,center-speedpulsout right_servo,center-speedpause 20

nextgoto sense

right: pause 50random rndfor i=1 to delay + (rnd&3*5) ‘ rotationd’une quantité aléatoire

pulsout left_servo,center+speedpulsout right_servo,center+speedpause 20

next

goto sense

Internethttp://www.parallaxinc.com - BASIC Stamp Manual Version 1.9, BASIC Stamp

DOS et Windows Editor, exemples de programme. Sources de distributioninternationale.

http://www.stampsinclass.com - documentation BoE-Bot, Robotics curricu-lum, formats de dessin *.dxf et *.dwg du BoE-Bot, groupe de discussionpour l’utilisation du BASIC Stamp dans l’éducation.

[email protected] - créateur du BoE-Bot et auteur de cette série d’ar-ticles. Assistance technique.

[email protected] - co-auteur de cet article. Assistance technique etquestions concernant le programme d’éducation.

http://www.selectronic.fr - distributeur du BASIC Stamp de Parallax en France.

Page 5: cours de programmation du BASIC Stamp (4) - …a.moirier.free.fr/Vibrations/Parallax/Basic Stamp/Programmation... · Circuits de l’oscillateur et de la ... Elektor 12/99 25 Servo

Ceci entraîne la boucle à effectuer descycles de temporisation (delay). Celaajoute également un élément aléatoirecompris entre 0 et 15 (3 est le nombrealéatoire maximal et 3*5 = 15).

D É P A N N A G ESi votre robot ne se comporte pascomme il le devrait voici quelquespoints auxquels porter votre attention.Le problème auquel on risque, le plusvraisemblablement, d’être confrontéest celui du positionnement correct desLED et des capteurs. Vérifiez que vousavez bien positionné les capteurs leplus loin possible l’un de l’autre et quevous avez bien protégé les LED à l’aidede gaine thermorétractable ou d’unepaille opacifiée. Cette gaine doit blo-quer tout rayonnement latéral et nelaisser passer de lumière que versl’avant. Il faudra bien entendu placerles LED et les capteurs autant que pos-sible sur l’avant du robot.Si le mouvement du robot vous semblesaccadé, assurez-vous d’avoir bienimplanté le condensateur de 3 300 µF.En l’absence de ce condensateur, lescrêtes de bruit générées par lesmoteurs peuvent entraîner une remise

à zéro (Reset) du BASIC Stamp, ce quidonne l’impression d’un début demouvement s’arrêtant ensuite. Si vouspensez que c’est le cas sur votre robot,essayez de place la ligne suivante audébut du listage 6 ou 7 :

DEBUG “RESET”,CR

Vous devriez alors, lorsque le robot estconnecté à votre PC, voir cette lignes’exécuter une unique fois. Si vousconstatez une exécution renouvelée,c’est que le BASIC Stamp subit desRAZ aléatoires.Si les capteurs ne paraissent pas détec-ter les objets, assurez-vous qu’ils sontcâblés correctement de même que lesLED d’ailleurs. On pourrait envisagerde remplacer les LED IR par des LEDclassiques pour voir si le circuit fonc-tionne (mieux encore mesurer la fré-quence avec le BASIC Stamp ou unoscilloscope).Si le robot détecte des objets à grandedistance, il vous faudra sans doute pro-céder à des expériences au niveau dupositionnement et l’orientation desLED et des capteurs. On pourrait éga-lement envisager d’augmenter la

valeur des résistances associées auxLED (jusqu’à 2 kΩ par exemple) en vuede diminuer le niveau de leur sortie.

L A P R O C H A I N E É T A P EQue peut-on faire d’autre avec sonBoE-Bot ? En s’aidant des informationsdonnées dans l’article du mois dernieron peut créer un document de suivides objets détectés et le stocker enEEPROM. On pourrait utiliser uninterrupteur pour couper les moteursdu robot et télédélivrer le document desuivi au terminal de débogage. Cetteinformation peut être intéressante sil’on envisage de programmer le robotpour qu’il se déplace dans un laby-rinthe.Puisque nous en sommes à parler delabyrinthes, pourquoi ne pas dotervotre robot de capteurs IR (et LED)additionnels lui permettant aussi ladétection d’objets situés sur ses côtés.Cette information supplémentairepourrait permettre au robot derésoudre un labyrinthe plus rapide-ment, facteur-clé dans le cas d’unecompétition inter- robots.

(990050-4)

28 Elektor 12/99