Turinys:

Sodo traukinys - „Arduino Wireless NMRA DCC“: 4 žingsniai (su nuotraukomis)
Sodo traukinys - „Arduino Wireless NMRA DCC“: 4 žingsniai (su nuotraukomis)

Video: Sodo traukinys - „Arduino Wireless NMRA DCC“: 4 žingsniai (su nuotraukomis)

Video: Sodo traukinys - „Arduino Wireless NMRA DCC“: 4 žingsniai (su nuotraukomis)
Video: Fontano siurblys su nuotoliniu valdymu 2024, Lapkritis
Anonim
Image
Image
Sistemos dizainas
Sistemos dizainas

Remdamasis ankstesniais nurodymais, naudojant DCC ant negyvų bėgių sistemos, aš toliau tobulinau šią idėją su rankiniu DCC komandų stotimi su klaviatūra ir LCD ekranu. Komandinėje stotyje yra visas kodavimas, reikalingas NMRA DCC instrukcijoms, tačiau vietoj to, kad būtų prijungtas prie bėgių, radijo modulis RF24L01+ perduoda duomenis į imtuvą, sumontuotą sunkvežimyje arba po lokomotyvu, kur tik leidžiama patalpoje.

Žinoma, jūsų lokomotyvuose turi būti sumontuotas variklio varikliams pritaikytas apkrovos dekoderis.

1 žingsnis: sistemos projektavimas

Sistemos dizainas
Sistemos dizainas

„Arduino Pro Mini“yra dizaino esmė. „Fritzing“naudojimas grandinei plėtoti ir PCB gaminti.

Galėjau naudoti tą pačią PCB tiek siųstuvui, tiek imtuvui, taip sutaupydamas tam tikrų išlaidų.

Siųstuvas turi klaviatūros ir LCD jungtis, o imtuvas to nereikalauja ir naudoja H tiltą, kad tiektų lokomotyvo DCC išvestį.

Tolesnė plėtra apima jungtis didesniam H tiltui, jei to reikia galingesniems lokomotyvams.

PCF8574 galima ištrinti, jei naudojate skystųjų kristalų ekraną su kuprine, leidžiančią „Arduino“SCA / SCL jungtims maitinti ekraną naudojant tik 2 laidus. Dalių sąrašas: Iš viso = apie 60 svarų sterlingų už DCC komandų stotį + 1 imtuvas Papildomos imtuvo išlaidos = Maždaug 10,00 svarų sterlingų. + baterijos

„Arduino Pro Mini“. x 2 = 4,00 svarų sterlingų

4x3 membraninė klaviatūra = 3,00 £

20 x 4 LCD ekranas = £ 7,00

PCF5874 = 1,80 svaro

NRF24L01+. radijo moduliai x 2 = £ 5,80

PCB gamyba už 10 USD (arba gali būti naudojama „Vero“plokštė) = 24 svarų sterlingų arba 4,80 svarų sterlingų už 2 kartus

3,3 v reguliatorius = 0,17 svaro (25 pakuotės iš „RS Comp“)

5v reguliatorius LM7805 = 0,30 £

H-tiltas SN754410ne = £ 3.00

„Lloytron“pakartotinai įkraunamos 2700 maH AA baterijos x 12 = 22,00 svarų sterlingų. (mažesnės maH akumuliatoriai yra pigesni)

Kondensatoriai, puodai, kaiščiai, jungtys ir tt = maždaug 2,00 svarų sterlingų

Korpusas 190x110x60 mm = 8,00 £

Siųstuvas - telefono įkroviklis / baterija = £ 2.00

2 žingsnis: siųstuvas

Siųstuvas
Siųstuvas

Grandinės schema parodyta, kur „Arduino Pro Mini“kaiščiai nuo D2 iki D8 yra prijungti prie klaviatūros. Prie analoginio kaiščio A0 prijungtas 100k omų potenciometras, kad būtų galima reguliuoti greitį. SDA ir SCL kaiščiai iš PCF8574 lusto yra prijungti prie kaiščių A4 ir A5 „Arduino Pro Mini“, naudojant lituotus laidus prie kaiščių viršutiniame „Pro Mini“sluoksnyje.

„Arduino“eskizas pridedamas atsisiųsti.

Naudojau 20 x 4 skystųjų kristalų ekraną, leidžiantį 4 informacijos eilutes su 20 simbolių kiekvienoje eilutėje. Klaviatūroje pateikiamas šis meniu:

1–9 = užrakinimo adresas * = kryptis 0 = šviesa # = funkcijų meniu 1–8 klavišams

Pagrindinis „Arduino Pro Mini“eskizo aprašymas: Ši kodo eilutė tvarko DCC pranešimą HEX formatu. struktura Pranešimas žinutė [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // tuščiosios eigos žinutė

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 baitų adresas

};

Norėdami išsaugoti kiekvieno lokomotyvo parametrus, masyvų serija nustatoma taip:

int la [20]; // masyvas, skirtas loko skaičiams laikyti

int sa [20]; // masyvas greičio reikšmėms laikyti

int fda [20]; // masyvas laikyti rež

int fla [20]; // masyvas šviesoms laikyti

int f1a [20]; // masyvas, skirtas linksmintis1…..

int f8a [20]; // masyvas, skirtas linksmybėms laikyti8

Jei norite, kad DCC instrukcijos būtų iš dalies pakeistos toliau:

Greičio instrukcijos: void change_speed (struktūros pranešimas ir x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // locoMsg su 28 greičio žingsniais}

Dėl funkcijų instrukcijų:

void change_group1 (struktūros pranešimas ir x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg su pirmosios grupės instrukcija 0x80}

Pagrindinė eskizo kilpa:

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

send_data_1 (); // siųsti duomenis belaidžiu ryšiu

vėlavimas (10);

send_data_3 (); // rodyti duomenis LCD ekrane

send_data_4 (); // rodyti duomenis serijiniame monitoriuje}

if (skaityti_funkcija ()) {

surinkti_dcc_msg_grupė1 ();

send_data_1 ();

vėlavimas (10);

send_data_3 (); }}

Atnaujinkite duomenis, kai pasikeičia greitis:

boolean read_locoSpeed () Tai aptinka naują loko adresą, greitį ar kryptį ir atitinkamai pakeičia HEX „duomenis“. Čia aš nurodžiau 28 greičio žingsnius ir norėdamas atitikti NMRA standartą S 9.2, greičio duomenis reikia rasti iš paieškos lentelės „speed_step ()“

void speed_step () {jungiklis (locoSpeed) {

1 atvejis: duomenys | = 0x02; pertrauka;

2 atvejis: duomenys | = 0x12; pertrauka;

3 atvejis: duomenys | = 0x03; pertrauka;

………

28 atvejis: duomenys | = 0x1F; pertrauka; }}

Atnaujinkite duomenis, kai pasikeičia funkcijos:

loginė skaitymo funkcija ()

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

} // galvos šviesos išjungtos

jei (fla [locoAdr] == 1) {

duomenys = 0x90;

} // įjungti galvos žibintai

Kiekvienai funkcijai:

jei (f2a [locoAdr] == 0) {duomenys | = 0; }. // 2 funkcija išjungta

jei (f2a [locoAdr] == 1) {

duomenys | = 0x02; // 2 funkcija} „duomenys“sukuriama sujungiant ['| =' sudėtinį bitą arba] kiekvienos funkcijos HEX kodus.

3 žingsnis: imtuvas

Imtuvas
Imtuvas

Parodyta schema, kurioje „Arduino Pro Mini“5 ir 6 kaiščiai naudojami DCC signalui, tiekiamam į H tiltą, perduoti. H tilto poros yra sujungtos lygiagrečiai, kad padidėtų srovės talpa. Atsižvelgiant į lokomotyvo traukiamą srovę, prie 16 kontaktų DIP įrenginio gali tekti prijungti radiatorių arba iš išorės prijungti sunkiasvorį H tiltą.

„Arduino“eskizas yra pridėtas atsisiųsti. DCC signalas sudarytas iš laikrodžio, veikiančio 2 MHz dažniu

void SetupTimer2 () atlieka šį darbą.

Laikrodis apima „trumpus impulsus“(58us) „1“DCC duomenyse ir „ilgus impulsus“(116us), kai DCC duomenys yra „0“.

Ciklas tuščias, gauna duomenis iš radijo ir, jei randama tinkama eilutė, duomenys konvertuojami į DCC duomenis.

void loop (void) {if (radio.available ()) {bool done = false; padaryta = radijas. skaitymas (inmsg, 1); // skaityti gautus duomenis

char rc = inmsg [0]; // į šį masyvą įdėkite perskaitytą simbolį

jei (rc! = 0) {. // jei simbolis nėra lygus nuliui

inString.concat (rc); // sukurti pranešimą}

if (rc == '\ 0') {// jei simbolis yra '/0' pranešimo pabaiga

Serial.println (inString); // spausdinti surinktą pranešimą

eilutė (); // dekonstruoti eilutės pranešimą, kad gautumėte DCC instrukcijas

} } }

4 veiksmas: paleiskite „Locos“

Paleiskite „Locos“
Paleiskite „Locos“

Kad nenutrūktų kelių kelių traukinių važiavimas tuo pačiu keliu, turite atjungti kiekvieno naudojamo lokomotyvo ir sunkvežimio kontaktus tarp ratų ir bėgių.

Mėgaukitės nemokamais traukiniais nepriklausomai nuo bėgių kelio - koks skirtumas! Jokio vargo, jokio paleidimo-sustabdymo ir valymo nereikia.

Naudojamos baterijos yra įkraunamos LLoytron AA x 12. Specialiai jiems sukūriau įkroviklį, kuris vienu metu įkrauna 6. (žr. instrukciją)

Rekomenduojamas: