2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
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
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
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
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
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)