Explications sur l`utilisation des capteurs infrarouges avec ROBUS

Transcription

Explications sur l`utilisation des capteurs infrarouges avec ROBUS
Cet art méconnu qu’est la détection
d’obstacles par infrarouge
Serge Caron, Tech.
Version 1.1, mars 2000
Ce document décrit le fonctionnement des dispositifs infrarouges utilisés sur ROBUS version 2
pour détecter la proximité d’objets. Ce genre de dispositifs est aussi utilisé par d’autres robots,
comme par exemple le Rug Warrior, pour les mêmes raisons.
Contrairement à une armure (ou jupe ou pare-chocs), les détecteurs infrarouges n’ont pas à entrer
en contact physiquement avec l’obstacle afin de pouvoir le détecter. Cependant, les capteurs
infrarouges ne couvrent généralement pas la totalité des angles du robot et ils ne peuvent pas
détecter un objet noir.
Un dispositif de détection par infrarouge compte deux éléments principaux : l’émetteur et le
récepteur.
Émetteur
Lumière
Objet
Récepteur
Le fonctionnement théorique est très simple : la diode émet de la lumière qui, si elle est reflétée
par un obstacle, est captée par le récepteur infrarouge. Donc, tant que le récepteur ne perçoit pas
de lumière, il n’y a pas d’obstacles devant.
L’émetteur est une diode infrarouge. ROBUS utilise un OP132
d’Optrex. Cette diode émet de la lumière infrarouge lorsqu’un
courant passe dedans. Plus le courant est élevé, plus la lumière est
intense.
Serge Caron, Tech.
Explications infrarouge.doc
Page 1 de 6
17/03/00
Le récepteur est plus complexe. ROBUS utilise un
IS1U60L de Sharp. Le récepteur doit être en mesure de
faire la différence entre la lumière infrarouge qui est
omniprésente dans l’environnement et celle émise par
l’émetteur. Le IS1U60L est un circuit électronique
complexe capable de faire une telle distinction. La lumière
infrarouge qu’il détecte est particulière : elle doit être
pulsée à 38 kiloHertz.
Le récepteur, lorsqu’il ne perçoit pas de lumière pulsée à 38kHz, retourne un “1” logique. Dès
qu’il détecte la lumière de l’émetteur, il retourne un “0” logique.
Émetteur
(38kHz)
Récepteur
Note : ROBUS s’occupe déjà de moduler ses émetteurs infrarouges à 38kHz. L’usager n’a donc
pas à s’en préoccuper. Il n’a qu’à activer et désactiver les diodes émettrices.
IREMITx
IRRECVx
Mais c’est dans la mise en pratique que ça se gâte. En effet, le récepteur IS1U60L de Sharp avait
été conçu comme récepteur pour les télécommandes de télé et de magnétoscope. Il n’a pas été
conçu pour recevoir un flot continu d’informations infrarouge. Ainsi, le récepteur IS1U60L
saturera (cessera de détecter) au bout d’un court moment s’il reçoit un flot continu de
lumière pulsée à 38kHz :
IREMITx
IRRECVx
Serge Caron, Tech.
Explications infrarouge.doc
Page 2 de 6
17/03/00
La solution est donc d’activer l’émetteur pendant un court moment, de l’arrêter un autre court
moment, de recommencer, et ainsi de suite. De cette façon, on s’assure de ne pas saturer le
récepteur, mais la détection d’obstacles devient plus difficile, car, au lieu d’obtenir un simple
niveau logique à la sortie du récepteur infrarouge, on obtient une forme d’onde:
IREMITx
IRRECVx
Il est intéressant de noter que la fréquence vue à la sortie du récepteur est égale à celle qu’on
utilise pour activer/désactiver l’émetteur. Il faut donc trouver une façon de détecter la présence de
cette forme d’onde sur la sortie du détecteur. Il existe deux façons aisées de le faire :
1) L’usager utilise le NE567 (“Phased Locked Loop” ou “PLL”) qui est déjà disponible sur
ROBUS. On doit brancher la sortie du récepteur (IRRECVx) sur l’entrée du NE567 (PLL-IN)
et activer/désactiver l’émetteur à une fréquence égale à laquelle le NE567 réagit. La sortie du
NE567 (PLL-OUT) retournera un “0” logique s’il n’y a pas d’obstacle et un “1” logique s’il
en détecte un. Le NE567 réagit à une fréquence de 1,2kHz.
2) On contrôle le tout avec une carte à microprocesseur telle que le Handy Board. Il nous faut
une ligne de sortie pour contrôler l’émetteur et une ligne en entrée pour lire le récepteur.
Prenons par exemple le montage suivant :
ROBUS
Handy Board
Sortie PD5
IREMIT1
Entrée Digital 11
IRRECV1
Avec l’aide d’Interactive C, il est facile d’écrire une fonction qui contrôlera ce petit montage et
qui indiquera s’il y a un obstacle ou non. Le fichier ir_front.c contient une fonction semblable
que vous pouvez modifier a votre guise.
Note : Les entrées digitales 10 à 15 passent par des inverseurs avant d’être lues par le Handy
Board. Donc, lorsqu’un “1” logique se trouve sur une des ces entrées, la fonction digital()
retourne un “0”.
Serge Caron, Tech.
Explications infrarouge.doc
Page 3 de 6
17/03/00
int ir_detect(void)
{ int val1, val2;
bit_set(0x1009,0x20);
bit_set(0x1008,0x20);
msleep(1L);
val1 = digital(11);
bit_clear(0x1008,0x20);
msleep(1L);
val2 = digital(11);
bit_set(0x1008,0x20);
return( ~val1 & val2 );
}
/*
/*
/*
/*
/*
/*
/*
/*
PD5 en sortie pour l'emetteur */
PD5 a 1 = emetteur eteind */
attend 1 milliseconde */
lit le detecteur une 1ere fois */
Allume l'emetteur de gauche, PD5 */
attend 1 milliseconde */
relit le detecteur */
eteind l'emetteur gauche */
En termes simples, l’exemple ci-dessus :
a)
b)
c)
d)
e)
f)
g)
éteint l’émetteur;
attend 1 milliseconde;
lit le récepteur et sauvegarde la lecture dans val1;
allume l’émetteur;
attend 1 milliseconde;
lit le récepteur et sauvegarde la lecture dans val2 et
retourne une valeur logique indiquant la présence ou non d’obstacles.
Pour déterminer si un obstacle est présent, il faut que le récepteur ne détecte pas de lumière
lorsque l’émetteur est éteint (val1 = 0) et qu’il détecte de la lumière lorsque l’émetteur est allumé
(val2 = 1).
Le multiplexage de tout ce beau monde
ROBUS est capable de monter deux émetteurs infrarouges avec un récepteur infrarouge par côté,
pour un maximum de 8 émetteurs et 4 récepteurs. Le Handy Board, quant à lui, n’offre que 6
sorties à l’usager. Il en manque deux autres pour pouvoir brancher tous les émetteurs. Pour pallier
à ce problème, une des solutions est de monter le Handy Voice sur le Handy Board. Cette carte
d’expansion comporte, en plus de la puce de son, quatre sorties numériques, ce qui porte le total
de sorties disponibles à neuf (le Handy Voice s’accapare une des sorties du Handy Board pour ses
propres fins).
Une autre solution est d’utiliser le circuit de multiplexage et de démultiplexage monté sur
ROBUS. De cette façon, il est possible de contrôler tous les émetteurs et les récepteurs
infrarouges avec quatre sorties et une entrée! Le circuit multiplexeur permet de brancher les
quatre récepteurs sur une seule entrée du Handy Board, tandis que le démultiplexeur permet de
contrôler les huit émetteurs avec une seule sortie. Les trois autres sorties servent à sélectionner
quelle paire émetteur-récepteur est contrôlée par le Handy Board. Le schéma de la page suivante
indique comment brancher ensemble les diverses lignes des connecteurs J9, J10 et le Handy
Board.
Serge Caron, Tech.
Explications infrarouge.doc
Page 4 de 6
17/03/00
Note : Les IRRECVx sont branchés sur deux entrées du multiplexeur à la fois car chaque
récepteur sert pour deux émetteurs. Le récepteur doit donc rester sélectionné pour chacun de ses
deux émetteurs.
Très important : Le démultiplexeur 74HC138 inverse son entrée LEDMUX : toutes les lignes Y
non-sélectionnées sont placées à “1”, tandis que la ligne Y sélectionnée 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 sélecteur est très simple : chacune des lignes d’entrées et de sortie du
multiplexeur/démultiplexeur est sélectionnée par une adresse variant de 0 à 7. Par exemple, si
vous écrivez “3” sur le sélecteur (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 complètement ignorées.
Le schéma ci-dessus utilise encore Digital 11 et PD5, ce qui nous permet d’utiliser la routine
ir_detect() (n’oubliez pas d’inverser la logique de PD5). Il ne reste plus qu’à écrire une
fonction qui permet de changer l’adresse du sélecteur :
Serge Caron, Tech.
Explications infrarouge.doc
Page 5 de 6
17/03/00
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 câblage!
Serge Caron, Tech.
Explications infrarouge.doc
Page 6 de 6
17/03/00

Documents pareils