Taula de continguts:

Garden Train - Arduino Wireless NMRA DCC: 4 passos (amb imatges)
Garden Train - Arduino Wireless NMRA DCC: 4 passos (amb imatges)

Vídeo: Garden Train - Arduino Wireless NMRA DCC: 4 passos (amb imatges)

Vídeo: Garden Train - Arduino Wireless NMRA DCC: 4 passos (amb imatges)
Vídeo: Cheap and Amazing! DCC-EX 2 Years Later 2024, Desembre
Anonim
Image
Image
Disseny de sistema
Disseny de sistema

Més enllà de les instruccions anteriors sobre DCC sobre un sistema de ferrocarril mort, he desenvolupat la idea amb una estació de comandament DCC de mà amb teclat i pantalla LCD. L'Estació de Comandament conté tota la codificació necessària per a les instruccions NMRA DCC, però en lloc de connectar-se als rails, les dades es transfereixen mitjançant el mòdul de ràdio RF24L01 + a un receptor muntat en un camió o sota la locomotora, sempre que l'habitació ho permeti.

Per descomptat, les locomotores han d’estar equipades amb un descodificador de capacitat de càrrega adequat als motors del motor.

Pas 1: Disseny del sistema

Disseny de sistema
Disseny de sistema

L’Arduino Pro Mini és el centre del disseny. Utilitzant Fritzing per desenvolupar el circuit i produir PCB.

Vaig poder utilitzar el mateix PCB tant per al transmissor com per al receptor, estalviant així alguns costos.

El transmissor té connexions per al teclat i la pantalla LCD, mentre que el receptor no els requereix i utilitza el pont H per subministrar la sortida DCC de la locomotora.

Un altre desenvolupament inclou connexions per a un pont H més gran si es requereix per a locomotores més potents.

El PCF8574 es pot suprimir si utilitzeu una pantalla LCD que inclou la motxilla que permet que les connexions SCA / SCL de l’Arduino alimentin la pantalla mitjançant només dos cables. = 10,00 £ aproximadament cadascun. + bateries

Arduino Pro Mini. x 2 = 4,00 GBP

Teclat de membrana 4x3 = 3,00 £

Pantalla LCD de 20 x 4 = 7,00 GBP

PCF5874 = 1,80 GBP

NRF24L01 +. mòduls de ràdio x 2 = 5,80 GBP

Fabricació de PCB per 10 descomptes (o es pot utilitzar una placa Vero) = 24 lliures o 4,80 lliures per 2 descomptes

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

Regulador 5V LM7805 = 0,30 GBP

Pont H754410ne = 3,00 GBP

Lloytron recarregable amb bateries AA de 2700 maH x 12 = 22,00 £. (les bateries amb una classificació MAH més baixa són més barates)

Condensadors, olles, pins, connectors, etc. = 2,00 £ aprox

Tanc 190x110x60 mm = 8,00 £

Transmissor: carregador / bateria del telèfon = 2,00 GBP

Pas 2: transmissor

Emissor
Emissor

Es mostra el diagrama del circuit on es connecten els pins D2 a D8 de l’Arduino Pro Mini al teclat. Un potenciòmetre de 100 k ohm està connectat al pin analògic A0 per ajustar la velocitat. Els pins SDA i SCL del xip PCF8574 estan connectats als pins A4 i A5 a l'Arduino Pro Mini mitjançant cables soldats als passadors de la capa superior del Pro Mini.

S'adjunta l'esbós d'Arduino per descarregar-lo.

He utilitzat una pantalla LCD de 20 x 4 que permet 4 línies d’informació amb 20 caràcters per línia. El teclat proporciona el menú següent:

1 a 9 = adreça loco * = direcció 0 = llums # = Menú de funcions de les tecles 1 a 8

Descripció bàsica de l'esbós d'Arduino Pro Mini: Aquesta línia del codi organitza el missatge DCC en format HEX. struct Missatge msg [MAXMSG] = {

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

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // adreça de 3 bytes

};

Per emmagatzemar la configuració de cada loco, es configuren una sèrie de matrius de la següent manera:

int la [20]; // array per contenir números loco

int sa [20]; // matriu per mantenir els valors de velocitat

int fda [20]; // matriu per contenir dir

int fla [20]; // matriu per contenir llums

int f1a [20]; // matriu per contenir fun1 …..

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

Per permetre que es modifiquin les instruccions DCC a mesura que avancem:

Per obtenir instruccions de velocitat: void amend_speed (struct Message & x) {

x.data [0] = locoAdr;

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

Per a instruccions sobre la funció:

void amend_group1 (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg amb la instrucció del grup 1 0x80}

El bucle principal de l'esbós:

bucle buit (buit) {if (read_locoSpeed ()) {assemble_dcc_msg_speed ();

enviar_dades_1 (); // enviar dades sense fils

retard (10);

enviar_dades_3 (); // mostra les dades a la pantalla LCD

enviar_dades_4 (); // mostrar dades al monitor sèrie}

if (read_function ()) {

assemble_dcc_msg_group1 ();

enviar_dades_1 ();

retard (10);

enviar_dades_3 (); }}

Actualitzeu les dades quan canviï la velocitat:

boolean read_locoSpeed () Detecta una nova adreça loco, configuració de velocitat o direcció i modifica les "dades" HEX en conseqüència. Aquí he especificat 28 passos de velocitat i per complir amb l'estàndard NMRA S 9.2, les dades de velocitat s'han de trobar en una taula de cerca a 'speed_step ()'

void speed_step () {switch (locoSpeed) {

cas 1: dades | = 0x02; trencar;

cas 2: dades | = 0x12; trencar;

cas 3: dades | = 0x03; trencar;

………

cas 28: dades | = 0x1F; trencar; }}

Actualitzeu les dades quan canviïn les funcions:

funció de lectura booleana ()

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

} // els llums del cap s’apaguen

if (fla [locoAdr] == 1) {

dades = 0x90;

} // llums del cap encès

Per a cada funció:

if (f2a [locoAdr] == 0) {dades | = 0; }. // Funció 2 desactivada

if (f2a [locoAdr] == 1) {

dades | = 0x02; // La funció 2 de} 'data' es crea combinant ['| =' compost a bits o] els codis HEX de cada funció.

Pas 3: receptor

Receptor
Receptor

Es mostra el diagrama del circuit on s’utilitzen els pins 5 i 6 de l’Arduino Pro Mini per proporcionar el senyal DCC subministrat al pont H. Els parells pont H estan connectats en paral·lel per augmentar la capacitat de corrent. Depenent del corrent generat per la locomotora, és possible que calgui connectar un dissipador de calor al dispositiu DIP de 16 pins, o bé es pot connectar externament un pont H de gran resistència.

S'adjunta l'esbós d'Arduino per descarregar-lo. El senyal DCC es compon d'un rellotge que funciona a 2 MHz

void SetupTimer2 () fa aquest treball.

El rellotge inclou "polsos curts" (58us) per a "1" a les dades DCC i "polsos llargs" (116us) per a "0" a les dades DCC.

El bucle buit, obté dades de la ràdio i, si es troba una cadena vàlida, les dades es converteixen en dades DCC.

bucle buit (buit) {if (radio.available ()) {bool done = false; fet = radio.read (inmsg, 1); // llegir les dades rebudes

char rc = inmsg [0]; // posa el caràcter llegit en aquesta matriu

if (rc! = 0) {. // si el caràcter no és igual a zero

inString.concat (rc); // acumula el missatge}

if (rc == '\ 0') {// si el caràcter és '/ 0' final del missatge

Serial.println (inString); // imprimeix el missatge reunit

string (); // desconstrueix el missatge de cadena per obtenir instruccions de DCC

} } }

Pas 4: executeu Locos

Executeu les locomotores
Executeu les locomotores

Per evitar la interrupció de les dades de la circulació de diversos trens a la mateixa via, heu de desconnectar els contactes entre les rodes i la via per a cada loco i camió emprat.

Gaudeix de trens en circulació gratuïts independentment de les condicions de la via. Quina diferència! Sense molèsties, sense arrencada i sense necessitat de neteja.

Les bateries que he fet servir són recarregables LLoytron AA x 12. He construït un carregador especialment per a elles que carrega 6 a la vegada. (veure instructiu)

Recomanat: