Índice:

Ferrovia modelo - Estação de comando DCC usando Arduino :: 3 etapas
Ferrovia modelo - Estação de comando DCC usando Arduino :: 3 etapas

Vídeo: Ferrovia modelo - Estação de comando DCC usando Arduino :: 3 etapas

Vídeo: Ferrovia modelo - Estação de comando DCC usando Arduino :: 3 etapas
Vídeo: Model Railway Computer Control using Digital DC (DDC) Demo | oorail.com 2024, Julho
Anonim
Image
Image
Código Arduino - Estação de Comando com Teclado
Código Arduino - Estação de Comando com Teclado

Atualizado em agosto de 2018 - veja o novo Instructable:

Atualização de 28 de abril de 2016: Agora com capacidade de controle de 16 pontos / comparecimento para a Estação de Comando. Os desvios T1 - T8 estão disponíveis através da tecla 'B' Os desvios T9 - T16 estão disponíveis através da tecla 'C'

Atualização em 10 de março de 2016:

Agora adicionado 8 capacidade de controle de saída / pontos para a Estação de Comando. O código do Arduino foi atualizado de acordo com o pacote padrão NMRA para turnouts (também baseado em um estudo de pacotes de dados Lenz / Atlas Compact para controle de turnout).

Os desvios T1 - T8 estão disponíveis através da tecla 'B'

Veja instrutível no circuito receptor de pacote de dados usado e código Arduino necessário.

Atualização de 18 de janeiro de 2016:

Eu adicionei um resistor de detecção de corrente (1k5 ohm) e um capacitor (10 uf) ao circuito e alterei o código do Arduino para cortar a energia quando um pico de corrente de> 3200 mAmps for detectado. As especificações da ponte H indicam uma corrente de detecção de saída de 377 uA por 1 Amp na carga.

O resistor de 1,5 k ohm fornecerá 0,565 volts por Amp no pino analógico 6. Com 1023 etapas na entrada analógica, isso dá 0,565 * 1023/5 = 116 por carga de Amp.

A = 100 * (analogRead (AN_CURRENT)) / 116; A = A * 10; (para dar o resultado em miliamperes)

A corrente de carga em miliamperes é exibida no TFT

O teclado 4x4 completo inclui funções F1 a F8 e outros 10 locos (1-19) através da tecla '#' (para adicionar 10 às teclas numéricas começando no loco 10).

O código do arduino inclui o padrão NMRA para bytes de instrução.

Veja o link

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

(a página 6 é de particular relevância)

Os pacotes são organizados de acordo com o número de etapas de velocidade, endereço longo / curto e instruções do grupo de funções.

Todos os bytes de instrução são precedidos por um preâmbulo de '1' bits 11111111 (ou pacote inativo) seguido por;

por exemplo. Um endereço de 4 bytes 0 00000011 0 00111111 0 10000011 0 10111111

equivale a loco 3, 128 passos de velocidade, direção para frente e passo de velocidade 3 (o byte final é a verificação de erro XOR)

por exemplo, um endereço de 3 bytes 0 00000011 0 10010000 0 10110011

equivale a loco 3, grupo de funções 1, FL acende mais o byte XOR (um bit '0' separa cada byte)

Veja o vídeo de demonstração incluso para loco 12.

As funções F1 - F8 estão disponíveis através da tecla 'A', DIR (tecla '*' = direção) FL (tecla '0' = luzes) e a tecla '#' fornece locos 10 a 19 no teclado numérico. A tecla 'D' agora é usada para uma 'PARADA de emergência'.

Agradeço a vários provedores na web por fontes de informações DCC e código Arduino.

Em particular, este projeto foi inspirado por Michael Blank e seu 'Simple DCC - uma estação de comando'

www.oscale.net/en/simpledcc

4x4 Matrix Array 16 Key Membrane Switch Keypad (ebay) £ 1,75

2.2 polegadas 240x320 Serial SPI TFT LCD Display Module (ebay) £ 7,19

UNIVERSAL 12V 5A 60W FONTE DE ALIMENTAÇÃO AC ADAPTADOR (ebay) £ 6,49

Nano V3.0 para Arduino com CH340G 5V 16M compatível ATmega328P (ebay) 2 x £ 3,30 = £ 6,60

Módulo Motor Driver LMD18200T para Arduino R3 (ebay) £ 6,99

Conectores, fio, placa vero, potenciômetro de aproximadamente £ 3,50

Total £ 32,52

A estação de comando básica sem tela tft e 1 x nano custaria £ 22,03

[Nota: É possível adicionar um cartão de memória ao display TFT e corrigir o código para exibir imagens dos motores selecionados, embora os códigos da biblioteca devam ser editados para criar mais memória para o esboço. O tamanho do esboço atual é máximo para o TFT Arduino Nano]

O código Arduino original de Michael Blank era para um motor, apenas para frente / para trás, sem controle de função, sem teclado e sem display.

Eu modifiquei o código para incluir 1 - 19 motores, uma tela de exibição, direção, luzes, 8 funções, parada de emergência e limite automático de corrente.

A ponte LMD18200T pode carregar até 3 amperes, o que a torna adequada para todas as escalas, incluindo a escala G (trens de jardim). A fonte de alimentação e os componentes eletrônicos são adequados apenas para uso interno, a menos que você possa torná-los à prova de intempéries. Eu tenho a estação de comando na casa de verão com fios de conexão de trilhos que vão da parede até os trilhos.

Etapa 1: Código Arduino - Estação de comando com teclado

Meus agradecimentos a tvantenna2759 por apontar 2 erros no diagrama de circuito em que o código do Arduino não correspondia à fiação, agora atualizado (21 de outubro de 2017).

Agora adicionado 16 desvios à Estação de Comando. Veja instruções no diagrama de circuito de saída / pontos usando o módulo Arduino Mini Pro.

O código modificado, incluindo o controle de participação, está anexado a seguir.

O pacote decodificador de acessórios básicos é: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 Analisando o pacote usado por Lenz (Compact / Atlas) para controle de pontos, usei o seguinte formato de pacote binário para bytes 1 e 2: tunAddr = 1 Turnout 1a: 1000 0001 1111 1000 / Turnout 1b: 1000 0001 1111 1001 Turnout 2a: 1000 0001 1111 1010 / Turnout 2b: 1000 0001 1111 1011 Turnout 3a: 1000 0001 1111 1100 / Turnout 3b: 1000 0001 1111 1101 Turnout 4a: 1000 0001 1111 1110 / Turnout 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------------------------------- -------------------------------------------------- ----------------- Participação 5a: 1000 0010 1111 1000 / Participação 5b: 1000 0010 1111 1001 Participação 6a: 1000 0010 1111 1010 / Participação 6b: 1000 0010 1111 1011 Participação 7a: 1000 0010 1111 1100 / Turnout 7b: 1000 0010 1111 1101 Turnout 8a: 1000 0010 1111 1110 / Turnout 8b: 1000 0010 1111 1111 ----------------------- -------------------------------------------------- ---------------------------------- Participação 9a: 1000 0011 1111 1000 / Participação 9b: 1000 0011 1111 1001 etc ………

Extrair do código modificado: Adicionar mais 2 atualizações de mensagem 'struct' evite alterar_tun1 (struct Message & x) {x.data [0] = 0x81; // decodificador acessório 0x80 & endereço 1 x.data [1] = 0; }

voidendar_tun2 (struct Message & x) {x.data [0] = 0x82; // decodificador acessório 0x80 & endereço 2 x.data [1] = 0; }

Adicionar novo vazio para turnouts: boolean read_turnout () {delay (20);

booleano alterado_t = falso; get_key ();

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

dados = 0xf8; // = binário 1111 1000

alterar_tun1 (msg [1]);

}

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

dados = 0xf8; // = binário 1111 1000

alterar_tun2 (msg [1]);

}

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

if (tun1 == 1) {

dados | = 0; // t1a

alterado_t = verdadeiro;}

if (tun1 == 0) {

dados | = 0x01; // t1b

alterado_t = verdadeiro;}

}

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

if (tun2 == 1) {

dados | = 0x02; // t2a

alterado_t = verdadeiro;

}

if (tun2 == 0) {

dados | = 0x03; // t2b

alterado_t = verdadeiro; }

}

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

if (tun3 == 1) {

dados | = 0x04; // t3a

alterado_t = verdadeiro;

}

if (tun3 == 0) {

dados | = 0x05; // t3b

alterado_t = verdadeiro;}

}

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

if (tun4 == 1) {

dados | = 0x06; // t4a

alterado_t = verdadeiro;

}

if (tun4 == 0) {

dados | = 0x07; // f4b

alterado_t = verdadeiro;}

}

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

if (tun5 == 1) {

dados | = 0; // t5a

alterado_t = verdadeiro;

}

if (tun5 == 0) {

dados | = 0x01; // t5b

alterado_t = verdadeiro;}

}

etc ………………….

Etapa 2: Código Arduino - Tela TFT

Código Arduino - Display TFT
Código Arduino - Display TFT
Código Arduino - Display TFT
Código Arduino - Display TFT
Código Arduino - Display TFT
Código Arduino - Display TFT
Código Arduino - Display TFT
Código Arduino - Display TFT

O circuito de exibição permanece o mesmo com um código modificado para mostrar o status das 16 saídas. Observação: o código da biblioteca ocupa quase toda a memória do código do esboço, deixando pouco espaço para novos recursos. Se alguém tiver um arquivo de biblioteca mais eficiente para o TFT usado aqui, por favor me avise.

Etapa 3: Controlador Turnout

Controlador Turnout
Controlador Turnout
Controlador Turnout
Controlador Turnout

Veja instruções sobre como fazer o controlador Turnout / Points.

O circuito completo controla 16 pontos e 15 acessórios como luzes, sons, toca-discos, etc.

Recomendado: