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

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

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



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



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

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


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

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

Датчики

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

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

Излучатели

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



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

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



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

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

Приёмники

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

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



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

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

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



Контроллер

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

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



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



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

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



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

Второй контроллер

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

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

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



Соревнования

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

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



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



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



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

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


  1. Xandrus
    28.03.2016 07:58
    +1

    А что если излучатель и приемник поместить в один корпус, а с другой стороны поставить отражатель?


    1. ZlobniyShurik
      28.03.2016 11:56

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


      1. 029ah
        28.03.2016 12:03

        В следующей версии я именно так и сделал — взял уголковые отражатели. Стало сильно проще, хоть и сократилась максимальная ширина створа.


  1. goodwind
    28.03.2016 09:50

    подумалось, что неплохо было бы передатчики и приёмники встроить в конусы, чтобы они сразу и воротами выступали


  1. versoul
    28.03.2016 10:23

    Подскажите, как синхронизируется время у стартового и финишного створа?
    Какой фотоприемник стоит?


    1. 029ah
      28.03.2016 12:04

      Стартовый и финишный створ расположены смежно, так что они оба подключены к одному и тому же контроллеру двумя кабелями.


  1. SabMakc
    28.03.2016 10:59
    -1

    Интересно, а почему бы не заменить весь этот комплекс смартфоном и фонариком (или картинкой-меткой)?
    А с помощью нескольких смартфонов можно организовать детекторы, судейский пульт и даже светофор.

    Конечно, стоимость комплекта будет гораздо выше, а точность — ниже… Но для любительских гонок это будет гораздо удобнее.

    P.S. В идеале все, что понадобится для гонок — это штатив (метр-полтора высотой), смартфон и яркий скотч, чтобы четко линию старта обозначить.
    Поставить все позади линии старт/финиш и детектить пересечение линии (ушло пересечение — старт, появилось — финиш). А за счет того, что все это обрабатывается на одном устройстве, можно существенно поднять точность.


    1. ittakir
      28.03.2016 11:59

      Допустим, мотоцикл на финишном створе двигается со скоростью 100 км/час. Это 27 м/с. Даже если длина заслоняемого участка на мотоцикле будет 1м, то время прерывания луча будет 1/27 сек, что меньше, чем стандартная частота кадров видео. Т.е. есть неплохая вероятность, что мотоцикл на видеопотоке вообще не будет видно!
      Также на смартфоне нужно програмно обрабатывать маркер (лучь фонарика, метку) с частотой не меньшей частоте кадров. Это довольно трудно.
      И самое главное, где гарантия, что все кадры попадут на выход видеопотока? Если процессор занят, вам вполне могут подсунуть старые кадры или просто не выдавать свежие.


      1. 029ah
        28.03.2016 12:07

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


      1. SabMakc
        28.03.2016 12:54

        Мы же про джимхану говорим? Судя по доступным записям, гонщики на финише должны остановиться. Так что о 100 км/ч речи нет. Тут скорее есть опасность наезда, как 029ah говорит.

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


  1. evilruff
    28.03.2016 12:08

    Ни в коей мере не хочу преуменьшить заслуг авторов проекта, действительно отличное недорогое решение актуальной задачи, но как человек много лет отдавший профессиональному автоспорту, позволю себе внеси пять копеек… на хабре несколько раз появлялись статьи о DIY той или иной формы для технических видов спорта (панельки, ecu контроллеры итд)… на самом деле, на мой взгляд, все это прекрасно только до момента когда само по себе соревнование носит относительно дружеско-любительский характер… и стоимость такого оборудования относительно не велика в сравнении с остальными расходами…
    То что вы можете обслужить 100-200 заездов без сбоев это тоже несомненно хорошо, но к сожалению проблемы начинаются когда на 101-ом заезде, что то не дай бог посчитается не так и начнутся иногда объективные/иногда не очень претензии к судейству/телеметрии/времени/часам итд… мысль того что я хочу сказать состоит в том, занимаясь всем этим, нужно быть морально готовым к возможным разочарованиям и неудачам…
    Почему, например в автоспорте, есть Motec и есть есть все остальное… Не потому что в нем применяются какие то мега достижения, про цену я вообще молчу, прежде всего потому что такое оборудование обеспечивает очень высокую надежность… То же самое и для метрологии, представьте «себестоимость» старта на СУ, и цену судейской ошибки для экипажей… сам несколько раз размышлял об этом, но в конечном итоге понял что производство качественного метрологического/диагностического оборудования для серьезного технического спорта это очень тяжелый и в прямом смысле дорогой проект…
    Еще раз, искренне желаю удачи, написано абсолютно без капли негатива!


    1. 029ah
      28.03.2016 14:26

      Всё верно, но надёжность системы обуславливается требованиями, в том числе и к цене. Самолёт надёжнее машины, а космический челнок — самолёта. У нас себестоимость старта незначительна (хм, грамм 100 бензина?), и устроить двухминутный перезаезд проблем не составляет. Фейлы были за весь сезон конечно: наблюдатели на площадке ногами в финишный створ во время заезда заходили случайно.
      В данном случае затея оказалась более чем оправдана — до применения телеметрии было много нареканий на человеческий фактор.
      И конечно все были готовы к возможным тех.проблемам — это я изначально оговорил. Так что могу сказать спасибо организаторам что доверились и предоставили мне поле для экспериментов :)


      1. evilruff
        28.03.2016 14:31

        Опять же повторюсь, я не знаком со спецификой Ваших соревнований, поэтому то что я написал выше всего лишь размышления на DIY подход в тех технических видах спорта с которыми я хорошо знаком не понаслышке. Действительно здорово если Ваше решение нашло свою нишу и вы сможете его успешно развивать. Прочитал статью с большим удовольствием, мог бы — поставил бы плюс =)


      1. ssneg
        28.03.2016 14:33

        Кстати, от случайных заползаний в луч регистратора легко избавиться — если не останавливать учет времени при срабатывании датчика, а засекать "круг", который просто потом удалить из лога.


    1. ssneg
      28.03.2016 14:32

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

      Т.е. речь и идёт о любительских соревнованиях.


      1. 029ah
        28.03.2016 15:03

        Т.е. речь и идёт о любительских соревнованиях.

        Не совсем так — даже в официальных соревнованиях в Японии накладываются ограничения, допускающие к соревнованиям только street-legal мотоциклы. У нас — да, на данном этапе любительские, но технические требования те же.


        1. ssneg
          28.03.2016 19:37

          "Стрит-лигал" и "приехать на своем мотоцикле" — это очень разные вещи, согласитесь.


  1. sergiy2303
    28.03.2016 12:08

    Отличная идея! Странно как раньше без спец аппаратуры обходились.


  1. SHadDim
    28.03.2016 15:58

    А не рассматривался вариант как сделаны лаптаймеры на кольцевых мотогонках? Когда датчик крепиться на мот, а излучатель на финише.


    1. 029ah
      28.03.2016 16:06

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


      1. SHadDim
        28.03.2016 16:38

        Вот это прям интересно, буду ожидать! :) готов принять участие в тестировании и отладке ^_^ хотя наверное желающих и так навалом.


        1. 029ah
          28.03.2016 17:38

          В прошлом сезоне на площадке у Тимирязевской привозил периодически по средам. Велкам — в этом сезоне тоже буду!


  1. Sergtron
    28.03.2016 17:12

    Можете указать какие именно датчики использовали в данном решении?


    1. 029ah
      28.03.2016 17:12

      E3F-5DP1/5L с алиэкспресса


      1. igorich
        28.03.2016 17:30

        а не знаете модель с бОльшим расстоянием створа ворот?
        у нас аппаратура для автогонок, используем ИК-ворота от охранных сигнализаций, но там есть плохой нюанс частоты срабатывания


        1. 029ah
          28.03.2016 17:37
          +1

          В комнатных условиях они метров на 7 бьют, дальше отойти некуда было. Возможно при питании от 36В они будут достаточно дальнобойны, если точно прицелить и защитить от солнца. Думаю, 15$ на эксперимент потратить стоит.
          Когда искал датчики — тоже сначала вышел на охранные, но заявленное время срабатывание у них не очень понравилось.


          1. ssneg
            28.03.2016 19:38

            Бленды нужны, как на объектив.


          1. igorich
            29.03.2016 08:45

            нам не нравится не время срабатывания (с точностью всё норм), а то что он остаётся замкнутым на 2-3сек после срабатывания. Если машина идёт в хвост, то вторую не отсекает
            7м дома это очень плохо. Даже охранные с двумя линзами в солнечный день не тянут без козырьков. Ну и створ нужен 10м минимум, иначе машина просто снесёт узкие ворота


  1. WandererX
    29.03.2016 15:00

    Разрабатывал аналогичную систему в 2009 году, потом 3 года использовалась на зимних мероприятиях. Столкнулись с уходом таймера. К концу мероприятия время увеличивалось на 1 секунду. С учетом того, что между заездами иногда были различия в 0,01 сек это было существенно.


    1. 029ah
      29.03.2016 15:05

      По рассчётам — для двухминутного заезда время при использовании кварца будет иметь погрешность 0.375мс. Впрочем, в итоговом варианте я на плате про запас развёл место под разъём от I2C-шины для подключения часов реального времени.


      1. versoul
        31.03.2016 16:32

        А синхронизировать часы как? Одновременным включением? Разве часы реального времени могут отдавать время с точностью до секунд\милисекунд?


        1. 029ah
          31.03.2016 16:40

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