
在工作日里,我从事企业软件开发已有17年了,我有很多不同的爱好,但最终我发现自己拥有5年了,并没有放弃它。 自2013年以来,我将大部分业余时间用于越野摩托车和越野摩托车,包括定期参加业余比赛。 在2017年6月失败后,我最终因右肱骨完全骨折而住院。 我离开医院后,感觉到很明显,再也无法旅行两三个月,但仍然保持积极工作的习惯。 然后,我决定自己尝试为我的朋友们组织这场比赛。 从技术角度来看,我对时机感兴趣,希望了解如何制作自己的系统以及如何在削减条件下阅读比赛。
在晚上的一个月里,他编写了裁判程序的第一版。 我之所以使用C#和WPF来实现,仅仅是因为我对它们更加了解,并且我不需要花时间研究文档。 在该程序中,可以记录参加者的起始号码,分为班级和种族。 在比赛中,有必要设法增加参加终点线比赛的参与者的数量。 一切都很好,考虑到第一场比赛的参加者人数很少(大约40人),用手算盘并不困难。
但是,作为一名程序员,我想要更多的自动化功能,我不喜欢手动的例行工作,此外,与一百名参与者一起进行录制已经相当困难。 结果,在2017年,他进行了另一个阶段,该阶段已经有3个单独的班级并且有100多名参与者,该活动非常成功,因此决定在下个赛季使用电子衬线。

该图显示了该程序的现代版本,具有RFID支持和智能手机的远程控制。 第一个版本中的元素要少得多。
设备选型
当然,这个话题并不新鲜,有很多现成的选择,但是其中大多数对价格都不是很满意。 例如,意大利AMB公司的专业赛车计时系统的价格约为13,000欧元,并配有20个滚动应答器。 每增加一块芯片就要花费100欧元,并且它们是一次性的,也就是说,在3-5年后,当电池耗尽后,就无法定期更换。 该系统的其余部分非常出色,可用于世界所有种族,其精度可达千分之一秒,依此类推。 对于业余时间为朋友组织比赛的业余爱好者,此系统不适合。 我还发现了许多用于马拉松,铁人三项和其他类似比赛的现成计时系统。 系统使用RFID标签。 但是具体细节令人尴尬-人们最多以20 km / h的速度完成马拉松比赛,而在越野摩托车中,习惯在最大的跳板上以20-80 km / h的速度进入终点。 但是,RFID标签的价格约为每个11卢布,可以任意分配。
使用RFID
通常,RFID技术最初并不是设计来检测比赛的,如果您阅读芯片和阅读器的规格,就会发现芯片相对于每秒几米天线的速度受到限制。 但是我知道,类似的系统已经在著名的赛车系列xsr-moto.ru中成功使用了很多年,我本人参加了很多次比赛,并在我的头盔上贴了他们的RFID标签。 该系列的组织者谢尔盖·敏丁(Sergey Mindin)友善地分享了信息,并向我指出了motosponder.com,他在那里获取了衬线。

这有助于决定选择第一个阅读器-Alien Technology F800,因为我确定它可以在我需要的条件下运行。 除了Alien,我还考虑了Imping Speedway Revolution R420,并查看要购买的SDK和文档的质量。 但是最后,他选择了F800作为经过验证的解决方案。
读者花了我大约1600美元,在莫斯科买了,立即买了两根天线和5米的高频电缆。 令人不愉快的是射频电缆的价格。 10米长的电缆比天线本身要贵得多,而且很容易折断,例如,用脚弯曲或挤压它。
解决方案:以3500美元的价格从motosponder购买一套现成的设备和软件非常昂贵,而且不算运动。 您只需要购买价格约为2,200美元的设备,然后自己编写软件即可。 那里可能有什么复杂的事情? :)
看看上面的价格,就会出现一个逻辑问题:是否可以节省? 买一本中文阅读器,价格从200美元起。有这样的想法,但仍然有一个想法,就是我的时间很有限,最终设计的稳定性和易于开发性很重要。 在此之前,我没有RFID的实践经验,也不知道我可能遇到的物理限制。 因此,中国读者的想法被推迟了,但并未被遗忘。
RFID选项概述
RFID是整个技术系列的通用名称,这些技术在数据交换的频率和协议上有所不同。
- LF RFID-千赫范围,低范围和读取速度。
- HF 14 MHz-这些通常是“磁性”通行证,楼宇对讲机钥匙,非接触式支付卡以及电话中的NFC。 通常,这是一个非常常见的频率,但是通信半径高达一米。 再次不适合我的情况。 但是,我知道一个基于智能手机和地铁卡的完美工作计时系统。 只是为了标记骑手,他必须停下来,法官必须将手机贴在标记上。
- UHF〜840-930 MHz-建立大规模事件的所有计时系统的范围。 在最佳条件下,标签的读取距离超过10米,数据传输速度足以以每秒50次或更多次的速度读取标签,这些频率的波被水吸收的程度不如下一个范围。
- UHF 2.4 GHz-也许我看上去很糟,但我得出的结论是该频率是中国人的发明,因为我找不到品牌制造商的此类阅读器。 无论如何,我决定不使用该频率,因为它会被水,灰尘,雾气和其他噪音很好地衰减。
有关频率和标准的更详细说明,请参见以下链接rfidcenter.ru/page/frequencies-ranges
超高频RFID
因此,我得出结论,对于我的应用,最好的选择是UHF范围,具体取决于区域限制,这些范围将是大约840至930 MHz的频率和2至30的信道数。
我的F800专为欧洲地区而设计,并调整为在865-867 MHz范围内运行。 我和阅读器一起买了几个不同的标签,它们都具有制造商描述的长距离特性,特定范围和读取速度通常不会写在任何地方,因为 高度依赖条件。 我进行了很多实验,读取不同标签,不同数量和配置的天线。 简要的结论如下:
- 在空旷地区,如果您精确地对准天线上的标记,则很有可能在10米的距离处获得稳定的读数。
- 天线处的电场形状类似于液滴,因此最可靠的读数是在距天线3-5米的距离处(液滴最宽的部分)获得的。 当然,辐射方向图的形状取决于天线型号,我使用了标称增益为10dbi, 60/65 ° Antenna31.ru/?product=rfid-panelnaya-antenna-pa868-10-rhcp的平板天线
- 天线是圆极化和线极化的。 对于线性极化,读取范围要大得多,但标签的方向应与天线的方向一致。
- 所有“远程”标签的工作原理大致相同。 在这里有必要澄清一下,我使用了一个品牌的标签-Alien,也许它们都在同一芯片上。
- 开启最大发射功率并非总是最佳解决方案。 在家里的一个小房间里,由于反射,读取速度下降了很多。 在开放空间中可能会发生同样的事情,如果两个天线互相看,它们将像镜子一样工作。
- 通常,对于RFID,更多的问题来自功率和读取范围过大,反之亦然。 如果以最大功率在野外“发光”,则可以从大面积(数十平方米)中获得许多随机读数。 因此,重要的是调整天线的功率和位置,以便在最小的区域上进行读取。
- 阅读标签的速度取决于阅读器视野中标签的数量。 队长的声明,但为了最佳条件,我更改了具体数字:
- 一马克-50-70 / s
- 5个或更多标记-250-280 /秒
- 每秒大约280次读取-这是该字段中任意数量的标签的限制,当然,如果有几十个标签,由于碰撞,速度将大大降低
- 可以以超过80 km / h的速度运动的真实摩托车上的标记是可读的,但是在任何位置都不能读取,希望标记和天线的方向使其彼此略微对准。 例如,天线稍微指向骑手,标记被粘贴在摩托车的前部。 在较低速度下,标签和天线可以严格垂直于轨道。
在此阶段,一切看起来都不错,每秒50次读数,这意味着两次读数之间的平均时间为20毫秒,但这也需要检查。 通过计算读数之间的时间差来补充用于收集统计信息的程序,它显示了最差,最佳时间以及以毫秒为单位测量的八次份额。 事实证明,读者的阅读不均。 协议对此进行了解释,据此,阅读器必须每几秒钟停止广播至少10毫秒。 这是对该字段中两个标签的测试:

- 44毫秒-最差
- 20毫秒-十分位数
- 最好是1毫秒
- 3.2 ms-平均时间
- 每秒104次读取
也就是说,在5个测试秒中,大多数读数的间隔为1毫秒,然后沉默了44毫秒。 对于赛车而言,这是一个令人不愉快的功能,它以每秒20米的速度行驶44毫秒,骑车人走了80厘米,在受到干扰的情况下可以简单地驶过天线。 在上述真实测试中大约重现了这种情况。 还有一种解决方案-将天线指向骑手,然后大大增加了空间,从而延长了阅读时间。 当然,您还需要添加一些备用方法来跟踪骑车人,例如:录像,一个拿着纸和铅笔的人,一个手动将数字输入程序的人。
终点线配置
阅读桌上带有天线的标签是一回事,而在与车手的真实比赛中则是另一回事。 我考虑了终点线配置的两个主要选项。
首先,天线位于轨道侧面的三脚架上。 理想情况下,天线通常仅站在一侧,并在整个轨道上“发光”。 但是同时,赛车手上的标记位置变得不对称,例如不可能从相反的方向开始比赛。 而且,仅在一侧读取不是那么可靠。 然后,您需要将天线放在轨道的两侧,以使它们彼此“发光”。 这已经需要在将要放置RF电缆的路径上构造框架,并且即使在这种配置中,也存在轨道宽度的问题。 碰巧这条轨道是8-10米宽,考虑到安装三脚架的余量,它可以转出12-13米。 在此距离下,读取失败很容易发生。
经过motosponder和xsr-moto多年验证的第二种选择是将天线安装在轨道上方的框架上并指向下方。 标签需要粘贴到骑手的头盔或上身。 结果,从天线到标记的距离将始终不超过1.5米(框架的高度为3米,但是骑手很少在地面上戴着头盔穿过终点线)。 框架本身可以略微减小轨道的大宽度。

目前,我正在使用一个6米宽,带有三个天线的框架,它的宽度可以增加一段,增加到8-9米。 在那之后,您将需要4个稍宽一点的天线。 根据2018年两场比赛的经验,如果在赛道的慢速部分安装车架,那么6米的宽度就足够了。 这也增加了阅读标签的可能性-我们用一块石头杀死了两只鸟。
时间
用铁或多或少使一切变得清晰之后,是时候真正计算圈子了。 乍看之下,一切都很简单:创建一个表,为每个骑手分配一个标签标识符,并记录来自阅读器的每个信号。
几乎是这样,但是需要对来自阅读器的信号进行滤波,因为当标签在阅读器的视野中时,每秒最多可以读取50次。 还必须考虑到在极少数情况下标记仍然不可读,因此,刻痕程序必须能够从阅读器,操作员那里接收实时数据,该操作员可以在比赛结束后手动输入数字并允许编辑标记。
读取器和操作员提供的数据通过过滤器进行重复数据删除,并转换为数字磁道。 这是一列由骑手越过终点线的人数组成的一维数组。 例如:[1、2、3、2、3、1]。 从这条赛道上,您可以看到骑手走了两圈,第一圈的骑手位置是1、2、3。但是在第二圈,一号出现了问题,并最终结束了。 结果,第二名获胜,其次是第三名,然后是第一名。 要计算最终协议,使用的是顺序,而不是时间戳。 当法官在笔记本中记录曲目编号时,这样做是为了与经典手动计时兼容。 尽管尚无此功能,但可以轻松地由其他裁判来执行曲目编号的加载。 计算结果如下表:

结论
本文仅介绍我在过去1.5年中获得的一小部分经验。 此外,我想谈谈创建一个站点来注册骑手并以实时模式发布结果,基于中国RFID模块和Orange Pi开发第二版硬件缺口综合系统,准备赛道,组织群众性活动等等。 如果主题很有趣,请留下评论。
该项目是开放的,很大一部分代码已发布在github.com/maxbl4上,其余的也将很快发布,您只需要清理代码中的密码和API密钥即可:-)如果您有兴趣帮助该项目的开发,请学习一些新知识,例如,学习驾驶摩托车,编写代码在.Net Core和Angular上,请联系。 当前的技术堆栈是.Net 4.7,.Net Core 2.2,Docker,Angular 7.1,MySql 10.3
目前,与我使用的两种类型的RFID读取器配合使用的所有代码都可以公开获得: github.com/maxbl4/RfidDotNet
.Net Standard 2.0库,完整的协议实现,仅在SerialPorlStream上具有外部依赖性,以便在Linux上使用串行端口。
您可以在2月16日在Sergiev Posad附近的运动摩托车节上观看该系统的运行,进行交流并度过愉快的时光vk.com/event74123582 。