> Часть 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. Любой может свободно её скопировать, воспроизвести, изменить и использовать. За последний год мне пришло достаточно много вопросов делаю ли я на продажу станции. Нет, этим мне заниматься не хочется. С другой стороны, я не против, если кто-нибудь восполнит эту нишу. Я же только готов дать советы по сборке и использованию, благо там все довольно просто.

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

Комментарии (9)


  1. AndreyMtv
    25.10.2018 10:54

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


    1. AlexanderVolikov Автор
      25.10.2018 11:04

      Да, такой подход тоже используются (системы отметки Emit, ibutton), у него есть плюсы, которые Вы и описали, но есть и минусы. Прежде всего, цена. Даже если использовать станции в таком виде как я их делаю, себестоимость их 500 рублей (без учета трудозатрат на изготовление). Если взять средний старт в 200 участников и 30 контрольных пунктов, получится оборудование на 100т. рублей, если же использовать чипы на участниках, то 20т. рублей. А если участников тысяча? Но это одно, другое — нужно, чтобы станции были компактными, например, под браслет, а это уже требует более сложных технологий изготовления, что тоже, вероятно, будет дороже.


      1. aleks_proj
        25.10.2018 11:12

        Если уйти от домашнего производства и Arduino, а начать производить профессиональные устройства в промышленных масштабах, себестоимость сильно упадет.


        1. AlexanderVolikov Автор
          25.10.2018 11:23

          Тем не менее, профессиональные устройства в данной сфере стоят на порядок дороже. Вероятно, себестоимость самого изготовления, действительно падает, но появляется ряд издержек: оплата стоимости работы разработчиков, маркетинг, налоги и прочее. Ниша тут довольно узкая, большой тираж никому не нужен, поэтому стоимость устройств обусловлена большей частью этими издержками нежели себестоимостью изготовления.


        1. esaulenka
          26.10.2018 17:24

          Организуйте, делов-то. Может быть, эти профессиональные устройства кто-нибудь купит в промышленных масштабах. Рынок в России я оцениваю в несколько тысяч штук.


  1. esaulenka
    26.10.2018 17:38

    1) Александр, спасибо большое за идею-инициативу-воплощение. Даже небольшие старты, которые никогда не позволят себе SFR, теперь вполне обзаводятся электронной отметкой.

    2) Ещё год назад собирался подключиться к проекту. Хотя б печатки нормальные сделать, да софт причесать. Но, блин, поленился, да и без железки что-то править некорректно. В общем, на след. неделе постараюсь связаться…


    1. AlexanderVolikov Автор
      26.10.2018 17:54

      Спасибо! Да, можно будет связаться.


  1. esaulenka
    26.10.2018 17:52

    Небольшая часть часов по-прежнему сбоит

    Возможно, потому что в даташите английским по белому
    5–12 N.C. No Connection. Must be connected to ground.
    Хотя, и чёрт-знает-что с алиэкспресса тоже исключать нельзя…


    1. AlexanderVolikov Автор
      26.10.2018 17:57

      5-12 у меня подключены, в этом плане всё соблюдено.
      К питанию эти часы капризны, возможно некоторая часть из пришедшей партии особо чувствительна. Александр Якимов в своём форке в итоге их запитал от отдельного источника питания, что решило, по большей части, проблему.