Kazalo:

Vrtni vlak - Arduino Wireless NMRA DCC: 4 koraki (s slikami)
Vrtni vlak - Arduino Wireless NMRA DCC: 4 koraki (s slikami)

Video: Vrtni vlak - Arduino Wireless NMRA DCC: 4 koraki (s slikami)

Video: Vrtni vlak - Arduino Wireless NMRA DCC: 4 koraki (s slikami)
Video: dcc esp32 model train minimal example using rmt using lmd18200, dcc tutorial 2024, November
Anonim
Image
Image
Oblikovanje sistema
Oblikovanje sistema

Poleg prejšnjih navodil z DCC na sistemu mrtvih tirnic sem idejo razvil še z ročno ukazno postajo DCC s tipkovnico in LCD zaslonom. Ukazna postaja vsebuje vse kodiranje, potrebno za navodila NMRA DCC, vendar se namesto povezave z vodili podatki po radijskem modulu RF24L01+ prenesejo v sprejemnik, nameščen v tovornjaku ali pod loko, kjer koli to dovoljuje soba.

Seveda morajo biti vaši lokomoti opremljeni z dekodirnikom nosilnosti, ki ustreza motorjem motorjev.

1. korak: Oblikovanje sistema

Oblikovanje sistema
Oblikovanje sistema

Arduino Pro Mini je v središču oblikovanja. Uporaba Fritzinga za razvoj vezja in proizvodnjo PCB -jev.

Za oddajnik in sprejemnik sem lahko uporabil isto tiskano vezje in s tem prihranil nekaj stroškov.

Oddajnik ima priključke za tipkovnico in LCD, medtem ko sprejemnik tega ne potrebuje in uporablja H-most za napajanje DCC izhoda za loko.

Nadaljnji razvoj vključuje povezave za večji H-most, če je to potrebno za močnejše lokomotive.

PCF8574 lahko izbrišete, če uporabljate LCD zaslon, ki je priložen nahrbtniku in omogoča priključitev SCA / SCL povezav na Arduinu za napajanje zaslona z uporabo samo dveh žic. Seznam delov: skupaj = približno 60 £ za DCC Command Station + 1 sprejemnik Dodatni stroški sprejemnikov = Približno 10,00 € vsak. + baterije

Arduino Pro Mini. x 2 = 4,00 €

4x3 membranska tipkovnica = 3,00 £

20 x 4 LCD zaslon = 7,00 €

PCF5874 = 1,80 £

NRF24L01+. radijski moduli x 2 = 5,80 £

Izdelava tiskanega vezja za 10 popusta (ali pa lahko uporabite ploščo Vero) = 24 funtov ali 4,80 funtov za 2 off

3,3 v Regulator = 0,17 £ (paket 25 iz RS Comp)

5v regulator LM7805 = 0,30 £

H-most SN754410ne = 3,00 £

Lloytron baterije za ponovno polnjenje 2700 maH AA x 12 = 22,00 £. (baterije z nižjo maH vrednostjo so cenejše)

Kondenzatorji, lonci, zatiči, priključki itd. = Pribl

Ohišje 190x110x60 mm = 8,00 £

Oddajnik - polnilec / baterija telefona = 2,00 £

2. korak: Oddajnik

Oddajnik
Oddajnik

Prikazan je diagram vezja, kjer so na tipkovnico priključeni zatiči D2 do D8 na Arduino Pro Mini. Potenciometer 100k ohm je priključen na analogni zatič A0 za nastavitev hitrosti. Zatiči SDA in SCL iz čipa PCF8574 so priključeni na nožice A4 in A5 na Arduino Pro Mini s pomočjo spajkanih žic na zatiče na zgornji plasti Pro Mini.

Skica Arduino je priložena za prenos.

Uporabil sem 20 x 4 LCD zaslon, ki omogoča 4 vrstice informacij z 20 znaki na vrstico. Tipkovnica ponuja naslednji meni:

1 do 9 = loko naslov * = smer 0 = luči # = meni funkcij za tipke od 1 do 8

Osnovni opis skice Arduino Pro Mini: Ta vrstica kode ureja sporočilo DCC v HEX formatu. sporočilo struct sporočilo [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // sporočilo v prostem teku

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 -bajtni naslov

};

Če želite shraniti nastavitve za vsako loko, je vrsta nizov nastavljena na naslednji način:

int la [20]; // matrika za shranjevanje loko številk

int sa [20]; // matrika za shranjevanje vrednosti hitrosti

int fda [20]; // matrika za drž

int fla [20]; // matrika za držanje luči

int f1a [20]; // matrika za zabavo1 …..

int f8a [20]; // matrika za shranjevanje fun8

Če želite omogočiti spreminjanje navodil DCC:

Za navodila o hitrosti: void replace_speed (struct Message & x) {

x.data [0] = locoAdr;

x.podatki [1] = 0x40; // locoMsg z 28 stopnjami hitrosti}

Za navodila o delovanju:

void submit_group1 (struct Message & x) {

x.data [0] = locoAdr;

x.podatki [1] = 0x80; // locoMsg z navodilom prve skupine 0x80}

Glavna zanka skice:

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

send_data_1 (); // pošiljanje podatkov po brezžični povezavi

zamuda (10);

send_data_3 (); // prikaže podatke na LCD zaslonu

send_data_4 (); // prikaz podatkov na serijskem monitorju}

if (branje_funkcije ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

zamuda (10);

send_data_3 (); }}

Posodobite podatke, ko se hitrost spremeni:

boolean read_locoSpeed () Ta zazna nov loco naslov, nastavitev hitrosti ali smeri in ustrezno spremeni HEX 'podatke'. Tu sem določil 28 korakov hitrosti in da bi izpolnil standard NMRA S 9.2, je treba podatke o hitrosti poiskati iz iskalne tabele v 'speed_step ()'

void speed_step () {switch (locoSpeed) {

primer 1: podatki | = 0x02; zlom;

primer 2: podatki | = 0x12; zlom;

primer 3: podatki | = 0x03; zlom;

………

primer 28: podatki | = 0x1F; zlom; }}

Posodobi podatke, ko se funkcije spremenijo:

logično branje_funkcija ()

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

} // luči ugasnejo

if (fla [locoAdr] == 1) {

podatki = 0x90;

} // prižgane luči

Za vsako funkcijo:

če (f2a [locoAdr] == 0) {podatki | = 0; }. // Funkcija 2 je izklopljena

če (f2a [locoAdr] == 1) {

podatki | = 0x02; // Funkcija 2 na} 'data' je sestavljena s kombinacijo ['| =' sestavljene bitove ali] HEX kod za vsako funkcijo.

3. korak: sprejemnik

Sprejemnik
Sprejemnik

Shema vezja je prikazana, kjer se zatiči 5 in 6 Arduino Pro Mini uporabljajo za zagotavljanje DCC signala, dobavljenega na H-most. H-mostni pari so povezani vzporedno, da povečajo kapaciteto toka. Odvisno od toka, ki ga črpa loko, bo morda treba na 16-polno DIP napravo priključiti hladilnik ali pa od zunaj priključiti težki H-most.

Skica Arduino je priložena za prenos. Signal DCC je sestavljen iz ure, ki deluje na 2MHZ

void SetupTimer2 () opravlja to delo.

Ura vključuje "kratke impulze" (58us) za "1" v podatkih DCC in "dolge impulze" (116us) za "0" v podatkih DCC.

Zanka ni, dobiva podatke iz radia in če se najde veljaven niz, se podatki pretvorijo v podatke DCC.

void loop (void) {if (radio.available ()) {bool done = false; dokončano = radio.read (inmsg, 1); // preberemo prejete podatke

char rc = inmsg [0]; // v ta niz vstavi prebrani znak

če (rc! = 0) {. // če znak ni enak nič

inString.concat (rc); // sestavimo sporočilo}

if (rc == '\ 0') {// če je znak '/0' konec sporočila

Serial.println (inString); // natisnemo sestavljeno sporočilo

vrvica(); // razgradimo sporočilo niza, da dobimo navodila DCC

} } }

4. korak: Zaženite Locos

Zaženite Locos
Zaženite Locos

Da bi se izognili prekinitvi podatkov pri vožnji več vlakov na istem tiru, morate odklopiti stike med kolesi in tirnico za vsako zaposleno tovorno vozilo in tovornjak.

Uživajte v brezplačnih vlakih ne glede na razmere na progi - kakšna razlika! Brez težav, brez start-stop in čiščenja ni potrebno.

Baterije, ki sem jih uporabil, so za ponovno polnjenje LLoytron AA x 12. Posebej za njih sem izdelal polnilnik, ki polni 6 hkrati. (glej navodila)

Priporočena: