Índice:

Trem do jardim - Arduino Wireless NMRA DCC: 4 etapas (com imagens)
Trem do jardim - Arduino Wireless NMRA DCC: 4 etapas (com imagens)

Vídeo: Trem do jardim - Arduino Wireless NMRA DCC: 4 etapas (com imagens)

Vídeo: Trem do jardim - Arduino Wireless NMRA DCC: 4 etapas (com imagens)
Vídeo: Spoiler para formação do dia 22/09/2022 - Irrigação com Arduino - DE - Botucatu. 2024, Junho
Anonim
Image
Image
Desenho do Sistema
Desenho do Sistema

Além do anterior instrutível com DCC em sistema de trilho morto, desenvolvi a ideia ainda mais com uma estação de comando DCC portátil com teclado e display LCD. A Estação de Comando contém toda a codificação necessária para as instruções NMRA DCC, porém, em vez de conectar aos trilhos, os dados são transferidos pelo módulo de rádio RF24L01 + para um receptor montado em um caminhão ou sob a locomotiva - onde o espaço permitir.

Claro, suas locomotivas devem ser equipadas com um decodificador de capacidade de carga adequado para os motores do motor.

Etapa 1: Design do sistema

Desenho do Sistema
Desenho do Sistema

O Arduino Pro Mini está no centro do design. Usando Fritzing para desenvolver o circuito e produzir PCBs.

Consegui usar o mesmo PCB tanto para o transmissor quanto para o receptor, economizando alguns custos.

O transmissor tem conexões para teclado e LCD, enquanto o receptor não requer isso e usa a ponte H para fornecer a saída DCC para a locomotiva.

Um desenvolvimento adicional inclui conexões para uma ponte H maior, se necessário para locomotivas mais potentes.

O PCF8574 pode ser excluído se você usar um display LCD que vem com a mochila permitindo conexões SCA / SCL no Arduino para alimentar o display usando apenas 2 fios. Lista de peças: Total = aproximadamente £ 60 para DCC Command Station + 1 receptorCusto adicional de receptores = £ 10,00 aproximadamente cada. + baterias

Arduino Pro Mini. x 2 = £ 4,00

Teclado de membrana 4x3 = £ 3,00

Tela LCD 20 x 4 = £ 7,00

PCF5874 = £ 1,80

NRF24L01 +. módulos de rádio x 2 = £ 5,80

Fabricação de PCB para 10 unidades (ou placa Vero pode ser usada) = £ 24 ou £ 4,80 para 2 unidades

3,3 v Regulador = £ 0,17 (pacote de 25 da RS Comp)

Regulador 5v LM7805 = £ 0,30

SN754410ne H-bridge = £ 3,00

Pilhas AA de 2700 maH recarregáveis Lloytron x 12 = £ 22,00. (baterias com classificação de maH inferior são mais baratas)

Capacitores, potes, pinos, conectores, etc = £ 2,00 aprox.

Gabinete 190x110x60 mm = £ 8,00

Transmissor - carregador / bateria do telefone = £ 2,00

Etapa 2: Transmissor

Transmissor
Transmissor

O diagrama de circuito é mostrado onde os pinos D2 a D8 no Arduino Pro Mini estão conectados ao teclado. Um potenciômetro de 100k ohm é conectado ao pino analógico A0 para ajuste de velocidade. Os pinos SDA e SCL do chip PCF8574 são conectados aos pinos A4 e A5 no Arduino Pro Mini por meio de fios soldados aos pinos na camada superior do Pro Mini.

O esboço do Arduino está anexado para download.

Usei um display LCD 20 x 4 que permite 4 linhas de informação com 20 caracteres por linha. O teclado fornece o seguinte menu:

1 a 9 = endereço da locomotiva * = direção 0 = luzes # = Menu de funções para as teclas 1 a 8

Descrição básica do esboço do Arduino Pro Mini: Esta linha do código organiza a mensagem DCC no formato HEX. struct Message msg [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // msg inativa

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // endereço de 3 bytes

};

Para armazenar as configurações de cada locomotiva, uma série de matrizes são configuradas da seguinte forma:

int la [20]; // array para conter os números das locomotivas

int sa [20]; // array para manter os valores de velocidade

int fda [20]; // array para conter dir

int fla [20]; // array para conter as luzes

int f1a [20]; // array para manter fun1…..

int f8a [20]; // array para manter o fun8

Para permitir que as instruções DCC sejam alteradas à medida que avançamos:

Para obter instruções de velocidade: void Amendment_speed (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // locoMsg com 28 passos de velocidade}

Para instruções de função:

void Amendment_group1 (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg com instrução grupo um 0x80}

O loop principal do esboço:

loop void (void) {if (read_locoSpeed ()) {assemble_dcc_msg_speed ();

send_data_1 (); // enviar dados sem fio

atraso (10);

send_data_3 (); // exibe dados no display LCD

send_data_4 (); // exibe dados no monitor serial}

if (read_function ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

atraso (10);

send_data_3 (); }}

Atualize os dados quando a velocidade mudar:

boolean read_locoSpeed () Detecta um novo endereço de locomotiva, configuração de velocidade ou direção e altera os 'dados' HEX de acordo. Aqui eu especifiquei 28 etapas de velocidade e para atender ao padrão NMRA S 9.2, os dados de velocidade devem ser encontrados em uma tabela de consulta em 'speed_step ()'

void speed_step () {switch (locoSpeed) {

caso 1: dados | = 0x02; pausa;

caso 2: dados | = 0x12; pausa;

caso 3: dados | = 0x03; pausa;

………

caso 28: dados | = 0x1F; pausa; }}

Atualize os dados quando as funções mudarem:

boolean read_function ()

if (fla [locoAdr] == 0) {data = 0x80;

} // faróis apagados

if (fla [locoAdr] == 1) {

dados = 0x90;

} // faróis acesos

Para cada função:

if (f2a [locoAdr] == 0) {data | = 0; } // Função 2 desligada

if (f2a [locoAdr] == 1) {

dados | = 0x02; // Função 2 em} 'dados' é construída combinando ['| =' composto bit a bit ou] os códigos HEX para cada Função.

Etapa 3: Receptor

Receptor
Receptor

O diagrama de circuito é mostrado onde os pinos 5 e 6 do Arduino Pro Mini são usados para fornecer o sinal DCC fornecido para a ponte H. Os pares de ponte H são conectados em paralelo para aumentar a capacidade de corrente. Dependendo da corrente consumida pela locomotiva, um dissipador de calor pode ser necessário para ser conectado ao dispositivo DIP de 16 pinos, ou uma ponte H de serviço pesado pode ser conectada externamente.

O esboço do Arduino está anexado para download. O sinal DCC é composto de um relógio rodando a 2MHZ

void SetupTimer2 () faz esse trabalho.

O relógio inclui 'pulsos curtos' (58us) para '1' em dados DCC e 'pulsos longos' (116us) para '0' em dados DCC.

O loop void obtém dados do rádio e, se uma string válida for encontrada, os dados são convertidos em dados DCC.

loop void (void) {if (radio.available ()) {bool done = false; feito = radio.read (inmsg, 1); // leia os dados recebidos

char rc = inmsg [0]; // coloca o caractere lido neste array

if (rc! = 0) {. // se o caractere não for igual a zero

inString.concat (rc); // construir a mensagem}

if (rc == '\ 0') {// if caractere é '/ 0' fim da mensagem

Serial.println (inString); // imprime a mensagem montada

fragmento(); // desconstrua a mensagem de string para obter instruções DCC

} } }

Etapa 4: execute os Locos

Execute os Locos
Execute os Locos

Para evitar a interrupção dos dados da operação de vários trens na mesma via, você deve desconectar os contatos entre as rodas e a via para cada locomotiva e caminhão empregado.

Desfrute de trens rodando livremente, independentemente das condições da pista - que diferença! Sem complicações, sem iniciar-parar e sem limpeza necessária.

As baterias que usei são recarregáveis LLoytron AA x 12. Eu construí um carregador especialmente para elas que carrega 6 por vez. (ver instrutível)

Recomendado: