2023-03-12 12:11:19

Командная станция DCC своими руками

Android Bluetooth Arduino DCC

Командная станция DCC++

Построив дома макет железной дороги, появилась потребность завести еще одну командную станцию для управления моделями. Чтоб поковыряться с моделькой на столе нужно либо демонтировать КС из подмакетного пространства, либо убирать с макета остальные модели и использовать его в качестве стола. То и другое крайне неудобно, а покупать еще одну КС банально дорого.


Готовые командные станции известных производителей за сотни евро хороши, но дороги, потому, что реализуют много функционала "в железе", который не очень-то и нужен или куда удобнее может быть сделан на компьютере, где больше экран и больше ресурсов. Так я пришел к мысли, что идеальная КС - это максимально простое железо, которое умеет понимать какой-то простой протокол и переводить его в 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++ понадобится железки, которые можно приобрести на алиэкспресс за доступную цену, а если сравнивать с ценой фирменной КС, то это просто бесплатно. Ссылки привожу просто для ориентира "что нужно", по цене, скорее всего, можно поискать варианты подешевле.

  1. Arduino UNO R3 с чипом ATmega328P
  2. Arduino motor shield L298HN (оригинальный Arduino Motor Shield R3 так же подойдет)
  3. Bluetooth UART HC-06 (подойдет так же HC-05, но он дороже и избыточен по функциям)
  4. Понижающий преобразователь LM2596
  5. Блок питания 18В 2А (удивительно, на озоне было дешевле, чем на али)
  6. Разъемы 5.5х2.1 мм. и провода (без разъемов, в принципе, можно обойтись)

В ардуино нужно записать прошивку базовой станции DCC-EX.

Перемычка питания на моторшилде

На моторшилде нужно перерезать перемычку питания ардуино, иначе вы спалите ардуино!

Так же на моторшилде нужно установить перемычки на пины 13=5 и 12=10, это позволит станции понимать текущее потребление питания, если этого не сделать, она не даст включить питание путей.

Понижающий преобразователь до подключения к нему чего-либо, нужно настроить так, чтоб он давал напряжение более 5В и менее 12В, например 9В, иначе вы спалите ардуино!

Блютус модуль нужно настроить на скорость 115200 бит/сек, иначе взаимодействовать с КС не получится.

Сборка

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

Подключаем блютус модуль, пин RX в TX, а TX в RX. Питание берем с пинов 5V и GND.

Подключение питания к моторшилду

Делаем две линии от блока питания. Первая идет напрямую к моторшилду. А вторя идет на понижающий преобразователь, а уже с него на разъем питания ардуино. Нужно еще раз убедиться, что понижающий преобразователь настроен на напряжение менее 12В.

Включаем блок питания в розетку и, если ничего не сгорело, а блютус модуль мигает лампочкой, то все собрано правильно.

Если есть 3D-принер, то можно распечатать плату для размещения всех компонентов.

P30423-145501.jpg P30423-145513.jpg

Что можно оптимизировать и удешевить

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 и в списке устройств выбираем добавленное выше устройство. Жмем подключиться. Если приложение смогло подключиться, то считаем, что все работает. На всякий случай, можно в приложении зайти в консоль и посмотреть обмен данными с КС, там как минимум, должна быть строка информации, полученная от командной станции.

На этом все, теперь можно играться