Построив дома макет железной дороги, появилась потребность завести еще одну командную станцию для управления моделями. Чтоб поковыряться с моделькой на столе нужно либо демонтировать КС из подмакетного пространства, либо убирать с макета остальные модели и использовать его в качестве стола. То и другое крайне неудобно, а покупать еще одну КС банально дорого.
Готовые командные станции известных производителей за сотни евро хороши, но дороги, потому, что реализуют много функционала "в железе", который не очень-то и нужен или куда удобнее может быть сделан на компьютере, где больше экран и больше ресурсов. Так я пришел к мысли, что идеальная КС - это максимально простое железо, которое умеет понимать какой-то простой протокол и переводить его в DCC. А вся логика управления, красота интерфейса и другие возможности должны быть реализованы на другом, более подходящем по возможностям устройстве. На роль такого устройства идеально подходит телефон: там и интерфейс можно красивый и удобный сделать, и ресурсов для всего хватит, и коммуникационных возможностей масса.
На лицо аналогия с Roco MultiMaus, когда вся командная станция в пульте, что у вас в руке, а к рельсам подключается бустер для усиления сигнала. Но цена рокомышки даже на вторичном рынке далеко не бросовая. Плюс эта система изобилует проводами, а при использовании телефона, конечно, хотелось беспроводного соединения.
Для беспроводного соединения можно использовать Wi-Fi или Bluetooth. Например проект ESP32 Command Station предлагает использовать Wi-Fi и встроенный веб интерфейс. Прекрасное готовое решение, но из-за слабости железа есть проблемы с соединением. Плюс все недостатки веб-интерфейса, который не может соперничать по отзывчивости с нативным приложением. Ну а чтоб управлять через какое-либо приложение понадобится еще одна аппаратная прослойка.
Следующий вариант проект DCC++ и его развитие DCC-EX. Здесь уже сама станция и контроллер (крутилка) разнесены, для их взаимодействия предлагается открытый описанный протокол, ставший уже стандартом. Взаимодействие происходит через последовательный порт (serial) и, соответсвенно, есть возможность работы не только по проводу, но и через все, что угодно: Wi-Fi, Ethernet и Bluetooth. Авторы проекта делают упор на работу по Wi-Fi, это сильно удорожает аппаратную часть. Но если не использовать Wi-Fi, а проводное соединение заменить на Bluetooth-serial модуль, то получится беспроводной интерфейс на самом дешевом железе. И это мой выбор.
Для сборки беспроводной командной станции DCC++ понадобится железки, которые можно приобрести на алиэкспресс за доступную цену, а если сравнивать с ценой фирменной КС, то это просто бесплатно. Ссылки привожу просто для ориентира "что нужно", по цене, скорее всего, можно поискать варианты подешевле.
В ардуино нужно записать прошивку базовой станции DCC-EX.
На моторшилде нужно перерезать перемычку питания ардуино, иначе вы спалите ардуино!
Так же на моторшилде нужно установить перемычки на пины 13=5 и 12=10, это позволит станции понимать текущее потребление питания, если этого не сделать, она не даст включить питание путей.
Понижающий преобразователь до подключения к нему чего-либо, нужно настроить так, чтоб он давал напряжение более 5В и менее 12В, например 9В, иначе вы спалите ардуино!
Блютус модуль нужно настроить на скорость 115200 бит/сек, иначе взаимодействовать с КС не получится.
Нужно еще раз убедится, что перемычка питания на моторшилде перерезана (см. выше) и насадить его на ардуино.
Подключаем блютус модуль, пин RX в TX, а TX в RX. Питание берем с пинов 5V и GND.
Делаем две линии от блока питания. Первая идет напрямую к моторшилду. А вторя идет на понижающий преобразователь, а уже с него на разъем питания ардуино. Нужно еще раз убедиться, что понижающий преобразователь настроен на напряжение менее 12В.
Включаем блок питания в розетку и, если ничего не сгорело, а блютус модуль мигает лампочкой, то все собрано правильно.
Если есть 3D-принер, то можно распечатать плату для размещения всех компонентов.
Arduino UNO бывают двух видов: с длинной съемной микросхемой в корпусе DIP-28 и с квадратным чипом в корпусе TQFP-32, распаянном на плате. Второй вариант идентичен по функционалу, но при этом дешевле первого.
Блок питания можно заменить на менее мощный с силой тока 1А, его должно хватить на то, чтоб поиграться с одним локомотивом.
Если вы дружите с мультиметром, то понижающий преобразователь можно заменить на более дешевый без индикации.
Если у вас более мелкий масштаб, чем H0 1:87, например, TT 1:120 или N 1:160, то блок питания можно заменить на 12В, при этом перемычку на моторшилде резать не надо, линию подключения питания к ардуино через понижающий преобразователь тоже делать не надо. Теоретически, с блоком питания 12В, локомотив в масштабе H0 тоже может поехать, но я не пробовал.
Поковырявшись в интернете, мне удалось найти всего одну программу для Android, работающую с DCC++ через Bluetooth. DCCpp CAB разговаривает строго по-испански, у нее неудобный интерфейс, да и вообще она похоже застряла где-то в прошлом столетии.
Эта ситуация стала толчком к реализации давней хотелки - попробовать себя в качестве андроид-разработчика. И вот, после прошествия некоторого времени кодинга и гуглинга, у меня получилось приложение DCC++Throttle, которое умеет управлять поездами и аксессуарами, а так же обладает большей эргономичностью, чем другие приложения схожей тематики, на мой взгляд.
Поскольку Google всячески препятствует тому, чтоб я оплатил им свой разработческий аккаунт, то плей маркета в ближайшее время моему приложению не видать, и жить оно будет на GitHub.
Итак, скачиваем свежую версию приложения и ставим APK себе на телефон. Если попросит, то нужно предоставить разрешение на Bluetooth, иначе не сможет подключиться к командной станции.
На телефоне штатными средствами Bluetooth добавляем модуль HC-06, подключенный к КС, в список сопряженных усройств. Это нужно сделать всего один раз для того, чтоб можно было работать с командной станцией.
Запускаем на телефоне приложение DCC++Throttle и в списке устройств выбираем добавленное выше устройство. Жмем подключиться. Если приложение смогло подключиться, то считаем, что все работает. На всякий случай, можно в приложении зайти в консоль и посмотреть обмен данными с КС, там как минимум, должна быть строка информации, полученная от командной станции.
На этом все, теперь можно играться