Выбраться на природу всегда замечательно, но с картой в руках и с осознанной целью всегда интересней. Существуют такие виды активного отдыха, как ориентирование, рогейны, мультигонки, участвуя в которых можно хорошо провести время. Задача ориентировщика заключается в том, чтобы за минимальное время посетить обозначенные на карте контрольные пункты (КП). Для того, чтобы доказать факт их посещения, используются как т.н. «традиционные» системы отметки: цветные карандаши, кодовые символы, компостеры и т.д., так и электронные системы. Несмотря на удобство последних, в любительских соревнованиях по-прежнему широко используются традиционные способы. Связано это со стоимостью оборудования (от 3500 рублей за станцию отметки и от 450 рублей за один чип), с возможностью кражи станций, установленных в общедоступных местах, необходимостью брать залог за чип. Поэтому я поставил себе цель создать более доступную альтернативу. Ниже описана её реализация в среде Arduino.
Система электронной отметки, обычно, состоит из RFID-чипов и станций — специальных устройств их записи-считывания. Работает система следующим образом. На старте спортсмен-ориентировщик получает чип, берёт карту и стартует. Подбегая к КП, он прикладывает свой чип к станции отметки, она производит запись текущего времени на чип и подаёт сигнал, после чего спортсмен может продолжить путь. На финише, спортсмен сдаёт чип судье, который производит считывание информации с помощью станции сопряжения и оглашает результат спортсмену — его время на дистанции, число посещенных кп, соблюдение заданного направления. Также он может распечатать сплиты – временные отрезки, затраченные на путь между КП, что позволяет спортсмену проанализировать свой путь и сравнить себя с другими на том или ином отрезке дистанции.
Для работы с RFID чипами есть широкодоступный модуль RFID-RC522, для которого имеется отличная библиотека для ардуино, во многом этот факт и определил его использование. Модуль работает на частоте 13.56 МГц и поддерживает стандарт ISO 14443, работает с различными чипами, считывание и запись происходит с расстояния нескольких сантиметров, что хорошо подходит для наших целей.
Чипы
Для создания системы отметки я использовал чип Mifare Classic 1K (S50) из-за его широкой доступности в различных исполнениях и дешевизны (11 рублей за чип в виде брелка). Чип позволяет считывать и записывать информацию быстро и надежно. Память чипа разделена структурно на 16 секторов, в каждом из которых содержится по 4 блока по 16 байтов. 4-ый блок каждого сектора содержит ключи, с помощью которых возможна запись/чтение блоков в секторе. Кроме того, в нулевом секторе, нулевом блоке содержится UID и информация о производителе. Таким образом, для записи остаётся по 3 блока из 16 байтов в секторах с 1-го по 15-ый и два блока в 0-ом секторе. Структура записи представлена ниже в таблице, все данные записываются в трехкратной повторности для надёжности.
Данная система записи позволяет записывать в память 45 отметок, включая старт и финиш, для большинства соревнований этого вполне достаточно. Но если оптимизировать использование памяти и заложить несколько большее время на отметку, емкость можно существенно увеличить.
Станции отметки
Схема и монтаж
Основные компоненты станций отметки: микроконтроллер — Atmega328p-au, RFID-модуль RC522, часы DS3231. Питание от 3х батареек АА через линейный стабилизатор MCP1700T-33.
Монтаж компонентов я производил на печатной плате, все компоненты SMD, с платой RFID соединение осуществлял спайкой через штырьковый разъем. Платы изготавливал с помощью фоторезиста, дорожки 0.5 мм. Пока оттачивал метод наделал довольно много брака, наверное, целесообразнее сделать гербер-файлы и заказывать их изготовление на стороне, благо это не сильно дорого.
В качестве корпуса использую доступный g1020BF. В коробке для светодиода просверливал дырку и срезал лишний пластик, чтобы влез батарейный отсек. Отверстие для светодиода обрабатывал эпоксидкой, затем вставлял спаянную плату. После затвердевания эпоксидки, вливал 30 миллилитров компаунда ПК-68, этого как раз хватало, чтобы покрыть плату. В батарейный отсек вставлял батарейки и всё промазывал смазкой для гидроизоляции. После закручивания крышки станция готова для использования.
Стоимость компонентов станции и материалов для её изготовления составляет порядка 500 рублей. На изготовление и настройку одной станции у меня уходит около 1.5 часа чистого времени.
Прошивка станции
Во время работы станции возможны разного рода сбои, необходимо было реализовать работу watchdog, поэтому нужно использовать совместимый Bootloader, чтобы он корректно работал. Хороший вариант бутлоадера для Atmega328p и инструкции по его установке находятся здесь. Ещё следует изменить стандартную библиотеку wire на неблокирующую, чтобы станция продолжала работу при поломке линии i2c, а не уходила в бесконечный цикл. Загрузку бутлоадера я осуществлял с помощью другой ардуино через прошивку Arduino as isp, подключал контакты SPI через штырьки, ведущие к RFID модулю, которые после удачной загрузки откусывал. После чего устанавливал основную прошивку.
С основной прошивкой станция при подносе чипа считывает блок информации, из которой узнает номера последнего записанного блока и станции, на которой произошла отметка. Если номер станции отличается, то происходит обновление блока информации и запись в следующий свободный блок номера станции и текущего времени. Время и номер станции можно корректировать с помощью специальных чипов и станции сопряжения.
Питание
Один из важнейших вопросов, который стоило решить — как максимально продлить время службы станций от комплекта батареек. Особенно критично это для туристического ориентирования, когда бывает, что станции устанавливают задолго до соревнований и необходимо, чтобы они гарантированно функционировали больше месяца.
Чтобы уменьшить потребление используются режимы сна для контроллера, а также для RC522. В режиме сна станция потребляет всего 0.02 мА против 20 мА во время работы. Чтобы более экономно расходовать энергию, реализовано три режима работы станции с разными временными интервалами сна.
По умолчанию, станция запускается в режиме ожидания. При этом поиск чипа происходит раз в cекунду, объема батарей хватает на 160 дней. При подносе чипа (это делает судья-постановщик или первый прибежавший в пункт спортсмен) станция переходит в рабочий режим. В рабочем режиме реализован поиск чипа каждые 250 мс. Новых батарей хватит на 45 дней непрерывной работы. После 6 часов бездействия станция возвращается обратно в режим ожидания.
При подносе мастер–чипа сна (специального судейского чипа с настройками станции) станция переходит в режим хранения (поиск чипа раз в 25 секунд), пикает 3 раза и перезагружается. Новых батарей в таком режиме хватит на 5 лет. При подносе любого чипа станция переходит в режим ожидания, при этом происходит измерение оставшегося заряда батареи. Если напряжение упало ниже 3.1В, что свидетельствует о том, что осталось порядка 15% заряда, станция об этом сигнализирует.
Станция сопряжения и обработка данных
Для работы с чипами и станциями отметки предусмотрена станция сопряжения. С помощью станции сопряжения можно устанавливать и корректировать время и номера станций, с помощью специальных мастер-чипов. Также станция сопряжения производит предстартовую очистку и проверку чипов, заносит в них первоначальную информацию и индивидуальный номер. Ну и, конечно, считывает чипы и получает результаты.
К схеме я ещё дополнительно добавил SD-модуль для записи сплитов и модуль Bluetooth, чтобы можно было станцию подключать к телефону или к компьютеру для приема или передачи данных.
На данный момент схема и прошивка ещё не достаточно оптимизирована и реализована пока из модулей, на коленке. В дальнейшем планируется доработать для более удобного использования.
На данный момент обработка данных осуществляется полуручным способом путём сортировки получаемых CSV файлов. На данный момент система очень гибкая и её можно легко настроить под любые соревнования, реализовать предобработку данных в станции сопряжения удобным в разных случаях способом. На будущее есть планы написать ПО для автоматизации обработки данных.
Заключение
Я — новичок в области программирования и разработки электронных устройств и занимаюсь этим меньше года. Поэтому код и схемотехнические решения, вполне возможно, далеки от оптимальных или вовсе неверны. Буду весьма рад критике, весь проект свободно доступен на гитхабе.
Также хочу выразить благодарность тем, кто уже помог советами и заинтересовался разработкой.
Автор: AlexanderVolikov