Началось все с того, что я увлекся автогонками, посмотрев, как мучаются организаторы с замерами времени (когда на кругу одновременно 4 машины приходится использовать 4 секундомера и не запутаться, где чье время), я предложил свою помощь. Так же было интересно попрактиковаться в незнакомых технологиях. Что из этого вышло — читайте дальше.
Все исходники и схема доступны в конце статьи.
Задачи были следующие:
— максимальная простота, минимум подключений и проводов;
— быстрота установки;
— на кругу могут быть несколько машин одновременно;
— машины идут в строгой последовательности, обогнать и изменить порядок не могут;
— старт по пересечению линии.
Поскольку у меня был небольшой опыт использования Arduino, я взял его за основу. Так же решил отказаться от ноутбука и для мобильности заменить его приложением под Android, освоим незнакомый мне раннее язык Java.
Выбор запчастей
Датчик пересечения линии. Сначала я хотел реализовать все одним блоком, который крепился бы с одной стороны на стартефинише и определял пересечение ультразвуковым датчиком расстояния. Дома это даже работало, но на улице все оказалось иначе. Показания датчика постоянно прыгали и реагировали на ветер и на все подряд кроме машины. Решено было копать в сторону инфракрасных лучей.
Для того, чтоб точно отличать свет инфракрасного диода от автомобильных фар или солнца, нужно подбирать приемник с частотной модуляцией, чем заниматься не хотелось. Выбор пал на готовые датчики ABT-30m. В них все уже было реализовано, например, стекло пропускало только инфракрасный свет и отсекало свет фар и солнца. Стояли фокусирующие линзы, нужно было только подключиться к соответствующему выводу датчика. Насколько я понял, такие датчики используются для охраны периметра в домашних сигнализациях. Забегая вперед скажу, что выбор оказался удачным.
Аккумулятор. Поскольку ABT-30m питается от 12v и Arduino mini может питаться от 12v аккумулятора, решено брать на 12v. Хотелось найти минимального размера, чтобы он поместился внутрь корпуса устройства, а не был дополнительным блоком снаружи. На рынке удалось найти только автомобильный аккумулятор, который совсем не подходил по размерам и аккумулятор от ИБП, который был тоже довольно большим: но на крайний случай оба могли бы подойти.
В итоге мне повезло и я нашел в китайском магазине аккумулятор на 12v и 4000mAh размером в два спичечных коробка, что было очень хорошо. В последствии выяснилось, что это «аккумуляторы от нокии», соединенные последовательно в термоусадке:
Светодиоды. Обычные 12v rgb 10w:
Bluetooth. Стандартные модули HC-06:
Сборка
Вот такая схема получилась. Arduino подключается к bluetooth на 5 и 6 ногах и работает через Software Serial. К 9,10,11 ногам подключаются rgb светодиоды через транзисторы, так как светодиоды питаются от 12v, а arduino выдает 5v. На 2 ногу заведен сигнал с датчика пересечения, работает через прерывания:
В итоге получилось вот так. Один блок — это приемник (с кучей проводов внутри) второй — передатчик (внутри только аккумулятор) и светофор, сделанный из какого-то фонарика из fixprise (внутри 3 цветных светодиода и рассеиватель из какой-то бумаги). Крепится светофор крокодильчиком, а соединяется с основным модулем обычным патчкордом:
Мобильное приложение
Вместо компьютера я решил выводить результаты и управлять стартом с мобильного телефона на Android. Так же это был первый опыт разработки под эту платформу и первый опыт с Java. В итоге получилось вот такое приложение:
Работает следующим образом. С разных сторон дороги ставятся передатчик и приемник, подключается светофор и вешается на удобное место (установка очень быстрая). В приложении устанавливаем соединение с 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.
Автор: versoul
Сори- где скачать скеч проекта?