Innholdsfortegnelse:

Garden Train - Arduino Wireless NMRA DCC: 4 trinn (med bilder)
Garden Train - Arduino Wireless NMRA DCC: 4 trinn (med bilder)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 trinn (med bilder)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 trinn (med bilder)
Video: Cheap and Amazing! DCC-EX 2 Years Later 2024, Juni
Anonim
Image
Image
Design av systemet
Design av systemet

I tillegg til tidligere instruksjoner med DCC på dead rail -system, har jeg utviklet ideen videre med en håndholdt DCC Command Station med tastatur og LCD -skjerm. Kommandostasjonen inneholder all kodingen som kreves for NMRA DCC -instruksjoner, men i stedet for å koble til skinnene, overføres dataene med radiomodul RF24L01+ til en mottaker montert i en lastebil eller under lokomotivet - hvor som helst rom tillater det.

Selvfølgelig må lokoene dine være utstyrt med en dekoder for lastekapasitet som passer motoren.

Trinn 1: Design av systemet

Design av systemet
Design av systemet

Arduino Pro Mini er kjernen i designet. Bruke Fritzing til å utvikle kretsen og til å produsere PCB.

Jeg klarte å bruke samme PCB for både sender og mottaker og sparte dermed noen kostnader.

Senderen har tilkoblinger for tastatur og LCD mens mottakeren ikke krever disse og bruker H-broen til å forsyne DCC-utgangen for loket.

En videre utvikling inkluderer tilkoblinger for en større H-bro hvis det er nødvendig for kraftigere lokomotiv.

PCF8574 kan slettes hvis du bruker en LCD -skjerm som følger med ryggsekken, slik at SCA / SCL -tilkoblinger på Arduino kan mate skjermen med bare 2 ledninger. Deleliste: Total = ca. £ 60 for DCC Command Station + 1 mottaker Ekstra mottakere koster = £ 10,00 omtrent hver. + batterier

Arduino Pro Mini. x 2 = £ 4,00

4x3 membran tastatur = £ 3,00

20 x 4 LCD -skjerm = £ 7,00

PCF5874 = £ 1,80

NRF24L01+. radiomoduler x 2 = £ 5,80

PCB -produksjon for 10 av (eller Vero -brett kan brukes) = £ 24 eller £ 4,80 for 2off

3.3 v Regulator = £ 0.17 (pakke med 25 fra RS Comp)

5v regulator LM7805 = £ 0,30

H-bridge SN754410ne = £ 3,00

Lloytron ladbare 2700 maH AA-batterier x 12 = £ 22,00. (lavere Mah -batterier er billigere)

Kondensatorer, gryter, pinner, kontakter, etc = £ 2,00 ca.

Kapsling 190x110x60 mm = £ 8,00

Sender - telefonlader / batteri = £ 2,00

Trinn 2: Sender

Sender
Sender

Kretsdiagrammet er vist der D2 til D8 -pinner på Arduino Pro Mini er koblet til tastaturet. Et 100k ohm potensiometer er koblet til analog pin A0 for hastighetsjustering. SDA- og SCL -pinnene fra PCF8574 -brikken er koblet til pinnene A4 og A5 på Arduino Pro Mini ved hjelp av loddede ledninger til pinnene på det øverste laget av Pro Mini.

Arduino -skissen er vedlagt for nedlasting.

Jeg har brukt en 20 x 4 LCD -skjerm som tillater 4 linjer med informasjon med 20 tegn per linje. Tastaturet inneholder følgende meny:

1 til 9 = lokoadresse * = retning 0 = lys # = funksjonsmeny for tastene 1 til 8

Grunnleggende beskrivelse av Arduino Pro Mini -skisse: Denne linjen i koden ordner DCC -meldingen i HEX -format. struct Message msg [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // inaktiv melding

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 byte -adresse

};

For å lagre innstillingene for hvert loko, er en serie matriser satt opp som følger:

int la [20]; // array for å holde lokonumre

int sa [20]; // array for å holde hastighetsverdier

int fda [20]; // array for å holde dir

int fla [20]; // array for å holde lys

int f1a [20]; // array for å holde moro1…..

int f8a [20]; // array for å holde fun8

Slik gjør du det mulig å endre DCC -instruksjonene mens vi går:

For hastighetsinstruksjoner: void amend_speed (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // locoMsg med 28 hastighetstrinn}

For funksjonsinstruksjoner:

ugyldig amend_group1 (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg med gruppe en instruksjon 0x80}

Skissens hovedløkke:

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

send_data_1 (); // sende data med trådløs

forsinkelse (10);

send_data_3 (); // vise data på LCD -skjerm

send_data_4 (); // vise data på seriell skjerm}

hvis (read_function ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

forsinkelse (10);

send_data_3 (); }}

Oppdater data når hastigheten endres:

boolsk read_locoSpeed () Dette oppdager en ny loco -adresse, hastighet eller retningsinnstilling og endrer HEX 'data' tilsvarende. Her har jeg angitt 28 hastighetstrinn og for å oppfylle NMRA standard S 9.2 må hastighetsdataene bli funnet fra en oppslagstabell i 'speed_step ()'

void speed_step () {switch (locoSpeed) {

tilfelle 1: data | = 0x02; gå i stykker;

tilfelle 2: data | = 0x12; gå i stykker;

sak 3: data | = 0x03; gå i stykker;

………

sak 28: data | = 0x1F; gå i stykker; }}

Oppdater data når funksjonene endres:

boolsk read_function ()

hvis (fla [locoAdr] == 0) {data = 0x80;

} // hodelyktene er slått av

hvis (fla [locoAdr] == 1) {

data = 0x90;

} // frontlys lyser

For hver funksjon:

hvis (f2a [locoAdr] == 0) {data | = 0; }. // Funksjon 2 av

hvis (f2a [locoAdr] == 1) {

data | = 0x02; // Funksjon 2 på} 'data' bygges opp ved å kombinere ['| =' sammensatt bitvis eller] HEX -kodene for hver funksjon.

Trinn 3: Mottaker

Mottaker
Mottaker

Kretsdiagrammet er vist der pinne 5 og 6 på Arduino Pro Mini brukes til å gi DCC-signalet som leveres til H-broen. H-broparene kobles parallelt for å øke strømkapasiteten. Avhengig av strømmen som lokket trekker, kan det være nødvendig å koble en kjøleribbe til 16-pins DIP-enheten, eller en kraftig H-bro kan kobles eksternt.

Arduino -skissen er vedlagt for nedlasting. DCC -signalet består av en klokke som går på 2 MHz

void SetupTimer2 () gjør denne jobben.

Klokken inkluderer 'korte pulser' (58us) for '1' i DCC -data og 'lange pulser' (116us) for '0' i DCC -data.

Sløyfen er tom, får data fra radioen, og hvis en gyldig streng blir funnet, blir dataene konvertert til DCC -data.

void loop (void) {if (radio.available ()) {bool done = false; ferdig = radio.read (inmsg, 1); // les de mottatte dataene

røye rc = inmsg [0]; // sette tegn som er lest inn i denne matrisen

hvis (rc! = 0) {. // hvis tegnet ikke er lik null

inString.concat (rc); // bygge opp meldingen}

if (rc == '\ 0') {// hvis tegnet er '/0' slutten av meldingen

Serial.println (inString); // Skriv ut den samlede meldingen

string (); // avkonstruer strengmeldingen for å få DCC-instruksjoner

} } }

Trinn 4: Kjør Locos

Kjør Locos
Kjør Locos

For å unngå avbrudd i data fra å kjøre flere tog på samme spor, må du koble fra kontaktene mellom hjulene og sporet for hver loko og lastebil som brukes.

Nyt gratis løpende tog uansett baneforhold - hvilken forskjell! Ingen problemer, ingen start-stopp og ingen rengjøring nødvendig.

Batteriene jeg brukte er gjenoppladbare LLoytron AA x 12. Jeg har laget en lader spesielt for dem som lader 6 om gangen. (se instruksjonsboken)

Anbefalt: