Оглавление:

Модель железной дороги - командная станция DCC с использованием Arduino :: 3 шага
Модель железной дороги - командная станция DCC с использованием Arduino :: 3 шага

Видео: Модель железной дороги - командная станция DCC с использованием Arduino :: 3 шага

Видео: Модель железной дороги - командная станция DCC с использованием Arduino :: 3 шага
Видео: Собираю командную станцию для моделей поездов на Arduino - DCC++EX 2024, Июль
Anonim
Image
Image
Код Arduino - командная станция с клавиатурой
Код Arduino - командная станция с клавиатурой

Обновлено в августе 2018 г. - см. Новое руководство:

Обновление от 28 апреля 2016 года: теперь на командном пункте имеется возможность управления 16 стрелками / пунктами. Стрелки T1 - T8 доступны с помощью клавиши 'B' Стрелки T9 - T16 доступны с помощью клавиши 'C'

Обновление от 10 марта 2016 г.:

Теперь на командный пункт добавлена возможность управления 8 стрелками / пунктами. Код Arduino был соответствующим образом обновлен с использованием стандартного пакета NMRA для стрелочных переводов (также на основе исследования пакетов данных Lenz / Atlas Compact для управления стрелками).

Стрелочные переводы T1 - T8 доступны с помощью клавиши «B».

См. Инструкции по используемой схеме приемника пакетов данных и необходимому коду Arduino.

Обновление 18 января 2016 г.:

Я добавил в схему резистор для измерения тока (1 кОм) и конденсатор (10 мкФ) и изменил код Arduino, чтобы отключить питание при обнаружении пикового тока> 3200 мА / с. Согласно спецификации H-моста, выходной ток считывания составляет 377 мкА на 1 А в нагрузке.

Резистор 1,5 кОм подает 0,565 вольт на ампер на аналоговый вывод 6. При 1023 шагах на аналоговом входе это дает 0,565 * 1023/5 = 116 на нагрузку ампер.

A = 100 * (analogRead (AN_CURRENT)) / 116; A = A * 10; (чтобы дать результат в миллиамперах)

Ток нагрузки в миллиамперах отображается на TFT

Полная клавиатура 4x4 включает в себя функции от F1 до F8 и еще 10 локомотивов (1-19) с помощью клавиши «#» (чтобы добавить 10 к числовым клавишам, начиная с локомотива 10).

Код Arduino включает стандарт NMRA для байтов команд.

См. Ссылку

www.nmra.org/sites/default/files/s-9.2.1_20…

(страница 6 имеет особое значение)

Пакеты упорядочены по количеству шагов скорости, длинному / короткому адресу и инструкциям функциональной группы.

Всем байтам команд предшествует преамбула из битов «1» 11111111 (или незанятый пакет), за которыми следует;

например 4-байтовый адрес 0 00000011 0 00111111 0 10000011 0 10111111

приравнивается к локомотиву 3, 128 шагов скорости, прямому направлению и шагу скорости 3 (конечный байт - это проверка ошибок XOR)

например, 3-байтовый адрес 0 00000011 0 10010000 0 10110011

приравнивается к loco 3, функциональная группа 1, FL горит плюс байт XOR (бит '0' разделяет каждый байт)

См. Прилагаемое демонстрационное видео для Loco 12.

Функции F1 - F8 доступны через клавишу «A», DIR (клавиша «*» = направление) FL (клавиша «0» = светится) и клавиша «#» задает локомотивы от 10 до 19 на цифровой клавиатуре. Клавиша «D» теперь используется для аварийного останова.

Спасибо различным провайдерам в Интернете за источники информации DCC и кода Arduino.

В частности, этот проект был вдохновлен Майклом Бланком и его «Простая DCC - командная станция».

www.oscale.net/en/simpledcc

Матричная матрица 4x4 с 16 клавишами, мембранная клавиатура с переключателем (ebay) £ 1,75

2,2-дюймовый ЖК-дисплей 240x320 с последовательным интерфейсом SPI TFT (ebay) £ 7,19

АДАПТЕР ПИТАНИЯ УНИВЕРСАЛЬНЫЙ 12V 5A 60W (ebay) £ 6.49

Nano V3.0 для Arduino с CH340G 5V 16M совместимый ATmega328P (ebay) 2 x 3,30 £ = 6,60 £

Модуль драйвера двигателя LMD18200T для Arduino R3 (ebay) £ 6,99

Разъемы, провод, плата веро, потенциометр около 3,50 фунтов стерлингов

Итого 32,52 £

Базовая командная станция без tft-экрана и 1 x nano будет стоить 22,03 фунта стерлингов.

[Примечание: можно добавить карту памяти к TFT-дисплею и изменить код для отображения изображений выбранных двигателей, хотя коды библиотеки необходимо отредактировать, чтобы освободить больше памяти для эскиза. Текущий размер эскиза максимален для TFT Arduino Nano]

Исходный код Arduino Майкла Бланка был для одного двигателя, только вперед / назад, без управления функциями, без клавиатуры и без дисплея.

Я изменил код, чтобы включить от 1 до 19 двигателей, экран дисплея, направление, огни, 8 функций, аварийный останов и автоматическое ограничение тока.

Мост LMD18200T может выдерживать до 3 ампер, что делает его подходящим для всех масштабов, включая G-шкалу (садовые поезда). Блок питания и электроника подходят для использования только в помещении, если вы не можете сделать их всепогодными. У меня есть командный пункт в летнем домике с рельсами, соединяющими провода, идущие через стену к рельсам.

Шаг 1. Код Arduino - командная станция с клавиатурой

Моя благодарность tvantenna2759 за указание на 2 ошибки в принципиальной схеме, где код Arduino не соответствовал проводке, теперь обновленной (21 октября 2017 г.).

Теперь на Командный пункт добавлено 16 стрелочных переводов. См. Инструкции на принципиальной схеме стрелок / точек с использованием модуля Arduino Mini Pro.

Измененный код, включая контроль явки, прилагается ниже.

Пакет базового дополнительного декодера: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 Из анализа пакета, используемого Lenz (Compact / Atlas) для контроля точек, я использовал следующий двоичный формат пакета для байтов 1 и 2: tunAddr = 1 Стрелка 1a: 1000 0001 1111 1000 / Явка 1b: 1000 0001 1111 1001 Явка 2a: 1000 0001 1111 1010 / Явка 2b: 1000 0001 1111 1011 Явка 3a: 1000 0001 1111 1100 / Явка 3b: 1000 0001 1111 1101 Явка 4a: 1000 0001 1111 1110 / Явка 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------------------------------- -------------------------------------------------- ----------------- Явка 5a: 1000 0010 1111 1000 / Явка 5b: 1000 0010 1111 1001 Явка 6a: 1000 0010 1111 1010 / Явка 6b: 1000 0010 1111 1011 Явка 7a: 1000 0010 1111 1100 / Явка 7b: 1000 0010 1111 1101 Явка 8a: 1000 0010 1111 1110 / Явка 8b: 1000 0010 1111 1111 ----------------------- -------------------------------------------------- ---------------------------------- Явка 9a: 1000 0011 1111 1000 / Явка 9b: 1000 0011 1111 1001 и т. Д. ………

Выдержка из измененного кода: Добавьте еще 2 обновления сообщений 'struct'void altern_tun1 (struct Message & x) {x.data [0] = 0x81; // дополнительный декодер 0x80 и адрес 1 x.data [1] = 0; }

недействителен change_tun2 (struct Message & x) {x.data [0] = 0x82; // дополнительный декодер 0x80 и адрес 2 x.data [1] = 0; }

Добавить новую пустоту для стрелок: boolean read_turnout () {delay (20);

логическое значение changed_t = false; get_key ();

if (key_val> = 101 && key_val <= 404 && turn == 1) {

данные = 0xf8; // = двоичный 1111 1000

изменить_tun1 (сообщение [1]);

}

if (key_val> = 505 && key_val <= 808 && turn == 1) {

данные = 0xf8; // = двоичный 1111 1000

изменить_tun2 (сообщение [1]);

}

if (key_val == 101 && turn == 1) {

if (tun1 == 1) {

данные | = 0; // t1a

changed_t = true;}

if (tun1 == 0) {

данные | = 0x01; // t1b

changed_t = true;}

}

if (key_val == 202 && turn == 1) {

if (tun2 == 1) {

данные | = 0x02; // t2a

changed_t = true;

}

if (tun2 == 0) {

данные | = 0x03; // t2b

changed_t = true; }

}

if (key_val == 303 && turn == 1) {

if (tun3 == 1) {

данные | = 0x04; // t3a

changed_t = true;

}

if (tun3 == 0) {

данные | = 0x05; // t3b

changed_t = true;}

}

if (key_val == 404 && turn == 1) {

if (tun4 == 1) {

данные | = 0x06; // t4a

changed_t = true;

}

if (tun4 == 0) {

данные | = 0x07; // f4b

changed_t = true;}

}

if (key_val == 505 && turn == 1) {

if (tun5 == 1) {

данные | = 0; // t5a

changed_t = true;

}

if (tun5 == 0) {

данные | = 0x01; // t5b

changed_t = true;}

}

так далее ………………….

Шаг 2: Код Arduino - TFT-дисплей

Код Arduino - TFT-дисплей
Код Arduino - TFT-дисплей
Код Arduino - TFT-дисплей
Код Arduino - TFT-дисплей
Код Arduino - TFT-дисплей
Код Arduino - TFT-дисплей
Код Arduino - TFT-дисплей
Код Arduino - TFT-дисплей

Схема дисплея остается прежней с измененным кодом для отображения состояния 16 стрелочных переводов. Примечание. Код библиотеки занимает почти всю память кода эскиза, оставляя мало места для новых функций. Если у кого-то есть более эффективный файл библиотеки для TFT, используемый здесь, пожалуйста, дайте мне знать.

Шаг 3. Контроллер явки

Контроллер явки
Контроллер явки
Контроллер явки
Контроллер явки

См. Инструкции о том, как сделать контроллер явки / очков.

Полная схема управляет 16 точками и 15 аксессуарами, такими как освещение, звуки, проигрыватель и т. Д.

Рекомендуемые: