Sportiduino-体育赛事电子打标系统,第3部分

第1 部分第2部分

自上次出版以来已经过去了一年,我经常被问到此后发生了什么变化。 简而言之,已经过渡到Ntag芯片,对电路进行了很小的改动以提供更好的灵敏度,信号量和正确的时钟移动,并创建了与系统配合使用的软件。 通常,系统已经稳定下来,可以播放和使用了。 下面有更多详细信息。

首先,我将向您介绍RFID芯片,以及为何向Ntag过渡。 让我提醒您,Mifare Classic 1K存储器包含1024个字节,其中752个字节可用于存储信息。 存储器结构分为16个块,其中包含4个16字节的页面,其中之一保留用于加密。 如果将一页用作服务,则仍有46页用于记录标记。

在开发之初,我自由地使用了内存-一页(每个标记16字节),这限制了中型起始地址的使用。 而且,对于讨价还价,游客定向越野或冒险赛车,很少有46个车站。 因此,实现了压缩的想法:在每页上写了两个标记。 同时,由于记录单位为一页,因此存在数据丢失的风险,并且在重新记录时,需要读取已记录的一半才能再次写入。 实际上,我在去年11月的Rogaining上踩了一把耙,丢失了一小部分数据,我不得不手动进行大量编辑。 而且,尽管在代码中检测到错误,但我还是决定切换到更大容量的芯片,而不会在重写期间丢失数据。

一种可能的选择是使用Mifare 4K芯片,其结构与1K的区别仅在于大容量内存的四倍。 但是这样的芯片更昂贵并且清洁的持续时间会增加其使用痕迹。 另一种选择是使用Ntag系列芯片(213/215/216)。 Ntag芯片的存储结构非常简单-存储器分为4个字节的页面,前4页和后5页保留用于存储服务信息,其余的可以使用。 Ntag系列芯片的内存大小不同,Ntag213有36页(144字节)可用,Ntag215有126页(504字节),Ntag216有222页(888字节)。 结果,我实现了对本系列所有芯片的支持,尽管Ntag215可以被认为是最佳的,其内存足以存储120个标记,并且价格相当低(每个芯片以贴纸形式约0.2美元或以钥匙扣形式约0.4美元)。 同样,在SFR的建议下,他决定放弃存储关键信息-最终的免费页面的数量,改为对其进行二进制搜索。 这增加了时间戳,但增加了可靠性。

内存的Ntag页包含4个字节,您需要在其中填充站号-1个字节和时间戳-4个字节。 通过将芯片的初始化(清理)的全部时间写在一个单独的页面中,并且在进行标记时,仅从时间上降低了3个字节这一事实解决了该问题。 然后,在读取时,基于初始化时间将标记的时间完全恢复。 芯片中的另一页被芯片号占用,剩下两页保留。 结果结构如下所示:



使用Ntag可以解决在芯片上安全记录大量标记的问题,但是又出现了另一个问题。 与相同天线面积的Mifare相比,Ntag芯片需要更多的发射器功率,并且天线尺寸为2 cm ^ 2的钥匙扣芯片可能无法在RC522模块上正常工作。 解决该问题的方法是将模块上的电感焊接到功率更大的电感上。 同时,对于2毫米以下的Ntag芯片和3厘米的Mifare芯片,响应范围显着增加。但是由于这种焊接,某些模块开始无法正常工作:仅在距发射天线一定且不可预测的距离范围内记录芯片。 我必须进入RC522 Arduino库并在其中找到负责天线功率的增益参数;为各个站点对其进行编辑解决了该问题。 他还精通贴纸手工制作芯片。 阿里巴巴已经开始销售现成的,漂亮的产品,但是它们的天线面积几乎是其一半,商标通过的稳定性较差。 我还注意到,我离开了对Mifare 1K芯片的支持,可以使用它们,但是为此,您需要使用单独的固件,并且芯片容量限制为42个标记,但是它们带有RC522模块。



开发过程中必须解决的另一个问题是时钟的不正确路线。 在某些电台,时钟开始滞后或每天最多加速5分钟。 很长时间以来,我都不知道是什么原因,然后我才发现,只有在工厂制造的带有印刷电路板的工作站是越野车,而在手动蚀刻的工厂中一切正常。 我考虑了这可能与之相关。 在手工蚀刻的较厚的轨道上,由于其镀锡丰富,因此阻力较小。 事实证明,稳定器输出端的电容器不足以使工厂纤细的时钟上的时钟功率去耦。 我在时钟附近放置了另一个电容器,该问题在很大程度上已得到解决。 一小部分手表仍然无法工作,但我已经将此与廉价手表与ali的结合联系起来,您需要寻找可靠的供应商。

好吧,电路中的最后一个变化是声音信号的放大。 以前,电路中高音扬声器的控制和电源是通过微控制器的脚来执行的,因此其电源非常有限。 现在,电源直接来自电池,控制通过晶体管进行,这大大增加了信号量。 现在已将所有这些更改考虑在内并引入到Gerber文件中,但是我手动重做了大约40个工作站,我不得不挑选化合物,切割轨道,将晶体管悬挂在电线上,但工作站却有些破损。



由于过渡到其他芯片,因此必须对基站的固件进行实质性的更改,但是工作原理和逻辑在大多数情况下都保持不变。 使用主芯片的节能,睡眠,工作,设置相同的模式。 但是网关的固件已完全重新设计。 当数据以连续流的形式在COM端口中流式传输时,以前的通信协议似乎很脆弱:丢失了一个字节,所有数据都变成了南瓜。 适应现有的数据传输协议似乎很无聊,因此他发明了自行车。

通过发送最多32个字节的数据包,信息被顺序发送和接收。 如果发送的数据不适合数据包,则通过顺序转发数据包进行传输。 数据包以起始字节0xFE开头,后跟命令号,数据包的长度,数据以及校验和的末尾。 命令仅以正确的校验和和起始字节值传递。 非常简单和可靠。



建立了连接,但是有必要为计算机编写常规软件,我在Processing上的手艺不适合此操作。 创建用于该系统 Python 模块的 Semyon Yakimov对此表示感谢,他对此深表感谢。 该模块允许您与网关进行通信,以方便的格式发送和接收数据。 之后,我首先掌握了Python,并基于此模块和PyQt编写了一个简单的GUI应用程序 ,该应用程序可用于配置系统以及以JSON文件的形式从芯片收集数据。 好了,然后就可以使用小型脚本来处理数据了,这些脚本可以在各种条件和规则下以方便的形式发布( 面向游客讨价还价 )。 但是,无论如何,这意味着有些技能,如果不是SportOrg计划的开发人员(他们增加了对Sportiduino(除了Sportident和SFR的支持)的支持)的幸福感将是不完整的。 该程序正在积极开发中,很多东西都可以判断定向越野的开始。

结论


因此,目前有稳定的工作硬件和软件。 我相信这项工作的目标已经实现:廉价的电子打标系统已经出现。 我不会在此方案的框架内进行任何更改,除非存在某种错误。 标记系统已经在众多不同的比赛中进行了开发和测试:定向越野赛,越野赛,游行,越野赛,旅游阶段。 除了我,它还在不同地方被多个人使用。 有人使用了该系统,有人在其中进行了添加,例如,一个无线电模块或使用锂电池和Mifare芯片作为主要组件。

开发是开放的且非商业的,并根据GNU GPLv3进行了许可。 任何人都可以自由复制,复制,修改和使用它。 在过去的一年中,我想出了很多问题,例如我是否在进行电台销售。 不,我不想这样做。 另一方面,我不介意有人填补这个空白。 我只准备就组装和使用提供建议,因为那里的一切都很简单。

该项目可在github上找到 ,其中有图表,说明和其他有用的材料。 谢谢您的关注。

Source: https://habr.com/ru/post/zh-CN427661/


All Articles