Sommario:

Modellismo ferroviario - Stazione di comando DCC con Arduino:: 3 passaggi
Modellismo ferroviario - Stazione di comando DCC con Arduino:: 3 passaggi

Video: Modellismo ferroviario - Stazione di comando DCC con Arduino:: 3 passaggi

Video: Modellismo ferroviario - Stazione di comando DCC con Arduino:: 3 passaggi
Video: Impariamo Insieme - Centralina DCC (Plastico ferroviario in DCC con Arduino 1) 2024, Dicembre
Anonim
Image
Image
Codice Arduino - Stazione di comando con tastiera
Codice Arduino - Stazione di comando con tastiera

Aggiornato ad agosto 2018 - vedi nuovo Instructable:

Aggiornamento del 28 aprile 2016: ora capacità di controllo di 16 punti/affluenza alla stazione di comando. Gli scambi T1 - T8 sono disponibili tramite il tasto 'B' Gli scambi T9 - T16 sono disponibili tramite il tasto 'C'

Aggiornamento del 10 marzo 2016:

Ora aggiunta capacità di controllo di 8 scambi/punti alla stazione di comando. Il codice Arduino è stato aggiornato di conseguenza utilizzando il pacchetto standard NMRA per scambi (basato anche su uno studio dei pacchetti dati Lenz / Atlas Compact per il controllo degli scambi).

Gli scambi T1 - T8 sono disponibili tramite il tasto 'B'

Vedere le istruzioni sul circuito del ricevitore del pacchetto di dati utilizzato e il codice Arduino richiesto.

Aggiornamento 18 gennaio 2016:

Ho aggiunto un resistore di rilevamento della corrente (1k5 ohm) e un condensatore (10 uf) al circuito e ho modificato il codice Arduino per interrompere l'alimentazione quando viene rilevata una corrente di picco di> 3200 mAmp. La specifica del ponte H indica una corrente di rilevamento in uscita di 377 uA per 1 Amp nel carico.

Il resistore da 1,5 k ohm fornirà 0,565 volt per Amp sul pin analogico 6. Con 1023 passi sull'ingresso analogico, questo dà 0,565 * 1023 / 5 = 116 per carico Amp.

A = 100 * (analogRead (AN_CURRENT)) / 116; A = A * 10; (per dare il risultato in milliampere)

La corrente di carico in milliampere viene visualizzata sul TFT

La tastiera completa 4x4 include funzioni da F1 a F8 e altre 10 locomotive (1-19) tramite il tasto '#' (per aggiungere 10 ai tasti numerici a partire dalla loco 10).

Il codice Arduino include lo standard NMRA per i byte di istruzione.

Vedi link

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

(pagina 6 è di particolare rilevanza)

I pacchetti sono organizzati in base al numero di passaggi di velocità, indirizzo lungo/corto e istruzioni del gruppo di funzioni.

Tutti i byte di istruzione sono preceduti da un preambolo di '1' bit 11111111 (o pacchetto inattivo) seguito da;

per esempio. Un indirizzo a 4 byte 0 00000011 0 00111111 0 10000011 0 10111111

equivale a loco 3, 128 passi di velocità, direzione avanti e passo di velocità 3 (il byte finale è il controllo errori XOR)

ad es. un indirizzo a 3 byte 0 00000011 0 10010000 0 10110011

equivale a loco 3, gruppo funzione 1, luci FL accese più byte XOR (un bit '0' separa ogni byte)

Vedere il video dimostrativo allegato per la loco 12.

Le funzioni F1 - F8 sono disponibili tramite il tasto 'A', DIR (tasto '*' = direzione) FL (tasto '0' = luci) e il tasto '#' indica le locomotive da 10 a 19 sul tastierino numerico. Il tasto 'D' è ora utilizzato per un 'STOP di emergenza'.

Grazie a vari provider sul web per le fonti di informazioni DCC e il codice Arduino.

In particolare, questo progetto è stato ispirato da Michael Blank e dal suo "Simple DCC - a command station"

www.oscale.net/en/simpledcc

Tastiera con interruttore a membrana a 16 tasti a matrice di matrice 4x4 (ebay) £ 1,75

Modulo display LCD TFT SPI seriale 240x320 da 2,2 pollici (ebay) £ 7,19

ADATTATORE AC ALIMENTATORE UNIVERSALE 12V 5A 60W (ebay) £6,49

Nano V3.0 per Arduino con CH340G 5V 16M compatibile ATmega328P (ebay) 2 x £ 3,30 = £ 6,60

Modulo driver motore LMD18200T per Arduino R3 (ebay) £ 6,99

Connettori, filo, scheda vero, potenziometro circa £ 3,50

Totale £ 32,52

La stazione di comando di base senza schermo tft e 1 x nano sarebbe £ 22,03

[Nota: è possibile aggiungere una scheda di memoria al display TFT e modificare il codice per visualizzare le immagini dei motori selezionati, sebbene i codici della libreria debbano essere modificati per creare più memoria per lo schizzo. La dimensione attuale dello schizzo è al massimo per il TFT Arduino Nano]

Il codice Arduino originale di Michael Blank era per un motore, solo avanti/indietro senza controllo delle funzioni, senza tastiera e senza display.

Ho modificato il codice per includere 1 - 19 motori, uno schermo di visualizzazione, direzione, luci, 8 funzioni, arresto di emergenza e limite di corrente automatico.

Il ponte LMD18200T può trasportare fino a 3 ampere, il che lo rende adatto a tutte le scale, inclusa la scala G (treni da giardino). L'alimentatore e l'elettronica sono adatti solo per uso interno a meno che non sia possibile renderlo resistente alle intemperie. Ho la stazione di comando nella casa estiva con i cavi di collegamento dei binari che corrono attraverso il muro fino ai binari.

Passaggio 1: codice Arduino - Stazione di comando con tastiera

I miei ringraziamenti a tvantenna2759 per aver segnalato 2 errori nello schema del circuito in cui il codice Arduino non corrispondeva al cablaggio, ora aggiornato (21 ottobre 2017).

Ora aggiunti 16 scambi alla stazione di comando. Vedi istruzioni sullo schema del circuito scambi / punti utilizzando il modulo Arduino Mini Pro.

Di seguito si allega il codice modificato comprensivo del controllo di affluenza.

Il pacchetto del decoder accessorio di base è: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 Dall'analisi del pacchetto utilizzato da Lenz (Compact / Atlas) per il controllo dei punti, ho utilizzato il seguente formato di pacchetto binario per i byte 1 e 2: tunAddr = 1 Turnout 1a: 1000 0001 1111 1000 / Scambio 1b: 1000 0001 1111 1001 Scambio 2a: 1000 0001 1111 1010 / Scambio 2b: 1000 0001 1111 1011 Scambio 3a: 1000 0001 1111 1100 / Scambio 3b: 1000 0001 1111 1101 Scambio 4a: 1000 0001 1111 1110 / Scambio 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------------------------------- --------------------------------------------------- ----------------- Scambi 5a: 1000 0010 1111 1000 / Scambi 5b: 1000 0010 1111 1001 Scambi 6a: 1000 0010 1111 1010 / Scambi 6b: 1000 0010 1111 1011 Scambi 7a: 1000 0010 1111 1100 / Scambi 7b: 1000 0010 1111 1101 Scambi 8a: 1000 0010 1111 1110 / Scambi 8b: 1000 0010 1111 1111 ----------------------- --------------------------------------------------- ----------------------------------- Affluenza 9a: 1000 0011 1111 1000 / Affluenza 9b: 1000 0011 1111 1001 ecc ………

Estratto dal codice modificato: aggiungi altri 2 messaggi 'struct' updatevoid modify_tun1 (struct Message & x) { x.data[0] = 0x81; // decoder accessorio 0x80 & indirizzo 1 x.data[1] = 0; }

void modify_tun2 (struct Message & x) { x.data[0] = 0x82; // decoder accessorio 0x80 & indirizzo 2 x.data[1] = 0; }

Aggiungi un nuovo vuoto per gli scambi: boolean read_turnout() { delay(20);

booleano change_t = falso; get_key();

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

dati = 0xf8; // = binario 1111 1000

emenda_tun1(msg[1]);

}

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

dati = 0xf8; // = binario 1111 1000

emenda_tun2(msg[1]);

}

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

if (tun1 == 1){

dati |= 0; //t1a

modificato_t = vero;}

if (tun1 == 0){

dati |= 0x01; // t1b

modificato_t = vero;}

}

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

if (tun2 == 1){

dati |= 0x02; //t2a

modificato_t = vero;

}

if (tun2 == 0){

dati |= 0x03; //t2b

modificato_t = vero; }

}

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

if (tun3 == 1){

dati |= 0x04; //t3a

modificato_t = vero;

}

if (tun3 == 0){

dati |= 0x05; //t3b

modificato_t = vero;}

}

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

if (tun4 == 1){

dati |= 0x06; //t4a

modificato_t = vero;

}

if (tun4 == 0){

dati |= 0x07; // f4b

modificato_t = vero;}

}

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

if (tun5 == 1){

dati |= 0; //t5a

modificato_t = vero;

}

if (tun5 == 0){

dati |= 0x01; //t5b

modificato_t = vero;}

}

eccetera ………………….

Passaggio 2: codice Arduino - Display TFT

Codice Arduino - Display TFT
Codice Arduino - Display TFT
Codice Arduino - Display TFT
Codice Arduino - Display TFT
Codice Arduino - Display TFT
Codice Arduino - Display TFT
Codice Arduino - Display TFT
Codice Arduino - Display TFT

Il circuito di visualizzazione rimane lo stesso con un codice modificato per mostrare lo stato dei 16 scambi. Nota: il codice della libreria occupa quasi tutta la memoria del codice schizzo, lasciando poco spazio per le nuove funzionalità. Se qualcuno ha un file di libreria più efficiente per il TFT utilizzato qui, per favore fatemelo sapere.

Passaggio 3: controllore di affluenza

Controllore di affluenza
Controllore di affluenza
Controllore di affluenza
Controllore di affluenza

Vedi istruzioni su come creare il controller Affluenza/Punti.

Il circuito completo controlla 16 punti e 15 accessori come luci, suoni, giradischi, ecc.

Consigliato: