Talaan ng mga Nilalaman:

Garden Train - Arduino Wireless NMRA DCC: 4 na Hakbang (na may Mga Larawan)
Garden Train - Arduino Wireless NMRA DCC: 4 na Hakbang (na may Mga Larawan)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 na Hakbang (na may Mga Larawan)

Video: Garden Train - Arduino Wireless NMRA DCC: 4 na Hakbang (na may Mga Larawan)
Video: 16 + 8-канальный серво/реле-декодер DCC своими руками, часть 3 (Видео № 19) 2024, Hunyo
Anonim
Image
Image
Disenyo ng System
Disenyo ng System

Dagdag pa sa naunang itinuturo sa DCC sa patay na sistema ng riles, binuo ko pa ang ideya sa isang kamay na hawak ng DCC Command Station na may keypad at LCD display. Naglalaman ang Command Station ng lahat ng kinakailangang pag-coding para sa mga tagubilin sa NMRA DCC, subalit sa halip na kumonekta sa daang-bakal, ang data ay inililipat ng module ng radyo na RF24L01 + sa isang tatanggap na naka-mount sa isang trak o sa ilalim ng loco - saanman may pahintulot sa silid.

Siyempre, ang iyong mga locos ay dapat na nilagyan ng isang decoder ng kakayahan sa pag-load na angkop sa mga motor engine.

Hakbang 1: Disenyo ng System

Disenyo ng System
Disenyo ng System

Ang Arduino Pro Mini ay nasa gitna ng disenyo. Paggamit ng Fritzing upang paunlarin ang circuit at upang makabuo ng mga PCB.

Nagawa kong gamitin ang parehong PCB para sa parehong transmitter at receiver sa gayon ay nagse-save ng ilang mga gastos.

Ang transmitter ay may mga koneksyon para sa keypad at LCD habang ang tatanggap ay hindi nangangailangan ng mga ito at ginagamit ang H-tulay upang maibigay ang output ng DCC para sa loco.

Ang isang karagdagang pag-unlad ay nagsasama ng mga koneksyon para sa isang mas malaking H-tulay kung kinakailangan para sa mas malakas na mga locos.

Ang PCF8574 ay maaaring matanggal kung gumagamit ka ng isang display sa LCD na kasama ng backpack na nagbibigay-daan sa mga koneksyon sa SCA / SCL sa Arduino upang pakainin ang display gamit ang 2 wires lamang. Listahan ng mga bahagi: Kabuuang = humigit-kumulang na £ 60 para sa DCC Command Station + 1 tagatanggap Gastos ng karagdagang mga tagatanggap = £ 10.00 tinatayang bawat isa. + baterya

Arduino Pro Mini. x 2 = £ 4.00

4x3 membrane keypad = £ 3.00

20 x 4 LCD display = £ 7.00

PCF5874 = £ 1.80

NRF24L01 +. mga module ng radyo x 2 = £ 5.80

Paggawa ng PCB para sa 10 off (o maaaring magamit ang Vero board) = £ 24 o £ 4.80 para sa 2off

3.3 v Regulator = £ 0.17 (pack ng 25 mula sa RS Comp)

5v Regulator LM7805 = £ 0.30

H-tulay SN754410ne = £ 3.00

Sisingilin muli ang Lloytron ng 2700 maH baterya ng x 12 = £ 22.00. (ang mas mababang mga baterya na na-rate na maH ay mas mura)

Mga capacitor, kaldero, pin, konektor, atbp = £ 2.00 tinatayang

Enclosure 190x110x60 mm = £ 8.00

Transmitter - charger ng telepono / baterya = £ 2.00

Hakbang 2: Transmitter

Transmitter
Transmitter

Ipinapakita ang diagram ng circuit kung saan ang D2 hanggang D8 na mga pin sa Arduino Pro Mini ay konektado sa keypad. Ang isang 100k ohm potentiometer ay konektado sa Analog pin A0 para sa pagsasaayos ng bilis. Ang form ng SDA at SCL na PCF8574 chip ay konektado sa mga pin A4 at A5 sa Arduino Pro Mini sa pamamagitan ng mga solder na wires sa mga pin sa tuktok na layer ng Pro Mini.

Ang sketch ng Arduino ay nakakabit para sa pag-download.

Gumamit ako ng isang 20 x 4 LCD display na nagpapahintulot sa 4 na linya ng impormasyon na may 20 character bawat linya. Nagbibigay ang keypad ng sumusunod na menu:

1 hanggang 9 = loco address * = direksyon 0 = ilaw # = Function menu para sa mga key na 1 hanggang 8

Pangunahing paglalarawan ng Arduino Pro Mini sketch: Ang linya ng code na ito ay nag-aayos ng mensahe ng DCC sa HEX format. struct Message msg [MAXMSG] = {

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

{{locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 byte address

};

Upang maiimbak ang mga setting para sa bawat loco, isang serye ng mga arrays ang na-set up tulad ng sumusunod:

int la [20]; // array upang humawak ng mga numero ng loco

int sa [20]; // array upang humawak ng mga halaga ng bilis

int fda [20]; // array upang hawakan dir

int fla [20]; // array upang humawak ng mga ilaw

int f1a [20]; // array upang humawak ng fun1…..

int f8a [20]; // array upang magkaroon ng kasiyahan8

Upang paganahin ang mga tagubilin sa DCC na mabago habang nagpupunta kami:

Para sa mga tagubilin sa bilis: void amend_speed (struct Message & x) {

x.data [0] = locoAdr;

x.data [1] = 0x40; // locoMsg na may 28 mga hakbang sa bilis}

Para sa mga tagubilin sa Pag-andar:

walang bisa amend_group1 (struct Mensahe at x) {

x.data [0] = locoAdr;

x.data [1] = 0x80; // locoMsg na may isang tagubilin sa 0x80}

Ang pangunahing loop ng sketch:

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

send_data_1 (); // magpadala ng data sa pamamagitan ng wireless

antala (10);

send_data_3 (); // display data sa LCD display

send_data_4 (); // display data sa serial monitor}

kung (read_unction ()) {

assemble_dcc_msg_group1 ();

send_data_1 ();

antala (10);

send_data_3 (); }}

I-update ang data kapag nagbago ang bilis:

boolean read_locoSpeed () Nakakita ito ng isang bagong address ng address, bilis o direksyon ng setting at binabago ang HEX 'data' nang naaayon. Dito ko tinukoy ang 28 mga hakbang sa bilis at upang matugunan ang pamantayan ng NMRA S 9.2, ang data ng bilis ay dapat na matagpuan mula sa isang talahanayan ng pagtingin nasa 'speed_step ()'

void speed_step () {switch (locoSpeed) {

kaso 1: data | = 0x02; pahinga;

kaso 2: data | = 0x12; pahinga;

kaso 3: data | = 0x03; pahinga;

………

kaso 28: data | = 0x1F; pahinga; }}

I-update ang data kapag nagbago ang mga pagpapaandar:

boolean read_unction ()

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

} // patay ang ilaw ng ulo

kung (fla [locoAdr] == 1) {

data = 0x90;

} // ilaw ng ulo

Para sa bawat Pag-andar:

kung (f2a [locoAdr] == 0) {data | = 0; }. // Function 2 off

kung (f2a [locoAdr] == 1) {

data | = 0x02; // Function 2 on} 'data' ay binuo sa pamamagitan ng pagsasama-sama ng ['| =' compound na paunti o] ang mga HEX code para sa bawat Pag-andar.

Hakbang 3: Tagatanggap

Tagatanggap
Tagatanggap

Ipinapakita ang diagram ng circuit kung saan ginagamit ang mga pin 5 at 6 ng Arduino Pro Mini upang maibigay ang signal ng DCC na ibinigay sa H-bridge. Ang mga pares ng H-tulay ay konektado sa kahanay upang madagdagan ang kasalukuyang kapasidad. Nakasalalay sa kasalukuyang iginuhit ng loco, ang isang heatsink ay maaaring kailanganin upang mai-attach sa 16 pin DIP aparato, o ang isang mabibigat na tungkulin H-tulay ay maaaring konektado sa labas.

Ang sketch ng Arduino ay nakakabit para sa pag-download. Ang signal ng DCC ay binubuo mula sa isang orasan na tumatakbo sa 2MHZ

ang void na SetupTimer2 () ay gumagawa ng trabahong ito.

Kasama sa orasan ang 'maikling pulso' (58us) para sa '1' sa data ng DCC at 'mahabang pulso' (116us) para sa '0' sa data ng DCC.

Ang loop ay walang bisa, nakakakuha ng data mula sa radyo at kung ang isang wastong string ay natagpuan, ang data ay na-convert sa data ng DCC.

void loop (void) {if (radio.available ()) {bool tapos = false; tapos = radio.read (inmsg, 1); // basahin ang natanggap na data

char rc = inmsg [0]; // ilagay ang character na basahin sa array na ito

kung (rc! = 0) {. // kung ang tauhan ay hindi katumbas ng zero

inString.concat (rc); // build up the message}

kung (rc == '\ 0') {// kung ang character ay '/ 0' pagtatapos ng mensahe

Serial.println (inString); // i-print ang naipong mensahe

string (); // de-build ang string message upang makakuha ng mga tagubilin sa DCC

} } }

Hakbang 4: Patakbuhin ang Locos

Patakbuhin ang Locos
Patakbuhin ang Locos

Upang maiwasan ang pagkagambala ng data mula sa pagpapatakbo ng maraming mga tren sa parehong track, dapat mong idiskonekta ang mga contact sa pagitan ng mga gulong at ng track para sa bawat pinagtatrabahuhan ng loco at trak.

Tangkilikin ang mga libreng pagpapatakbo ng tren anuman ang mga kondisyon sa track - kung ano ang isang pagkakaiba! Walang abala, walang start-stop at walang kinakailangang paglilinis.

Ang mga baterya na ginamit ko ay muling chargable LLoytron AA x 12. Gumawa ako ng isang charger lalo na para sa kanila na naniningil ng 6 nang paisa-isa. (tingnan ang itinuturo)

Inirerekumendang: