Sommario:

Garden Train - Arduino Wireless NMRA DCC: 4 passaggi (con immagini)
Garden Train - Arduino Wireless NMRA DCC: 4 passaggi (con immagini)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 passaggi (con immagini)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 passaggi (con immagini)
Video: Cheap and Amazing! DCC-EX 2 Years Later 2024, Dicembre
Anonim
Image
Image
Progettazione del sistema
Progettazione del sistema

Oltre alla precedente istruzione con il sistema DCC su binari morti, ho sviluppato ulteriormente l'idea con una stazione di comando DCC portatile con tastiera e display LCD. La stazione di comando contiene tutta la codifica necessaria per le istruzioni NMRA DCC, tuttavia invece di connettersi alle rotaie, i dati vengono trasferiti dal modulo radio RF24L01+ ad un ricevitore montato su un camion o sotto la loco - ovunque lo spazio lo consenta.

Naturalmente, le tue locomotive devono essere dotate di un decodificatore di capacità di carico adatto ai motori del motore.

Passaggio 1: progettazione del sistema

Progettazione del sistema
Progettazione del sistema

L'Arduino Pro Mini è al centro del design. Utilizzo di Fritzing per sviluppare il circuito e produrre PCB.

Sono stato in grado di utilizzare lo stesso PCB sia per il trasmettitore che per il ricevitore, risparmiando così alcuni costi.

Il trasmettitore ha collegamenti per tastiera e LCD mentre il ricevitore non li richiede e utilizza il ponte H per fornire l'uscita DCC per la loco.

Un ulteriore sviluppo include connessioni per un ponte H più grande, se necessario per locomotive più potenti.

Il PCF8574 può essere eliminato se si utilizza un display LCD fornito con lo zaino che consente alle connessioni SCA / SCL su Arduino di alimentare il display utilizzando solo 2 fili. Elenco delle parti: Totale = circa £ 60 per DCC Command Station + 1 ricevitore Costo dei ricevitori aggiuntivi = £ 10.00 circa ciascuno. + batterie

Arduino Pro Mini. x 2 = £ 4,00

Tastiera a membrana 4x3 = £3.00

Display LCD 20 x 4 = £ 7,00

PCF5874 = £ 1,80

NRF24L01+. moduli radio x 2 = £ 5,80

Produzione PCB per 10 di sconto (o può essere utilizzata la scheda Vero) = £ 24 o £ 4,80 per 2 di sconto

Regolatore 3,3 v = £ 0,17 (pacco da 25 da RS Comp)

Regolatore 5v LM7805 = £ 0,30

Ponte ad H SN754410ne = £3.00

Batterie Lloytron ricaricabili da 2700 maH AA x 12 = £ 22,00. (le batterie con rating maH inferiore sono più economiche)

Condensatori, pentole, pin, connettori, ecc = £ 2,00 circa

Custodia 190x110x60 mm = £ 8,00

Trasmettitore - caricatore del telefono / batteria = £ 2,00

Passaggio 2: trasmettitore

Trasmettitore
Trasmettitore

Lo schema del circuito è mostrato dove i pin da D2 a D8 sull'Arduino Pro Mini sono collegati alla tastiera. Un potenziometro da 100 k ohm è collegato al pin analogico A0 per la regolazione della velocità. I pin SDA e SCL formano il chip PCF8574 sono collegati ai pin A4 e A5 sull'Arduino Pro Mini tramite fili saldati ai pin sullo strato superiore del Pro Mini.

Lo sketch di Arduino è allegato per il download.

Ho utilizzato un display LCD 20 x 4 che consente 4 righe di informazioni con 20 caratteri per riga. La tastiera fornisce il seguente menu:

da 1 a 9 = indirizzo loco * = direzione 0 = luci # = menu funzioni per tasti da 1 a 8

Descrizione di base dello sketch Arduino Pro Mini: questa riga del codice organizza il messaggio DCC in formato HEX. struct Messaggio msg[MAXMSG] = {

{ { 0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // messaggio inattivo

{ { locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 byte address

};

Per memorizzare le impostazioni per ogni loco, una serie di array sono impostati come segue:

int la[20];// array per contenere i numeri di loco

int sa[20];// array per contenere i valori di velocità

int fda[20];// array per contenere dir

int fla[20];// array per contenere le luci

int f1a[20];// array per contenere fun1…..

int f8a[20];// array per contenere fun8

Per consentire la modifica delle istruzioni DCC man mano che procediamo:

Per le istruzioni sulla velocità: void modify_speed (struct Message & x) {

x.data[0] = locoAdr;

x.dati[1] = 0x40; // locoMsg con 28 step di velocità }

Per le istruzioni sulle funzioni:

void modify_group1 (struct Message & x) {

x.data[0] = locoAdr;

x.dati[1] = 0x80; // locoMsg con istruzione di gruppo uno 0x80 }

Il ciclo principale dello schizzo:

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

send_data_1(); // invia dati via wireless

ritardo(10);

send_data_3(); // visualizza i dati sul display LCD

send_data_4(); // visualizza i dati sul monitor seriale }

if (read_function()) {

assemble_dcc_msg_group1();

send_data_1();

ritardo(10);

send_data_3(); } }

Aggiorna i dati quando la velocità cambia:

boolean read_locoSpeed() Questo rileva un nuovo indirizzo loco, impostazione di velocità o direzione e modifica di conseguenza i "dati" HEX. Qui ho specificato 28 passaggi di velocità e per soddisfare lo standard NMRA S 9.2, i dati di velocità devono essere trovati da una tabella di ricerca in 'speed_step()'

void speed_step(){ switch (locoSpeed){

caso 1: dati |= 0x02; rottura;

caso 2: dati |= 0x12; rottura;

caso 3: dati |= 0x03; rottura;

………

caso 28: dati |= 0x1F; rottura; }}

Aggiorna i dati quando cambiano le funzioni:

booleana read_function()

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

} //fari spenti

if (fla[LocoAdr] == 1) {

dati = 0x90;

} //fari accesi

Per ogni Funzione:

if (f2a[LocoAdr] == 0) { dati |= 0; }. // Funzione 2 disattivata

if (f2a[LocoAdr] == 1) {

dati |= 0x02; // La funzione 2 su }'data' viene creata combinando ['|=' bit a bit o] i codici HEX per ciascuna funzione.

Passaggio 3: ricevitore

Ricevitore
Ricevitore

Viene mostrato lo schema del circuito in cui vengono utilizzati i pin 5 e 6 di Arduino Pro Mini per fornire il segnale DCC fornito al ponte H. Le coppie di ponti ad H sono collegate in parallelo per aumentare la capacità di corrente. A seconda della corrente assorbita dalla loco, potrebbe essere necessario collegare un dissipatore di calore al dispositivo DIP a 16 pin o collegare esternamente un ponte H per impieghi gravosi.

Lo sketch Arduino è allegato per il download. Il segnale DCC è costituito da un clock che funziona a 2MHZ

void SetupTimer2() fa questo lavoro.

L'orologio include 'impulsi brevi' (58us) per '1' nei dati DCC e 'impulsi lunghi' (116us) per '0' nei dati DCC.

Il loop void, riceve i dati dalla radio e se viene trovata una stringa valida, i dati vengono convertiti in dati DCC.

void loop(void){ if (radio.available()){ bool done = false; done = radio.read(inmsg, 1); // legge i dati ricevuti

char rc = inmsg[0]; // inserisce il carattere letto in questo array

if (rc != 0){. // se il carattere non è uguale a zero

inString.concat(rc); // crea il messaggio }

if (rc == '\0') { // se il carattere è '/0' alla fine del messaggio

Serial.println(inString); // stampa il messaggio assemblato

corda(); // decostruisce il messaggio di stringa per ottenere le istruzioni DCC

} } }

Passaggio 4: eseguire le locomotive

Corri le Loco
Corri le Loco

Per evitare l'interruzione dei dati derivanti dalla circolazione di più treni sullo stesso binario, è necessario scollegare i contatti tra le ruote e il binario per ciascuna locomotiva e autocarro impiegati.

Goditi i treni a corsa libera indipendentemente dalle condizioni del binario: che differenza! Nessun problema, nessun start-stop e nessuna pulizia richiesta.

Le batterie che ho usato sono ricaricabili LLoytron AA x 12. Ho costruito un caricabatterie appositamente per loro che ne carica 6 alla volta. (vedi istruzioni)

Consigliato: