Часть 1, Часть 2

Прошёл год после прошлой публикации, и мне часто задают вопрос, что изменилось с тех пор. Если кратко, то был произведён переход на чипы Ntag, сделаны небольшие изменения в схеме для обеспечения лучшей чувствительности, громкости сигнала и корректного хода часов, создано программное обеспечение для работы с системой. В целом, система стабилизировалась и готова для воспроизведения и использования. Более подробно ниже.

Прежде всего, расскажу про RFID чипы, почему был сделан переход в сторону Ntag. Напомню, что память Mifare Classic 1K содержит 1024 байт, из которых доступны для хранения информации 752 байта. Структура памяти разбита на 16 блоков, которые содержат по 4 страницы из 16 байт, одна из которых зарезервирована для шифрования. Если использовать в качестве служебной одну страницу, то ещё оставалось 46 страниц для записи отметок.

В начале разработки я использовал память вольготно – одна страница из 16 байт на одну отметку, что ограничивает применение некрупными стартами. А для рогейна, туристического ориентирования или приключенческих гонок 46 станций мало. Поэтому была реализована идея уплотнения: в каждую страницу писалось по две отметки. При этом возник риск потери данных, ведь единица записи – одна страница, и при повторной записи нужно считывать уже записанную половину, чтобы записать её снова. Собственно, на эти грабли я и наступил при проведении рогейна в прошлом ноябре, небольшая часть данных была потеряна, пришлось много править вручную. И, хотя ошибка в коде была выявлена, решил перейти на более емкие чипы без риска потери данных в ходе перезаписи.

Один из возможных вариантов – использовать чипы Mifare 4K, структура которых отличается от 1К только вчетверо большим объемом памяти. Но такие чипы и подороже и длительность очистки, отметки с их использованием возросла бы. Другой вариант – использовать чипы серии 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 позволило решить вопрос с безопасной записью большого числа отметок на чип, однако возникла другая проблема. Чипы Ntag требуют большей мощности передатчика чем Mifare при той же площади антенны, и чипы в виде брелков, в которых антенна порядка 2 см^2, могут плохо срабатывать на модуле RC522 в стандартной комплектации. Решением проблемы оказалось перепайка индуктивностей на модуле на более мощные. При этом дальность срабатывания значительно повысилась, для Ntag чипов до 2 см, а для Mifare до 3 см. Но некоторые модули из-за такой перепайки стали работать плохо: запись чипов происходила только при определенном и довольно непредсказуемом диапазоне расстояний от передающей антенны. Пришлось залезть в ардуиновскую библиотеку RC522 и найти там параметр gain, который отвечает за мощность антенны, его правка для отдельных станций решила проблему. Также освоил ручное изготовление чипов на браслет из наклеек. В продаже на алибабе есть уже готовые и красивые, но площадь антенны у них почти в два раза меньше, отметка проходит менее стабильно. Отмечу также, что поддержку Mifare 1K чипов я оставил, с ними можно работать, но для этого нужно использовать отдельные прошивки, а емкость чипов ограничена 42 отметками, зато они идут в комплекте с RC522 модулями.



Ещё одна проблема, которую пришлось решать в ходе разработки – некорректный ход часов. В части станций часы начинали отставать или спешить вплоть до 5 минут в сутки. Долго не мог понять в чем причина, потом ��бнаружил, что глючат только станции с печатной платой, выполненной на заводе, тогда как на вытравленных вручную все работает нормально. Задумался с чем это может быть связано. На вытравленных вручную довольно толстые дорожки из-за их обильного лужения, меньше сопротивление. Оказалось, что конденсатора на выходе со стабилизатора не хватает для развязки питания часов на тонких заводских дорожках. Поставил ещё один конденсатор вплотную к часам, и проблема, большей частью, разрешилась. Небольшая часть часов по-прежнему сбоит, но это я уже связываю с браком дешевых часов с али, нужно искать надежных поставщиков.

Ну и последнее изменение в схеме – усиление звукового сигнала. Ранее контроль и питание пищалки в схеме осуществлялось с ножки микроконтроллера, поэтому было довольн�� ограниченным по мощности. Теперь питание идёт напрямую от батарей, а контроль через транзистор, что существенно усилило громкость сигнала. Все эти изменения теперь учтены и внесены в Gerber файлы, а я же вручную переделывал порядка 40 станций, пришлось расковыривать компаунд, резать дорожки, вешать транзистор на проводах, не обошлось без поломанных станций.



Из-за перехода на другие чипы прошивку базовых станций пришлось существенно изменить, но принцип и логика работы, по большей части, осталась прежней. Те же режимы энергосбережения, сна, работы, настройка с помощью мастер-чипов. А вот прошивку станции сопряжения переработал полностью. Предыдущий протокол связи, когда в COM-порт сыпались данные сплошным потоком, показался уязвимым: пропущенный байт, и все данные превращаются в тыкву. Адаптировать к уже имеющимся протоколам передачи данных показалось скучным, поэтому изобрел свой велосипед.

Передача и получение информации происходит последовательно с помощью передачи пакетов до 32 байт. Если передаваемые данные не помещаются в пакет, то передача производится последовательной пересылкой пакетов. Пакет начинается со стартового байта 0xFE, далее идет номер команды, длинна пакета, данные, и в конце контрольная сумма. Команды проходят только при верном значении контрольной суммы и стартовых байтов. Довольно просто и достаточно надежно.



Связь была налажена, но требовалась написание нормального программного обеспечения для компьют��ра, мои поделки на Processing для этого не годились. За это взялся Семён Якимов, который создал модуль на Python для работы с системой, за что ему большая благодарность. Модуль позволяет связываться со станцией сопряжения, передавать и получать данные в удобном формате. Уже после я освоил в первом приближении Python и написал на основе данного модуля и PyQt простенькое GUI приложение, которое можно использовать для настройки системы, а также для сбора данных с чипов в виде JSON файла. Ну а далее данные можно обрабатывать с помощью небольших скриптов для соревнований с самыми разными условиями и правилами, выдавать в удобном виде (туристическое ориентирование, рогейн). Но, все равно, это подразумевает некоторые навыки, и счастье было бы неполным, если бы не разработчики программы SportOrg, которые добавили поддержку Sportiduino (помимо Sportident и SFR). Программа активно развивается и много что умеет для судейства стартов по спортивному ориентированию.

Заключение


Таким образом, на данный момент есть стабильно работающее железо и софт. Считаю, что цель затеи достигнута: появилась дешевая система электронной отметки. Что-то изменять в рамках данной схемы не собираюсь, разве что, если найдется какой-то баг. Система отметки развивалась и прошла испытания уже на большом числе различных соревнований: ориентирование, рогейн, марш-бросок, трейл, туристические этапы. Помимо меня её используют несколько людей в разных местах. Кто-то воспроизвёл систему, кто-то внёс туда дополнения, например, радиомодуль или использование литиевых батарей и Mifare чипов как основных.

Разработка является открытой и носит некоммерческий характер, лицензия GNU GPLv3. Любой может свободно её скопировать, воспроизвести, изменить и использовать. За последний год мне пришло достаточно много вопросов делаю ли я на продажу станции. Нет, этим мне заниматься не хочется. С другой стороны, я не против, если кто-нибудь восполнит эту нишу. Я же только готов дать советы по сборке и использованию, благо там все довольно просто.

Проект доступен на гитхабе, там же расположены схемы, инструкции и другой полезный материал. Благодарю за внимание.