/home/totofweb/homepage
Christophe Le Lann's Homepage v0.8
 

Balise infrarouge

Date d'initialisation : Juin 2009
État actuel : Terminé

Sommaire

Balise infrarouge

Description générale

Les besoins

Lors d'une participation à la coupe de France de robotique, il est indispensable de pouvoir détecter efficacement le robot adverse afin de pouvoir être conscient de sa position lors de l'élaboration in-situ de la stratégie, notamment pour planifier des trajectoires l'évitant.

Il s'agit donc de concevoir un système de petite taille (logeant dans un cube de 8cm de côté pour la balise, et des dimensions similaires pour la tourelle incorporée au robot), capable de donner en temps réel une information sur la position relative de la balise par rapport à la tourelle.

Solution retenue

Diverses solutions sont envisageables (ultrasons, infrarouges, lasers, DGPS, ...), selon la précision recherchée au regard du temps et du coût de développement. Notre objectif initial étant avant tout d'avoir une vague idée de la direction du robot adverse pour pouvoir planifier des trajectoires, nous n'avions pas besoin d'un système très précis, et nous nous sommes donc contentés d'améliorer le système mis au point l'année précédente.

Ce système est simple : la balise est un "phare" émettant en continu un code modulé par une liaison infrarouge, dans toutes les directions. La tourelle est alors constituée d'un anneau de récepteurs qui démodulent en parallèle, et d'un circuit numérique de post-traitement pour décoder et fiabiliser l'information :

BaliseTourelle

Avantages :

Inconvénients

Le récepteur sera un TSOP7000. Il a l'avantage d'être centré en 455kHz au lieu de la gamme classique des 30-50kHz usuellement utilisée par de nombreux capteurs, et donc plus susceptible d'être "occupée".

TSOP7000TSOP7000

Ce récepteur fournit en sortie un signal binaire indiquant si oui ou non il aperçoit un signal infrarouge de fréquence 455kHz :

TSOP7000TSOP7000

Modulation : Balise d'émission

Afin d'avoir une modulation relativement performante tout en restant facile à décoder, on module une liaison série (UART à 19200bps) avec un signal carré de 455kHz via une porte NOR, l'intérêt étant que la balise n'émette rien lorsque la liaison série est dans son état de repos (état haut) :

Modulation

La porteuse à 455kHz sera générée par le module PWM d'un microcontrôleur (AtMega8) utilisant un quartz plutôt qu'un autre type d'oscillateur, afin d'en garantir la précision et la stabilité.

Le signal série sera généré par ce même microcontrôleur, mais il n'émettra pas en continu : il faut tenir compte du fait que la démodulation est multiplexée, et que par conséquent nous ne pouvons prévoir le moment où le démodulateur commencera à analyser le signal en provenance d'un des récepteurs : il se peut qu'il commute alors qu'une partie de trame a déjà été transmise : il est nécessaire d'insérer des pauses entre chaque trame, d'une durée au moins égale à la durée d'une trame, pour être sûr que cela ne posera pas de problème : on perdra la trame qui n'est que partiellement reçue, mais toutes les prochaines trames seront correctement décodées.

Un potentiomètre permet de régler la puissance d'émission, afin de pouvoir s'adapter à toutes les conditions possibles (dans l'obscurité totale aussi bien que sous le feu des projecteurs...) :

Démodulation : Tourelle de réception

Démodulation bas niveau

Basiquement, il n'y aura aucun traitement hardware particulier à effectuer : avec la modulation choisie, le TSOP7000 reformera de lui-même le signal UART initialement émis, qu'il ne reste plus qu'à rediriger vers l'entrée du module numérique de traitement (microcontrôleur ou FPGA) :

Demodulation

Plutôt que de connecter directement la sortie du TSOP7000 au microcontrôleur, on choisit d'intercaler un multiplexeur permettant de router vers un même module UART de microcontrôleur différents récepteurs, que l'on vérifiera l'un après l'autre régulièrement. L'idée est bien entendu de pouvoir utiliser de nombreux récepteurs alors que les modules hardware de décodage de signal UART sont généralement au nombre de 1 ou 2 sur un microcontrôleur.

Démodulation haut niveau

Une fois connecté au module UART d'un microcontrôleur, c'est le module UART lui-même qui se chargera de vérifier la validité des trames reçues (on peut d'ailleurs prévoir un contrôle de parité automatique), pour finalement générer des interruptions lorsqu'une trame série valide aura été reçue.

Les récepteurs étant multiplexés, il est nécessaire de changer le récepteur observé à fréquence fixe. Juste avant de changer de récepteur, on regarde le contenu des buffers de réception pour voir si le récepteur en cours a reçu des trames valides.

Traitements logiciels

Une fois la démodulation effectuée, on se retrouve face à un lot d'informations binaires, à savoir pour chaque récepteur l'information de savoir s'il détecte actuellement le signal émis par la balise.

À partir de cela, il est nécessaire de faire quelques traitements élémentaires avant de pouvoir en déduire la direction de la balise...

Élimination des orphelins

Une première étape consiste à se prémunir d'un TSOP défaillant ou qui, pour un problème quelconque, ne voit pas le signal alors qu'il devrait manifestement le voir. Une règle simple consiste donc à considérer qu'un récepteur voit la balise lorsqu'il est entouré de deux autres récepteurs qui voient la balise.

Identification des amas

Une fois passée l'étape de l'élimination des orphelins, il faut maintenant identifier les groupes de récepteurs accolés qui voient la balise. On regroupe alors cette information dans une structure contenant les positions de ses bords, ainsi que la largeur de l'amas (on crée en réalité un tableau de cette structure).

Sélection du plus gros amas

Du fait des diverses réflexions (sur les murs, ...), il est possible d'identifier plusieurs groupes de récepteurs (les "amas") voyant la balise. Nous ne retenons que le plus gros, celui qui est à coup sûr en direction de la balise (toute réflexion faisant perdre de l'intensité au signal, il est probable qu'un amas dû à une réflexion soit moins large).

Mesure de l'angle

On calcule l'angle milieu, en prenant garde à la subtilité insérée par le fait qu'on a une représentation linéaire (une série de 16 bits) d'un système circulaire.

Mesure de la distance

En tirant profit du fait qu'un TSOP7000 est plus sensible au centre que sur ses côtés, on déduit naturellement que plus la balise sera proche de la tourelle et plus l'amas de détection sera large. Lorsque la balise est loin, seul un ou deux récepteurs (ceux qui sont parfaitement alignés) voient la balise, mais lorsque la balise est proche, d'autres récepteurs commencent à l'apercevoir sur leurs flancs.

Ainsi, en mesurant l'angle d'ouverture de la zone de détection (soit la largeur de l'amas de détection), on obtient un indicateur approximatif de distance : un petit étalonnage permet alors de trouver des correspondances en taille d'amas pour telle ou telle distance.

Moyennage temporel

Le moyennage temporel d'une grandeur circulaire peut-être délicat si on ne choisit pas le bon formalisme. En considérant le problème sous forme vectoriel, il est plus aisé de réaliser la moyenne : on fait la moyenne des vecteurs indiquant la direction de la balise sur les $N$ dernières mesures, et on en déduit un vecteur "moyenne mobile".

Il s'agit là de l'étape la plus gourmande en temps de calcul, et à vrai dire peut-être la moins nécessaire au bon fonctionnement du système, mais qui peut s'avérer utile si la stratégie globale du robot est telle qu'elle est très sensible aux changements intempestifs de zone de détection (dans le cas où on discrétise ensuite cette moyenne en différents secteurs : "devant", "derrière", "à gauche", "à droite", ...).

Limitations

Brouillages

Fort heureusement, les TSOP7000 fonctionnent correctement jusqu'à une irradiation de 30W/m2, ce qui est largement assez pour ne pas être ébloui ni par le soleil, ni par des projecteurs halogènes. Il n'y a donc aucun danger du côté des sources habituelles de lumière continue.

Cependant, il reste une possibilité de se faire éblouir dans le cas d'une source de lumière pulsée à 455kHz (typiquement, un autre appareil fonctionnant à 455kHz, mais ne modulant pas du tout sa porteuse). Dans ce cas, les TSOP7000 verront en permanence un signal à 455kHz (en plus de celui envoyé par la balise d'émission), et leur sortie sera dont continuellement maintenue à 0V : le système ne fonctionne plus, le circuit de décodage n'arrive plus à distinguer le signal émis par la balise du reste de l'environnement.

Il n'y a malheureusement aucun moyen de se prémunir de ce genre de brouillage, on peut simplement être conscient d'être brouillé et agir en conséquence.

Notion de distance

Il n'y a aucun mystère : la notion de distance ne peut-être qu'approximative via la méthode utilisée, qui se base sur des caractéristiques (ou plutôt des défauts) des récepteurs qui ne sont pas étalonnées par le constructeur.

Évolutivité

Tirer profit de la réponse spectrale

Une idée nouvelle pour mesurer la distance pourrait être d'utiliser la réponse spectrale des récepteurs : puisqu'on sait que leur sensibilité diminue à mesure que la fréquence du signal infrarouge s'éloigne de 455kHz, on peut émettre un signal dont la fréquence varie dans une gamme proche de 455kHz et mesurer la réelle zone de sensibilité du capteur : plus la balise est proche et plus cette gamme sera large.

TSOP7000

Malheureusement, cette conception est elle aussi sujette à quelques inconvénients :

Moduler la puissance d'émission

Une idée pourrait être de modifier le schéma de la balise d'émission, de sorte que le microcontrôleur embarqué puisse définir la puissance d'émission : il devient alors possible d'envoyer successivement plusieurs flots de trames à des puissances d'émission différentes, en incluant dans la trame série l'information de la puissance émise.

Ainsi, il devient possible de définir plusieurs paliers de réception. Si le récepteur se rend compte qu'il reçoit seulement les trames avec une forte puissance, il saura que la balise est plus loin que s'il reçoit toutes les trames, même les plus faibles.

Autoétalonner la puissance d'émission

Toujours en ayant la possibilité de définir en software la puissance d'émission, avec l'ajout d'un moyen de communication sans fil entre la balise et la tourelle (au moyen d'un Xbee par exemple), il devient possible d'autoétalonner la balise en début de match : on positionne la balise à une certaine distance de la tourelle, et le code d'autoétalonnage essaye de trouver la puissance d'émission qui correspond au seuil de vision des récepteurs.

Voir plusieurs balises d'émission

Étant donné qu'on inclut dans les trames émises un code particulier, il est possible de considérer que ce code correspond à un numéro de balise. À partir de là, il est tout à fait concevable d'utiliser plusieurs balises, chacune ayant son propre code d'émission.

Ainsi, il est possible de positionner des balises sur certains éléments de jeu positionnés aléatoirement par les arbitres (exemple des distributeurs verticaux pour la coupe 2009). En utilisant des leds à large cône d'émission, la tourelle pourra les capter malgré la différence d'altitude.

Afin de ne pas se brouiller, il est toutefois préférable de mettre en place une synchronisation entre les balises, de manière à ce qu'une seule balise à la fois émette son signal (ce qui diminue par conséquent la fréquence de rafraîchissement de la direction de la balise).

Photos


Aperçu de la balise d'émission, alimentée par sa batterie LiPo.
balise.png
Aperçu de la balise d'émission, alimentée par sa batterie LiPo.
Aperçu de la tourelle de réception au niveau du mât support de balise.
global.jpg
Aperçu de la tourelle de réception au niveau du mât support de balise.

Schéma et Circuit Imprimé


Typon de la balise d'émission sous Eagle.
BaliseEmetteur.brd
Typon de la balise d'émission sous Eagle.
Schéma de la balise d'émission sous Eagle.
BaliseEmetteur.sch
Schéma de la balise d'émission sous Eagle.
Typon de la tourelle de réception sous Eagle.
BaliseRecepteur.brd
Typon de la tourelle de réception sous Eagle.
Schéma de la tourelle de réception sous Eagle.
BaliseRecepteur.sch
Schéma de la tourelle de réception sous Eagle.
Typon de la balise d'émission au format PNG.
emission-brd.png
Typon de la balise d'émission au format PNG.
Schéma de la balise d'émission au format PNG.
emission-sch.png
Schéma de la balise d'émission au format PNG.
Typon de la tourelle de réception au format PNG.
reception-brd.png
Typon de la tourelle de réception au format PNG.
Schéma de la tourelle de réception au format PNG.
reception-sch.png
Schéma de la tourelle de réception au format PNG.

Code source


Ensemble des fichiers source de la balise d'émission.
balise.zip
Ensemble des fichiers source de la balise d'émission.
Fichier principal de la tourelle de réception, où l'on voit bien tout le traitement numérique.
main.c
Fichier principal de la tourelle de réception, où l'on voit bien tout le traitement numérique.
Ensemble des fichiers source de la tourelle de réception.
tourelle.zip
Ensemble des fichiers source de la tourelle de réception.

Commentaires des visiteurs

Laisser un commentaire

Par Samuelp5 le 04/07/2009

Perso, je suis fan.
Je travaille déjà depuis l'an dernier sur des choses un peu similaires... et pour poursuivre, je compte m'inspirer de ce superbe travail. (pour faire mieux, naturellement arg arg arg)
Mais sérieusement, c'est un super boulot, bravo !

Par jeanot1314 le 04/07/2009

Bravo pour ce travail!
Je travaille actuellement sur un dialogue IR entre une télécommande de chaine hifi et un module arduino, j'utilise pour cela le Tsop1730 (30kHz). Malheuresement, mon circuit ne semble pas détecter les commandes que je lui envoi, et je ne trouve aucun tuto capable de m'expliquer pk.
Comment pourrai je m'assurer de l'état de marche de mon Tsop? 30 kHz est-ce vraiment adapté pour une télécommande?
Le site dont je me suis inspiré utilise une RadioShack 38kHz (http://www.rtfa.net/2009/01/02/arduino-ir-remote-control-more-advanced), si ce n'est la fréquence, cela changerai t'il quelque chose sur le programme qui réceptionne?
Je suis un peu désolé de poser autant de question, mais je bloque vraiment depuis des jours, et je ne sais vraiment plus quoi faire..
merci d'avance pour vos réponses

Par KHALED le 06/05/2010

JE DEMANDE UN ROBOT PILOTE PAR PHILIPS ET RC5 AVEC LE PROGRAMME

Par Keuronde le 19/06/2011

Bonjour, et chapeau pour ce travail et toute la documentation !

J'ai cependant quelques petites questions, jusqu'à quelle distance était-t-il possible de voir la balise ?
Les reflets sur les murs était-il facilement éliminées par la sélection du plus gros amas ?

Cordialement,

Keuronde

Par Totofweb le 20/06/2011

Keuronde> La distance de détection est réglable au niveau de la balise d'émission, par la variation de la puissance transmise aux leds IR (potentiomètre sur la balise). À pleine puissance, il est possible de détecter à environ 15m. Les reflets sur les murs ne posaient aucun problème.

Par Keuronde le 17/08/2011

Bonjour,

Malgré l'énorme quantité de documentation qu'il y a sur cette page, il y a une information que je n'arrive pas à obtenir : Quel type de DEL infrarouge est employé ?
Il me semble en avoir déduit que le schéma était conçu pour délivrer un courant compris entre 20mA et 840mA, ce qui laisse un peu de choix au niveau des diodes IR...
Te souviens-tu de l'angle et de la puissance des diodes employées ?
Merci pour toute cette documentation et pour le temps que tu passes à répondre aux questions

Keuronde

Par Totofweb le 17/08/2011

Keuronde> Les diodes sont des TSAL6200, cône d'ouverture de 17°. Le potentiomètre permet de choisir la puissance d'émission dans une large gamme de puissances pour pouvoir s'adapter à toutes les conditions environnementales (même si pour un modèle de led donné ça ne changera pas du tout au tout).

Par swolf le 14/03/2012

Merci beaucoup pour ce partage, c'est très intéressant et bien détaillé!

Par Vince le 23/11/2012

Très beau travail en effet! Est-il encore possible de se procurer des TSOP7000? J'ai cru comprendre qu'ils n'étaient plus fabriqués par Vishay. Une adresse?

Par Totofweb le 23/11/2012

Vince> Hélas non, ceux qui en ont encore quelques uns dans des fonds de tiroirs les conservent bien jalousement. Le principe de balise peut être facilement adapté pour utiliser des capteurs utilisant les gammes de fréquences plus courantes, c'est simplement le taux de rafraichissement qui sera un peu moins bon.

Par ENIG le 15/02/2013

bonjour Totofweb
c'est bien, votre travail est bien organisée,je demande une petit question au niveau de nombre des recepteur IR ,EST-il possible de faire une balise avec par exemple 10 recepteur et obtenir la meme précision?
merci....bn

Par Totofweb le 15/02/2013

ENIG> Il est bien sûr possible d'adapter le concept à autant de récepteurs que l'on souhaite. La précision ne sera pas forcément aussi bonne par contre (vous aurez la direction approximative, mais c'est trop peu pour la moindre notion de distance).

Par karim le 05/03/2013

Très beau travail .quelle est la valeur de potentiomètre qu'on peut l'utiliser pour la variation de la distance de la détection (remarque je veux détecter l'adversaire juste d'une distance de 20 cm)

Par Totofweb le 05/03/2013

karim> Le gain dépend des leds utilisées, du transistor, etc. Si vous utilisez la configuration que j'ai mentionnée, alors il suffit de garder les valeurs mentionnées, dans le cas contraire il faut réadapter le calcul. Dans tous les cas, s'il s'agit d'un potentiomètre et non pas d'une résistance fixe, c'est bien pour permettre de régler finement le seuil de détection.

Par karim le 06/03/2013

je essayé de mettre une potentiomètre au pin Emmetteur de puis pin collecteur de transistor type 2N222 et je varier la résistance mais il y 'a pas émissions au niveau de diode infrarouge alors quelle est la solution pour qu'il fonctionne ?

Par Totofweb le 06/03/2013

Où voyez-vous un 2n2222 sur mon schéma ? Respectez mon schéma à la lettre, ou alors si vous changez de transistor il vous faut refaire les calculs de gain.

Par karim le 25/04/2013

merci pour votre aide a propos balise infrarouge j'ai terminer la réalisation et elle fonctionne avec succès .notre équipe cce de Tunisie a gagné 1 ére place au tunirobot(même cahier de charge que eurobot)

Par mnidhalm le 25/02/2015

un grand merci pour votre description , mais j'ai un probleme dans la choix du nombre suffisante de capteurs dans la balise d'emission et la balise de reception ... par exemple dans la balise de reception , je vois qu'un quart de cercle de recepteur tsop7000 est suffisante lorsque on sait que cette balise soit fixée dans le coin de terrain de jeux (eurobots 2015)... votre avis svp

Laisser un commentaire

Merci de ne poster ici que des questions ou commentaires concernant réellement le projet présenté sur cette page. Si vous recherchez de l'aide pour réaliser vos propres projets, merci de vous tourner vers des forums appropriés tel que celui de Planète-Sciences (où je suis très présent).


Pseudo
Mail (facultatif)
Votre message
erreur de génération du cryptogramme visuel. Veuillez recopier le cryptogramme visuel :