Talaan ng mga Nilalaman:

Model Railway - DCC Command Station Gamit ang Arduino :: 3 Mga Hakbang
Model Railway - DCC Command Station Gamit ang Arduino :: 3 Mga Hakbang

Video: Model Railway - DCC Command Station Gamit ang Arduino :: 3 Mga Hakbang

Video: Model Railway - DCC Command Station Gamit ang Arduino :: 3 Mga Hakbang
Video: DCC and Automation is it really value for money at Chadwick Model Railway | 169 2024, Nobyembre
Anonim
Image
Image
Arduino Code - Command Station Gamit ang Keypad
Arduino Code - Command Station Gamit ang Keypad

Nai-update noong Agosto 2018 - tingnan ang bagong Instructable:

I-update ang Abril 28, 2016: Ngayon 16 na turnout / puntos na kontrol sa kakayahan sa Command Station. Ang mga turnout T1 - T8 ay magagamit sa pamamagitan ng 'B' key Ang mga turnout na T9 - T16 ay magagamit sa pamamagitan ng key na 'C'

I-update ang Marso 10, 2016:

Nagdagdag na ngayon ng 8 turnout / point control capability sa Command Station. Ang Arduino code ay na-update nang naaayon gamit ang standard na packet ng NMRA para sa mga turnout (batay din sa isang pag-aaral ng mga packet ng data ng Lenz / Atlas Compact para sa kontrol ng pag-turnout).

Ang mga turnout na T1 - T8 ay magagamit sa pamamagitan ng 'B' key

Tingnan ang itinuturo sa ginamit na circuit ng packet ng data at kinakailangan ang Arduino code.

I-update ang ika-18 ng Ene 2016:

Nagdagdag ako ng kasalukuyang sense resistor (1k5 ohm) at capacitor (10 uf) sa circuit at binago ang Arduino code upang putulin ang kuryente kapag may napansin na isang kasalukuyang rurok na> 3200 mAmps. Ang spec na H-bridge ay nagsasaad ng kasalukuyang output sense na 377 uA bawat 1 Amp sa pagkarga.

Ang 1.5 k ohm risistor ay maghatid ng 0.565 volts bawat Amp sa analog pin 6. Sa 1023 na mga hakbang sa analog input, nagbibigay ito ng 0.565 * 1023/5 = 116 bawat Amp na karga.

A = 100 * (analogRead (AN_CURRENT)) / 116; A = A * 10; (upang magbigay ng resulta sa milliamp)

Ang kasalukuyang karga sa mga milliamp ay ipinapakita sa TFT

Ang buong 4x4 na keyboard ay may kasamang F1 hanggang F8 na mga pag-andar at isa pang 10 locos (1-19) sa pamamagitan ng key na '#' (upang magdagdag ng 10 sa mga numerong key na nagsisimula sa loco 10).

Kasama sa arduino code ang pamantayan ng NMRA para sa mga byte ng pagtuturo.

Tingnan ang link

www.nmra.org/site/default/files/s-9.2.1_20…

(pahina 6 ay partikular na nauugnay)

Ang mga packet ay nakaayos ayon sa bilang ng mga hakbang sa bilis, mahaba / maikling address at mga tagubilin sa Function Group.

Ang lahat ng mga byte ng pagtuturo ay naunahan ng paunang salita ng '1' bits 11111111 (o idle packet) na sinusundan ng;

hal. Isang 4 byte address 0 00000011 0 00111111 0 10000011 0 10111111

katumbas sa loco 3, 128 mga hakbang sa bilis, direksyon sa pasulong at bilis ng hakbang 3 (ang end byte ay ang error check XOR)

hal. Isang 3 byte address 0 00000011 0 10010000 0 10110011

katumbas sa loco 3, function group 1, FL lights on plus XOR byte (isang '0' bit ang naghihiwalay sa bawat byte)

Tingnan ang nakapaloob na video ng demonstrasyon para sa loco 12.

Ang mga pagpapaandar F1 - F8 ay magagamit sa pamamagitan ng 'A' key, DIR ('*' key = direksyon) FL ('0' key = lights) at key '#' ay nagbibigay ng locos 10 hanggang 19 sa numeric keypad. Ginagamit na ngayon ang 'D' key para sa isang 'Emergency STOP'.

Salamat sa iba't ibang mga tagabigay ng web para sa mga mapagkukunan ng impormasyon ng DCC at Arduino code.

Sa partikular, ang proyektong ito ay inspirasyon ni Michael Blank at ng kanyang 'Simple DCC - isang command station'

www.oscale.net/en/simpledcc

4x4 Matrix Array 16 Key Membrane Switch Keypad (ebay) £ 1.75

2.2 pulgada 240x320 Serial SPI TFT LCD Display Module (ebay) na £ 7.19

UNIVERSAL 12V 5A 60W POWER SUPPLY AC ADAPTER (ebay) £ 6.49

Nano V3.0 Para sa Arduino na may CH340G 5V 16M katugmang ATmega328P (ebay) 2 x £ 3.30 = £ 6.60

Motor Driver Module LMD18200T para sa Arduino R3 (ebay) na £ 6.99

Mga konektor, wire, vero board, potentiometer humigit-kumulang na £ 3.50

Kabuuang £ 32.52

Ang pangunahing istasyon ng utos nang walang tft screen at 1 x nano ay magiging £ 22.03

[Tandaan: Posibleng magdagdag ng isang memory card sa display ng TFT at baguhin ang code upang maipakita ang mga imahe ng mga napiling engine, kahit na ang mga code ng library ay dapat na mai-edit pababa upang lumikha ng higit na memorya para sa sketch. Ang kasalukuyang laki ng sketch ay nasa isang maximum para sa TFT Arduino Nano]

Ang orihinal na Arduino code ni Michael Blank ay para sa isang engine, pasulong / baligtarin lamang na walang kontrol sa pag-andar, walang keypad at walang display.

Binago ko ang code upang isama ang mga 1 - 19 na makina, isang display screen, direksyon, ilaw, 8 pagpapaandar, paghinto ng emergency at kasalukuyang kasalukuyang limitasyon.

Ang tulay ng LMD18200T ay maaaring magdala ng hanggang sa 3 amps na ginagawang angkop para sa lahat ng mga kaliskis kabilang ang G-scale (mga tren sa hardin). Ang supply ng kuryente ng mains at electronics ay angkop para sa panloob na paggamit lamang maliban kung magawa mo itong lahat na patunay sa panahon. Mayroon akong istasyon ng utos sa bahay ng tag-init na may mga koneksyon sa tren na tumatakbo sa pader sa track.

Hakbang 1: Arduino Code - Command Station Gamit ang Keypad

Ang aking pasasalamat sa tvantenna2759 sa pagturo ng 2 mga error sa circuit diagram kung saan ang Arduino code ay hindi tugma sa mga kable, na-update na ngayon (21 Okt 2017).

Nagdagdag ngayon ng 16 na turnout sa Command Station. Tingnan ang itinuturo sa turnout / point circuit diagram gamit ang Arduino Mini Pro module.

Ang binagong code kabilang ang kontrol sa pag-turnout ay nakakabit sa ibaba.

Pangunahing Accessory decoder packet ay: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 Mula sa pag-aaral ng packet na ginamit ni Lenz (Compact / Atlas) para sa point control, ginamit ko ang sumusunod na format ng binary packet para sa bytes 1 at 2: tunAddr = 1 Turnout 1a: 1000 0001 1111 1000 / Turnout 1b: 1000 0001 1111 1001 Turnout 2a: 1000 0001 1111 1010 / Turnout 2b: 1000 0001 1111 1011 Turnout 3a: 1000 0001 1111 1100 / Turnout 3b: 1000 0001 1111 1101 Turnout 4a: 1000 0001 1111 1110 / Turnout 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------- ---- ----------------- Turnout 5a: 1000 0010 1111 1000 / Turnout 5b: 1000 0010 1111 1001 Turnout 6a: 1000 0010 1111 1010 / Turnout 6b: 1000 0010 1111 1011 Turnout 7a: 1000 0010 1111 1100 / Turnout 7b: 1000 0010 1111 1101 Turnout 8a: 1000 0010 1111 1110 / Turnout 8b: 1000 0010 1111 1111 ----------------- ---- ---------------------------------- Turnout 9a: 1000 0011 1111 1000 / Turnout 9b: 1000 0011 1111 1001 atbp ………

I-extract mula sa binagong code: Magdagdag ng 2 higit pang mga update ng mensahe na 'struct' na iwas sa amend_tun1 (struct Message & x) {x.data [0] = 0x81; // accessory decoder 0x80 & address 1 x.data [1] = 0; }

walang bisa amend_tun2 (struct Mensahe & x) {x.data [0] = 0x82; // accessory decoder 0x80 & address 2 x.data [1] = 0; }

Magdagdag ng bagong walang bisa para sa mga turnout: boolean read_turnout () {pagkaantala (20);

nagbago ang boolean_t = false; get_key ();

kung (key_val> = 101 && key_val <= 404 && turn == 1) {

data = 0xf8; // = binary 1111 1000

amend_tun1 (msg [1]);

}

kung (key_val> = 505 && key_val <= 808 && turn == 1) {

data = 0xf8; // = binary 1111 1000

amend_tun2 (msg [1]);

}

kung (key_val == 101 && turn == 1) {

kung (tun1 == 1) {

data | = 0; // t1a

nagbago_t = totoo;}

kung (tun1 == 0) {

data | = 0x01; // t1b

nagbago_t = totoo;}

}

kung (key_val == 202 && turn == 1) {

kung (tun2 == 1) {

data | = 0x02; // t2a

nagbago_t = totoo;

}

kung (tun2 == 0) {

data | = 0x03; // t2b

nagbago_t = totoo; }

}

kung (key_val == 303 && turn == 1) {

kung (tun3 == 1) {

data | = 0x04; // t3a

nagbago_t = totoo;

}

kung (tun3 == 0) {

data | = 0x05; // t3b

nagbago_t = totoo;}

}

kung (key_val == 404 && turn == 1) {

kung (tun4 == 1) {

data | = 0x06; // t4a

nagbago_t = totoo;

}

kung (tun4 == 0) {

data | = 0x07; // f4b

nagbago_t = totoo;}

}

kung (key_val == 505 && turn == 1) {

kung (tun5 == 1) {

data | = 0; // t5a

nagbago_t = totoo;

}

kung (tun5 == 0) {

data | = 0x01; // t5b

nagbago_t = totoo;}

}

atbp ………………….

Hakbang 2: Arduino Code - Display ng TFT

Arduino Code - TFT Display
Arduino Code - TFT Display
Arduino Code - TFT Display
Arduino Code - TFT Display
Arduino Code - TFT Display
Arduino Code - TFT Display
Arduino Code - TFT Display
Arduino Code - TFT Display

Ang display circuit ay mananatiling pareho sa isang binagong code upang maipakita ang katayuan ng 16 na turnout. Tandaan: Tumatagal ang code ng library ng halos lahat ng memorya ng sketch code na iniiwan ang maliit na silid para sa mga bagong tampok. Kung ang sinuman ay may isang mas mahusay na file ng library para sa ginamit na TFT dito, mangyaring ipaalam sa akin.

Hakbang 3: Turnout Controller

Turnout Controller
Turnout Controller
Turnout Controller
Turnout Controller

Tingnan ang itinuturo sa kung paano gawin ang Turnout / Points controller.

Kinokontrol ng kumpletong circuit ang 16 na puntos at 15 mga aksesorya tulad ng mga ilaw, tunog, paikutan, atbp.

Inirerekumendang: