logo

 

Pour la petite histoire:
Il y a quelques années, grâce a un ami de mon ancien lycée, j'avais découvert un jeu d'équipe semblable au paintball, mais avec des lasers à la place des munitions réélles. Si je vous donne le nom exact de la franchise, vous saurez surement de quoi je parle, mais justement j'évite maintenant de le donner. Je crois que le jeu existe aux Etats-Unis et s'appelle laser tag (qui n'est pas une marque déposée).

En effet, après avoir joué de nombreuses fois au centre local, je m'étais interessé (surement de trop près) au coté technique de la chose et avait eu quelques soucis vites réglés, parce que j'avais prototypé une imitation de leur matériel et je citais justement le nom de la société qui s'occupe de créer leur vrai materiel et qui possède la marque. Pour la courte histoire, j'avais reçu une lettre de la part du gérant du centre (avec qui je m'entends toujours très bien d'ailleurs) me faisant passer le mot de puis Grenoble (Siège social), comme quoi je devait descendre le site, et leur envoyer ce que je savais.

A cette époque, j'étais en seconde et j'avais pas un seul cours d'éléctronique sérieux, autant vous dire qu'ils ont du bien rire en recevant la chose (qu'ils ont toujours surement, merci pour mes 80 euros !). Je crois ne plus avoir de photo, mais c'était rien de plus qu'un boitier avec deux sangles, 3 circuits intégrés logiques, une photorésistance et deux afficheurs 7 segments. La misère...

Il y a peu, j'y suis retourné et ça m'a redonné envie de developper un système de laser tag open-source, avec un peu plus d'experience et d'argent. On peut trouver ce genre des projets sur des sites américains, mais pour les seuls que j'ai vu, malgré la robustesse des systèmes, ils utilisaient toujours le bon vieil infrarouge, qui n'est pas si bon que ça. Certains joueurs habitués sauront que dans certains cas, les infrarouges ne sont pas fiables du tout.

 

Partir de ce qu'on sait:
Je commence par expliquer vaguement le but du jeu, si vous ne connaissez pas du tout. Pendant une partie, chaque joueur empreinte un equipement constitué d'un "gilet" et d'un pistolet, il peut décider d'être dans une équipe, ou seul. Il se rend ensuite dans une salle conçue pour le jeu (labyrinthes, planques...), où il faudra simplement qu'il "tire" sur ses adversaires. Le materiel se charge de compter les points, et les scores seront rassemblés en fin de partie. A ma connaissance, c'est le principe de base de ce genre de jeu. Ensuite, chaque marque a sa propre technologie, et ses règles de jeux...
Notez que je ne citerais aucune marque dans cet article, je veux pas encore attirer d'ennuis à qui que ce soit, ni faire de la concurrence. Prenez ceci comme de l'éléctronique de loisir.

Comme je l'écrivais, vous risquez souvent de rencontrer du matériel qui utilise de la communication par infrarouge. Car il faut bien que le joueur qui tire soit identifié par celui qui se fait tirer dessus... Le laser sert dans ce cas qu'à matérialiser le tir, et donner un aperçu de ce que l'ont vise. Avec laser ou sans, c'est le faisceau infrarouge qui fournira les données et fera réagir le materiel, le laser n'est pas important.

Le problème majeur, c'est que sans une optique complexe et solide, la LED infrarouge, qu'elle soit de qualité basique ou industrielle, emettera en cône. C'est à dire que plus la cible est loin, plus le faisceau sera large. Imaginez tirer sur deux adversaires à 50 mètres, vous toucherez surement les deux... Et vient encore le problème de la reflection sur les surfaces brillantes ou de couleur claire, qui fait "rebondir" le faisceau, ainsi que celui de la portée: il faut des LEDs de plusieurs dizaines de milliwatts pour avoir une bonne portée, même avec une optique de collimation, qui en plus coûte cher et se déregle facilement.

Dans ce cas, le laser a tous les avantages. Le simple pointeur laser rouge grossièrement réglé donne un point assez petit, même sur de grandes distances, on le voit assez bien dans le noir, il ne consomme pas beaucoup et coûte quasiment rien. Le mieux, c'est qu'il peut généralement être piloté directement à partir d'un transistor, et encore mieux, transmettre des données si son temps de charge est correct.

Je vais donc laisser tomber l'infrarouge pour le tir, et ne l'utiliser que pour la récuperation des scores, afin d'éviter de devoir brancher et débrancher un câble tout le temps.

 

Plus en détail:
Certains sites d'import proposent des modules laser 670nm 5mW (surement moins) avec collimateur réglable et qui s'alimentent en 6V pour quelques dollars. Mes premiers essais seront basés sur ces modules. Le but est d'avoir un point visible à plusieurs dizaines de mètres, et au mieux, voir une partie du faisceau dans de la fumée.

Il faut aussi pouvoir transmettre les données par le faisceau laser rapidement sans qu'il claque au bout de deux heures. C'est ce point qui m'inquiète un peu, je prefererais constater les dégats sur mes plaques d'essai plutôt que dans le matériel assemblé...

Pour être sur que les données soient correctement reçues, je pensais emettre qu'un seul octet en boucle, bit par bit, avec un temps bas fixe, et un temps haut variable selon la valeur du bit.
Le premier quartet sera unique et servirait de déclencheur pour indiquer le début du prochain quartet: dès que le recepteur reçoit exactement ce quartet, il sait à quoi s'attendre.
Ceci évite que ça ce soit un grand n'importe quoi sans synchronisation. Pour éviter des déclenchements aléatoires, le signal sera modulé numériquement avec une porteuse de l'ordre de 60Khz. Le clignotement serait assez rapide pour ne pas le remarquer.

Une fois que ce code est detecté par des photodiodes (ou des LEDs ?), le compteur en mémoire associé au code du joueur qui a tiré est incrémenté, et le joueur touché ne peut plus tirer pendant une période définie pour l'empêcher de riposter directement. Les valeurs de chaque compteur seront transmises à un recepteur par infrarouge sur une requête en fin de partie.

Chaque équipement est configuré depuis le début pour recevoir un numéro unique (stocké en EEPROM, et configurable en infrarouge), qui sera utilisé pour l'identification des joueurs lors des tirs, c'est ce numéro qui est transmis en continu par le biais du faisceau laser.
La configuration des équipes peut être gérée par la suite, par comparaison et regroupement des scores grâce au logiciel. L'équipement ne reçoit que la couleur des LEDs qu'il doit allumer, pour savoir quel joueur est dans quelle équipe. Pour cela, 8 LEDs tricolores sont utilisées (vert/rouge séparés, donc jaune en plus), pilotées par deux transistors.

Pour fonctionner, l'équipement intègre un microcontrolleur AVR ATMEGA8 (par souci pratique, et parce qu'il y a un compilateur C gratuit). Il possède 8Ko de mémoire flash pour le programme, plus qu'il ne faut de RAM, 256 Octets d'EEPROM, des entrées analogiques, un UART complet intégré, et il fonctionne jusqu'à 20Mhz. Ce type de microcontroleur peut être utilisé dans l'industrie car il possède aussi des "security bits", permettant de le rendre muet si on essaye de lire le contenu de sa mémoire et ceci de façon matérielle: impossible de lire et décompiler son programme pour d'éventuels curieux; à moins d'aller demander au CNRS.

 

 

Exemples de communication:

 

Exemple avec un "Joueur 1" (J1) dans une équipe verte,
1 coéquipier (J2) et 2 adversaires (J3, J4) dans une équipe rouge.

10 octets de RAM:

Joueur 1 idle:

Activé
Couleur
Joueur 1
Joueur 2
Joueur 3
Joueur 4
Piege 1
Piege 2
Piege 3
Piege 4
0
0
0
0
0
0
0
0
0
0

Activation, équipe verte:

Activé
Couleur
Joueur 1
Joueur 2
Joueur 3
Joueur 4
Piege 1
Piege 2
Piege 3
Piege 4
1
2
0
0
0
0
0
0
0
0

Touché une fois par le joueur 2, desactivé deux fois par le piège 1:

Activé
Couleur
Joueur 1
Joueur 2
Joueur 3
Joueur 4
Piege 1
Piege 2
Piege 3
Piege 4
1
2
0
1
0
0
2
0
0
0

Fin de partie:

Activé
Couleur
Joueur 1
Joueur 2
Joueur 3
Joueur 4
Piege 1
Piege 2
Piege 3
Piege 4
1
2
0
1
2
9
3
1
0
0

Après récupération des scores (remise à zéro):

Activé
Couleur
Joueur 1
Joueur 2
Joueur 3
Joueur 4
Piege 1
Piege 2
Piege 3
Piege 4
0
0
0
0
0
0
0
0
0
0

Fiche de scores:
JOUEUR 1 (Équipe VERTE)
Score: (...+...)*a - (J3+J4)*b
Pièges: (P1+P2+P3+P4)*b

Équipe VERTE:
Nom: Reçus: Donnés:
JOUEUR 2 1 (J2) (...)

Équipe ROUGE:
Nom: Reçus: Donnés:
JOUEUR 3 2 (J3) (...)
JOUEUR 4 9 (J4) (...)

avec a le coefficient de gain, b le coefficient de perte et (...) les valeurs à récupérer depuis les autres joueurs.
Le score des équipes est recoupé à la fin, quand tous les scores des tous les joueurs sont calculés.

 

D'après le datasheet des photodiodes Vishay BPW34:
"Due to its waterclear epoxy the device is sensitive to visible and infrared radiation."

Ce qui signifie que la photodiode peut être utilisée pour detecter aussi bien de la lumière rouge que de la lumière infrarouge.
Plus loin dans le datasheet, on trouve le graphe de réponse en intensité en fonction de la longueur d'onde:

On voit que la lumière émise par une LED infrarouge (à 940nm) est mieux captée que la lumière d'un module laser rouge classique (à 670nm).
Certains modules laser ne possèdent pas de filtre infrarouge, c'est un facteur à prendre en compte car ce rayonnement parasite émis en cone pourrait déclencher des joueurs hors de la visée.
L'utilisation d'un tube en plastique pour concentrer le faisceau ou d'optique de filtrage serait justifiée.

 

Notes de protocole:
Tir:

Requêtes infrarouge (depuis le controlleur, vers les joueurs):
10xxxxx1=commande 11xxxxx1=argument x=non pris en compte
Ping de vérification: 10010001 puis 11xxxxx1
Réglage de la couleur: 10010011 puis 11xxxcc1 cc=couleur(00 rouge,01 vert,10 jaune)
Réglage de l'identifiant: 10010101 puis 11jjjjj1 jjjjj=joueur(0 à 31)
Vidage des scores: 10010111 puis 11xxxxx1
Activation: 10011001 puis 11xxxxx1

Réponse: 01001010 puis dernière commande

Vidage des scores:
01xxxxxx
011jjjjj puis vvvvvvvv (vvvvvvvv=nombre de fois touchés par joueur numéro jjjjj)
010aaaaa puis vvvvvvvv (vvvvvvvv=nombre de fois touchés par l'automate aaaaa)
010aaaaa

Début de partie: 12 octets
CT>JR 10010001 11000001... (ping?)
JR>CT 01001010 10010001 (pong!)
CT>JR 10010011 11000101 (jaune)
JR>CT 01001010 10010011 (ack)
CT>JR 10011001 11000001 (activation)
JR>CT 01001010 10011001 (ack)

Fin de partie: 8+64+64=136 octets
CT>JR 10010001 11000001... (ping?)
JR>CT 01001010 10010001 (pong!)
CT>JR 10010111 11000001... (vidage des scores)
JR>CT 01001010 10010111 (pong!)
JR>CT 01100000 XXXXXX (nombre de fois touché par joueur 0)
JR>CT 01100001 XXXXXX (nombre de fois touché par joueur 1)
JR>CT 01100010 XXXXXX (nombre de fois touché par joueur 2)
JR>CT 01100011 XXXXXX (nombre de fois touché par joueur 3)
...
JR>CT 01111111 XXXXXX (nombre de fois touché par joueur 31)
JR>CT 01000000 XXXXXX (nombre de fois touché par automate 0)
JR>CT 01000001 XXXXXX (nombre de fois touché par automate 1)
...
JR>CT 01001010 10010111 (pong, termination)

200µs bas
400µs haut
200µs espace
11111111=8*400+8*200=4800µs=4.8ms
00000000=8*200+8*200=3200µs=3.2ms

Fréquence porteuse IR ?
Fréquence porteuse laser ?

footer
symbol symbol symbol symbol symbol