
En semaine, je développe des logiciels d'entreprise depuis 17 ans, j'ai eu de nombreux hobbies différents, mais au final j'ai trouvé ce que je détiens depuis 5 ans et je ne vais pas le laisser partir. Depuis 2013, je consacre la majeure partie de mon temps libre au motocross et à l'enduro sur les motos tout-terrain, notamment en participant régulièrement à des compétitions amateurs. Après une chute infructueuse en juin 2017, je me suis retrouvée à l'hôpital avec une fracture complète de l'humérus droit. J'ai quitté l'hôpital, j'ai repris mes esprits et il est devenu clair qu'il ne serait pas possible de voyager pendant encore deux ou trois mois, mais l'habitude du travail actif est restée. J'ai alors décidé d'essayer d'organiser la course moi-même pour mes amis. D'un point de vue technique, je m'intéressais au timing, à la façon dont je fais mon propre système et passe les courses à lire sous la coupe.
Pendant un mois le soir, il a écrit la première version du programme d'arbitrage. J'ai utilisé C # et WPF pour l'implémentation, simplement parce que je les connais mieux et que je n'ai pas besoin de passer du temps à étudier la documentation. Dans le programme, il a été possible d'enregistrer les participants avec des numéros de départ, divisés en classes et en courses. Pendant la course, il a fallu parvenir à conduire le nombre de participants qui franchissaient la ligne d'arrivée. Tout a bien fonctionné et compte tenu du petit nombre de participants à la première course (environ 40 personnes), il n'a pas été difficile de tout compter avec les mains.
Cependant, en tant que programmeur, je voulais plus d'automatisation, je n'aime pas le travail de routine manuel, et d'ailleurs, enregistrer avec une centaine de participants avec mes mains est déjà assez difficile. En conséquence, en 2017, il a dirigé une autre étape, où il y avait déjà 3 classes séparées et plus d'une centaine de participants, l'événement a été un grand succès et il a été décidé d'utiliser l'empattement électronique d'ici la saison suivante.

La figure montre une version moderne du programme avec prise en charge RFID et télécommande depuis un smartphone. Il y avait beaucoup moins d'éléments dans la première version.
Sélection d'équipement
Bien sûr, ce sujet n'est pas nouveau, il existe de nombreuses options prêtes à l'emploi, mais la plupart d'entre eux n'étaient pas très satisfaits du prix. Par exemple, un système de chronométrage de course professionnel de la société italienne AMB coûte environ 13 000 € et est livré avec 20 transpondeurs roulants. Chaque puce supplémentaire coûte 100 € et est jetable, c'est-à-dire qu'après 3 à 5 ans, lorsque la batterie meurt, elle ne peut pas être remplacée de manière régulière. Le reste du système est excellent, il est utilisé dans toutes les courses du monde, il a une précision au millième de seconde et ainsi de suite. Pour un amateur qui organise des courses pour des amis pendant son temps libre, ce système ne convient pas. J'ai également trouvé de nombreux systèmes de chronométrage prêts à l'emploi pour les marathons, triathlons et autres compétitions similaires. Les systèmes utilisaient des étiquettes RFID. Mais les détails étaient embarrassants là-bas - les gens terminent le marathon au mieux à une vitesse de 20 km / h, et en motocross, il est habituel de donner l'arrivée sur le plus grand tremplin, où ils entrent à une vitesse de 70-80 km / h. Mais le prix des étiquettes RFID d'environ 11 roubles chacun permettait de les distribuer en toute quantité.
Utilisation de la RFID
En général, la technologie RFID n'a pas été initialement conçue pour détecter les courses, si vous lisez les spécifications des puces et des lecteurs, vous pouvez trouver des restrictions sur la vitesse de la puce par rapport à l'antenne de plusieurs mètres par seconde. Mais je savais qu'un système similaire avait été utilisé avec succès pendant de nombreuses années dans la célèbre série de courses xsr-moto.ru, à laquelle j'ai moi-même participé à plusieurs reprises et j'avais leurs étiquettes RFID sur mon casque. Sergey Mindin, l'organisateur de cette série, a gentiment partagé des informations et m'a dirigé vers motosponder.com, où il a acquis son empattement.

Cela a aidé à décider du choix du premier lecteur - Alien Technology F800, car je savais avec certitude que cela fonctionnerait dans les conditions dont j'avais besoin. En plus d'Alien, je pensais à l'Imping Speedway Revolution R420 et à la qualité du SDK et de la documentation que j'allais acheter. Mais à la fin, il a choisi le F800 comme une solution délibérément éprouvée.
Le lecteur m'a coûté environ 1600 $, acheté à Moscou, leur a immédiatement acheté deux antennes et des câbles haute fréquence de 5 mètres. Une surprise désagréable a été le prix des câbles RF. Un câble de 10 mètres coûtera plus cher que l'antenne elle-même, et il est facile de la casser, par exemple, de la plier ou de l'écraser avec votre pied.
Solution: acheter un ensemble d'équipements et de logiciels prêts à l'emploi à partir d'un motospondeur pour 3 500 $ est cher et non sportif. Il vous suffit d'acheter du matériel qui coûte environ 2 200 $ et d'écrire le logiciel vous-même. Qu'est-ce qui pourrait être compliqué là-bas? :)
En regardant les prix ci-dessus, une question logique se pose: était-il possible d'économiser? Achetez un lecteur chinois, des prix à partir de 200 $ Il y avait de telles pensées, mais il y avait toujours la pensée que j'avais un temps très limité, et la stabilité de la conception finale et la facilité de développement étaient importantes. Avant cela, je n'avais aucune expérience pratique de la RFID et je n'avais aucune idée des limitations physiques que je pourrais rencontrer. Par conséquent, l'idée des lecteurs chinois a été reportée, mais pas oubliée.
Présentation des options RFID
La RFID est le nom commun de toute une famille de technologies différant par la fréquence et le protocole d'échange de données.
- RFID LF - gamme kilohertz, gamme basse et vitesse de lecture.
- HF 14 MHz - il s'agit généralement de laissez-passer «magnétiques» vers le bâtiment, de clés d'interphone, de cartes de paiement sans contact, de NFC dans les téléphones. En général, une fréquence très courante, mais le rayon de communication peut aller jusqu'à un mètre. Encore une fois ne convient pas à mon cas. Cependant, je connais un système de chronométrage parfaitement fonctionnel basé sur les smartphones et les cartes de métro. Seulement pour marquer le cavalier, il doit s'arrêter et le juge doit attacher le téléphone à la marque.
- UHF ~ 840 - 930 MHz - la plage sur laquelle tous les systèmes de chronométrage des événements de masse sont construits. Dans des conditions optimales, les étiquettes sont lues à une distance de plus de 10 mètres, la vitesse de transfert de données est suffisante pour lire les étiquettes à 50 fois ou plus par seconde, les ondes de ces fréquences ne sont pas tellement absorbées par l'eau que dans la gamme suivante.
- UHF 2,4 GHz - peut-être que je regardais mal, mais j'ai conclu que cette fréquence est une invention des chinois, car je n'ai pas trouvé de tels lecteurs de fabricants de marque. En tout cas, j'ai décidé de ne pas utiliser cette fréquence, car elle est trop bien amortie par l'eau, la saleté, le brouillard et autres bruits.
Une description un peu plus détaillée des fréquences et des normes peut être trouvée sur le lien suivant rfidcenter.ru/page/frequencies-ranges
RFID UHF
Et donc, j'ai conclu que la meilleure option pour mon application est la gamme UHF, en fonction des restrictions régionales, ce seront des fréquences d'environ 840 à 930 MHz et le nombre de canaux de 2 à 30.
Mon F800 est conçu pour la région européenne et est réglé pour fonctionner dans la gamme de 865 à 867 MHz. Avec le lecteur, j'ai acheté plusieurs étiquettes différentes, toutes ayant des caractéristiques à longue portée telles que décrites par le fabricant, la plage spécifique et la vitesse de lecture ne sont généralement écrites nulle part, car très dépendante des conditions. J'ai mené pas mal d'expériences en lisant différentes étiquettes, en différents nombres et configurations d'antennes. Voici les conclusions concises:
- Dans les zones ouvertes, si vous orientez précisément la marque sur l'antenne, il est tout à fait possible d'obtenir une lecture stable à une distance de 10 mètres.
- La forme du champ à l'antenne est similaire à une goutte, de sorte que la lecture la plus sûre est obtenue à une distance de 3 à 5 mètres de l'antenne - dans la partie la plus large de la goutte. Bien sûr, la forme du diagramme de rayonnement dépend du modèle d'antenne, j'ai utilisé des antennes à écran plat avec le gain déclaré de 10dbi, antenne 60/65 ° 31.ru /? product= rfid- panelnaya- antenna- pa868-10-rhcp
- Les antennes sont à polarisation circulaire et linéaire. Avec la polarisation linéaire, la plage de lecture est beaucoup plus élevée, mais l'orientation de l'étiquette doit coïncider avec l'orientation de l'antenne.
- Toutes les balises «longue portée» fonctionnent à peu près de la même manière. Ici, il est nécessaire de préciser que j'ai utilisé les tags d'une marque - Alien, peut-être qu'ils sont tous sur la même puce.
- Activer la puissance de transmission maximale est loin d'être toujours la meilleure solution. Chez moi dans une petite pièce, à cause des reflets, la vitesse de lecture a beaucoup baissé. La même chose peut se produire dans un espace ouvert, si deux antennes se regardent, elles fonctionneront comme des miroirs.
- En général, avec la RFID, plus de problèmes proviennent d'une puissance et d'une portée de lecture trop élevées que l'inverse. Si vous «brillez» sur le terrain à la puissance maximale, vous pouvez obtenir de nombreuses lectures aléatoires sur une grande surface (dizaines de mètres carrés). Par conséquent, il est important d'ajuster la puissance et l'emplacement des antennes afin que la lecture soit effectuée sur la plus petite zone.
- La vitesse de lecture des tags dépend de leur nombre dans le champ de vision du lecteur. Déclaration du capitaine, mais j'ai changé des numéros spécifiques pour des conditions optimales:
- Une marque - 50-70 / s
- 5 points et plus - 250-280 / sec
- Environ 280 lectures par seconde - c'est la limite pour n'importe quel nombre de balises sur le terrain, et bien sûr, s'il y a plusieurs dizaines de balises, la vitesse chutera considérablement en raison des collisions
- La marque sur une vraie moto se déplaçant à une vitesse supérieure à 80 km / h est lisible, mais pas dans n'importe quelle position, il est souhaitable que la marque et l'antenne soient orientées de sorte qu'elles se regardent légèrement. Par exemple, l'antenne est légèrement dirigée vers le pilote et la marque est collée quelque part à l'avant de la moto. À des vitesses inférieures, l'étiquette et l'antenne peuvent être strictement perpendiculaires à la piste.
À ce stade, tout semblait plutôt bien, 50 lectures par seconde, ce qui signifie que le temps moyen entre les lectures était de 20 millisecondes, mais cela devait également être vérifié. Le programme de collecte de statistiques a été complété par le calcul de la différence de temps entre les lectures, il a affiché le pire, le meilleur moment et huit parts mesurées en millisecondes. Il s'est avéré que le lecteur lisait loin d'être également. Cela s'explique par le protocole, selon lui, le lecteur doit arrêter de diffuser au moins 10 millisecondes toutes les quelques secondes. Voici le test de deux labels sur le terrain:

- 44 ms - pire
- 20 ms - dixième décile
- 1 ms est le meilleur
- 3,2 ms - temps moyen
- 104 lectures par seconde
Autrement dit, en 5 secondes d'essai, la plupart des lectures se sont déroulées avec un écart d'une milliseconde, puis un silence de 44 millisecondes. C'est une caractéristique désagréable pour la course, pendant 44 millisecondes à une vitesse de 20 mètres par seconde, le pilote parcourt 80 centimètres et en cas d'interférence peut simplement passer devant l'antenne. Cette situation a été reproduite approximativement dans le test réel décrit ci-dessus. Et il y a aussi une solution - pour diriger les antennes vers les coureurs, alors l'espace, et donc le temps de lecture, est considérablement augmenté. Et bien sûr, vous devez ajouter des moyens supplémentaires pour suivre les coureurs, par exemple: l'enregistrement vidéo, une personne avec un morceau de papier et un crayon, une personne qui saisit des chiffres dans le programme à la main.
Configuration de la ligne d'arrivée
C'est une chose de lire les tags avec l'antenne sur la table, et une autre dans une vraie course avec les coureurs. J'ai considéré deux options principales pour la configuration de la ligne d'arrivée.
Tout d'abord, les antennes sont situées sur des trépieds sur les côtés de la piste. Idéalement, les antennes ne se tiennent généralement que d'un côté et «brillent» sur la piste. Mais en même temps, l'emplacement des marques sur les coureurs devient asymétrique, il est impossible, par exemple, de démarrer la course en sens inverse. De plus, la lecture d'un seul côté n'est pas si fiable. Ensuite, vous devez placer les antennes des deux côtés de la piste afin qu'elles «brillent» l'une sur l'autre. Cela nécessite déjà la construction d'un cadre sur la route le long de laquelle les câbles RF seront posés, et même dans cette configuration, le problème de la largeur de la piste demeure. Il arrive que la piste fasse 8-10 mètres de large, et compte tenu de la marge pour l'installation des trépieds, elle peut s'avérer 12-13 mètres. À cette distance, des échecs de lecture peuvent facilement se produire.
La deuxième option, éprouvée depuis de nombreuses années par le répondeur et le xsr-moto, consiste à installer des antennes sur un châssis au-dessus de la piste et à les orienter vers le bas. Les étiquettes doivent être collées sur les casques des cavaliers ou sur le haut du corps. En conséquence, il s'avère que la distance de l'antenne à la marque ne sera pas toujours supérieure à 1,5 mètre (la hauteur du cadre est de 3 mètres, mais le coureur passe rarement la ligne d'arrivée avec un casque au niveau du sol). Et la grande largeur de la piste peut être légèrement coupée par le cadre lui-même.

Pour le moment, j'utilise un cadre de 6 mètres de large avec trois antennes, sa largeur peut être augmentée d'une section supplémentaire à 8-9 mètres. Après cela, vous aurez besoin de 4 antennes situées un peu plus larges. Selon l'expérience de deux courses en 2018, une largeur de 6 mètres suffit si vous installez un cadre sur une section lente de la piste. Cela augmente également la probabilité de lire les étiquettes - nous tuons deux oiseaux avec une pierre.
Le temps
Après que tout soit devenu plus ou moins clair avec le fer, il était temps de compter les cercles. À première vue, tout est simple: créez un tableau dans lequel chaque cycliste se voit attribuer un identifiant de tag et enregistrez chaque signal du lecteur.
Presque oui, mais les signaux du lecteur doivent être filtrés, car lorsque l'étiquette est dans le champ de vision du lecteur, elle est lue jusqu'à cinquante fois par seconde. Il faut également tenir compte du fait que dans de rares cas les marques ne sont toujours pas lisibles, donc le programme Notch doit pouvoir recevoir des données en temps réel du lecteur, de l'opérateur, qui saisit les chiffres manuellement et permet d'éditer les marques après la fin de la course.
Les données fournies par le lecteur et l'opérateur passent à travers le filtre pour la déduplication et se transforment en une piste numérique. Il s'agit d'un tableau unidimensionnel de nombres de coureurs dans l'ordre dans lequel ils ont franchi la ligne d'arrivée. Par exemple: [1, 2, 3, 2, 3, 1]. De cette piste, vous pouvez voir que les coureurs ont fait deux tours, au premier tour les positions des coureurs étaient 1, 2, 3. Mais au deuxième tour, le numéro un a eu un problème et il a fini à la fin. En conséquence, le numéro deux a gagné, suivi du numéro trois, puis du numéro un. Pour calculer le protocole final, c'est l'ordre utilisé et non les horodatages. Ceci est fait pour la compatibilité avec le chronométrage manuel classique, lorsque les juges enregistrent les numéros de piste dans un cahier. Bien qu'il n'y ait pas encore une telle fonction, il est facile d'implémenter le chargement des numéros de piste à partir d'un juge supplémentaire. À la suite du calcul, le tableau suivant est obtenu:

Conclusion
Cet article ne décrit qu'une petite partie de l'expérience que j'ai acquise au cours des 1,5 dernières années. De plus, je voudrais parler de la création d'un site pour l'inscription des coureurs et la publication des résultats en mode Live, du développement d'une deuxième version du complexe de cran matériel basé sur le module RFID chinois et Orange Pi, le processus de préparation de la piste, l'organisation d'un événement de masse et bien plus encore. Si le sujet est intéressant, laissez des commentaires.
Le projet est ouvert, une partie importante du code est publiée sur github.com/maxbl4, le reste sera aussi bientôt, il vous suffit de nettoyer les mots de passe et les clés API du code :-) Si vous êtes intéressé à aider au développement du projet, apprenez quelque chose de nouveau, par exemple, apprenez à conduire des motos, écrivez sur .Net Core et Angular, veuillez contacter. La pile technologique actuelle est .Net 4.7, .Net Core 2.2, Docker, Angular 7.1, MySql 10.3
Pour le moment, tout le code pour travailler avec les deux types de lecteurs RFID que j'utilise est accessible au public: github.com/maxbl4/RfidDotNet
Bibliothèque .Net Standard 2.0, implémentation complète du protocole, dépendance externe uniquement sur SerialPorlStream pour travailler avec le port série sous Linux.
Vous pouvez regarder le système en action, communiquer et passer un bon moment au festival de la moto sportive le 16 février près de Sergiev Posad vk.com/event74123582 lors de cet événement, je fournis le calendrier