
De lunes a viernes, he estado desarrollando software corporativo durante 17 años, tuve muchos pasatiempos diferentes, pero al final encontré lo que había estado guardando durante 5 años y no lo dejé pasar. Desde 2013, dedico la mayor parte de mi tiempo libre al motocross y enduro en motocicletas todoterreno, incluida la participación habitual en competiciones de aficionados. Después de una caída fallida en junio de 2017, terminé en un hospital con una fractura completa del húmero derecho. Salí del hospital, recuperé el sentido y quedó claro que no sería posible viajar durante otros dos o tres meses, pero el hábito del trabajo activo se mantuvo. Entonces decidí que debía tratar de organizar la carrera para mis amigos. Desde un punto de vista técnico, estaba interesado en el tiempo, sobre cómo hago mi propio sistema y paso las carreras bajo el corte.
Durante un mes por las noches, escribió la primera versión del programa de árbitros. Utilicé C # y WPF para la implementación, simplemente porque los conozco mejor y no necesito pasar tiempo estudiando la documentación. En el programa fue posible registrar a los participantes con números iniciales, divididos en clases y razas. Durante la carrera, fue necesario manejar para conducir en el número del participante que viajaba a través de la línea de meta. Todo funcionó bien, y considerando el pequeño número de participantes en la primera carrera (alrededor de 40 personas), no fue difícil contar a todos con las manos.
Sin embargo, como programador, quería más automatización, no me gusta el trabajo de rutina manual y, además, grabar con cien participantes con mis manos ya es bastante difícil. Como resultado, en 2017, llevó a cabo otra etapa, donde ya había 3 clases separadas y más de cien participantes, el evento fue bastante exitoso y se decidió utilizar el serif electrónico para la próxima temporada.

La figura muestra una versión moderna del programa con soporte RFID y control remoto desde un teléfono inteligente. Había muchos menos elementos en la primera versión.
Selección de equipamiento
Por supuesto, este tema no es nuevo, hay muchas opciones listas para usar, pero la mayoría de ellas no estaban muy contentas con el precio. Por ejemplo, un sistema de cronometraje profesional de carreras de la compañía italiana AMB cuesta aproximadamente € 13,000 y viene con 20 transpondedores rodantes. Cada chip adicional cuesta € 100 y son desechables, es decir, después de 3-5 años, cuando la batería se agota en ellos, no se puede reemplazar de forma regular. El resto del sistema es excelente, se usa en todas las carreras mundiales, tiene una precisión de milésimas de segundo, etc. Para un aficionado que organiza carreras para amigos en su tiempo libre, este sistema no es adecuado. También encontré muchos sistemas de cronometraje listos para maratones, triatlones y otras competiciones similares. Los sistemas utilizan etiquetas RFID. Pero los detalles eran vergonzosos allí: las personas terminan el maratón en el mejor de los casos a una velocidad de 20 km / h, y en motocross es habitual dar el acabado en el trampolín más grande, al que ingresan a una velocidad de 70-80 km / h. Pero el precio de las etiquetas RFID de aproximadamente 11 rublos cada una permitió distribuirlas en cualquier cantidad.
Usando RFID
En general, la tecnología RFID no se diseñó originalmente para detectar carreras, si lee las especificaciones de los chips y lectores, puede encontrar restricciones en la velocidad del chip con respecto a la antena de varios metros por segundo. Pero sabía que un sistema similar se había utilizado con éxito durante muchos años en la famosa serie de carreras xsr-moto.ru, en la que yo mismo participé muchas veces y tenía sus etiquetas RFID en mi casco. Sergey Mindin, el organizador de esa serie, compartió amablemente información y me señaló motosponder.com, donde adquirió su serif.

Esto ayudó a decidir la elección del primer lector: Alien Technology F800, porque sabía con certeza que funcionaría en las condiciones que necesitaba. Además de Alien, estaba considerando el Imping Speedway Revolution R420 y mirando la calidad del SDK y la documentación que iba a comprar. Pero al final, se decidió por el F800 como una solución deliberadamente probada.
El lector me costó alrededor de $ 1600, comprado en Moscú, inmediatamente les compré dos antenas y cables de alta frecuencia de 5 metros. Una sorpresa desagradable fue el precio de los cables de RF. Un cable de 10 metros costará más que la antena en sí, y es fácil romperlo, por ejemplo, doblarlo o aplastarlo con el pie.
Solución: comprar un conjunto de equipos y software listos para usar de motosponder por $ 3,500 es costoso y no deportivo. Solo necesita comprar equipos que cuestan alrededor de $ 2,200 y escribir el software usted mismo. ¿Qué podría ser complicado allí? :)
Mirando los precios anteriores, surge una pregunta lógica: ¿fue posible ahorrar? Compre un lector chino, los precios comienzan desde $ 200. Hubo tales pensamientos, pero aún existía la idea de que tenía un tiempo muy limitado, y la estabilidad del diseño final y la facilidad de desarrollo eran importantes. Antes de esto, no tenía experiencia práctica con RFID y no tenía idea de las limitaciones físicas que podría encontrar. Por lo tanto, la idea de los lectores chinos fue pospuesta, pero no olvidada.
Descripción general de las opciones de RFID
RFID es el nombre común para toda una familia de tecnologías que difieren en frecuencia y protocolo de intercambio de datos.
- RFID LF: rango de kilohercios, rango bajo y velocidad de lectura.
- HF 14 MHz: generalmente son pases "magnéticos" para el edificio, teclas de intercomunicación, tarjetas de pago sin contacto, NFC en teléfonos. En general, una frecuencia muy común, pero el radio de comunicación es de hasta un metro. De nuevo no es adecuado para mi caso. Sin embargo, conozco un sistema de temporización que funciona perfectamente y que se basa en teléfonos inteligentes y tarjetas de metro. Solo para marcar al jinete, debe detenerse y el juez debe conectar el teléfono a la marca.
- UHF ~ 840 - 930 MHz: el rango en el que se construyen todos los sistemas de cronometraje de eventos en masa. En condiciones óptimas, las etiquetas se leen a una distancia de más de 10 metros, la velocidad de transferencia de datos es suficiente para leer etiquetas a 50 o más veces por segundo, las ondas de estas frecuencias no son tan absorbidas por el agua como en el siguiente rango.
- UHF 2.4 GHz: tal vez estaba mirando mal, pero llegué a la conclusión de que esta frecuencia es una invención de los chinos, porque no encontré tales lectores de fabricantes de marcas. En cualquier caso, decidí no usar esta frecuencia porque está demasiado bien amortiguada por el agua, la suciedad, la niebla y otros ruidos.
Se puede encontrar una descripción un poco más detallada de las frecuencias y estándares en el siguiente enlace rfidcenter.ru/page/frequencies-ranges
RFID UHF
Y así, concluí que la mejor opción para mi aplicación es el rango UHF, dependiendo de las restricciones regionales, estas serán frecuencias de aproximadamente 840 a 930 MHz y la cantidad de canales de 2 a 30.
Mi F800 está diseñado para la región europea y está sintonizado para operar en el rango de 865-867 MHz. Junto con el lector, compré varias etiquetas diferentes, todas ellas tenían características de largo alcance según lo descrito por el fabricante, el rango específico y la velocidad de lectura generalmente no se escriben en ningún lado, porque altamente dependiente de las condiciones. Realicé muchos experimentos leyendo diferentes etiquetas, en diferentes números y configuraciones de antenas. Aquí están las conclusiones concisas:
- En áreas abiertas, si orienta con precisión la marca en la antena, es muy posible obtener una lectura estable a una distancia de 10 metros.
- La forma del campo en la antena es similar a una caída, por lo que la lectura más segura se obtiene a una distancia de 3-5 metros de la antena, en la parte más ancha de la caída. Por supuesto, la forma del patrón de radiación depende del modelo de antena, utilicé antenas de panel plano con la ganancia declarada de 10dbi, antena de 60/65 ° 31.ru/?product=rfid-panelnaya-antenna-pa868-10-rhcp
- Las antenas son de polarización circular y lineal. Con polarización lineal, el rango de lectura es mucho mayor, pero la orientación de la etiqueta debe coincidir con la orientación de la antena.
- Todas las etiquetas de "largo alcance" funcionan aproximadamente igual. Aquí es necesario aclarar que usé las etiquetas de una marca: Alien, tal vez todas están en el mismo chip.
- Encender la máxima potencia de transmisión está lejos de ser siempre la mejor solución. En casa, en una habitación pequeña, debido a los reflejos, la velocidad de lectura disminuyó mucho. Lo mismo puede suceder en el espacio abierto, si dos antenas se miran, funcionarán como espejos.
- En general, con RFID, más problemas provienen de demasiada potencia y rango de lectura que viceversa. Si "brilla" en el campo a la máxima potencia, puede obtener muchas lecturas aleatorias de un área grande (decenas de metros cuadrados). Por lo tanto, es importante ajustar la potencia y la ubicación de las antenas para que la lectura se realice en el área más pequeña.
- La velocidad de lectura de etiquetas depende de su número en el campo de visión del lector. Declaración del capitán, pero cambié números específicos para condiciones óptimas:
- Una marca - 50-70 / s
- 5 y más marcas: 250-280 / seg.
- Aproximadamente 280 lecturas por segundo: este es el límite para cualquier número de etiquetas en el campo y, por supuesto, si hay varias decenas de etiquetas, la velocidad disminuirá significativamente debido a colisiones
- La marca en una motocicleta real que se mueve a una velocidad de más de 80 km / h es legible, pero no en ninguna posición, es deseable que la marca y la antena estén orientadas para que se miren ligeramente. Por ejemplo, la antena está ligeramente dirigida hacia el conductor y la marca se pega en algún lugar en la parte delantera de la motocicleta. A velocidades más bajas, la etiqueta y la antena pueden ser estrictamente perpendiculares a la pista.
En esta etapa, todo parecía bastante bueno, 50 lecturas por segundo, significaba que el tiempo promedio entre lecturas era de 20 milisegundos, pero esto también tenía que verificarse. El programa para recopilar estadísticas se complementó calculando la diferencia de tiempo entre lecturas, mostró el peor, el mejor tiempo y ocho acciones medidas en milisegundos. Resultó que el lector estaba leyendo lejos de manera uniforme. Esto se explica por el protocolo, según él, el lector debe dejar de transmitir al menos 10 milisegundos cada pocos segundos. Aquí está la prueba para dos etiquetas en el campo:

- 44 ms - peor
- 20 ms - décimo decil
- 1 ms es el mejor
- 3.2 ms - tiempo promedio
- 104 lecturas por segundo
Es decir, en 5 segundos de prueba, la mayoría de las lecturas fueron con un espacio de un milisegundo, y luego un silencio de 44 milisegundos. Esta es una característica desagradable para las carreras, durante 44 milisegundos a una velocidad de 20 metros por segundo, el piloto viaja 80 centímetros y, en caso de interferencia, simplemente puede pasar la antena. Aproximadamente esta situación se reprodujo en la prueba real descrita anteriormente. Y también hay una solución: dirigir las antenas hacia los jinetes, luego el espacio y, por lo tanto, el tiempo de lectura, aumenta considerablemente. Y, por supuesto, debe agregar formas adicionales para rastrear a los pasajeros, por ejemplo: grabación de video, una persona con un trozo de papel y un lápiz, una persona que ingresa los números en el programa a mano.
Configuración de línea de meta
Una cosa es leer las etiquetas con la antena en la mesa, y otra en una carrera real con los pilotos. Consideré dos opciones principales para la configuración de la línea de meta.
Primero, las antenas están ubicadas en trípodes a los lados de la pista. Idealmente, las antenas generalmente se paran solo en un lado y "brillan" en la pista. Pero al mismo tiempo, la ubicación de las marcas en los corredores se vuelve asimétrica, es imposible, por ejemplo, comenzar la carrera en la dirección opuesta. Además, leer solo en un lado no es tan confiable. Luego, debe colocar las antenas a ambos lados de la pista para que "brillen" entre sí. Esto ya requiere la construcción de un marco sobre la ruta a lo largo de la cual se colocarán los cables de RF, e incluso en esta configuración, el problema del ancho de vía permanece. Sucede que la pista tiene 8-10 metros de ancho, y teniendo en cuenta el margen para la instalación de trípodes, puede llegar a tener 12-13 metros. A esta distancia, las fallas de lectura pueden suceder fácilmente.
La segunda opción, probada durante muchos años por motosponder y xsr-moto, es instalar antenas en un marco sobre la pista y apuntarlas hacia abajo. Las etiquetas deben estar pegadas a los cascos de los ciclistas o la parte superior del cuerpo. Como resultado, resulta que la distancia desde la antena hasta la marca siempre no será superior a 1,5 metros (la altura del marco es de 3 metros, pero el ciclista rara vez pasa la línea de meta con un casco a nivel del suelo). Y el gran ancho de la pista se puede cortar ligeramente por el marco mismo.

En este momento estoy usando un marco de 6 metros de ancho con tres antenas, su ancho se puede aumentar en una sección adicional a 8-9 metros. Después de eso, necesitará 4 antenas ubicadas un poco más anchas. Según la experiencia de dos carreras en 2018, un ancho de 6 metros es suficiente si instala un cuadro en una sección lenta de la pista. También aumenta la probabilidad de leer etiquetas: matamos dos pájaros de un tiro.
Tiempo
Después de que todo se volvió más o menos claro con el hierro, llegó el momento de contar los círculos. A primera vista, todo es simple: cree una tabla en la que a cada piloto se le asigne un identificador de etiqueta y grabe cada señal del lector.
Casi así, pero las señales del lector deben filtrarse, porque cuando la etiqueta está en el campo de visión del lector, se lee hasta cincuenta veces por segundo. También es necesario tener en cuenta que en casos excepcionales las marcas aún no son legibles, por lo tanto, el programa de muesca debe poder recibir datos en tiempo real del lector, del operador, que ingresa los números manualmente y permite editar las marcas después del final de la carrera.
Los datos proporcionados por el lector y el operador pasan a través del filtro para la deduplicación y se convierten en una pista numérica. Este es un conjunto unidimensional de números de corredores en el orden en que cruzaron la línea de meta. Por ejemplo: [1, 2, 3, 2, 3, 1]. Desde esta pista se puede ver que los corredores dieron dos vueltas, en la primera vuelta las posiciones de los corredores fueron 1, 2, 3. Pero en la segunda vuelta, el número uno tuvo un problema y terminó al final. Como resultado, ganó el número dos, seguido del número tres y luego el número uno. Para calcular el protocolo final, se utiliza el orden y no las marcas de tiempo. Esto se hace para la compatibilidad con la sincronización manual clásica, cuando los jueces registran los números de pista en una computadora portátil. Aunque todavía no existe tal función, es fácil implementar la carga de los números de pista de un juez adicional. Como resultado del cálculo, se obtiene la siguiente tabla:

Conclusión
Este artículo describe solo una pequeña experiencia que he adquirido en los últimos 1,5 años. Además, me gustaría hablar sobre la creación de un sitio para registrar corredores y publicar resultados en modo Live, desarrollar una segunda versión del complejo de muesca de hardware basado en el módulo RFID chino y Orange Pi, el proceso de preparación de la pista, organizar un evento masivo y mucho más. Si el tema es interesante, deje comentarios.
El proyecto está abierto, una parte importante del código se publica en github.com/maxbl4, el resto también lo estará pronto, solo necesita limpiar las contraseñas y las claves API del código :-) Si está interesado en ayudar al desarrollo del proyecto, aprenda algo nuevo, por ejemplo, aprenda a conducir motocicletas, escriba en .Net Core y Angular, póngase en contacto. La pila de tecnología actual es .Net 4.7, .Net Core 2.2, Docker, Angular 7.1, MySql 10.3
Por el momento, todo el código para trabajar con los dos tipos de lectores RFID que uso está disponible públicamente: github.com/maxbl4/RfidDotNet
Biblioteca .Net Standard 2.0, implementación de protocolo completo, dependencia externa solo en SerialPorlStream para trabajar con puerto serie en Linux.
Puede ver el sistema en acción, comunicarse y pasar un buen rato en el festival de motocicletas deportivas el 16 de febrero cerca de Sergiev Posad vk.com/event74123582 en este evento.