Cuprins:

Modelul feroviar - Stația de comandă DCC folosind Arduino :: 3 pași
Modelul feroviar - Stația de comandă DCC folosind Arduino :: 3 pași

Video: Modelul feroviar - Stația de comandă DCC folosind Arduino :: 3 pași

Video: Modelul feroviar - Stația de comandă DCC folosind Arduino :: 3 pași
Video: Prezentare vagoane de dormit 71-31 CFR Calatori | Roco 45064, 45828 2024, Iulie
Anonim
Image
Image
Cod Arduino - Stație de comandă cu tastatură
Cod Arduino - Stație de comandă cu tastatură

Actualizat în august 2018 - vezi noua versiune instructabilă:

Actualizare 28 aprilie 2016: acum 16 puncte de participare / controlul punctelor la stația de comandă. Prezențele T1 - T8 sunt disponibile prin intermediul tastei „B” Prezențele T9 - T16 sunt disponibile prin intermediul tastei „C”

Actualizare 10 martie 2016:

Acum a adăugat capacitatea de control 8 puncte de participare / puncte la stația de comandă. Codul Arduino a fost actualizat corespunzător folosind pachetul standard NMRA pentru prezențe (de asemenea, pe baza unui studiu al pachetelor de date Lenz / Atlas Compact pentru controlul prezenței).

Prezențele T1 - T8 sunt disponibile prin intermediul tastei „B”

Vedeți instrucțiunile pe circuitul receptorului de pachete de date utilizat și codul Arduino necesar.

Actualizare 18 ianuarie 2016:

Am adăugat un rezistor de detectare a curentului (1k5 ohm) și un condensator (10 uf) la circuit și am modificat codul Arduino pentru a întrerupe alimentarea atunci când este detectat un curent de vârf> 3200 mAmps. Specificația H-bridge indică un curent de simțire de ieșire de 377 uA la 1 Amp în sarcină.

Rezistorul de 1,5 k ohm va furniza 0,565 volți pe Amp pe pinul analogic 6. Cu 1023 de pași pe intrarea analogică, aceasta oferă 0,565 * 1023/5 = 116 pe sarcină Amp.

A = 100 * (analogRead (AN_CURRENT)) / 116; A = A * 10; (pentru a da rezultate în miliamperi)

Curentul de încărcare în miliamperi este afișat pe TFT

Tastatura completă 4x4 include funcții F1 până la F8 și alte 10 locos (1-19) prin intermediul tastei „#” (pentru a adăuga 10 la tastele numerice începând de la loco 10).

Codul arduino include standardul NMRA pentru octeți de instrucțiuni.

Vezi link-ul

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

(pagina 6 are o relevanță deosebită)

Pachetele sunt aranjate în funcție de numărul de pași de viteză, adresa lungă / scurtă și instrucțiunile Grupului de funcții.

Toate octeții de instrucțiuni sunt precedate de un preambul de biți „1” 11111111 (sau pachet inactiv) urmat de;

de exemplu. O adresă de 4 octeți 0 00000011 0 00111111 0 10000011 0 10111111

echivalează cu loco 3, 128 de trepte de viteză, direcția înainte și pasul de viteză 3 (octetul final este verificarea erorilor XOR)

de exemplu, o adresă de 3 octeți 0 00000011 0 10010000 0 10110011

echivalează cu loco 3, grupul de funcții 1, FL se aprinde plus XOR octet (un bit '0' separă fiecare octet)

Vedeți videoclipul demonstrativ atașat pentru loco 12.

Funcțiile F1 - F8 sunt disponibile prin intermediul tastei „A”, DIR (tasta „*” = direcție) FL (tasta „0” = lumini) și tasta „#” dă locurile 10 la 19 pe tastatura numerică. Tasta „D” este acum utilizată pentru o „OPRIRE DE URGENȚĂ”.

Mulțumim diferiților furnizori de pe web pentru surse de informații DCC și cod Arduino.

În special, acest proiect a fost inspirat de Michael Blank și „DCC simplu - o stație de comandă”

www.oscale.net/en/simpledcc

Tastatură cu comutator cu membrană cu 4 taste Matrix Array 16 (ebay) 1,75 GBP

Modul de afișaj LCD SPI TFT de 2,2 inci 240x320 (ebay) 7,19 GBP

ADAPTOR DE ALIMENTARE UNIVERSAL 12V 5A 60W SURSA DE ALIMENTARE (ebay) 6,49 GBP

Nano V3.0 Pentru Arduino cu CH340G 5V 16M compatibil ATmega328P (ebay) 2 x 3,30 GBP = 6,60 GBP

Modulul driverului motorului LMD18200T pentru Arduino R3 (ebay) 6,99 GBP

Conectori, sârmă, placă vero, potențiometru aprox 3,50 GBP

Total 32,52 GBP

Stația de comandă de bază fără ecran TFT și 1 x nano ar fi de 22,03 GBP

[Notă: Este posibil să adăugați o cartelă de memorie pe afișajul TFT și să modificați codul pentru a afișa imaginile motoarelor selectate, deși codurile bibliotecii trebuie editate în jos pentru a crea mai multă memorie pentru schiță. Dimensiunea schiței actuale este maximă pentru TFT Arduino Nano]

Codul original Arduino de la Michael Blank era pentru un singur motor, înainte / înapoi numai fără control al funcției, fără tastatură și fără afișaj.

Am modificat codul pentru a include 1 - 19 motoare, un ecran de afișare, direcție, lumini, 8 funcții, oprire de urgență și limită de curent automat.

Podul LMD18200T poate transporta până la 3 amperi, ceea ce îl face potrivit pentru toate cântarele, inclusiv scala G (trenuri de grădină). Alimentarea cu energie electrică și dispozitivele electronice sunt potrivite numai pentru utilizare în interior, cu excepția cazului în care o puteți face rezistentă la intemperii. Am stația de comandă în casa de vară, cu fire de conectare a șinei care se scurg prin perete către cale.

Pasul 1: Cod Arduino - Stație de comandă cu tastatură

Mulțumesc tvantenna2759 pentru că a arătat 2 erori în schema circuitului în care codul Arduino nu se potrivea cu cablajul, actualizat acum (21 octombrie 2017).

Acum a adăugat 16 participări la stația de comandă. Vedeți instrucțiunile din diagrama circuitului de prezență / puncte folosind modulul Arduino Mini Pro.

Codul modificat, inclusiv controlul prezenței, este atașat mai jos.

Pachetul de decodare accesoriu de bază este: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1 Din analiza pachetului folosit de Lenz (Compact / Atlas) pentru controlul punctelor, am folosit următorul format de pachet binar pentru octeții 1 și 2: tunAddr = 1 Participare 1a: 1000 0001 1111 1000 / Viteza 1b: 1000 0001 1111 1001 Viteza 2a: 1000 0001 1111 1010 / Viteza 2b: 1000 0001 1111 1011 Viteza 3a: 1000 0001 1111 1100 / Viteza 3b: 1000 0001 1111 1101 Viteza 4a: 1000 0001 1111 1110 / Viteza 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------------------------------- -------------------------------------------------- ----------------- Prezență 5a: 1000 0010 1111 1000 / Prezență 5b: 1000 0010 1111 1001 Prezență 6a: 1000 0010 1111 1010 / Prezență 6b: 1000 0010 1111 1011 Prezență 7a: 1000 0010 1111 1100 / Prezență 7b: 1000 0010 1111 1101 Prezență 8a: 1000 0010 1111 1110 / Prezență 8b: 1000 0010 1111 1111 ----------------------- -------------------------------------------------- ---------------------------------- Prezență 9a: 1000 0011 1111 1000 / Prezență 9b: 1000 0011 1111 1001 etc ………

Extrageți din codul modificat: Adăugați încă 2 actualizări de mesaje „struct” evitați amendarea_tun1 (struct Mesaj & x) {x.data [0] = 0x81; // decodor accesoriu 0x80 & adresa 1 x.data [1] = 0; }

void amend_tun2 (struct Message & x) {x.data [0] = 0x82; // decodor accesoriu 0x80 & adresa 2 x.data [1] = 0; }

Adăugați un gol nou pentru participări: read_turnout boolean () {delay (20);

boolean schimbat_t = false; get_key ();

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

date = 0xf8; // = binar 1111 1000

amend_tun1 (msg [1]);

}

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

date = 0xf8; // = binar 1111 1000

amend_tun2 (msg [1]);

}

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

if (tun1 == 1) {

date | = 0; // t1a

schimbat_t = adevărat;}

if (tun1 == 0) {

date | = 0x01; // t1b

schimbat_t = adevărat;}

}

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

if (tun2 == 1) {

date | = 0x02; // t2a

schimbat_t = adevărat;

}

if (tun2 == 0) {

date | = 0x03; // t2b

schimbat_t = adevărat; }

}

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

if (tun3 == 1) {

date | = 0x04; // t3a

schimbat_t = adevărat;

}

if (tun3 == 0) {

date | = 0x05; // t3b

schimbat_t = adevărat;}

}

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

if (tun4 == 1) {

date | = 0x06; // t4a

schimbat_t = adevărat;

}

if (tun4 == 0) {

date | = 0x07; // f4b

schimbat_t = adevărat;}

}

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

if (tun5 == 1) {

date | = 0; // t5a

schimbat_t = adevărat;

}

if (tun5 == 0) {

date | = 0x01; // t5b

schimbat_t = adevărat;}

}

etc ………………….

Pasul 2: Cod Arduino - Afișaj TFT

Cod Arduino - Afișaj TFT
Cod Arduino - Afișaj TFT
Cod Arduino - Afișaj TFT
Cod Arduino - Afișaj TFT
Cod Arduino - Afișaj TFT
Cod Arduino - Afișaj TFT
Cod Arduino - Afișaj TFT
Cod Arduino - Afișaj TFT

Circuitul de afișare rămâne același cu un cod modificat pentru a arăta starea celor 16 participări. Notă: Codul bibliotecii ocupă aproape toată memoria codului de schiță, lăsând puțin loc pentru funcții noi. Dacă cineva are un fișier de bibliotecă mai eficient pentru TFT folosit aici, vă rugăm să ne anunțați.

Pasul 3: Controler de prezență

Controler de prezență
Controler de prezență
Controler de prezență
Controler de prezență

Vedeți instrucțiuni despre cum să faceți controlerul de participare / puncte.

Circuitul complet controlează 16 puncte și 15 accesorii precum lumini, sunete, platan rotativ etc.

Recomandat: