Innehållsförteckning:

Trädgårdståg - Arduino Wireless NMRA DCC: 4 steg (med bilder)
Trädgårdståg - Arduino Wireless NMRA DCC: 4 steg (med bilder)

Video: Trädgårdståg - Arduino Wireless NMRA DCC: 4 steg (med bilder)

Video: Trädgårdståg - Arduino Wireless NMRA DCC: 4 steg (med bilder)
Video: #4.c - Adding Wi-Fi to DCC-EX 2024, Juni
Anonim
Image
Image
Design av systemet
Design av systemet

Utöver tidigare instruktioner med DCC på dead rail -system har jag utvecklat idén ytterligare med en handhållen DCC Command Station med knappsats och LCD -display. Kommandostationen innehåller all kodning som krävs för NMRA DCC -instruktioner, men i stället för att ansluta till skenorna överförs data med radiomodul RF24L01+ till en mottagare monterad i en lastbil eller under lokomotivet - när rummet tillåter det.

Naturligtvis måste dina loko vara utrustade med en avkodare för lastförmåga som passar motorns motorer.

Steg 1: Design av systemet

Design av systemet
Design av systemet

Arduino Pro Mini är kärnan i designen. Använda Fritzing för att utveckla kretsen och för att producera PCB.

Jag kunde använda samma kretskort för både sändare och mottagare, vilket sparar några kostnader.

Sändaren har anslutningar för knappsats och LCD medan mottagaren inte kräver dessa och använder H-bron för att leverera DCC-utgången för loket.

En vidareutveckling inkluderar anslutningar för en större H-bro om det behövs för mer kraftfulla lok.

PCF8574 kan raderas om du använder en LCD -skärm som medföljer ryggsäcken så att SCA / SCL -anslutningar på Arduino kan mata skärmen med endast 2 trådar. = £ 10,00 ungefär var. + batterier

Arduino Pro Mini. x 2 = £ 4,00

4x3 membranknappsats = £ 3,00

20 x 4 LCD -skärm = £ 7,00

PCF5874 = £ 1,80

NRF24L01+. radiomoduler x 2 = £ 5,80

PCB -tillverkning för 10 rabatter (eller Vero -kort kan användas) = £ 24 eller £ 4,80 för 2off

3.3 v Regulator = £ 0.17 (25 -pack från RS Comp)

5v Regulator LM7805 = £ 0,30

H-bridge SN754410ne = £ 3,00

Lloytron laddningsbara 2700 maH AA-batterier x 12 = £ 22,00. (batterier med lägre maH är billigare)

Kondensatorer, krukor, stift, kontakter, etc = £ 2,00 ca.

Kapsling 190x110x60 mm = £ 8,00

Sändare - telefonladdare / batteri = £ 2,00

Steg 2: Sändare

Sändare
Sändare

Kopplingsschemat visas där D2 till D8 -stiften på Arduino Pro Mini är anslutna till knappsatsen. En 100k ohm potentiometer är ansluten till analog stift A0 för hastighetsjustering. SDA- och SCL -stiften från PCF8574 -chipet är anslutna till stift A4 och A5 på Arduino Pro Mini med hjälp av lödda trådar till stiften på det övre lagret på Pro Mini.

Arduino -skissen bifogas för nedladdning.

Jag har använt en 20 x 4 LCD -skärm som tillåter 4 rader information med 20 tecken per rad. Knappsatsen innehåller följande meny:

1 till 9 = loco -adress * = riktning 0 = lampor # = funktionsmeny för knapparna 1 till 8

Grundläggande beskrivning av Arduino Pro Mini -skiss: Denna rad i koden ordnar DCC -meddelandet 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 -adress

};

För att lagra inställningarna för varje lok, ställs en serie matriser upp enligt följande:

int la [20]; // array för att hålla lokonummer

int sa [20]; // array för att hålla hastighetsvärden

int fda [20]; // array för att hålla dir

int fla [20]; // array för att hålla lampor

int f1a [20]; // array för att hålla fun1 …..

int f8a [20]; // array för att hålla fun8

Så här kan du ändra DCC -instruktionerna när vi går:

För hastighetsinstruktioner: void amend_speed (struct Message & x) {

x.data [0] = locoAdr;

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

För funktionsinstruktioner:

void amend_group1 (struct Message & x) {

x.data [0] = locoAdr;

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

Skissens huvudslinga:

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

send_data_1 (); // skicka data trådlöst

fördröjning (10);

send_data_3 (); // visa data på LCD -skärmen

send_data_4 (); // visa data på seriell bildskärm}

if (read_function ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

fördröjning (10);

send_data_3 (); }}

Uppdatera data när hastigheten ändras:

boolean read_locoSpeed () Detta detekterar en ny loco -adress, hastighet eller riktningsinställning och ändrar HEX 'data' i enlighet därmed. Här har jag angett 28 hastighetssteg och för att uppfylla NMRA standard S 9.2 måste hastighetsdata hittas från en uppslagstabell i 'speed_step ()'

void speed_step () {switch (locoSpeed) {

fall 1: data | = 0x02; ha sönder;

fall 2: data | = 0x12; ha sönder;

fall 3: data | = 0x03; ha sönder;

………

fall 28: data | = 0x1F; ha sönder; }}

Uppdatera data när funktionerna ändras:

boolsk read_function ()

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

} // strålkastare släckt

if (fla [locoAdr] == 1) {

data = 0x90;

} // strålkastare tänd

För varje funktion:

if (f2a [locoAdr] == 0) {data | = 0; }. // Funktion 2 avstängd

if (f2a [locoAdr] == 1) {

data | = 0x02; // Funktion 2 på} 'data' byggs upp genom att kombinera ['| =' sammansatt bitvis eller] HEX -koderna för varje funktion.

Steg 3: Mottagare

Mottagare
Mottagare

Kretsschemat visas där stiften 5 och 6 på Arduino Pro Mini används för att ge DCC-signalen som matas till H-bron. H-bryggparen är parallellkopplade för att öka strömkapaciteten. Beroende på strömmen från lokomotivet kan det behövas en kylfläns på 16-stifts DIP-enheten, eller så kan en kraftig H-bro anslutas externt.

Arduino -skissen bifogas för nedladdning. DCC -signalen består av en klocka som går på 2 MHz

void SetupTimer2 () gör det här jobbet.

Klockan inkluderar 'korta pulser' (58us) för '1' i DCC -data och 'långa pulser' (116us) för '0' i DCC -data.

Slingans tomrum, hämtar data från radion och om en giltig sträng hittas konverteras data till DCC -data.

void loop (void) {if (radio.available ()) {bool done = false; gjort = radio.read (inmsg, 1); // läs den mottagna informationen

röding = inmsg [0]; // lägg in teckenläsning i den här matrisen

om (rc! = 0) {. // om tecken inte är lika med noll

inString.concat (rc); // bygg upp meddelandet}

if (rc == '\ 0') {// om tecken är '/0' slutet av meddelandet

Serial.println (inString); // skriv ut det sammanställda meddelandet

sträng(); // avkonstruera strängmeddelandet för att få DCC-instruktioner

} } }

Steg 4: Kör Locos

Kör Locos
Kör Locos

För att undvika avbrott i data från att köra flera tåg på samma spår måste du koppla bort kontakterna mellan hjulen och spåret för varje lok och lastbil som används.

Njut av gratis tåg oavsett spårförhållanden - vilken skillnad! Inget krångel, inget start-stopp och ingen rengöring krävs.

Batterierna jag använde är laddningsbara LLoytron AA x 12. Jag har byggt en laddare speciellt för dem som laddar 6 åt gången. (se instruerbar)

Rekommenderad: