Inhoudsopgave:

Modelspoor - DCC Command Station met Arduino:: 3 stappen
Modelspoor - DCC Command Station met Arduino:: 3 stappen

Video: Modelspoor - DCC Command Station met Arduino:: 3 stappen

Video: Modelspoor - DCC Command Station met Arduino:: 3 stappen
Video: Modelspoor met Arduino DCC-EX deel 10: Twee uitbreidingen MCP23017 aansluiten op I2C. 2024, Juli-
Anonim
Image
Image
Arduino Code - Commandostation met toetsenbord
Arduino Code - Commandostation met toetsenbord

Bijgewerkt augustus 2018 - zie nieuwe Instructable:

Update 28 april 2016: Nu 16 wissel-/puntencontrolemogelijkheden naar Command Station. De wissels T1 - T8 zijn bereikbaar via 'B'-toetsDe wissels T9 - T16 zijn beschikbaar via 'C'-toets

Update 10 maart 2016:

Nu 8 wissel- / wisselbesturingsmogelijkheid toegevoegd aan Command Station. De Arduino-code is dienovereenkomstig bijgewerkt met behulp van het NMRA-standaardpakket voor wissels (ook gebaseerd op een studie van Lenz / Atlas Compact-gegevenspakketten voor wisselbesturing).

De wissels T1 - T8 zijn beschikbaar via 'B'-toets

Zie de instructie over het gebruikte datapakketontvangercircuit en de vereiste Arduino-code.

Update 18 januari 2016:

Ik heb een stroomdetectieweerstand (1k5 ohm) en condensator (10 uf) aan het circuit toegevoegd en de Arduino-code aangepast om de stroom uit te schakelen wanneer een piekstroom van> 3200 mAmps wordt gedetecteerd. De H-brugspecificatie vermeldt een uitgangsdetectiestroom van 377 uA per 1 Ampère in de belasting.

De weerstand van 1,5 k ohm levert 0,565 volt per ampère op analoge pin 6. Met 1023 stappen op de analoge ingang geeft dit 0,565 * 1023 / 5 = 116 per ampère belasting.

A = 100 * (analoog lezen (AN_CURRENT)) / 116; A = A * 10; (om het resultaat in milliampères te geven)

De belastingsstroom in milliampère wordt weergegeven op de TFT

Het volledige 4x4-toetsenbord bevat F1 tot F8-functies en nog eens 10 locomotieven (1-19) via de '#'-toets (om 10 toe te voegen aan de numerieke toetsen vanaf locomotief 10).

De Arduino-code bevat de NMRA-standaard voor instructiebytes.

Zie link

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

(pagina 6 is van bijzonder belang)

De pakketten zijn gerangschikt volgens aantal snelheidsstappen, lang / kort adres en functiegroepinstructies.

Alle instructiebytes worden voorafgegaan door een preambule van '1'-bits 11111111 (of inactief pakket) gevolgd door;

bijv. A 4-byte adres 0 00000011 0 00111111 0 10000011 0 10111111

komt overeen met loc 3, 128 snelheidsstappen, voorwaartse richting en snelheidsstap 3 (de eindbyte is de foutcontrole XOR)

bijv. Een adres van 3 bytes 0 00000011 0 10010000 0 10110011

komt overeen met locomotief 3, functiegroep 1, FL-lampjes aan plus XOR-byte (een '0'-bit scheidt elke byte)

Zie bijgevoegde demonstratievideo voor loc 12.

De functies F1 - F8 zijn beschikbaar via 'A' toets, DIR ('*' toets = richting) FL ('0' toets = lichten) en toets '#' geeft locs 10 t/m 19 op het numerieke toetsenbord. De 'D'-toets wordt nu gebruikt voor een 'Noodstop'.

Met dank aan verschillende aanbieders op het web voor bronnen van DCC-informatie en Arduino-code.

Dit project werd met name geïnspireerd door Michael Blank en zijn 'Simple DCC - a command station'

www.oscale.net/en/simpledcc

4x4 Matrix Array 16 Key Membrane Switch Keypad (ebay) £ 1,75

2.2 inch 240x320 seriële SPI TFT LCD-displaymodule (ebay) £ 7,19

UNIVERSELE 12V 5A 60W VOEDING AC-ADAPTER (ebay) £ 6,49

Nano V3.0 voor Arduino met CH340G 5V 16M compatibel ATmega328P (ebay) 2 x £ 3,30 = £ 6,60

Motor Driver Module LMD18200T voor Arduino R3 (ebay) £6,99

Connectoren, draad, vero-bord, potentiometer ongeveer £ 3,50

Totaal £ 32,52

De basiscentrale zonder tft-scherm en 1 x nano zou £ 22,03 zijn

[Opmerking: het is mogelijk om een geheugenkaart aan het TFT-scherm toe te voegen en de code aan te passen om afbeeldingen van geselecteerde motoren weer te geven, hoewel de bibliotheekcodes moeten worden aangepast om meer geheugen voor de schets te creëren. Huidige schetsgrootte is maximaal voor de TFT Arduino Nano]

De originele Arduino-code van Michael Blank was voor één motor, alleen vooruit / achteruit zonder functiecontrole, geen toetsenbord en geen display.

Ik heb de code aangepast om 1 - 19 motoren, een scherm, richting, lichten, 8 functies, noodstop en automatische stroombegrenzing op te nemen.

De LMD18200T-brug kan tot 3 ampère dragen, waardoor hij geschikt is voor alle schalen, inclusief G-schaal (tuintreinen). De netvoeding en elektronica zijn alleen geschikt voor gebruik binnenshuis, tenzij je het weerbestendig kunt maken. Ik heb de commandopost in het zomerhuis met spoorverbindingsdraden die door de muur naar het spoor lopen.

Stap 1: Arduino Code - Command Station met toetsenbord

Mijn dank aan tvantenna2759 voor het wijzen op 2 fouten in het schakelschema waar de Arduino-code niet overeenkwam met de bedrading, nu bijgewerkt (21 oktober 2017).

Nu 16 wissels toegevoegd aan Command Station. Zie instructable op het schakelschema van de wissel / punten met behulp van de Arduino Mini Pro-module.

De aangepaste code inclusief wisselcontrole is hieronder bijgevoegd.

Basisaccessoire-decoderpakket is: 0 10AAAAAA 0 1AAACDDD 0 EEEEEEE 1 Uit analyse van het pakket dat door Lenz (Compact / Atlas) wordt gebruikt voor puntencontrole, heb ik het volgende binaire pakketformaat gebruikt voor bytes 1 en 2: tunAddr = 1 Wissel 1a: 1000 0001 1111 1000 / Wissel 1b: 1000 0001 1111 1001 Wissel 2a: 1000 0001 1111 1010 / Wissel 2b: 1000 0001 1111 1011 Wissel 3a: 1000 0001 1111 1100 / Wissel 3b: 1000 0001 1111 1101 Wissel 4a: 1000 0001 1111 1110 / Wissel 4b: 1000 0001 1111 1111 tunAddr = 2 ----------------------------------------- -------------------------------------------------- ----------------- Wissel 5a: 1000 0010 1111 1000 / Wissel 5b: 1000 0010 1111 1001 Wissel 6a: 1000 0010 1111 1010 / Wissel 6b: 1000 0010 1111 1011 Wissel 7a: 1000 0010 1111 1100 / Wissel 7b: 1000 0010 1111 1101 Wissel 8a: 1000 0010 1111 1110 / Wissel 8b: 1000 0010 1111 1111 ----------------------- -------------------------------------------------- ---------------------------------- Opkomst 9a: 1000 0011 1111 1000 / Opkomst 9b: 1000 0011 1111 1001 enz ………

Uittreksel uit gewijzigde code: voeg nog 2 'struct'-berichtupdates toevoid amendement_tun1 (struct Message & x) { x.data[0] = 0x81; // accessoire decoder 0x80 & adres 1 x.data [1] = 0; }

void amendement_tun2 (struct Message & x) { x.data [0] = 0x82; // accessoire decoder 0x80 & adres 2 x.data [1] = 0; }

Nieuwe leegte voor wissels toevoegen:boolean read_turnout() { delay(20);

boolean gewijzigd_t = false; get_key();

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

gegevens = 0xf8; // = binair 1111 1000

amendement_tun1(msg[1]);

}

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

gegevens = 0xf8; // = binair 1111 1000

amendement_tun2(msg[1]);

}

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

als (tun1 == 1){

gegevens |= 0; // t1a

gewijzigd_t = waar;}

als (tun1 == 0){

gegevens |= 0x01; // t1b

gewijzigd_t = waar;}

}

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

als (tun2 == 1){

gegevens |= 0x02; // t2a

gewijzigd_t = waar;

}

als (tun2 == 0){

gegevens |= 0x03; // t2b

gewijzigd_t = waar; }

}

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

als (tun3 == 1){

gegevens |= 0x04; // t3a

gewijzigd_t = waar;

}

als (tun3 == 0){

gegevens |= 0x05; // t3b

gewijzigd_t = waar;}

}

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

als (tun4 == 1){

gegevens |= 0x06; // t4a

gewijzigd_t = waar;

}

als (tun4 == 0){

gegevens |= 0x07; // f4b

gewijzigd_t = waar;}

}

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

als (tun5 == 1){

gegevens |= 0; // t5a

gewijzigd_t = waar;

}

als (tun5 == 0){

gegevens |= 0x01; // t5b

gewijzigd_t = waar;}

}

enzovoort ………………….

Stap 2: 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
Arduino-code - TFT-display

Het weergavecircuit blijft hetzelfde met een aangepaste code om de status van de 16 wissels weer te geven. Opmerking: de bibliotheekcode neemt bijna al het schetscodegeheugen in beslag, waardoor er weinig ruimte is voor nieuwe functies. Als iemand een efficiënter bibliotheekbestand heeft voor de hier gebruikte TFT, laat het me dan weten.

Stap 3: Wisselcontroller

Wisselcontroller
Wisselcontroller
Wisselcontroller
Wisselcontroller

Zie instructable over het maken van de wissel / punten-controller.

De complete schakeling regelt 16 wissels en 15 accessoires zoals licht, geluid, draaitafel, etc.

Aanbevolen: