Pagina 1 van 1

Pendelbaan met DCC-EX en EXRAIL

Geplaatst: 29 mei 2022 12:43
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

Pendelbaan met DCC-EX en EXRAIL, 3 individuele locs

Geplaatst: 20 jun 2022 20:21
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).


Re: Pendelbaan met DCC-EX en EXRAIL

Geplaatst: 21 jun 2022 11:02
door maarten
Ziet er wel interessant uit voor een diorama/minibaantje!

Re: Pendelbaan met DCC-EX en EXRAIL

Geplaatst: 21 jun 2022 13:14
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.

Re: Pendelbaan met DCC-EX en EXRAIL

Geplaatst: 21 jun 2022 20:12
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


Re: Pendelbaan met DCC-EX en EXRAIL

Geplaatst: 30 dec 2023 21:29
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?

Re: Pendelbaan met DCC-EX en EXRAIL

Geplaatst: 30 dec 2023 22:14
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.