You are on page 1of 6

Serge Caron, Tech.

Page 1 de 6 17/03/00
Explications infrarouge.doc
Cet art mconnu quest la dtection
dobstacles par infrarouge
Serge Caron, Tech.
Version 1.1, mars 2000
Ce document dcrit le fonctionnement des dispositifs infrarouges utiliss sur ROBUS version 2
pour dtecter la proximit dobjets. Ce genre de dispositifs est aussi utilis par dautres robots,
comme par exemple le Rug Warrior, pour les mmes raisons.
Contrairement une armure (ou jupe ou pare-chocs), les dtecteurs infrarouges nont pas entrer
en contact physiquement avec lobstacle afin de pouvoir le dtecter. Cependant, les capteurs
infrarouges ne couvrent gnralement pas la totalit des angles du robot et ils ne peuvent pas
dtecter un objet noir.
Un dispositif de dtection par infrarouge compte deux lments principaux : lmetteur et le
rcepteur.
Le fonctionnement thorique est trs simple : la diode met de la lumire qui, si elle est reflte
par un obstacle, est capte par le rcepteur infrarouge. Donc, tant que le rcepteur ne peroit pas
de lumire, il ny a pas dobstacles devant.
Lmetteur est une diode infrarouge. ROBUS utilise un OP132
dOptrex. Cette diode met de la lumire infrarouge lorsquun
courant passe dedans. Plus le courant est lev, plus la lumire est
intense.
metteur Lumire
Objet
Rcepteur
Serge Caron, Tech. Page 2 de 6 17/03/00
Explications infrarouge.doc
Le rcepteur est plus complexe. ROBUS utilise un
IS1U60L de Sharp. Le rcepteur doit tre en mesure de
faire la diffrence entre la lumire infrarouge qui est
omniprsente dans lenvironnement et celle mise par
lmetteur. Le IS1U60L est un circuit lectronique
complexe capable de faire une telle distinction. La lumire
infrarouge quil dtecte est particulire : elle doit tre
pulse 38 kiloHertz.
Le rcepteur, lorsquil ne peroit pas de lumire pulse 38kHz, retourne un 1 logique. Ds
quil dtecte la lumire de lmetteur, il retourne un 0 logique.
metteur (38kHz)
Rcepteur
Note : ROBUS soccupe dj de moduler ses metteurs infrarouges 38kHz. Lusager na donc
pas sen proccuper. Il na qu activer et dsactiver les diodes mettrices.
IREMITx
IRRECVx
Mais cest dans la mise en pratique que a se gte. En effet, le rcepteur IS1U60L de Sharp avait
t conu comme rcepteur pour les tlcommandes de tl et de magntoscope. Il na pas t
conu pour recevoir un flot continu dinformations infrarouge. Ainsi, le rcepteur IS1U60L
saturera (cessera de dtecter) au bout dun court moment sil reoit un flot continu de
lumire pulse 38kHz :
IREMITx
IRRECVx
Serge Caron, Tech. Page 3 de 6 17/03/00
Explications infrarouge.doc
La solution est donc dactiver lmetteur pendant un court moment, de larrter un autre court
moment, de recommencer, et ainsi de suite. De cette faon, on sassure de ne pas saturer le
rcepteur, mais la dtection dobstacles devient plus difficile, car, au lieu dobtenir un simple
niveau logique la sortie du rcepteur infrarouge, on obtient une forme donde:
IREMITx
IRRECVx
Il est intressant de noter que la frquence vue la sortie du rcepteur est gale celle quon
utilise pour activer/dsactiver lmetteur. Il faut donc trouver une faon de dtecter la prsence de
cette forme donde sur la sortie du dtecteur. Il existe deux faons aises de le faire :
1) Lusager utilise le NE567 (Phased Locked Loop ou PLL) qui est dj disponible sur
ROBUS. On doit brancher la sortie du rcepteur (IRRECVx) sur lentre du NE567 (PLL-IN)
et activer/dsactiver lmetteur une frquence gale laquelle le NE567 ragit. La sortie du
NE567 (PLL-OUT) retournera un 0 logique sil ny a pas dobstacle et un 1 logique sil
en dtecte un. Le NE567 ragit une frquence de 1,2kHz.
2) On contrle le tout avec une carte microprocesseur telle que le Handy Board. Il nous faut
une ligne de sortie pour contrler lmetteur et une ligne en entre pour lire le rcepteur.
Prenons par exemple le montage suivant :
Handy Board ROBUS
Sortie PD5 IREMIT1
Entre Digital 11 IRRECV1
Avec laide dInteractive C, il est facile dcrire une fonction qui contrlera ce petit montage et
qui indiquera sil y a un obstacle ou non. Le fichier ir_front.c contient une fonction semblable
que vous pouvez modifier a votre guise.
Note : Les entres digitales 10 15 passent par des inverseurs avant dtre lues par le Handy
Board. Donc, lorsquun 1 logique se trouve sur une des ces entres, la fonction digital()
retourne un 0.
Serge Caron, Tech. Page 4 de 6 17/03/00
Explications infrarouge.doc
int ir_detect(void)
{ int val1, val2;
bit_set(0x1009,0x20); /* PD5 en sortie pour l'emetteur */
bit_set(0x1008,0x20); /* PD5 a 1 = emetteur eteind */
msleep(1L); /* attend 1 milliseconde */
val1 = digital(11); /* lit le detecteur une 1ere fois */
bit_clear(0x1008,0x20); /* Allume l'emetteur de gauche, PD5 */
msleep(1L); /* attend 1 milliseconde */
val2 = digital(11); /* relit le detecteur */
bit_set(0x1008,0x20); /* eteind l'emetteur gauche */
return( ~val1 & val2 );
}
En termes simples, lexemple ci-dessus :
a) teint lmetteur;
b) attend 1 milliseconde;
c) lit le rcepteur et sauvegarde la lecture dans val1;
d) allume lmetteur;
e) attend 1 milliseconde;
f) lit le rcepteur et sauvegarde la lecture dans val2 et
g) retourne une valeur logique indiquant la prsence ou non dobstacles.
Pour dterminer si un obstacle est prsent, il faut que le rcepteur ne dtecte pas de lumire
lorsque lmetteur est teint (val1 = 0) et quil dtecte de la lumire lorsque lmetteur est allum
(val2 = 1).
Le multiplexage de tout ce beau monde
ROBUS est capable de monter deux metteurs infrarouges avec un rcepteur infrarouge par ct,
pour un maximum de 8 metteurs et 4 rcepteurs. Le Handy Board, quant lui, noffre que 6
sorties lusager. Il en manque deux autres pour pouvoir brancher tous les metteurs. Pour pallier
ce problme, une des solutions est de monter le Handy Voice sur le Handy Board. Cette carte
dexpansion comporte, en plus de la puce de son, quatre sorties numriques, ce qui porte le total
de sorties disponibles neuf (le Handy Voice saccapare une des sorties du Handy Board pour ses
propres fins).
Une autre solution est dutiliser le circuit de multiplexage et de dmultiplexage mont sur
ROBUS. De cette faon, il est possible de contrler tous les metteurs et les rcepteurs
infrarouges avec quatre sorties et une entre! Le circuit multiplexeur permet de brancher les
quatre rcepteurs sur une seule entre du Handy Board, tandis que le dmultiplexeur permet de
contrler les huit metteurs avec une seule sortie. Les trois autres sorties servent slectionner
quelle paire metteur-rcepteur est contrle par le Handy Board. Le schma de la page suivante
indique comment brancher ensemble les diverses lignes des connecteurs J9, J10 et le Handy
Board.
Serge Caron, Tech. Page 5 de 6 17/03/00
Explications infrarouge.doc
Note : Les IRRECVx sont branchs sur deux entres du multiplexeur la fois car chaque
rcepteur sert pour deux metteurs. Le rcepteur doit donc rester slectionn pour chacun de ses
deux metteurs.
Trs important : Le dmultiplexeur 74HC138 inverse son entre LEDMUX : toutes les lignes Y
non-slectionnes sont places 1, tandis que la ligne Y slectionne tombe 0 lorsque
LEDMUX passe 1. Il faut donc inverser la logique de la sortie PD5 (bit_set() <->
bit_clear()) dans la fonction ir_detect() pour corriger la situation.
Le fonctionnement du slecteur est trs simple : chacune des lignes dentres et de sortie du
multiplexeur/dmultiplexeur est slectionne par une adresse variant de 0 7. Par exemple, si
vous crivez 3 sur le slecteur (lignes A0, A1 et A2), vous branchez la ligne RCV3 du
multiplexeur sur RCVMUX et vous connectez LEDMUX sur LED3 du multiplexeur. Les autres
lignes RCVx et LEDx sont compltement ignores.
Le schma ci-dessus utilise encore Digital 11 et PD5, ce qui nous permet dutiliser la routine
ir_detect() (noubliez pas dinverser la logique de PD5). Il ne reste plus qu crire une
fonction qui permet de changer ladresse du slecteur :
Serge Caron, Tech. Page 6 de 6 17/03/00
Explications infrarouge.doc
void choose_ir(int address)
{ /* s'assure de la validite de l'adresse */
if( address < 0 )
address=7;
if( address > 7 )
address=0;
bit_set(0x1009, 0b00010100); /* PD2 et PD4 en sortie */
bit_set(0x1026, 0b10000000); /* PA7 en sortie */
/* A0/PD2 */
if( address & 1 )
bit_set(0x1008, 0b00000100);
else
bit_clear(0x1008, 0b00000100);
/* A1/PD4 */
if( address & 2 )
bit_set(0x1008, 0b00010000);
else
bit_clear(0x1008, 0b00010000);
/* A2/PA7 */
if( address & 4 )
bit_set(0x1000, 0b10000000);
else
bit_clear(0x1000, 0b10000000);
}
Bon cblage!

You might also like