→
Partie 1 ,
partie 2Un an s'est écoulé depuis la dernière publication, et on me pose souvent la question de ce qui a changé depuis. En bref, la transition vers les puces Ntag a été effectuée, de petits changements ont été apportés au circuit pour offrir une meilleure sensibilité, un volume de signal et un mouvement d'horloge corrects, et un logiciel a été créé pour fonctionner avec le système. En général, le système s'est stabilisé et est prêt pour la lecture et l'utilisation. Plus de détails ci-dessous.
Tout d'abord, je vais vous parler des puces RFID, pourquoi la transition a été faite vers Ntag. Permettez-moi de vous rappeler que la mémoire Mifare Classic 1K contient 1024 octets, dont 752 octets sont disponibles pour stocker des informations. La structure de la mémoire est divisée en 16 blocs, qui contiennent 4 pages de 16 octets, dont l'un est réservé au cryptage. Si vous utilisez une page en tant que service, il restait 46 pages pour l'enregistrement des marques.
Au début du développement, j'ai utilisé la mémoire librement - une page de 16 octets par marque, ce qui limite l'utilisation des démarrages de taille moyenne. Et pour rogaining, course d'orientation touristique ou course aventure, 46 stations sont peu nombreuses. Par conséquent, l'idée de compactage a été réalisée: deux marques ont été écrites sur chaque page. Dans le même temps, il y avait un risque de perte de données, car l'unité d'enregistrement est d'une page, et lors du réenregistrement, vous devez lire la moitié déjà enregistrée afin de la réécrire. En fait, je suis monté sur ce râteau lors de Rogaining en novembre dernier, une petite partie des données a été perdue, j'ai dû beaucoup éditer manuellement. Et, bien qu'une erreur dans le code ait été détectée, j'ai décidé de passer à des puces plus volumineuses sans risque de perte de données lors de la réécriture.
L'une des options possibles consiste à utiliser des puces Mifare 4K, dont la structure diffère de 1K en seulement quatre fois la grande quantité de mémoire. Mais de telles puces sont plus chères et la durée de nettoyage, les marques à leur utilisation augmenteraient. Une autre option consiste à utiliser les puces de la série Ntag (213/215/216). La structure de la mémoire des puces Ntag est assez simple - la mémoire est divisée en pages de 4 octets, les 4 premières et 5 dernières pages sont réservées au stockage des informations de service, le reste peut être utilisé. Les puces de la série Ntag diffèrent par la taille de la mémoire, Ntag213 a 36 pages (144 octets) gratuitement, Ntag215 a 126 pages (504 octets) et Ntag216 a 222 pages (888 octets). En conséquence, j'ai implémenté la prise en charge de toutes les puces de cette série, bien que Ntag215 puisse être considéré comme optimal, dont la mémoire est suffisante pour 120 marques, et le prix est assez bas (environ 0,2 $ par puce sous forme d'autocollant ou 0,4 $ sous forme de porte-clés). Aussi, sur les conseils de SFR, il a décidé d'abandonner le stockage des informations critiques - le numéro de la dernière page gratuite au profit de sa recherche binaire. Cela a augmenté l'horodatage, mais a augmenté la fiabilité.
La page de mémoire Ntag contient 4 octets, dans lesquels vous devez ajuster le numéro de station - 1 octet et l'horodatage - 4 octets. Le problème a été résolu par le fait que le temps complet d'initialisation (nettoyage) de la puce est écrit sur une page séparée, et lorsqu'il est marqué, seuls les 3 octets inférieurs du temps. Ensuite, lors de la lecture, le temps des repères est complètement restauré en fonction du temps d'initialisation. Une autre page de la puce est occupée par le numéro de puce et deux sont laissées en réserve. La structure résultante est présentée ci-dessous:

L'utilisation de Ntag a permis de résoudre le problème de l'enregistrement sécurisé d'un grand nombre de marques sur la puce, mais un autre problème s'est posé. Les puces Ntag nécessitent plus de puissance d'émission que Mifare avec la même zone d'antenne, et les puces de porte-clés dans lesquelles l'antenne est de l'ordre de 2 cm ^ 2 peuvent ne pas fonctionner correctement sur le module RC522 en standard. La solution au problème consistait à souder les inductances du module à des inductances plus puissantes. Dans le même temps, la plage de réponse a augmenté de manière significative, pour les puces Ntag jusqu'à 2 cm et pour Mifare jusqu'à 3 cm. Mais certains modules ont commencé à mal fonctionner en raison de cette soudure: les puces ont été enregistrées uniquement avec une plage de distances certaine et plutôt imprévisible de l'antenne d'émission. J'ai dû entrer dans la bibliothèque Arduino RC522 et y trouver le paramètre de gain, qui est responsable de la puissance de l'antenne; le modifier pour des stations individuelles a résolu le problème. Il a également maîtrisé la fabrication manuelle de puces sur un bracelet à partir d'autocollants. Alibaba est déjà en vente prête à l'emploi et belle, mais leur zone d'antenne est presque la moitié de celle, la marque passe moins stable. Je note également que j'ai quitté le support des puces Mifare 1K, vous pouvez travailler avec elles, mais pour cela, vous devez utiliser un firmware séparé, et la capacité de la puce est limitée à 42 marques, mais elles sont livrées avec des modules RC522.

Un autre problème qui a dû être résolu pendant le développement était le mauvais déroulement de l'horloge. Dans certaines stations, l'horloge a commencé à ralentir ou à se précipiter jusqu'à 5 minutes par jour. Pendant longtemps, je ne pouvais pas comprendre la raison, puis j'ai découvert que seules les stations avec une carte de circuit imprimé fabriquée en usine étaient buggées, alors que tout fonctionnait bien sur celles gravées manuellement. J'ai pensé à quoi cela pouvait être lié. Sur des pistes assez épaisses gravées à la main en raison de leur étamage abondant, moins de résistance. Il s'est avéré que le condensateur à la sortie du stabilisateur n'était pas suffisant pour découpler la puissance de l'horloge sur des pistes minces d'usine. J'ai mis un autre condensateur près de l'horloge, et le problème, pour la plupart, a été résolu. Une petite partie de la montre échoue toujours, mais j'associe déjà cela au mariage de montres bon marché avec ali, vous devez rechercher des fournisseurs fiables.
Eh bien, le dernier changement dans le circuit est l'amplification du signal sonore. Auparavant, le contrôle et la puissance du tweeter dans le circuit étaient effectués à partir du pied du microcontrôleur, il était donc assez limité en puissance. Maintenant, la puissance passe directement des batteries, et le contrôle se fait par un transistor, ce qui a considérablement augmenté le volume du signal. Tous ces changements sont maintenant pris en compte et introduits dans les fichiers Gerber, mais j'ai retravaillé manuellement une quarantaine de stations, j'ai dû choisir le composé, couper les pistes, accrocher le transistor aux fils, il y avait des stations cassées.

En raison de la transition vers d'autres puces, le micrologiciel des stations de base a dû être considérablement modifié, mais le principe et la logique de travail, pour la plupart, sont restés les mêmes. Les mêmes modes d'économie d'énergie, sommeil, travail, réglage à l'aide de puces principales. Mais le firmware de la passerelle a été complètement repensé. Le protocole de communication précédent, lorsque les données étaient diffusées en continu sur un port COM dans un flux continu, semblait vulnérable: un octet était manquant et toutes les données transformées en citrouille. L'adaptation aux protocoles de transfert de données existants semblait ennuyeuse, alors il a inventé son vélo.
Les informations sont transmises et reçues séquentiellement en transmettant des paquets de 32 octets maximum. Si les données transmises ne rentrent pas dans le paquet, la transmission est effectuée en retransmettant séquentiellement les paquets. Le paquet commence par l'octet de démarrage 0xFE, suivi du numéro de commande, de la longueur du paquet, des données et à la fin de la somme de contrôle. Les commandes passent uniquement avec la valeur correcte de la somme de contrôle et des octets de démarrage. Assez simple et assez fiable.

La connexion a été établie, mais il a fallu écrire un logiciel normal pour l'ordinateur, mes travaux sur le traitement n'étaient pas adaptés à cela. Semyon Yakimov, qui a créé
un module Python pour travailler avec le système, l'a repris, ce dont il est très reconnaissant. Le module vous permet de communiquer avec la passerelle, de transmettre et de recevoir des données dans un format pratique. Après cela, j'ai maîtrisé Python en première approximation et écrit une
application GUI simple basée sur ce module et PyQt, qui peut être utilisée pour configurer le système, ainsi que pour collecter des données à partir de puces sous la forme d'un fichier JSON. Eh bien, les données peuvent être traitées à l'aide de petits scripts pour des compétitions avec une variété de conditions et de règles, publiées sous une forme pratique (
orientation touristique ,
rogaining ). Mais, de toute façon, cela implique certaines compétences, et le bonheur serait incomplet sans les développeurs du programme
SportOrg , qui ont ajouté le soutien à Sportiduino (en plus de Sportident et SFR). Le programme se développe activement et beaucoup de choses sont capables de juger les débuts de la course d'orientation.
Conclusion
Ainsi, à l'heure actuelle, il existe un matériel et des logiciels stables. Je crois que l'objectif de l'entreprise a été atteint: un système de marquage électronique bon marché est apparu. Je ne vais rien changer dans le cadre de ce schéma, sauf s'il y a une sorte de bogue. Le système de marquage a déjà été développé et testé sur un grand nombre de compétitions différentes: course d'orientation, rogaining, lancer de marche, trail, étapes touristiques. Outre moi, il est utilisé par plusieurs personnes dans des endroits différents. Quelqu'un a joué au système, quelqu'un y a fait des ajouts, par exemple, un
module radio ou l'utilisation de
piles au lithium et de puces
Mifare comme principales.
Le développement est ouvert et non commercial, sous licence GNU GPLv3. N'importe qui peut librement le copier, le reproduire, le modifier et l'utiliser. Au cours de la dernière année, j'ai posé beaucoup de questions si je fais une vente de station. Non, je ne veux pas faire ça. D'un autre côté, cela ne me dérange pas si quelqu'un remplit ce créneau. Je suis seulement prêt à donner des conseils de montage et d'utilisation, car tout y est assez simple.
Le projet est disponible sur
github , il y a des diagrammes localisés, des instructions et d'autres documents utiles. Merci de votre attention.