Телеметрия для мотогонок. Часть 1 — прототип

Стоя на тренировочной площадке у размеченной трассы для мотоджимханы (вид мотоспорта, набирающий популярность) я наблюдал, как времена кругов замеряют на секундомер в смартфоне. Понятно, что точных данных так не получить. Дома валялось несколько ардуин, пара дисплеев и, казалось бы, всё, что нужно сборки автоматической телеметрии — найти пару подходящих датчиков, срабатывающих при проезде байка. Так началось множество бессонных ночей с паяльником, vim’ом, дремелем и местами даже болгаркой.

Забегая вперёд — всё получилось, устройства успешно отработали на всех трёх этапах чемпионата по мотоджимхане [G]-RSBK, и активно используются во время тренировок. Собраны в итоге были:

  • контроллер для замера времени заезда
  • датчики для контроллера
  • табло для отображения результатов
  • судейский пульт


а так же кое-что ещё!

dde9cc4dac7a4c8082b01116890ffefe.jpg

Датчики были куплены и спустя пол-часа прототип уже мелькал цифрами на дисплее. Правда, я слегка ошибался полагая, что на всё остальное мне хватит нескольких вечеров.

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

Мотоджимхана — вид спорта, заключащийся в скоростном маневрировании на мотоцикле по трассе, отмеченной искуственными препятствиями. Точные рулёжка и торможение, углы наклонов с высеканием искр подножками об асфальт, и умеренные скорости делают джимхану и захватывающей, и достаточно безопасной. Кроме этого, соревнования проводятся на мотоциклах, пригодных для езды по дорогам общего пользования, т.е. не нужно выезжать на трек со специально подготовленным байком в прицепе — подходит тот мотоцикл, который у тебя есть.

На соревнованиях заезд начинается из ограниченного конусами стартового бокса, затем следует проезд по трассе, и финиш — тоже в ограниченный конусами бокс, расположенный рядом со стартом. Датчиков нужно два — пересечение старта и пересечение финиша. Пока решено засекать время прямо с выезда участника из бокса, в дальнейшем — по сигналу светофора, а датчик можно будет использовать для проверки фальшстарта.

Да, зрелищности добавляет проведение парных заездов по двум одинаковым трассам, а значит, комплектов аппаратуры должно быть два.

Датчики
Изучив ассортимент, нашёл и купил барьерные оптические датчики пересечения луча, состоящие из двух модулей — излучателя и приёмника. Широкий диапазон напряжения питания — 6–36В, сигнал с сенсора — NPN-выход. При тестах в помещении они показали себя отлично — дальность в несколько метров, хорошая фокусировка луча, скорость срабатывания — в пределах миллисекунды.

Годится, теперь нужно решить, как их питать, крепить и направлять. Всё IT-шники знают, что стандарты — это хорошо, поэтому питать буду от 12В, а крепить и направлять — стандартными фотоштативами.

Излучатели
По удивительному стечению обстоятельств размер излучателя совпал со размерами стандартного аккумулятора 18650. Решение напросилось само — взять корпус автономной зарядки! В торце просверлил отверстие под луч сенсора, добавил крепление на фотоштатив для GoPro со спиленным верхом, аккумулятор и миниатюрный повышающий DC-DC-преобразователь до 12В. Бонус — яркий зелёный светодиод, подсвечивающий кусочек силиконового шланга, обрамляющего отверстие для луча, светящийся во включенном состоянии.

0d4eb2378f89428ab0548a87498ceeb3.JPG

Недостатков у конструкции — масса, даже если не брать в рассчёт последовательное двойное повышение напряжения DC-DC преобразователями — встроенным до 5В и подпаянным до 12В. Во-первых это активное устройство, неустойчивое к влаге и требующее зарядки. Во-вторых оказалось, что нагрузки от питания излучателя недостаточно, и спустя минуту электроника power-bank’а отключается.

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

8b36937504e648c3a2502eb3e0f7c3e4.JPG

И неважно, что затем было аккуратно впаяно smd-сопротивление: в следующих купленных корпусах зарядок электрическая схема и логика работы оказались сильно изменёнными, став непригодными для моих целей: питание продолжало включаться кнопкой, а отключаться — стало только автоматически по снижению тока потребления подключенного устройства, что пригодно только для зарядки телефонов.

Тем не менее, несколько power-bank’ов с правильной логикой под рукой есть — на создание работающего прототипа хватит. Неоптимальность по энергопотреблению тоже некритична — аккумулятора хватило на двое суток непрерывной работы.

Приёмники
Зная про ненадёжных поставщиков, меняющих схемы, вывод сделал — чем доступнее и распространённее компонент, тем лучше. Значит, приёмники будут в других корпусах (первоначально была идея делать всё внутри power-bank’ов, и по радиоканалу передавать данные в контроллер с дисплеем).

Алюминиевый квадратный профиль, телефонный разъём 6P4C, штативное крепление для GoPro, заклёпки и много-много термоклея:

ca5a92bcca0648afa86525bfbfd09f2b.JPG

Для формовки кубиков термоклея с компонентами внутри использовал оправку из обрезка профиля, смазанную силиконовым спреем — после застывания заготовка выдавливается легким нажатием.

Дополнительно для удобства настройки к выходу сенсора подключено два мигающих светодиода, вплавленных в кубики: так при прицеливании датчиков можно будет сразу видеть статус, не смотря на дисплей контроллера.

Миссия выполнена — почти все компоненты можно купить в ближайшем строительном магазине! В результате стартовые ворота с установленными сенсорами на простейшие фотоштативы выглядят так:

105d694420294f08ab80103f4781cd59.jpg

Контроллер
Контроллер очень прост — при получении сигнала от первого датчика таймер запускается, от второго — останавливается. Время выводится на OLED-дисплей и отправляется по радиоканалу с помощью модуля nRF24L01. Схема тоже примитивна — дисплей подключен двумя проводами по I2C, nRF24L01 — четырьмя проводами через SPI, плюс земля и питание. Сигнальные провода от двух датчиков — через делители напряжения к двум входам с поддержкой аппаратных прерываний.

Первые заезды уже на подходе — с прототипом нужно поторопиться. Корпусом взял попавшийся под руку power-bank (на этот раз — с аппаратной кнопкой включения) на четыре банки. Место одного аккумулятора займёт дисплей с лицевой стороны, и телефонные разъёмы с обратной:

585c4c57f69748e39ea8b07c6284911d.JPG

Место второго аккумулятора — распаянные на сделанной ЛУТом печатной плате Arduino Pro Mini, радиомодуль, и кучка резисторов. Налицо дефицит свободного места — впредь стоит учесть, что больше всего места занимают провода:

b692fefd6b724fb2b9514f2f818a72f1.JPG

Как бы страшно это не выглядело — конструкция оказалась вполне рабочей, и спустя пол-года подвела плата самого power-bank’а.

Для удобства отладки и обновления прошивки — наружу вывел порт USB-serial переходника FT232RL, и подключил его к serial-порту Arduino Pro Mini. Чтобы одновременно через этот же разъём заряжать аккумуляторы — применил небольшой трюк: нужно запитать FTDI-модуль через VCC-вывод от внутренней цепи устройства, а ножку +5В от MiniUSB — перенаправить на вход для зарядки power-bank’а. Для этого достаточно выпаять нулевое сопротивление на переходнике, и сделать отвод питания от верхней контактной площадки:

031d7e3af4f44735bdc907055f52bf4b.jpg

Очевидный способ — соединить только GND, RX и TX не сработает: модуль будет получать питание через RX-пин.

Второй контроллер
Пробные заезды на улице проведены, время считается, датчики стабильно регистрируют пересечение — ура! А дальше — соревнования на носу, буквально через две недели. Значит времени в обрез: нужно собирать второй комплект датчиков по уже проверенной конструкции, и второй контроллер.

И вот за что я люблю Arduino — за быстрый старт и работу с огромным количеством железа без чтения даташитов.
Второй корпус и шикарный, но дорогой OLED-дисплей плюс аккумуляторы почта привезти не успеет. Взял то, что было под рукой: коробка для мелочей, телефонная розетка, четыре резистора, Arduino Nano, nRF24L01, какой-то дисплей, стабилизатор КР142ЕН5А (питание 12В на мототреке всегда найдется). Буквально три точки пайки, всё остальное — на макетных проводах, и спустя час второй комплект готов!

На сдачу — судейский пульт! Коробка для радиоаппаратуры, Arduino Uno, nRF24L01 и пару дисплеев с восемью семисегментными индикаторами. Соединил всё опять же макетными проводами. В корпусе просверлил отверстие под USB-порт для запитывания от внешнего power-bank’а или ноутбука, дисплеи — прикрепил термоклеем к прозрачной крышке. Принять пакет через радиомодуль и вывести на один из двух дисплеев — задача не сильно сложная, код написался быстро. Итог — судейский пульт, дублирующий информацию с контроллеров, и второй комплект телеметрии:

a7d515366b7b4af8bfb49f5594ca8490.JPG

Соревнования
Перед соревнованиями ещё раз проверил все устройства, и не зря: в одном из контроллеров кварц был на стандартные 16МГц, а во втором — 16,384МГц! Нужно ли говорить, что и время они считали по-разному.

Зарядил аккумуляторы и проверил связь — радиомодули отлично себя показали, транслируя данные на десятки метров с антенной, разведённой на печатной плате. Всё устройства вместе выглядят уже более внушительно:

4a8b74d77c8845a19a59c4cae03f609d.jpg

На удачу день заездов выдался тёплый и сухой — аппаратура выживет. Пока размечается трасса — расставляю оборудование:

027ebe90192d4defa3f0215cf61fa0c0.jpg

Начинаются первые заезды и — ура, всё работает чётко! Ложных срабатываний нет, время отсекается точно. Девушки на старте помогают спортсменам разместить байк в стартовых воротах и фиксируют результат на финише. Переносной судейский пульт помогает изрядно — при солнечном свете светодиодных индикаторов лежащего на асфальте контроллера почти не видно.

4a6dd864146f4d6b948caa396078af94.jpg

Затея себя оправдала: проведено почти сто параллельных заездов (а это две сотни зафиксированных времён), сбоев нет, а разница между первыми двумя местами в классе дорожных мотоциклов — 0.1 секунды, что вручную измерить непросто. А значит решено: проекту — быть!

0d06c4ab6c1443d6ac57f9895da322f3.jpg

© Geektimes