Përmbajtje:

Model hekurudhor - Stacioni i Komandës DCC duke përdorur Arduino :: 3 hapa
Model hekurudhor - Stacioni i Komandës DCC duke përdorur Arduino :: 3 hapa

Video: Model hekurudhor - Stacioni i Komandës DCC duke përdorur Arduino :: 3 hapa

Video: Model hekurudhor - Stacioni i Komandës DCC duke përdorur Arduino :: 3 hapa
Video: The great gathering of Bullet trains🚅 Enjoyed the feeling like traveling[SCMAGLEV and Railway park] 2024, Korrik
Anonim
Image
Image
Kodi Arduino - Stacioni i Komandës Me Tastiera
Kodi Arduino - Stacioni i Komandës Me Tastiera

Përditësuar në gusht 2018-shihni Instructable të ri:

Përditësim 28 Prill 2016: Tani 16 pjesëmarrje / aftësi për të kontrolluar pikat në Stacionin e Komandës. Pjesëmarrjet T1 - T8 janë të disponueshme përmes butonit "B" Pjesëmarrjet në dalje T9 - T16 janë të disponueshme përmes çelësit "C"

Përditësimi më 10 Mars 2016:

Tani janë shtuar 8 aftësi të kontrollit të pjesëmarrjes / pikave në Stacionin e Komandës. Kodi Arduino është përditësuar në përputhje me rrethanat duke përdorur paketën standarde NMRA për dalje (gjithashtu bazuar në një studim të paketave të të dhënave Lenz / Atlas Compact për kontrollin e pjesëmarrjes).

Rezultatet dalëse T1 - T8 janë në dispozicion përmes çelësit 'B'

Shih udhëzues në qarkun e marrësit të paketës së të dhënave të përdorur dhe kodin Arduino të kërkuar.

Përditësimi më 18 janar 2016:

Unë kam shtuar një rezistencë sensuale aktuale (1k5 ohm) dhe kondensator (10 uf) në qark dhe kam ndryshuar kodin Arduino për të ndërprerë fuqinë kur zbulohet një rrymë maksimale> 3200 mAmps. Specifikimi i urës H thekson një rrymë të ndjeshme të prodhimit prej 377 uA për 1 Amp në ngarkesë.

Rezistenca 1.5 ohm do të japë 0.565 volt për Amp në kunjin analog 6. Me 1023 hapa në hyrjen analoge, kjo jep 0.565 * 1023 /5 = 116 për ngarkesë Amp.

A = 100 * (analogRead (AN_CURRENT)) / 116; A = A * 10; (për të dhënë rezultat në miliamps)

Rryma e ngarkesës në miliamps shfaqet në TFT

Tastiera e plotë 4x4 përfshin funksionet F1 në F8 dhe 10 loco të tjera (1-19) përmes butonit '#' (për të shtuar 10 në çelësat numerikë duke filluar nga loco 10).

Kodi arduino përfshin standardin NMRA për bajtët e udhëzimeve.

Shih lidhjen

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

(faqe 6 ka një rëndësi të veçantë)

Paketat janë rregulluar sipas numrit të hapave të shpejtësisë, adresës së gjatë / të shkurtër dhe udhëzimeve të Grupit të Funksioneve.

Të gjithë bajtët e udhëzimit paraprihen nga një parathënie e bitëve '1' 11111111 (ose pako boshe) e ndjekur nga;

p.sh. Një adresë 4 bajtësh 0 00000011 0 00111111 0 10000011 0 10111111

barazohet me loco 3, 128 hapa shpejtësie, drejtimi përpara dhe hapi shpejtësi 3 (bajti përfundimtar është kontrollimi i gabimit XOR)

p.sh. Një adresë 3 bajtësh 0 00000011 0 10010000 0 10110011

barazohet me loco 3, grupi i funksioneve 1, ndez dritat FL plus bajt XOR (një bit '0' ndan çdo bajt)

Shikoni videon demonstruese të bashkangjitur për vendndodhjen 12.

Funksionet F1 - F8 janë të disponueshme nëpërmjet tastit 'A', DIR ('*' çelësi = drejtimi) FL ('0' çelësat = dritat) dhe çelësi '#' jep vendndodhjet 10 deri në 19 në tastierën numerike. Tasti 'D' tani përdoret për një 'STOP Emergjence'.

Faleminderit ofruesve të ndryshëm në internet për burimet e informacionit DCC dhe kodin Arduino.

Në veçanti, ky projekt u frymëzua nga Michael Blank dhe tij 'Simple DCC - a command station'

www.oscale.net/sq/simpledcc

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

Moduli i ekranit 2.2 inç 240x320 Serial SPI TFT LCD (ebay) 7.19 £

UNIVERSAL 12V 5A 60W Furnizim me energji elektrike AC (ebay) 49 6.49

Nano V3.0 Për Arduino me CH340G 5V 16M në përputhje ATmega328P (ebay) 2 x £ 3.30 = 60 6.60

Moduli i Shoferit Motor LMD18200T për Arduino R3 (ebay) 6.99 £

Lidhës, tela, pllakë vero, potenciometër afërsisht 3.50

Gjithsej 32.52

Stacioni bazë i komandës pa ekran tft dhe 1 x nano do të ishte 22.03

[Shënim: isshtë e mundur të shtoni një kartë memorie në ekranin TFT dhe të ndryshoni kodin për të shfaqur imazhet e motorëve të zgjedhur, megjithëse kodet e bibliotekës duhet të redaktohen për të krijuar më shumë kujtesë për skicën. Madhësia aktuale e skicës është në maksimum për TFT Arduino Nano]

Kodi origjinal Arduino nga Michael Blank ishte për një motor, vetëm përpara / prapa pa kontroll funksioni, pa tastierë dhe pa ekran.

Kam ndryshuar kodin për të përfshirë 1 - 19 motorë, një ekran, drejtim, drita, 8 funksione, ndalesë emergjente dhe kufi automatik aktual.

Ura LMD18200T mund të mbajë deri në 3 amper gjë që e bën të përshtatshme për të gjitha shkallët përfshirë shkallën G (trenat e kopshtit). Furnizimi me energji elektrike dhe elektronika janë të përshtatshme për përdorim të brendshëm vetëm nëse nuk mund t'i bëni të gjitha provat e motit. Unë kam stacionin e komandës në shtëpinë verore me tela lidhës hekurudhor që mbarojnë përmes murit në pistë.

Hapi 1: Kodi Arduino - Stacioni i komandës me tastierë

Falenderimet e mia për tvantenna2759 për vënien në dukje të 2 gabimeve në diagramin e qarkut ku kodi Arduino nuk përputhej me telat, të azhurnuar tani (21 tetor 2017).

Tani janë shtuar 16 pjesëmarrje në Komandën. Shihni udhëzues në diagramin e qarkullimit / pikave duke përdorur modulin Arduino Mini Pro.

Kodi i modifikuar duke përfshirë kontrollin e pjesëmarrjes është bashkangjitur më poshtë.

Paketa e dekoduesit të aksesorëve bazë është: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 Nga analiza e paketës së përdorur nga Lenz (Compact / Atlas) për kontrollin e pikëve, kam përdorur formatin e mëposhtëm të paketës binare për bajtët 1 dhe 2: tunAddr = 1 Rrjedhje 1a: 1000 0001 1111 1000 / Pjesëmarrja 1b: 1000 0001 1111 1001 Pjesëmarrja 2a: 1000 0001 1111 1010 / Pjesëmarrja 2b: 1000 0001 1111 1011 Pjesëmarrja 3a: 1000 0001 1111 1100 / Pjesëmarrja 3b: 1000 0001 1111 1101 Pjesëmarrja 4a: 1000 0001 1111 1110 / Pjesëmarrja 4b: 1000 0001 1111 1111 tunAddr = 2 -------------------------------------------- ------------------------------------------------------ ----------------- Pjesëmarrja 5a: 1000 0010 1111 1000 / Pjesëmarrja 5b: 1000 0010 1111 1001 Pjesëmarrja 6a: 1000 0010 1111 1010 / Pjesëmarrja 6b: 1000 0010 1111 1011 Pjesëmarrja 7a: 1000 0010 1111 1100 / Pjesëmarrja 7b: 1000 0010 1111 1101 Pjesëmarrja 8a: 1000 0010 1111 1110 / Pjesëmarrja 8b: 1000 0010 1111 1111 ----------------------- ------------------------------------------------------ -------------------------------------- Pjesëmarrja 9a: 1000 0011 1111 1000 / Pjesëmarrja 9b: 1000 0011 1111 1001 etj ………

Ekstrakt nga kodi i modifikuar: Shtoni edhe 2 përditësime të tjera të mesazhit 'strukt' shmangeni ndryshimin_tun1 (struktura Mesazhi & x) {x.data [0] = 0x81; // dekodues aksesor 0x80 & adresa 1 x.data [1] = 0; }

void amend_tun2 (struct Mesazhi & x) {x.data [0] = 0x82; // dekodues aksesor 0x80 & adresa 2 x.data [1] = 0; }

Shto zbrazëti të re për daljet: boolean read_turnout () {vonesë (20);

boolean ndryshoi_t = false; get_key ();

nëse (key_val> = 101 && key_val <= 404 && turn == 1) {

të dhëna = 0xf8; // = binare 1111 1000

amend_tun1 (msg [1]);

}

nëse (key_val> = 505 && key_val <= 808 && turn == 1) {

të dhëna = 0xf8; // = binare 1111 1000

amend_tun2 (msg [1]);

}

nëse (key_val == 101 && kthehet == 1) {

nëse (tun1 == 1) {

të dhëna | = 0; // t1a

ndryshuar_t = e vërtetë;}

nëse (tun1 == 0) {

të dhëna | = 0x01; // t1b

ndryshuar_t = e vërtetë;}

}

nëse (key_val == 202 && kthehet == 1) {

nëse (tun2 == 1) {

të dhëna | = 0x02; // t2a

ndryshuar_t = e vërtetë;

}

nëse (tun2 == 0) {

të dhëna | = 0x03; // t2b

ndryshuar_t = e vërtetë; }

}

nëse (key_val == 303 && kthehet == 1) {

nëse (tun3 == 1) {

të dhëna | = 0x04; // t3a

ndryshuar_t = e vërtetë;

}

nëse (tun3 == 0) {

të dhëna | = 0x05; // t3b

ndryshuar_t = e vërtetë;}

}

nëse (key_val == 404 && kthehet == 1) {

nëse (tun4 == 1) {

të dhëna | = 0x06; // t4a

ndryshuar_t = e vërtetë;

}

nëse (tun4 == 0) {

të dhëna | = 0x07; // f4b

ndryshuar_t = e vërtetë;}

}

nëse (key_val == 505 && kthehet == 1) {

nëse (tun5 == 1) {

të dhëna | = 0; // t5a

ndryshuar_t = e vërtetë;

}

nëse (tun5 == 0) {

të dhëna | = 0x01; // t5b

ndryshuar_t = e vërtetë;}

}

etj ……………………….

Hapi 2: Kodi Arduino - Ekrani TFT

Kodi Arduino - Ekrani TFT
Kodi Arduino - Ekrani TFT
Kodi Arduino - Ekrani TFT
Kodi Arduino - Ekrani TFT
Kodi Arduino - Ekrani TFT
Kodi Arduino - Ekrani TFT
Kodi Arduino - Ekrani TFT
Kodi Arduino - Ekrani TFT

Qarku i ekranit mbetet i njëjtë me një kod të modifikuar për të treguar statusin e 16 daljeve. Shënim: Kodi i bibliotekës merr pothuajse të gjithë kujtesën e skicës së kodit duke lënë pak hapësirë për veçori të reja. Nëse dikush ka një skedar bibliotekash më efikas për TFT të përdorur këtu, ju lutem më tregoni.

Hapi 3: Kontrolluesi i pjesëmarrjes

Kontrolluesi i pjesëmarrjes
Kontrolluesi i pjesëmarrjes
Kontrolluesi i pjesëmarrjes
Kontrolluesi i pjesëmarrjes

Shihni udhëzues se si të bëni kontrolluesin e pjesëmarrjes / pikëve.

Qarku i plotë kontrollon 16 pika dhe 15 pajisje shtesë si dritat, tingujt, pllakën, etj.

Recommended: