Pendelbaan met DCC-EX en EXRAIL

Plaats reactie
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 536
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Pendelbaan met DCC-EX en EXRAIL

Bericht door Momfer »

In de wekelijkse update van het DCC-EX Discord kanaal is ditmaal een voorbeeld geplaatst van een eenvoudige pendelbaan. Aangezien dit onderwerp regelmatig op dit forum wordt besproken, leek het me nuttig om het (ver-/hertaald) hier te plaatsen:

In deze update wordt één van de functies benadrukt die zijn toegevoegd aan DCC++EX en het heet EX-Rail. Het gebruik ervan is eenvoudig, aangezien er alleen een bestand met de naam myAutomation.h hoeft aan te maken in dezelfde map als de bestanden van de centrale. Wanneer DCC++EX opstart, zoekt het naar die bestandsnaam en als het vindt, voert het de daar gevonden opdrachten uit.

Laten we eens kijken naar het maken van een commandoset voor het heen en weer bewegen van een trein (vzv DCC decoder) met behulp van 2 IR-sensoren, die zijn aangesloten op pinnen 31 en 33 van een Arduino Mega.

Code: Selecteer alles

SEQUENCE (10)  // Naam van de procedure
  DELAYRANDOM (10000,15000) // Willekeurige vertraging tussen 10 en 15 seconden
  SETLOCO(555)              // Selecteer de lok met DCC-adres, aanpassen voor eigen toepassing
  FON(0)                    // Schakelt frontsein aan
  FWD(75)                   // Vooruit met DCC-snelheid 75 (waarde mag 0-127 zijn)
  AT(31)                    // Als de sensor op pin 31 geactiveerd wordt, dan....
  STOP                      // .....stopt de motor 
  DELAYRANDOM (10000,15000) // Willekeurige vertraging tussen 10 en 15 seconden
  REV(75)                   // Achteruit bij DCC-snelheid 75 (0-127)
  AT(33)                    // Als de sensor op pin 33 geactiveerd wordt, dan....
  STOP                      // .....stopt de motor.
  FOLLOW (10)               // Vervolg met SEQUENCE (10) 
Het bovenstaande voorbeeld is ook te vinden op de DCC++EX website. Het is mogelijk om seinen en zelfs geluid via een MP-speler toe te voegen. Dit is een voorbeeld van de vele mogelijkheden van DCC++EX.

Hieronder staat het schema van de aansluitingen welke horen bij het bovenstaande EX-RAIL voorbeeld:

Afbeelding

En dat ziet er dan zo uit:


BRON: Discord Kanaal DCC-EX


Groet,
Rico (momfer)

Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 536
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Pendelbaan met DCC-EX en EXRAIL, 3 individuele locs

Bericht door Momfer »

DCC-EX EXRAIL voorbeeld 7



Een Arduino MEGA met DCC-EX, een EXRAIL script, 4 bezetmelders (Okkie 8) en 4 blokken.

De Arduino stuurt alles zelf aan, dus geen computer, geen throttles (bv Engine Driver of WiThrottle).

Laatst gewijzigd door Momfer op 21 jun 2022 20:35, 2 keer totaal gewijzigd.


Gebruikersavatar

maarten
Moderator
Berichten: 3594
Lid geworden op: 07 nov 2010 20:05
Locatie: Oosterhout

Re: Pendelbaan met DCC-EX en EXRAIL

Bericht door maarten »

Ziet er wel interessant uit voor een diorama/minibaantje!


Groeten,
Maarten

Onder andere bouwer van Rock's End en NV De Vleeshouwer. Nu weer bezig met Polar Express.
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 536
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Pendelbaan met DCC-EX en EXRAIL

Bericht door Momfer »

Daar is het zeker goed voor te gebruiken. Mijn kerstbaantje is hier ook een voorbeeld van.

Er wordt steeds meer mogelijk gemaakt in EXRAIL, waardoor het nog beter ingeregeld kan worden, inclusief wissels, seinen, etc.


Groet,
Rico (momfer)

Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 536
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Pendelbaan met DCC-EX en EXRAIL

Bericht door Momfer »

Opzet

Afbeelding

De wissels worden (nog) niet bediend, ze worden dus opengereden.

EXRAIL Script

Code: Selecteer alles

/**
 *  EXRAIL Voorbeeld 7: Rijden met meerdere, onderling afhankelijke, treinen
 *  Losjes gebaseerd op: https://tinyurl.com/EXRAIL-Example-7 
 *  Vid 1: https://youtu.be/BgbBqUjDQhE
 *  Vid 2: https://youtu.be/WlRzKQ4P3l0
 *
 *                                ←
 *                      ┌─[ BLOCK 3 (S25) ]──┐
 *                      │                    │
 *  ├─[ BLOCK 1 (S22) ]─┴─[ BLOCK 2 (S23) ]──┴──[ BLOCK 4 (S24) ]─┤
 *            ↔         T1        →          T2         ↔
 */
 
/**
 * Wachten tot DCC-EX volledig is opgestart
 */
DELAY(15000)

/**
 * Reserveer de blokken waarin de lokomotieven worden geplaatst
 */
RESERVE(1) PRINT("RESERVED BLOCK 1")
RESERVE(3) PRINT("RESERVED BLOCK 3")
RESERVE(4) PRINT("RESERVED BLOCK 4")

/**
 * Selecteer lok, zet frontsein aan, stuur naar naar de juiste sequence 
 */
PRINT("Plaats LOK18 in BLOK 1, LOK 10 in BLOK 4, LOK 218 in BLOK 3")
SETLOCO(18)  FON(0) SENDLOCO(18, 12) PRINT("SETLOCO(18)  FON(0) SENDLOCO(18, 12)") 
SETLOCO(10)  FON(0) SENDLOCO(10, 43) PRINT("SETLOCO(10)  FON(0) SENDLOCO(10, 43)")
SETLOCO(218) FON(0) SENDLOCO(218,31) PRINT("SETLOCO(218) FON(0) SENDLOCO(218,31)")

/**
 * Pauzeer EXRAIL en wacht op RESUME om te starten
 * Dat kan vanuit de Serial Monitor of via de ROUTE optie van Engine Driver/WiThrottle
 */
PRINT("UItvoer gepauseerd (PAUSE), initialisatie voltooid (DONE)!")
PRINT("</RESUME> in Serial Monitor om de SEQUENCES te startemn")
PRINT("of gebruik de ROUTE functie van Engine Driver / WiThrottle,")
PAUSE 
DONE 

/**
 * Van Block 1 to Block 2
 */
SEQUENCE(12)
  RESERVE(2)
  DELAYRANDOM(2000,5000) // Willekeurige wachttijd van 2-5 seconden
  FWD(30)
  AT(23) // Sensor S23 == Block BK2
  DELAY(500)
  STOP
  FREE(1)
  DELAY(5000)
  FOLLOW(24) // ga vervolgens naar sequence 24
DONE

/**
 * From Block 2 to Block 4
 */
SEQUENCE(24)
  RESERVE(4)
  DELAYRANDOM(2000,5000) // Willekeurige wachttijd van 2-5 seconden
  FWD(35)
  AT(24) // Sensor S24 == Block BK4
  DELAY(650) 
  STOP
  DELAY(5000)
  FREE(2)
  FOLLOW(43) // ga vervolgens naar sequence 43
DONE

/**
 * From Block 4 to Block 3
 */
SEQUENCE(43)
  RESERVE(3)
  DELAYRANDOM(2000,5000) // Willekeurige wachttijd van 2-5 seconden
  REV(30)
  AT(25) // Sensor S25 == Block BK3
  DELAY(500)
  STOP
  DELAY(5000)
  FREE(4)
  FOLLOW(31) //  ga vervolgens naar sequence 31
DONE

/**
 * From Block 3 to Block 1
 */
SEQUENCE(31)
  RESERVE(1)
  DELAYRANDOM(2000,5000) // Willekeurige wachttijd van 2-5 seconden
  REV(32)
  AT(22) // Sensor S22 == Block BK1
  DELAY(800)
  STOP
  DELAY(5000)
  FREE(3)
  FOLLOW(12) //  ga vervolgens naar sequence 12
DONE

/**
 * Een Rooster van de gebruikte loks, tbv Engine Driver of WiThrottle
 */
ROSTER(10,"V200","Light")
ROSTER(18,"BR218-RED","Light")
ROSTER(218,"BR218-OCEAN","Light")

/* 
 *  Maakt PAUSE en RESUME mogelijk in 
 *       Engine Driver / WiThrottle
 */

AUTOMATION(98, "PAUSE the SEQUENCES")
 PAUSE
 PRINT("EXRAIL SEQUENCES RESUMED.")
 DONE

AUTOMATION(99, "RESUME the SEQUENCES")
 RESUME
 PRINT("EXRAIL SEQUENCES RESUMED.")
 DONE



Groet,
Rico (momfer)

Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL

DuinWit
Berichten: 4
Lid geworden op: 22 apr 2023 19:28

Re: Pendelbaan met DCC-EX en EXRAIL

Bericht door DuinWit »

Bedankt voor je uitleg.
Wat ik echter mis is de aansturing van de wissels. Heb je deze inmiddels ook toegevoegd in je sketch?


Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 536
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Pendelbaan met DCC-EX en EXRAIL

Bericht door Momfer »

Onderstaande codevoorbeeld geeft een oplossing voor het aansturen van traditionele wissels weer. DCC-EX heeft geen standaard oplossing voor het schakelen van dit soort wissels, vandaar het gebruik van VIRTUAL_TURNOUT.

Ik hoop dat je hiermee een idee hebt hoe je het kunt oplossen.

Code: Selecteer alles

// Voorbeeld van het schakelen van wissels met dubbele spoelaandrijving
// Zoals Fleischmann, (Mini)trix, Roco, Atlas en 

// Wissel voorinstellingen

#define PULSE  200   // schakeltijd in millisecondes, 50-250ms is gangbaar

// Pinnummers zijn voorbeelden, aanpassen voor eigen gebruik.
#define WISSEL1_T  22   // pinnummer voor WISSEL 1 afbuigend (thrown)
#define WISSEL1_C  24   // pinnummer voor WISSEL 1 rechtdoor (close)
#define WISSEL2_T  23   // pinnummer voor WISSEL 2 afbuigend (thrown)
#define WISSEL2_C  25   // pinnummer voor WISSEL 2 rechtdoor (close)

// Een ALIAS kan de leesbaarheid vergroten
ALIAS(WISSEL1, 9998) // hoge waardes voor de virtuele wissels. 
ALIAS(WISSEL2, 9999) // Het pinnummer hoeft niet te bestaan


// Deze virtuele wissels zorgt ervoor dat de spoel
// kortstondig wordt geactiveerd. De tijdsduur is
// in te stellen door de waarde achter PULSE te
// verhogen of te verlagen. 50 - 250ms is gangbaar.
// De eventuele beschrijvingen zijn zichtbaar in Engine Driver.

VIRTUAL_TURNOUT(WISSEL1, "eventuele beschrijving 1")
 ONCLOSE(WISSEL1)
  SET(WISSEL1_C)
  DELAY(PULSE)
  RESET(WISSEL1_C)
 DONE
 ONTHROW(WISSEL1)
  SET(WISSEL1_T)
  DELAY(PULSE)
  RESET(WISSEL1_T)
 DONE

VIRTUAL_TURNOUT(WISSEL2, "eventuele beschrijving 2")
 ONCLOSE(WISSEL2)
  SET(WISSEL2_C)
  DELAY(PULSE)
  RESET(WISSEL2_C)
 DONE
 ONTHROW(WISSEL2)
  SET(WISSEL2_T)
  DELAY(PULSE)
  RESET(WISSEL2_T)
 DONE

// In de EX-RAIL scripts zijn de wissels nu te gebruiken met
// THROW(WISSEL1) en CLOSE(WISSEL1)
// THROW(WISSEL2) en CLOSE(WISSEL2)
In de eerste sequence kun je het dan als volgt gebruiken:

Code: Selecteer alles

SEQUENCE(12)
  RESERVE(2)
  CLOSE(WISSEL1) 
  DELAYRANDOM(2000,5000) // Willekeurige wachttijd van 2-5 seconden
  FWD(30)
  AT(23) // Sensor S23 == Block BK2
  DELAY(500)
  STOP
  FREE(1)
  DELAY(5000)
  FOLLOW(24) // ga vervolgens naar sequence 24
DONE
Bij het starten van het EXRAIL script is het verstandig om voor de wissels een startroutine te maken, zodat je zeker weet dat de wissels in een bekende stand staan. In Rocrail, Koploper en iTrain worden dergelijk routines ook gebruikt.


Plaats reactie