Բովանդակություն:

Garden Train - Arduino Wireless NMRA DCC: 4 քայլ (նկարներով)
Garden Train - Arduino Wireless NMRA DCC: 4 քայլ (նկարներով)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 քայլ (նկարներով)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 քայլ (նկարներով)
Video: Cheap and Amazing! DCC-EX 2 Years Later 2024, Նոյեմբեր
Anonim
Image
Image
Համակարգի նախագծում
Համակարգի նախագծում

Մահացած երկաթուղային համակարգի վերաբերյալ DCC- ի հետ նախկինի պես, ես գաղափարն ավելի զարգացրեցի ձեռքի DCC հրամանատարական կայանի միջոցով `ստեղնաշարով և LCD էկրանով: Հրամանատարական կայանը պարունակում է NMRA DCC հրահանգների համար պահանջվող բոլոր ծածկագրերը, սակայն ռելսերին միանալու փոխարեն տվյալները փոխանցվում են RF24L01+ ռադիո մոդուլով `բեռնատարում կամ լոկոյի տակ տեղադրված ընդունիչին, որտեղ սենյակը թույլ է տալիս:

Իհարկե, ձեր լոկոները պետք է հագեցած լինեն շարժիչի շարժիչներին համապատասխանող բեռնվածքի ունակության ապակոդավորիչով:

Քայլ 1: Համակարգի նախագծում

Համակարգի նախագծում
Համակարգի նախագծում

Arduino Pro Mini- ն դիզայնի հիմքում է: Օգտագործելով Fritzing- ը `միացումը զարգացնելու և PCB- ներ արտադրելու համար:

Ես կարողացա օգտագործել նույն PCB- ն ինչպես հաղորդիչի, այնպես էլ ընդունիչի համար `այդպիսով խնայելով որոշ ծախսեր:

Հաղորդիչն ունի միացումներ ստեղնաշարի և LCD- ի համար, մինչդեռ ստացողը դրանք չի պահանջում և օգտագործում է H- կամուրջը `լոկոյի համար DCC ելքը մատակարարելու համար:

Հետագա զարգացումը ներառում է կապեր ավելի մեծ H կամրջի համար, եթե դա պահանջվում է ավելի հզոր տեղանքների համար:

PCF8574- ը կարող է ջնջվել, եթե օգտագործում եք LCD էկրան, որն ուղեկցվում է ուսապարկով, ինչը թույլ է տալիս Arduino- ի SCA / SCL միացումներին սնուցել էկրանը ՝ օգտագործելով միայն 2 լար: Մասերի ցուցակ. Ընդհանուր = մոտ £ 60 DCC հրամանատարական կայանի համար + 1 ընդունիչ Լրացուցիչ ընդունիչների արժեքը = Յուրաքանչյուրը 10,00 £ + մարտկոցներ

Arduino Pro Mini. x 2 = 4.00

4x3 թաղանթային ստեղնաշար = 3.00 £

20 x 4 LCD էկրան = 7.00 ֆունտ

PCF5874 = 1.80 £

NRF24L01+: ռադիո մոդուլներ x 2 = £ 5.80

PCB- ի արտադրություն 10 զեղչով (կամ կարող է օգտագործվել Vero տախտակ) = 24 ֆունտ ստեռլինգ կամ 4.80 ֆունտ ստեռլինգ `2 անջատման համար

3.3 v Կարգավորիչ = 0.17 £ (RS Comp- ից 25 փաթեթ)

5 վ կարգավորիչ LM7805 = 30 0.30

H- կամուրջ SN754410ne = 3.00 ֆունտ

Lloytron- ը վերալիցքավորվում է 2700 maH AA մարտկոցներ x 12 = 22,00 £: (ցածր maH գնահատված մարտկոցներն ավելի էժան են)

Կոնդենսատորներ, կաթսաներ, կապում, միակցիչներ և այլն = 00 2.00 մոտ

Պարիսպ 190x110x60 մմ = £ 8,00

Հաղորդիչ - հեռախոսի լիցքավորիչ / մարտկոց = 2,00 £

Քայլ 2: Հաղորդիչ

Հաղորդիչ
Հաղորդիչ

Շղթայի դիագրամը ցուցադրվում է, որտեղ Arduino Pro Mini- ի D2- ից D8 կապերը միացված են ստեղնաշարին: Արագության ճշգրտման համար 100k ohm պոտենցիոմետրը միացված է անալոգային կապին A0- ին: SDF- ի և SCL- ի կապումներն PCF8574 չիպը միացված է A4 և A5 Arduino Pro Mini- ի վրա `զոդված լարերի միջոցով Pro Mini- ի վերին շերտի կապումներին:

Arduino էսքիզը կցված է ներբեռնման համար:

Ես օգտագործել եմ 20 x 4 LCD էկրան, որը թույլ է տալիս 4 տող տեղեկատվություն մեկ տողում 20 նիշով: Ստեղնաշարը տրամադրում է հետևյալ ընտրացանկը.

1 -ից 9 = տեղանքի հասցե * = ուղղություն 0 = լույսեր # = Գործառնական ընտրացանկ 1 -ից 8 -ի բանալիների համար

Arduino Pro Mini էսքիզի հիմնական նկարագրությունը. Կոդի այս տողը դասավորում է DCC հաղորդագրությունը HEX ձևաչափով: struct Հաղորդագրություն msg [MAXMSG] = {

{{0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // անգործուն հաղորդագրություն

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 բայթ հասցե

};

Յուրաքանչյուր loco- ի պարամետրերը պահելու համար մի շարք զանգվածներ ստեղծվում են հետևյալ կերպ.

int la [20]; // զանգված `loco համարները պահելու համար

int sa [20]; // զանգված արագության արժեքները պահելու համար

int fda [20]; // զանգված ՝ դիր պահելու համար

int fla [20]; // լույսեր պահելու զանգված

int f1a [20]; // զվարճանք պահելու զանգված 1…..

int f8a [20]; // զանգված զվարճալի պահելու համար 8

Որպեսզի DCC- ի հրահանգները կարողանան փոփոխվել, մենք շարունակում ենք.

Արագության ցուցումների համար. Void amend_speed (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // locoMsg արագության 28 քայլով}

Գործառնական հրահանգների համար.

void amend_group1 (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg առաջին խմբի հրահանգով 0x80}

Էսքիզի հիմնական հանգույցը.

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

send_data_1 (); // անլար տվյալների փոխանցում

ուշացում (10);

send_data_3 (); // ցուցադրել տվյալները LCD էկրանին

send_data_4 (); // ցուցադրել տվյալները սերիական մոնիտորի վրա}

եթե (կարդալ_ֆունկցիան ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

ուշացում (10);

send_data_3 (); }}

Թարմացրեք տվյալները, երբ արագությունը փոխվում է.

boolean read_locoSpeed () Սա հայտնաբերում է նոր տեղանքի հասցե, արագություն կամ ուղղություն և համապատասխանաբար փոփոխում է HEX «տվյալները»: Այստեղ ես նշել եմ արագության 28 քայլ և NMRA ստանդարտ S 9.2 -ին համապատասխանելու համար արագության տվյալները պետք է գտնել որոնման սեղանից: «speed_step ()» - ում

void speed_step () {switch (locoSpeed) {

դեպք 1: տվյալներ | = 0x02; ընդմիջում;

դեպք 2: տվյալներ | = 0x12; ընդմիջում;

դեպք 3: տվյալներ | = 0x03; ընդմիջում;

………

գործ 28. տվյալներ | = 0x1F; ընդմիջում; }}

Թարմացրեք տվյալները, երբ գործառույթները փոխվում են.

բուլյան ընթերցման գործառույթ ()

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

} // գլխի լույսերը անջատված են

եթե (fla [locoAdr] == 1) {

տվյալներ = 0x90;

} // գլխի լույսերը միացված են

Յուրաքանչյուր գործառույթի համար.

եթե (f2a [locoAdr] == 0) {տվյալ | = 0; }. // Ֆունկցիան 2 անջատված է

եթե (f2a [locoAdr] == 1) {

տվյալներ | = 0x02; // Ֆունկցիան 2 «տվյալների» վրա կառուցվում է ՝ համակցելով ['| =' բաղադրությունը բիթային կամ] HEX կոդերի յուրաքանչյուր գործառույթի համար:

Քայլ 3: Ստացող

Ընդունիչ
Ընդունիչ

Circuitույց է տրվում միացման սխեմա, որտեղ Arduino Pro Mini- ի 5-րդ և 6-րդ կապերը օգտագործվում են H- կամրջին մատակարարվող DCC ազդանշանը տրամադրելու համար: H կամրջի զույգերը զուգահեռաբար միացված են ՝ ընթացիկ հզորությունը մեծացնելու համար: Կախված լոկոյի հոսանքի հոսանքից, կարող է պահանջվել, որ ջեռուցիչը կցվի 16 փին DIP սարքին, կամ ծանրակշիռ H կամուրջը կարող է միացվել արտաքինից:

Arduino- ի էսքիզը կցված է ներբեռնման համար: DCC ազդանշանը կազմված է 2 ՄՀց արագությամբ աշխատող ժամացույցից

void SetupTimer2 () - ն անում է այս աշխատանքը:

Theամացույցը ներառում է «կարճ իմպուլսներ» (58us) DCC տվյալների «1» - ի համար և «երկար իմպուլսներ» (116us) ՝ «0» - ի DCC տվյալների մեջ:

Օղակը դատարկ է, ստանում է տվյալներ ռադիոյից և եթե վավեր տող է հայտնաբերվում, տվյալները փոխակերպվում են DCC տվյալների:

void loop (void) {if (radio.available ()) {bool done = false; արել = radio.read (inmsg, 1); // կարդալ ստացված տվյալները

char rc = inmsg [0]; // դնել կարդացած բնույթ այս զանգվածի մեջ

եթե (rc! = 0) {. // եթե նիշը հավասար չէ զրոյի

inString.concat (rc); // կառուցել հաղորդագրությունը}

if (rc == '\ 0') {// if նիշը '/0' հաղորդագրության վերջն է

Serial.println (inString); // տպել հավաքված հաղորդագրությունը

տող (); // կառուցել լարային հաղորդագրությունը ՝ DCC հրահանգներ ստանալու համար

} } }

Քայլ 4: Գործարկեք Locos- ը

Գործարկեք Locos- ը
Գործարկեք Locos- ը

Նույն ուղու վրա բազմաթիվ գնացքներ վարելիս տվյալների ընդհատումից խուսափելու համար դուք պետք է անջատեք անիվների և ուղու միջև եղած շփումները յուրաքանչյուր աշխատող մեքենայի և բեռնատարի համար:

Վայելեք անվճար ընթացող գնացքներ ՝ անկախ ուղու պայմաններից, ինչ տարբերություն: Ոչ մի դժվարություն, առանց մեկնարկի և մաքրման կարիք չկա:

Իմ օգտագործած մարտկոցները վերալիցքավորվում են LLoytron AA x 12. Ես հատուկ նրանց համար կառուցել եմ լիցքավորիչ, որը լիցքավորում է միաժամանակ 6: (տես ուսանելի)

Խորհուրդ ենք տալիս: