J'ai utilisé le principe des balises InfraRouge détaillé sur le site de Fribotte et de Christophe Le Lann's(TotofWeb). Je vais donc me contenter de reprendre les principes de base de fonctionnement de cette balise.
CIMG8347.jpg

Pour faire très général, le grand principe de base est le suivant. Nous avons, du coté de la balise émettrice, des LEDs IR (disposées de façon à émettre à 360°) qui sont allumées. En face, sur la balise récepteur, des récepteurs Infrarouges (TSOP4840) captent ces LEDs. Chaque capteur étant relié à un microcontrôleur (16f690) par l'intermédiaire d'un multiplexeur, il est possible de connaitre la position du capteurs qui capte les LEDs IR et donc l'angle de la balise émettrice détectée. On peut donc connaitre l'angle du robot adverse mais il nous faut aussi déterminer la distance pour éviter une collision. Pour cela, nous utilisons le fait que l'angle de réception de chaque récepteur IR vari en fonction de sa distance avec la source IR: Plus la source est proche du capteur, plus son "champs de vision" sera large. Ainsi, comme les récepteurs sont chacun espacés d'un angle régulier, plus la source (=robot adverse) sera proche, plus nous aurons de récepteur capable de détecter cette source. Il suffit donc d'observer l'état de chaque capteur et de comptabiliser ceux qui détectent la balise émettrice. Au dela d'un certain seuil, le robot adverse est considéré comme trop proche. Enfin, il est possible de faire varier l'intensité des LEDs IR au moyen d'un potentiomètre qui permettra d’affiner ce seuil de détection. Bien sur cette méthode est assez expérimentale et pas très rigoureuse mais elle fonctionne et a le mérite d'être simple à mettre en place.

Évidement, c'est un peu plus complexe que ça en réalité. Afin de ne pas être perturbé par les autres sources InfraRouge de l'environnement (lumière naturel, spot, télécommande, flash d'appareil photo, etc ...), il est absolument nécessaire d’envoyer un signal codé. Notre balise réceptrice sera ainsi capable de différencier la balise émettrice du bruit ambiant.
La première étape consiste donc à moduler le signal. Cela signifie qu'au lieu d'envoyer un signal IR continu, il faut envoyer une séquence de 0 et 1 de fréquence constante. Cette fréquence est défini par les récepteurs IR. Nous utilisons des TSOP4840, qui captent seulement les signaux IR modulé à une fréquence de 48KHz (démodulateur et filtres sont intégrés directement dans le composant). Il est possible de générer cette porteuse (48KHz, rapport cyclique 0.5) avec, par exemple, un NE555 ou une sortie PWM de microcontrôleur.

Cette figure issue de la datasheet des TSOP4840 montre que la sortie du composant passe à 0 lorsqu'il capte un signal modulé à 48KHz. data.PNG

Cette étape est une première protection indispensable pour se prémunir des parasites. Mais qu'en est-il si dans la salle, d'autre équipe utilise cette même fréquence de 48KHz avec des balises du même genre ou d'autre capteurs InfraRouge ? C'est la catastrophe, et les robots risquent de s’emmêler les pinceaux. Il est donc indispensable, d'émettre un code spécifique de son choix qui sera ensuite modulé par la porteuse que l'on vient de mettre en place. Ce code permettra de différencier notre balise des autres éléments IR éventuel d'un robot adverse. Le codage (série de 1 et de 0) est à votre choix. Cependant, une technique de codage rapide à mettre en place et efficace est d'utiliser la liaison série UART de votre microcontrôleur. En envoyant un caractère ASCII (la lettre 'A' par exemple) par la broche UART_TX, votre microcontrôleur va générer le code série correspondant (bit de start, données, bit de stop, etc ...). A la réception, il vous suffira donc de lire le caractère reçu sur la broche UART_RX et de vérifier qu'il correspond au caractère envoyé (la lettre 'A'). Avec cette méthode, même si le robot adverse utilise la même fréquence de modulation, les chances de tomber sur un robot qui envoi le même caractère est assez faible. Quand bien même, le même caractère serait utilisé, il vous est facile de le changer très rapidement en reprogrammant vos balises.
Enfin, pour moduler matériellement les deux signaux (code et porteuse 48KHz) vous pouvez utiliser un simple porte logique (OR, AND, NOR ou NAND).
La photo de l'écran d'oscilloscope affiche un exemple de code que j'ai réalisé pour effectuer des test de modulation.
CIMG8345.jpg

Schéma complet de la balise émettrice (cliquer pour agrandir)
emet.PNG Télécharger le code source de la balise émettrice(MpLab avec compilateur PicClite)

Schéma complet de la balise réceptrice (cliquer pour agrandir)
recept.PNG Télécharger le code source de la balise réceptrice (MpLab avec compilateur PicClite)

Réalisation des PCB (double couche, 80mm de diamètre)
IMG_9265.jpg
Réalisation du module d'alimentation pour batterie Li-ion 7.4V 1080mAh (regulateur 7805, diode, inter et fusible)
IMG_9269.jpg
Après soudure de la carte émission (dessus)
IMG_9270.jpg
Version finale prête à être posé sur le support balise d'un robot adverse (magnifique singe n'est-ce pas ?! )
CIMG9360.JPG

Après soudure de la carte réception (dessous)
IMG_9271.jpg
Version finale fixée sur le support du robot
CIMG9349.JPG

Vidéo de test:
La LED sur la balise émettrice clignote quand la balise est en fonctionnement.
La LED sur la balise réceptrice s'allume lorsque au moins 4 capteurs TSOP réceptionne le signal (seuil dépassé).


Mise en garde:
Afin de pouvoir scanner les 16 capteurs de la balise de réception, j'ai utilisé deux multiplexeur 8 entrées (2x8=16) que j'ai relié à la broche UART_RX du microcontroleur par l'intermédiaire d'une porte logique OR. La sélection de l'un ou l'autre multiplexeur s'effectue alors par la mise à 1 ou à 0 de l'entrée "Enable" de chacun des multiplexeur. Cependant, avec ces méthode, le passage rapide d'un multiplexeur à l'autre ne fonctionne pas bien. Je pense que cela est du au buffer de la liaison série qui n'est pas vide lors d'un changement de multiplexeur. L'idéal est d'utiliser un microcontrôleur avec deux ports UART (et donc de relier chaque multiplexeur à un port indépendant).

Evolution des balises pour la coupe de robotique 2012

J'ai développée une version améliorée en 2012 permet maintenant de détecter deux robots indépendant vers l'avant et/ou vers l'arrière. Pour cela j'ai dédoublé les récepteurs IR, en utilisant cette fois un composant semblable mais avec une fréquence de modulation différentes. Du côté de l’émetteur, il n'y a rien à changer sur le hardware. La modulation du signal infrarouge se fait par logiciel uniquement.

SCHEMA PHOTO DOUBLE BALISE MONTE

Vidéo de test:
Une Led verte et une Led rouge sur le récepteur indique la détection des émetteurs "rouge" et/ou "vert".
VIDEO

Niveau performance, j'ai toujours les problèmes de saturations observés sur le premier proto. La détection était plutôt bonne en faisant les tests chez moi, mais pendant la coupe de robotique, j'ai très vite galéré pour régler la puissance des émetteurs et obtenir une bonne détection. Il s'avère aussi que les émetteurs devait cracher bien trop fort, à tel point que cela perturber même le fonctionnement des capteurs robots adverses (ce n'était pas du tout l'objectif !).
Ce proto reste donc encore à améliorer puisque les performances sont encore loin d'être fiable et reproductible. J'ai notamment observé pas mal de problème avec la liaison UART qui communique l'état de détection à la carte mère du robot. Il me faudra donc protéger plus ces signaux avec du filtrage hard, et toujours minimiser la longueur de câble.