[Из песочницы] Хронометраж для любительских автогонок

Началось все с того, что я увлекся автогонками, посмотрев, как мучаются организаторы с замерами времени (когда на кругу одновременно 4 машины приходится использовать 4 секундомера и не запутаться, где чье время), я предложил свою помощь. Так же было интересно попрактиковаться в незнакомых технологиях. Что из этого вышло — читайте дальше.Все исходники и схема доступны в конце статьи.Задачи были следующие: — максимальная простота, минимум подключений и проводов; — быстрота установки; — на кругу могут быть несколько машин одновременно; — машины идут в строгой последовательности, обогнать и изменить порядок не могут; — старт по пересечению линии.

Поскольку у меня был небольшой опыт использования Arduino, я взял его за основу. Так же решил отказаться от ноутбука и для мобильности заменить его приложением под Android, освоим незнакомый мне раннее язык Java.

Выбор запчастейДатчик пересечения линии. Сначала я хотел реализовать все одним блоком, который крепился бы с одной стороны на старте\финише и определял пересечение ультразвуковым датчиком расстояния. Дома это даже работало, но на улице все оказалось иначе. Показания датчика постоянно прыгали и реагировали на ветер и на все подряд кроме машины. Решено было копать в сторону инфракрасных лучей.Для того, чтоб точно отличать свет инфракрасного диода от автомобильных фар или солнца, нужно подбирать приемник с частотной модуляцией, чем заниматься не хотелось. Выбор пал на готовые датчики ABT-30m. В них все уже было реализовано, например, стекло пропускало только инфракрасный свет и отсекало свет фар и солнца. Стояли фокусирующие линзы, нужно было только подключиться к соответствующему выводу датчика. Насколько я понял, такие датчики используются для охраны периметра в домашних сигнализациях. Забегая вперед скажу, что выбор оказался удачным.

221218718e76426eb85a174ace2505e3.JPG

Аккумулятор. Поскольку ABT-30m питается от 12v и Arduino mini может питаться от 12v аккумулятора, решено брать на 12v. Хотелось найти минимального размера, чтобы он поместился внутрь корпуса устройства, а не был дополнительным блоком снаружи. На рынке удалось найти только автомобильный аккумулятор, который совсем не подходил по размерам и аккумулятор от ИБП, который был тоже довольно большим:, но на крайний случай оба могли бы подойти.

В итоге мне повезло и я нашел в китайском магазине аккумулятор на 12v и 4000mAh размером в два спичечных коробка, что было очень хорошо. В последствии выяснилось, что это «аккумуляторы от нокии», соединенные последовательно в термоусадке:

7642bfc2d1b1462d9a46d4fb63c995eb.JPG

Светодиоды. Обычные 12v rgb 10w:

b36053908682478ca750a543ade5cc26.jpg

Bluetooth. Стандартные модули HC-06:

5852cc976fa245f58b049c2b44191dae.jpg

Сборка Вот такая схема получилась. Arduino подключается к bluetooth на 5 и 6 ногах и работает через Software Serial. К 9,10,11 ногам подключаются rgb светодиоды через транзисторы, так как светодиоды питаются от 12v, а arduino выдает 5v. На 2 ногу заведен сигнал с датчика пересечения, работает через прерывания: 5c4134c256bf4eea9658ce2903277853.jpg525d565f2aea47ca85b7481bff8cbaa1.jpg

В итоге получилось вот так. Один блок — это приемник (с кучей проводов внутри) второй — передатчик (внутри только аккумулятор) и светофор, сделанный из какого-то фонарика из fixprise (внутри 3 цветных светодиода и рассеиватель из какой-то бумаги). Крепится светофор крокодильчиком, а соединяется с основным модулем обычным патчкордом:

f9042a501e6f4f8c9d244de00bf04c70.jpgbf8c5c09af734d6cab739214dd7cb9a0.jpg5654ec81c0ce4a48a18436dfb33c1688.jpgd1e139d5d5da48eaa68e8608f0b84de4.jpg

Мобильное приложение Вместо компьютера я решил выводить результаты и управлять стартом с мобильного телефона на Android. Так же это был первый опыт разработки под эту платформу и первый опыт с Java. В итоге получилось вот такое приложение: 784b0d5b5bbb420dabaca98d3ebfb855.pngb7e0de06bb604a358f2da855b71057ea.pnge8602d825d994de7b414e07d3b7d75cd.png

Работает следующим образом. С разных сторон дороги ставятся передатчик и приемник, подключается светофор и вешается на удобное место (установка очень быстрая). В приложении устанавливаем соединение с Arduino, добавляем участников — в том порядке, котором они буду стартовать. Запускаем их в приложении.

После нажатия кнопки «старт» светофор загорается зеленым, а по пересечению линии начинается отсчет времени. Arduino посылает в приложение количество миллисекунд с момента ее запуска и так с каждым пересечением линии. Потом по разнице между этими значениями высчитывается время заезда. Задержки передачи данных становятся не важными.

Планы на будущее Сделать синхронизацию в облако, чтобы можно было в реальном времени смотреть на большом мониторе результаты или не выходя из дома на сайте (очень интересно попробовать Meteor.JS). Так же нужно исправить мелкие баги и сделать устройство модульным, чтоб можно было использовать его для разных конфигураций трассы (старт и финиш в разных местах например). Еще нужно сделать индикацию участника (наверно rfid метки…)Примерная стоимость Инфракрасные датчики ABT-30m (1350р)Arduino mini (135р)Bluetooth HC-05 (270р)Транзисторы IRF530 с N-каналом (40р * 3шт)2 аккумулятора 12V 4000mAh (820р * 2шт)10w rgb светодиоды (160р * 3шт)Провода, корпус, разъемыИтого: ~4000р — 5000р

Все исходники открыты и доступны в Bitbucket.

© Habrahabr.ru