Taula de continguts:

Model Railway - DCC Command Station utilitzant Arduino :: 3 passos
Model Railway - DCC Command Station utilitzant Arduino :: 3 passos

Vídeo: Model Railway - DCC Command Station utilitzant Arduino :: 3 passos

Vídeo: Model Railway - DCC Command Station utilitzant Arduino :: 3 passos
Vídeo: Building a DCC-EX Command Station for My Model Railroad 2024, De novembre
Anonim
Image
Image
Codi Arduino - Estació de comandament amb teclat
Codi Arduino - Estació de comandament amb teclat

Actualitzat a l'agost de 2018: consulteu la nova instrucció:

Actualització 28 d'abril de 2016: ara hi ha 16 punts de participació / capacitat de control de punts a Command Station. Les participacions T1 - T8 estan disponibles mitjançant la tecla "B" Les participacions T9 - T16 estan disponibles mitjançant la tecla "C"

Actualització del 10 de març de 2016:

Ara s'ha afegit la capacitat de control de 8 punts de participació a la Command Station. El codi Arduino s’ha actualitzat en conseqüència mitjançant el paquet estàndard NMRA per a participacions (també basat en un estudi de paquets de dades Lenz / Atlas Compact per al control de participació).

Les participacions T1 - T8 estan disponibles mitjançant la tecla "B"

Vegeu informació sobre el circuit de receptors de paquets de dades utilitzat i el codi Arduino necessari.

Actualització 18 de gener de 2016:

He afegit una resistència de detecció de corrent (1k5 ohm) i un condensador (10 uf) al circuit i he modificat el codi Arduino per tallar l'alimentació quan es detecta un corrent màxim de> 3200 mAmps. Les especificacions del pont H indiquen un corrent de sortida de 377 uA per 1 Amp a la càrrega.

La resistència d'1,5 k ohmis proporcionarà 0,565 volts per amperi al pin analògic 6. Amb 1023 passos a l'entrada analògica, això proporciona 0,565 * 1023/5 = 116 per càrrega d'amper.

A = 100 * (analogRead (AN_CURRENT)) / 116; A = A * 10; (per donar resultat en miliamperis)

El corrent de càrrega en miliamperis es mostra al TFT

El teclat 4x4 complet inclou funcions de F1 a F8 i altres 10 locomotores (1-19) mitjançant la tecla '#' (per afegir 10 a les tecles numèriques a partir de la locomotora 10).

El codi arduino inclou l'estàndard NMRA per als bytes d'instrucció.

Veure enllaç

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

(la pàgina 6 té una rellevància especial)

Els paquets es disposen segons el nombre de passos de velocitat, l'adreça llarga / curta i les instruccions del grup de funcions.

Tots els bytes d'instruccions van precedits d'un preàmbul de bits '1' 11111111 (o paquet inactiu) seguit de;

per exemple. Una adreça de 4 bytes 0 00000011 0 00111111 0 10000011 0 10111111

equival a loco 3, 128 passos de velocitat, direcció cap endavant i pas 3 de velocitat (el byte final és la comprovació d'errors XOR)

per exemple, una adreça de 3 bytes 0 00000011 0 10010000 0 10110011

equival a loco 3, grup de funcions 1, llums FL activats més byte XOR (un bit '0' separa cada byte)

Vegeu el vídeo de demostració adjunt del loco 12.

Les funcions F1 - F8 estan disponibles mitjançant la tecla "A", la tecla DIR (tecla "*" = direcció) FL (la tecla "0" = llums) i la tecla "#" dóna locos de 10 a 19 al teclat numèric. La tecla "D" ara s'utilitza per a una "parada d'emergència".

Gràcies a diversos proveïdors del web per obtenir fonts d'informació DCC i codi Arduino.

En particular, aquest projecte es va inspirar en Michael Blank i el seu "Simple DCC - a command station"

www.oscale.net/en/simpledcc

Teclat de commutació de membrana de 4 tecles Matrix Array 16 (ebay) 1,75 €

Mòdul de pantalla LCD SPI TFT de 2,2 polzades 240x320 (ebay) 7,19 €

ADAPTADOR DE CA D'ALIMENTACIÓ 12V 5A 60W UNIVERSAL (ebay) 6,49 €

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

Mòdul de controlador de motor LMD18200T per a Arduino R3 (ebay) 6,99 €

Connectors, filferro, placa vera, potenciòmetre aproximadament 3,50 £

Total 32,52 GBP

L'estació de comandament bàsica sense pantalla tft i 1 x nano seria de 22,03 £

[Nota: és possible afegir una targeta de memòria a la pantalla TFT i modificar el codi per mostrar les imatges dels motors seleccionats, tot i que els codis de la biblioteca s'han d'editar per crear més memòria per a l'esbós. La mida actual de l’esbós és màxima per al TFT Arduino Nano]

El codi original d'Arduino de Michael Blank era per a un motor, només endavant / enrere, sense control de funcions, teclat ni pantalla.

He modificat el codi per incloure motors 1-19, pantalla de pantalla, direcció, llums, 8 funcions, parada d'emergència i límit de corrent automàtic.

El pont LMD18200T pot transportar fins a 3 amperes, cosa que el fa adequat per a totes les escales, incloses les escales G (trens de jardí). La font d'alimentació i l'electrònica són adequats només per a ús a l'interior, tret que pugueu fer-ho a prova de temps. Tinc l’estació de comandament a la casa d’estiu amb cables de connexió de ferrocarril que passen per la paret fins a la via.

Pas 1: Codi Arduino: estació de comandament amb teclat

El meu agraïment a tvantenna2759 per assenyalar 2 errors al diagrama del circuit on el codi Arduino no coincidia amb el cablejat, actualitzat ara (21 d'octubre de 2017).

Ara s’han afegit 16 participacions a Command Station. Consulteu el diagrama del circuit de punts de participació / instruccions mitjançant el mòdul Arduino Mini Pro.

A continuació s’adjunta el codi modificat que inclou el control de participació.

El paquet de descodificador d'accessoris bàsics és: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 D'analitzar el paquet utilitzat per Lenz (Compact / Atlas) per al control de punts, he utilitzat el següent format de paquet binari per als bytes 1 i 2: tunAddr = 1 Participació 1a: 1000 0001 1111 1000 / Participació 1b: 1000 0001 1111 1001 Participació 2a: 1000 0001 1111 1010 / Participació 2b: 1000 0001 1111 1011 Participació 3a: 1000 0001 1111 1100 / Participació 3b: 1000 0001 1111 1101 Participació 4a: 1000 0001 1111 1110 / Participació 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------------------------------- -------------------------------------------------- ----------------- Participació 5a: 1000 0010 1111 1000 / Participació 5b: 1000 0010 1111 1001 Participació 6a: 1000 0010 1111 1010 / Participació 6b: 1000 0010 1111 1011 Participació 7a: 1000 0010 1111 1100 / Participació 7b: 1000 0010 1111 1101 Participació 8a: 1000 0010 1111 1110 / Participació 8b: 1000 0010 1111 1111 ----------------------- -------------------------------------------------- ---------------------------------- Participació 9a: 1000 0011 1111 1000 / Participació 9b: 1000 0011 1111 1001 etc ………

Extracte del codi modificat: afegiu 2 actualitzacions de missatges 'struct' mésvoid amend_tun1 (struct Message & x) {x.data [0] = 0x81; // descodificador d'accessoris 0x80 i adreça 1 x.data [1] = 0; }

void esmenar_tun2 (struct Missatge & x) {x.data [0] = 0x82; // descodificador d'accessoris 0x80 i adreça 2 x.data [1] = 0; }

Afegiu un buit nou per a les participacions: read_turnout boolean () {delay (20);

booleà canviat_t = fals; get_key ();

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

dades = 0xf8; // = binari 1111 1000

esmenar_tun1 (msg [1]);

}

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

dades = 0xf8; // = 1111 1000 binari

esmenar_tun2 (msg [1]);

}

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

if (tun1 == 1) {

dades | = 0; // t1a

canviat_t = cert;}

if (tun1 == 0) {

dades | = 0x01; // t1b

canviat_t = cert;}

}

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

if (tun2 == 1) {

dades | = 0x02; // t2a

canviat_t = cert;

}

if (tun2 == 0) {

dades | = 0x03; // t2b

canviat_t = cert; }

}

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

if (tun3 == 1) {

dades | = 0x04; // t3a

canviat_t = cert;

}

if (tun3 == 0) {

dades | = 0x05; // t3b

canviat_t = cert;}

}

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

if (tun4 == 1) {

dades | = 0x06; // t4a

canviat_t = cert;

}

if (tun4 == 0) {

dades | = 0x07; // f4b

canviat_t = cert;}

}

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

if (tun5 == 1) {

dades | = 0; // t5a

canviat_t = cert;

}

if (tun5 == 0) {

dades | = 0x01; // t5b

canviat_t = cert;}

}

etc ………………….

Pas 2: Codi Arduino: pantalla TFT

Codi Arduino: pantalla TFT
Codi Arduino: pantalla TFT
Codi Arduino: pantalla TFT
Codi Arduino: pantalla TFT
Codi Arduino: pantalla TFT
Codi Arduino: pantalla TFT
Codi Arduino: pantalla TFT
Codi Arduino: pantalla TFT

El circuit de visualització continua sent el mateix amb un codi modificat per mostrar l’estat de les 16 participacions. Nota: el codi de la biblioteca ocupa gairebé tota la memòria del codi d'esbós deixant poc espai per a les noves funcions. Si algú té un fitxer de biblioteca més eficient per al TFT utilitzat aquí, feu-me-ho saber.

Pas 3: controlador de participació

Controlador de participació
Controlador de participació
Controlador de participació
Controlador de participació

Consulteu instruccions sobre com configurar el controlador de participació / punts.

El circuit complet controla 16 punts i 15 accessoris com llums, sons, plat giratori, etc.

Recomanat: