
Nos dias de semana, desenvolvo software corporativo há 17 anos, tinha muitos hobbies diferentes, mas no final descobri o que tenho mantido por 5 anos e não vou deixar passar. Desde 2013, dedico a maior parte do meu tempo livre ao motocross e enduro em motocicletas off-road, inclusive participando regularmente de competições amadoras. Após uma queda malsucedida em junho de 2017, acabei em um hospital com uma fratura completa do úmero direito. Saí do hospital, recuperei os sentidos e ficou claro que não seria possível viajar por mais dois ou três meses, mas o hábito de trabalhar ativamente permaneceu. Então decidi que deveria tentar organizar a corrida para meus amigos. Do ponto de vista técnico, eu estava interessado no timing, sobre como faço meu próprio sistema e passo as corridas lidas por baixo.
Durante um mês à noite, ele escreveu a primeira versão do programa de árbitros. Usei C # e WPF para implementação, simplesmente porque os conheço melhor e não preciso gastar tempo estudando a documentação. No programa foi possível gravar os participantes com números iniciais, divididos em classes e raças. Durante a corrida, foi necessário conseguir dirigir o número de participantes que passavam pela linha de chegada. Tudo funcionou bem e, considerando o pequeno número de participantes na primeira corrida (cerca de 40 pessoas), não foi difícil contar tudo com as mãos.
No entanto, como programador, eu queria mais automação, não gosto de trabalhos manuais de rotina e, além disso, gravar com cem participantes com as mãos já é bastante difícil. Como resultado, em 2017, ele conduziu outra etapa, onde já havia 3 aulas separadas e mais de cem participantes, o evento foi bastante bem-sucedido e foi decidido o uso de serifa eletrônica na próxima temporada.

A figura mostra uma versão moderna do programa com suporte a RFID e controle remoto de um smartphone. Havia muito menos elementos na primeira versão.
Seleção de equipamentos
É claro que esse tópico não é novo, existem muitas opções prontas, mas a maioria não ficou muito feliz com o preço. Por exemplo, um sistema profissional de cronometragem de corrida da empresa italiana AMB custa aproximadamente € 13.000 e vem com 20 transponders rolantes. Cada chip adicional custa € 100 e é descartável, ou seja, após 3-5 anos, quando a bateria morre, não pode ser substituída regularmente. O resto do sistema é excelente, é usado em todas as corridas mundiais, tem precisão de milésimos de segundo e assim por diante. Para um hobby que organiza corridas para amigos em seu tempo livre, esse sistema não é adequado. Eu também encontrei muitos sistemas de cronometragem prontos para maratonas, triatlos e outras competições similares. Os sistemas usavam etiquetas RFID. Mas os detalhes foram embaraçosos lá - as pessoas terminam a maratona na melhor das hipóteses a uma velocidade de 20 km / h, e no motocross é costume dar o acabamento no maior trampolim, no qual entram a uma velocidade de 70-80 km / h. Mas o preço das etiquetas RFID de cerca de 11 rublos cada permitiu distribuí-las em qualquer quantidade.
Usando RFID
Em geral, a tecnologia RFID não foi originalmente projetada para detectar corridas. Se você ler as especificações dos chips e leitores, poderá encontrar restrições na velocidade do chip em relação à antena de vários metros por segundo. Mas eu sabia que um sistema semelhante havia sido usado com sucesso por muitos anos na famosa série de corridas xsr-moto.ru, da qual eu próprio participei várias vezes e tinha suas etiquetas RFID no meu capacete. Sergey Mindin, o organizador dessa série, gentilmente compartilhou informações e me indicou motosponder.com, onde ele adquiriu sua serifa.

Isso ajudou a decidir sobre a escolha do primeiro leitor - Alien Technology F800, porque eu tinha certeza de que funcionaria nas condições necessárias. Além da Alien, eu estava considerando o Imping Speedway Revolution R420 e analisando a qualidade do SDK e a documentação que eu compraria. Mas, no final, ele optou pelo F800 como uma solução deliberadamente comprovada.
O leitor me custou cerca de US $ 1600, comprado em Moscou, imediatamente adquiri duas antenas e cabos de alta frequência de 5 metros. Uma surpresa desagradável foi o preço dos cabos de RF. Um cabo de 10 metros custa mais que a própria antena e é fácil quebrá-lo, por exemplo, dobrá-lo ou esmagá-lo com o pé.
Solução: comprar um conjunto pronto de equipamentos e software da motosponder por US $ 3.500 é caro e não esportivo. Você só precisa comprar equipamentos que custam cerca de US $ 2.200 e escrever o software por conta própria. O que poderia ser complicado lá? :)
Observando os preços acima, surge uma pergunta lógica: foi possível economizar? Compre um leitor chinês, preços a partir de US $ 200. Havia tais pensamentos, mas ainda havia o pensamento de que eu tinha um tempo muito limitado, e a estabilidade do design final e a facilidade de desenvolvimento eram importantes. Antes disso, eu não tinha experiência prática com RFID e não tinha idéia de quais limitações físicas eu poderia encontrar. Portanto, a idéia dos leitores chineses foi adiada, mas não esquecida.
Visão geral das opções de RFID
RFID é o nome comum para toda uma família de tecnologias que diferem em frequência e protocolo de troca de dados.
- LF RFID - faixa de kilohertz, faixa baixa e velocidade de leitura.
- HF 14 MHz - geralmente são passes "magnéticos" para o edifício, chaves de intercomunicação, cartões de pagamento sem contato, NFC nos telefones. Em geral, é uma frequência muito comum, mas o raio de comunicação é de até um metro. Novamente, não é adequado para o meu caso. No entanto, eu conheço um sistema de temporização que funciona perfeitamente, construído em smartphones e placas de metrô. Apenas para marcar o piloto, ele deve parar e o juiz deve anexar o telefone à marca.
- UHF ~ 840 - 930 MHz - o intervalo no qual todos os sistemas de temporização de eventos de massa são construídos. Em condições ideais, os tags são lidos a uma distância superior a 10 metros, a velocidade de transferência de dados é suficiente para ler tags a 50 ou mais vezes por segundo; as ondas dessas frequências não são tão absorvidas pela água quanto no próximo intervalo.
- UHF 2,4 GHz - talvez eu estivesse parecendo mal, mas concluí que essa frequência é uma invenção dos chineses, porque não encontrei esses leitores de fabricantes de marca. De qualquer forma, decidi não usar essa frequência, porque ela é muito úmida pela água, sujeira, névoa e outros ruídos.
Uma descrição um pouco mais detalhada de frequências e padrões pode ser encontrada no seguinte link rfidcenter.ru/page/frequencies-ranges
RFID UHF
Concluí, portanto, que a melhor opção para minha aplicação é a faixa UHF, dependendo das restrições regionais, serão frequências de cerca de 840 a 930 MHz e o número de canais de 2 a 30.
O My F800 foi projetado para a região europeia e está ajustado para operar na faixa de 865-867 MHz. Juntamente com o leitor, comprei várias etiquetas diferentes, todas elas com características de longo alcance, conforme descrito pelo fabricante, a faixa específica e a velocidade de leitura geralmente não estão escritas em nenhum lugar, porque altamente dependente das condições. Realizei várias experiências lendo rótulos diferentes, em diferentes números e configurações de antenas. Aqui estão as conclusões concisas:
- Em áreas abertas, se você orientar com precisão a marca na antena, é possível obter uma leitura estável a uma distância de 10 metros.
- A forma do campo na antena é semelhante a uma queda; portanto, a leitura mais confiante é obtida a uma distância de 3-5 metros da antena - na parte mais larga da queda. Obviamente, a forma do padrão de radiação depende do modelo da antena; usei antenas de tela plana com ganho declarado de 10dbi, antena de 60/65 ° 31.ru/?product=rfid-panelnaya-antenna-pa868-10-rhcp
- As antenas são polarização circular e linear. Com a polarização linear, a faixa de leitura é muito maior, mas a orientação do rótulo deve coincidir com a orientação da antena.
- Todas as tags de "longo alcance" funcionam aproximadamente da mesma maneira. Aqui é necessário esclarecer que usei as tags de uma marca - Alien, talvez elas estejam todas no mesmo chip.
- Ligar a potência máxima de transmissão está longe de ser sempre a melhor solução. Em casa, em uma pequena sala, devido a reflexões, a velocidade de leitura caiu muito. O mesmo pode acontecer no espaço aberto, se duas antenas se entreolharem, elas funcionarão como espelhos.
- Em geral, com o RFID, mais problemas vêm de muita potência e alcance de leitura do que vice-versa. Se você "brilhar" no campo com potência máxima, poderá obter muitas leituras aleatórias em uma área grande (dezenas de metros quadrados). Portanto, é importante ajustar a potência e a localização das antenas para que a leitura seja realizada na menor área.
- A velocidade da leitura das etiquetas depende do seu número no campo de visão do leitor. Declaração do capitão, mas alterei números específicos para condições ideais:
- Uma marca - 50-70 / s
- 5 e mais marcas - 250-280 / s
- Aproximadamente 280 leituras por segundo - este é o limite para qualquer número de tags no campo e, é claro, se houver várias dezenas de tags, a velocidade diminuirá significativamente devido a colisões
- A marca em uma motocicleta real, movendo-se a uma velocidade superior a 80 km / h, é legível, mas não em nenhuma posição; é desejável que a marca e a antena estejam orientadas para que se olhem um para o outro. Por exemplo, a antena está levemente direcionada para o motociclista, e a marca é colada em algum lugar na frente da motocicleta. Em velocidades mais baixas, a etiqueta e a antena podem ser estritamente perpendiculares à pista.
Nesse estágio, tudo parecia muito bom, 50 leituras por segundo, significava que o tempo médio entre as leituras era de 20 milissegundos, mas isso também precisava ser verificado. O programa de coleta de estatísticas foi complementado pelo cálculo da diferença de horário entre as leituras, exibindo o pior, o melhor horário e as oito ações medidas em milissegundos. Aconteceu que o leitor estava lendo longe de ser uniforme. Isso é explicado pelo protocolo, de acordo com ele, o leitor deve parar de transmitir pelo menos 10 milissegundos a cada poucos segundos. Aqui está o teste para dois rótulos no campo:

- 44 ms - pior
- 20 ms - décimo decil
- 1 ms é o melhor
- 3,2 ms - tempo médio
- 104 leituras por segundo
Ou seja, em 5 segundos de teste, a maioria das leituras ocorreu com um intervalo de um milissegundo e, em seguida, um silêncio de 44 milissegundos. Este é um recurso desagradável para as corridas. Por 44 milissegundos a uma velocidade de 20 metros por segundo, o ciclista viaja 80 centímetros e, em caso de interferência, pode simplesmente passar pela antena. Aproximadamente esta situação foi reproduzida no teste real descrito acima. E também existe uma solução - direcionar as antenas para os ciclistas, então o espaço e, portanto, o tempo de leitura aumentam bastante. E, é claro, você precisa adicionar maneiras extras de rastrear os passageiros, por exemplo: gravação de vídeo, uma pessoa com um pedaço de papel e um lápis, uma pessoa que insere números no programa manualmente.
Configuração da linha de chegada
Uma coisa é ler as etiquetas com a antena na mesa e outra em uma corrida real com os pilotos. Eu considerei duas opções principais para a configuração da linha de chegada.
Primeiro, as antenas estão localizadas em tripés nas laterais da pista. Idealmente, as antenas geralmente ficam apenas de um lado e "brilham" na pista. Mas, ao mesmo tempo, a localização das marcas nos corredores se torna assimétrica, é impossível, por exemplo, iniciar a corrida na direção oposta. Além disso, ler apenas de um lado não é tão confiável. Então você precisa colocar as antenas nos dois lados da pista para que elas “brilhem” uma na outra. Isso já requer a construção de uma estrutura ao longo da rota pela qual os cabos de RF serão instalados, e mesmo nessa configuração o problema da largura da pista permanece. Acontece que a pista tem 8 a 10 metros de largura e, levando em conta a margem para a instalação de tripés, pode ser de 12 a 13 metros. A essa distância, as falhas de leitura podem acontecer facilmente.
A segunda opção, comprovada por muitos anos pela motosponder e pela xsr-moto, é instalar antenas em um quadro acima da pista e apontá-las para baixo. As etiquetas precisam ser coladas nos capacetes dos motociclistas ou na parte superior do corpo. Como resultado, verifica-se que a distância da antena à marca sempre será superior a 1,5 metros (a altura do quadro é de 3 metros, mas o ciclista raramente passa a linha de chegada com um capacete ao nível do solo). E a grande largura da pista pode ser ligeiramente cortada pelo próprio quadro.

No momento em que estou usando um quadro de 6 metros de largura e três antenas, sua largura pode ser aumentada em uma seção adicional para 8-9 metros. Depois disso, você precisará de 4 antenas localizadas um pouco mais largas. De acordo com a experiência de duas corridas em 2018, uma largura de 6 metros é suficiente se você instalar um quadro em uma seção lenta da pista. Também aumenta a probabilidade de ler rótulos - matamos dois coelhos com uma cajadada só.
Tempo
Depois que tudo ficou mais ou menos claro com o ferro, chegou a hora de contar círculos. À primeira vista, tudo é simples: crie uma tabela em que cada ciclista receba um identificador de etiqueta e grave cada sinal do leitor.
Quase isso, mas os sinais do leitor precisam ser filtrados, porque quando a tag está no campo de visão do leitor, ela é lida até cinquenta vezes por segundo. Também é necessário levar em consideração que, em casos raros, as marcas ainda não são legíveis, portanto, o programa de entalhe deve poder receber dados em tempo real do leitor, do operador, que digita os números manualmente e permite editar as marcas após o final da corrida.
Os dados fornecidos pelo leitor e pelo operador passam pelo filtro para desduplicação e se transformam em uma faixa numérica. Este é um conjunto unidimensional de números de pilotos na ordem em que eles cruzaram a linha de chegada. Por exemplo: [1, 2, 3, 2, 3, 1]. Nesta pista, você pode ver que os pilotos fizeram duas voltas, na primeira volta as posições dos pilotos eram 1, 2, 3. Mas na segunda volta, o número um teve um problema e acabou no final. Como resultado, o número dois venceu, seguido pelo número três e depois pelo número um. Para calcular o protocolo final, é a ordem usada e não os carimbos de data e hora. Isso é feito para compatibilidade com o tempo manual clássico, quando os juízes registram os números das faixas em um notebook. Embora ainda não exista essa função, é fácil implementar o carregamento dos números das faixas de um juiz adicional. Como resultado do cálculo, é obtida a seguinte tabela:

Conclusão
Este artigo descreve apenas uma pequena experiência adquirida nos últimos 1,5 anos. Além disso, gostaria de falar sobre a criação de um site para registrar ciclistas e publicar resultados no modo Ao vivo, desenvolvendo uma segunda versão do complexo de entalhe de hardware baseado no módulo RFID chinês e no Orange Pi, o processo de preparação da pista, organização de um evento de massa e muito mais. Se o tópico for interessante, deixe comentários.
O projeto está aberto, uma parte significativa do código é publicada em github.com/maxbl4, o restante também será breve, basta limpar as senhas e as chaves de API do código :-) Se você estiver interessado em ajudar no desenvolvimento do projeto, aprenda algo novo, por exemplo, aprenda a dirigir motos, escreva no .Net Core e Angular, entre em contato. A pilha de tecnologia atual é .Net 4.7, .Net Core 2.2, Docker, Angular 7.1, MySql 10.3
No momento, todo o código para trabalhar com os dois tipos de leitores RFID que eu uso está disponível ao público: github.com/maxbl4/RfidDotNet
Biblioteca .Net Standard 2.0, implementação completa do protocolo, dependência externa apenas no SerialPorlStream para trabalhar com porta serial no Linux.
Você pode assistir ao sistema em ação, se comunicar e se divertir no festival de motocicletas esportivas em 16 de fevereiro, próximo a Sergiev Posad vk.com/event74123582.