Indholdsfortegnelse:

Havetog - Arduino Wireless NMRA DCC: 4 trin (med billeder)
Havetog - Arduino Wireless NMRA DCC: 4 trin (med billeder)

Video: Havetog - Arduino Wireless NMRA DCC: 4 trin (med billeder)

Video: Havetog - Arduino Wireless NMRA DCC: 4 trin (med billeder)
Video: Speed Profiling Station with Arduino / DCC EX (Video#116) 2024, November
Anonim
Image
Image
Design af system
Design af system

I forlængelse af tidligere instruktioner med DCC på dead rail -system har jeg udviklet ideen yderligere med en håndholdt DCC Command Station med tastatur og LCD -display. Kommandostationen indeholder al den kodning, der kræves til NMRA DCC -instruktioner, men i stedet for at oprette forbindelse til skinnerne, overføres dataene med radiomodul RF24L01+ til en modtager monteret i en lastbil eller under lokomotivet - hvor som helst rummet tillader det.

Selvfølgelig skal dine lokoer være udstyret med en dekoder af belastningsevne, der passer til motorens motorer.

Trin 1: Design af system

Design af system
Design af system

Arduino Pro Mini er kernen i designet. Brug af Fritzing til at udvikle kredsløbet og til at producere printkort.

Jeg var i stand til at bruge det samme printkort til både sender og modtager, hvilket sparer nogle omkostninger.

Senderen har forbindelser til tastatur og LCD, mens modtageren ikke kræver disse og bruger H-broen til at levere DCC-udgangen til lokomotivet.

En yderligere udvikling omfatter forbindelser til en større H-bro, hvis det kræves for mere kraftfulde lokomotiver.

PCF8574 kan slettes, hvis du bruger en LCD -skærm, der følger med rygsækken, så SCA / SCL -forbindelser på Arduino kan føde skærmen ved hjælp af kun 2 ledninger. = £ 10,00 ca. hver. + batterier

Arduino Pro Mini. x 2 = £ 4,00

4x3 membran tastatur = £ 3,00

20 x 4 LCD -display = £ 7,00

PCF5874 = £ 1,80

NRF24L01+. radiomoduler x 2 = £ 5,80

PCB fremstilling til 10 off (eller Vero board kan bruges) = £ 24 eller £ 4,80 for 2off

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

5v Regulator LM7805 = 0,30 kr

H-bro SN754410ne = £ 3,00

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

Kondensatorer, gryder, stifter, stik osv. = £ 2,00 ca.

Kabinet 190x110x60 mm = £ 8,00

Sender - telefonoplader / batteri = £ 2,00

Trin 2: Senderen

Senderen
Senderen

Kredsløbsdiagrammet er vist, hvor D2 til D8 ben på Arduino Pro Mini er forbundet til tastaturet. Et 100k ohm potentiometer er forbundet til analog pin A0 for hastighedsjustering. SDA og SCL benene fra PCF8574 chippen er forbundet til ben A4 og A5 på Arduino Pro Mini ved hjælp af lodde ledninger til benene på det øverste lag af Pro Mini.

Arduino -skitsen er vedhæftet til download.

Jeg har brugt et 20 x 4 LCD -display, der tillader 4 linjer information med 20 tegn pr. Linje. Tastaturet indeholder følgende menu:

1 til 9 = loco -adresse * = retning 0 = lys # = funktionsmenu for tasterne 1 til 8

Grundlæggende beskrivelse af Arduino Pro Mini sketch: Denne linje i koden arrangerer DCC -beskeden i HEX -format. struct Message msg [MAXMSG] = {

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

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

};

For at gemme indstillingerne for hvert loko opsættes en række arrays som følger:

int la [20]; // array til at holde loco -numre

int sa [20]; // array til at holde hastighedsværdier

int fda [20]; // array til at holde dir

int fla [20]; // array til at holde lys

int f1a [20]; // array for at holde det sjovt1…..

int f8a [20]; // array til at holde fun8

For at gøre det muligt at ændre DCC -instruktionerne, mens vi går:

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

x.data [0] = locoAdr;

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

For funktionsinstruktioner:

ugid amend_group1 (struct Message & x) {

x.data [0] = locoAdr;

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

Skitsens hovedsløjfe:

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

send_data_1 (); // sende data trådløst

forsinkelse (10);

send_data_3 (); // vis data på LCD display

send_data_4 (); // vis data på seriel skærm}

hvis (read_function ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

forsinkelse (10);

send_data_3 (); }}

Opdater data, når hastigheden ændres:

boolsk read_locoSpeed () Dette registrerer en ny loco adresse, hastighed eller retning og ændrer HEX 'data' i overensstemmelse hermed. Her har jeg angivet 28 hastighedstrin og for at opfylde NMRA standard S 9.2 skal hastighedsdataene findes fra en opslagstabel i 'speed_step ()'

void speed_step () {switch (locoSpeed) {

case 1: data | = 0x02; pause;

case 2: data | = 0x12; pause;

case 3: data | = 0x03; pause;

………

case 28: data | = 0x1F; pause; }}

Opdater data, når funktionerne ændres:

boolsk read_function ()

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

} // forlygter slukket

hvis (fla [locoAdr] == 1) {

data = 0x90;

} // forlygter tændt

For hver funktion:

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

hvis (f2a [locoAdr] == 1) {

data | = 0x02; // Funktion 2 på} 'data' opbygges ved at kombinere ['| =' sammensat bitvis eller] HEX -koderne for hver funktion.

Trin 3: Modtager

Modtager
Modtager

Kredsløbsdiagrammet er vist, hvor ben 5 og 6 i Arduino Pro Mini bruges til at levere DCC-signalet, der leveres til H-broen. H-broparret er forbundet parallelt for at øge strømkapaciteten. Afhængigt af strømmen trukket af lokomotivet kan det være nødvendigt at tilslutte en kølelegeme til 16-pin DIP-enheden, eller en kraftig H-bro kan tilsluttes eksternt.

Arduino -skitsen er vedhæftet til download. DCC -signalet består af et ur, der kører ved 2MHZ

void SetupTimer2 () udfører dette job.

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

Loop -tomrummet, får data fra radioen, og hvis der findes en gyldig streng, konverteres dataene til DCC -data.

void loop (void) {if (radio.available ()) {bool done = false; udført = radio.read (inmsg, 1); // læs de modtagne data

char rc = inmsg [0]; // sætte tegnlæsning i dette array

hvis (rc! = 0) {. // hvis tegn ikke er lig med nul

inString.concat (rc); // opbyg beskeden}

hvis (rc == '\ 0') {// hvis tegnet er '/0' slutningen af meddelelsen

Serial.println (inString); // udskriv den samlede besked

snor(); // de-konstruere strengmeddelelsen for at få DCC-instruktioner

} } }

Trin 4: Kør Locos

Kør Locos
Kør Locos

For at undgå afbrydelse af data fra at køre flere tog på det samme spor, skal du afbryde kontakterne mellem hjulene og sporet for hver loko og lastbil, der bruges.

Nyd gratis kørende tog uanset baneforhold - hvilken forskel! Ingen besvær, ingen start-stop og ingen rengøring påkrævet.

De batterier, jeg brugte, kan genoplades LLoytron AA x 12. Jeg har specielt bygget en oplader til dem, der oplader 6 ad gangen. (se instruerbar)

Anbefalede: