MARDEC, de Multifunctionele DCC decoder met Arduino voor dcc-rijders.

Gestart door NTeering, 24 juni 2016, 14:21:23 PM

NTeering

Inleiding
Het gebruik van een Arduino microcomputer in de modelspoorbouw is bij velen wel bekend.
Echter het daadwerkelijk zelf toepassen is voor de meesten een brug te ver.
Het programmeren of het doen van eenvoudige aanpassingen in een programma wordt toch als een groot probleem gezien.
Daardoor blijft de Arduino het domein van een zeer beperkte groep met wat meer technische kennis.
Dat is jammer, want met de Arduino kun je heel je modelspoorbaan goedkoop automatiseren.
Om de Arduino voor iedereen bereikbaar te maken heb ik daarom een programma gemaakt voor een Multifunctionele DCC decoder voor servo's en accessory's op basis van een Arduino.
Met dit programma is het niet meer nodig om zelf nog maar één letter Arduino-code te schrijven.
Deze decoder heb ik MARDEC genoemd en is een vervolg op de servo decoder zoals beschreven in dit draadje.

Net als bij iedere andere DCC decoder moet deze nog wel geconfigureerd worden. Dit configureren wordt meestal ten onrechte programmeren genoemd.
Om spraakverwarring te voorkomen gebruik ik de term programmeren voor het schrijven van de Arduino-code en de term configureren voor het uitvoeren van het programma. Bij dit configureren worden de servo's ingesteld.

Het programma werkt in twee verschillende 'toestanden'.
In de configureerstand kunnen de servo's en accessory's worden ingeregeld middels één-letter commando's vanaf het toetsenbord. Hierbij communiceert de MARDEC via een USB-kabel met de computer. Hier zijn dus geen DCC signalen voor nodig.
Middels een specifiek commando ('E') wordt overgegaan naar de bedrijfstoestand.
In de bedrijfstoestand worden de servo's aangestuurd met het DCC signaal. Er is dan geen USB-kabel meer nodig. Door het sturen van een specifiek, zelf te bepalen, DCC adres wordt weer overgeschakeld naar de configureerstand.

Waarom een Arduino?
De belangrijkste reden is de prijs. Je moet ze dan wel in China bestellen bij b.v. nl.Aliexpress.com
Een andere reden is het gemak waarmee alles geconfigureerd kan worden. Dat gebeurt geheel interactief en er is geen DCC-centrale voor nodig.

De installatie van alle software is zeer gebruiksvriendelijk. Hierbij wordt alle vereiste software in één keer geïnstalleerd. Ook het uploaden van het decoder programma naar de Arduino gaat geheel automatisch.

Mogelijkheden
De MARDEC decoder kent de volgende mogelijkheden:
•   Aansturen van maximaal 12 servo's t.b.v.  wisselaandrijving zonder puntstukpolarisatie of maximaal 9 servo's met puntstukpolarisatie. De puntstukpolarisatie wordt gerealiseerd middels een extern relais.
•   Het op 10 manieren aansturen van accessory's, waaronder aansturing van wisselspoelen en variabele PWM aansturing.
•   Interactief, via beeldscherm en toetsenbord dus, configureren van de servo's en accessory's. Dat is geheel onafhankelijk van de gebruikte DCC centrale. Hierbij is de Arduino software NIET nodig.
•   Van iedere servo apart kunnen de begin- en eindhoek op de graad nauwkeurig worden ingesteld.
•   Een random DCC adres (1-2048) toekennen aan iedere servo of accessory.
Dus niet noodzakelijkerwijs opeenvolgende adressen.
•   Iedere servo (max. 8 ) kan worden gekoppeld met een relais voor puntstukpolarisatie.
Bij het verdraaien van de servo zal, halverwege de verdraaiing, dit relais worden omgezet.
•   Voor iedere servo kan een aparte draaisnelheid worden ingesteld. Hierdoor kunnen servo's makkelijker voor andere doelen worden gebruikt dan alleen wisselaandrijving
•   Een test optie. Hierbij gaan alle servo's twee maal heen-en weer gaan en worden accessory's geactiveerd.
•   Vastleggen van 'inversie'. Hiermee kan worden ingesteld of een wissel bij bv een verdraaiing naar de kleinste hoek rechtdoor of afbuigend moet worden gezet. Dit is nodig omdat de servo op meerdere manieren gemonteerd kan worden.
•   Een documentatie optie waarmee alle instellingen worden getoond.
•   Het toekennen van een administratief nummer aan iedere servo/accessory.
•   Een reset optie waarbij alle instellingen uit het geheugen van de MARDEC verwijderd worden.
•   Instelbare default snelheid van de servo arm (5-50 ms. per graad).
•   Vastleggen van het DCC adres waarmee de decoder naar de configuratie toestand gaat. (Default 1000)
•   Vastleggen van het DCC adres waarmee de servo- en accessorystanden worden opgeslagen. Na een herstart worden de servo's en accessory's weer in deze stand teruggezet.
•   Een help optie toont alle commando's voor het configureren.
•   Een log-optie waarmee alle configuratiesessies worden bewaard.
•   Onafhankelijk van gebruikte busstructuur (LocoNet, S88 e.d). De aansturing is echter specifiek voor DCC.
•   Accessory's kennen de volgende opties:
1.   Single steady. Hierbij is 'n pin permanent hoog of laag afhankelijk van de aansturing.
2.   Double steady. Zelfde als single steady, echter een tweede pin heeft de 'omgekeerde' waarde.
3.   Single flashing. Hierbij gaat een pin afwisselend hoog(aan) en laag(uit). De 'aan'-tijd en de 'uit-tijd zijn afzonderlijk instelbaar.
4.   Double flashing. Zelfde als single double, echter een tweede pin heeft de 'omgekeerde' waarde.
5.   Single one shot. Hierbij gaat een pin een korte instelbare tijd even hoog als de aansturing van laag naar hoog gaat.
6.   Double one shot. Hierbij gaat een pin een korte instelbare tijd even 'hoog' als de aansturing van laag naar hoog gaat en een andere pin als deze van hoog naar laag gaat. Hiermee kunnen dus ook wisselspoelen aangestuurd worden.
7.   Analoge (PWM) aansturing. Hierbij gaat een pin, in een apart instelbare tijd, van 0 tot een instelbaar maximum (max. 255) als de aansturing van laag naar hoog gaat en weer terug naar 0, in een apart instelbare tijd, als de aansturing van hoog naar laag gaat.
8.   Flicker mode. Hiermee kun je een aangesloten led laten flikkeren. Met geschikte leds kun je bv. vuur of een laslicht simuleren.
9.   Random on/off. Hiermee kun je een aangesloten led voortdurend aan en uit laten gaan. De aan en uit tijden worden willekeurig (random) bepaald tussen twee instelbare grenzen.(2-500 sec.)
10.   Disco lights. Hiermee kun je een led random snel aan- en uit laten gaan tussen twee instelbare grenzen. (20-500 millisec.)

Het programma zelf is Engelstalig. De handleidingen zijn in het Nederlands.
Uiteraard gaat het om een eerste beta versie. Dus ik ben bij deze verontschuldigd voor eventuele fouten.

Een voorbeeld dialoog:

MARDEC, the Multifunctional ARduino dcc DECoder
USB version 1.0

Specify number for this MARDEC
Enter value between 1 and 100: 1
This is your MARDEC number 1

Starting configuration of MARDEC 1

Please specify action
P/R/T/D/C/S/M/E/?: p

Specify pin number
3-12,14-19: 3
Pin is undefined. First specify DCC address

Set DCC address for pin 3
Enter value between 1 and 2048: 1
DCC Address set to 1

Specify Accessory(1) or Servo(2)
Enter value between 1 and 2: 2
Pin 3 set as Servo pin.
Servo 0 on pin 3 and address 1 set to 75 degrees

Specify action for Servo on pin 3
A/N/9/+/-/C/F/D/T/M/I/?/enter: -
LOW angle set to 74

Specify action for Servo on pin 3
A/N/9/+/-/C/F/D/T/M/I/?/enter: c
Servo 0 on pin 3 and address 1 set to 105 degrees
Angle set to HIGH: 105

Specify action for Servo on pin 3
A/N/9/+/-/C/F/D/T/M/I/?/enter: +
HIGH angle set to 106

Specify action for Servo on pin 3
A/N/9/+/-/C/F/D/T/M/I/?/enter: f

Specify frog pin for servo on pin 3
3-12,14-19: 19
Pin 19 set as frog pin for servo on pin 3

Specify action for Servo on pin 3
A/N/9/+/-/C/F/D/T/M/I/?/enter: t
Testing servo 0 on pin 3
Servo 0 on pin 3 and address 1 set to 74 degrees
Servo 0 on pin 3 and address 1 set to 106 degrees
Servo 0 on pin 3 and address 1 set to 74 degrees
Servo 0 on pin 3 and address 1 set to 106 degrees

Specify action for Servo on pin 3
A/N/9/+/-/C/F/D/T/M/I/?/enter:

Pin settings are saved!

Please specify action
P/R/T/D/C/S/M/E/?: p

Specify pin number
3-12,14-19: 4
Pin is undefined. First specify DCC address

Set DCC address for pin 4
Enter value between 1 and 2048: 2
DCC Address set to 2

Specify Accessory(1) or Servo(2)
Enter value between 1 and 2: 1
Pin 4 set as Accessory pin.

Specify mode for this accessory
Enter value between 1 and 7: 4
Mode set to Double Flashing.

Specify companion pin for accessory on pin 4
3-12,14-19: 18
Pin 18 set as companion pin for accesory on pin 4

Specify 'on' time:
Enter value between 100 and 5000: 300
'On' time set to 300 msec.

Specify 'off' time:
Enter value between 100 and 5000: 300
'Off' time set to 300 msec.

Specify action for Accessory on pin 4
A/N/H/L/M/C/?/D/T/F/R/enter: t
Testing accessory 0 on pin 4 in double flashing mode
Accessory 0 on pin 4 and address 2 started flashing
Accessory 0 on pin 4 and address 2 stopped flashing

Specify action for Accessory on pin 4
A/N/H/L/M/C/?/D/T/F/R/enter:

Pin settings are saved!

Please specify action
P/R/T/D/C/S/M/E/?: d

Settings of MARDEC number 1

Pin  3: Servo with DCC 1, Nr 0, Angles 74/106, Frog pin 19, no Inversion, Speed 25
Pin  4: Accessory with DCC 2, Nr 0, Double Flashing, Comp. 18, Time 300/300
Pin  5: not used
Pin  6: not used
Pin  7: not used
Pin  8: not used
Pin  9: not used
Pin 10: not used
Pin 11: not used
Pin 12: not used
Pin 14: not used
Pin 15: not used
Pin 16: not used
Pin 17: not used
Pin 18: Companion pin for pin 4
Pin 19: Frog pin for pin 3

Default Servo speed: 25 ms/step
DCC address to start configuration mode: 1000
DCC address to save servo settings: 1001

Please specify action
P/R/T/D/C/S/M/E/?:


In deze dialoog gebeurt het volgende:
- Selecteren van Pin 3
- Pin 3 als servo pin instellen
- Een DCC-adres toekennen aan pin 3 (1)
- De 'lage' hoek een graad aflagen.
- Met het C-commando de 'hoge' hoek selecteren.
- Deze hoek met één graad ophogen.
- Met het F-commando een 'frogpin' toekennen (aan deze pin komt het relais voor eventuele puntstukpolarisatie)
- Met het T-commando testen van de servo
- Met <enter> de wijzigingen opslaan en terug naar 'algemene commando's'.
- Met het D-commando een overzicht tonen.
- Selecteren van pin 4
- Pin 4 als accessory pin instellen met mode 4 (double flashing).
- Ingeven van de 'aan'-en 'uit'-tijden.
- Testen van de instellingen.
- Met het D-commando een overzicht van de instellingen weergeven.

Meer weten?
Bekijk dan deze downloads:

Downloads:

Handleiding MARDEC decoder
---------------------------
Alle MARDEC software inclusief de Arduino IDE 1.6.6
MARDEC Installatie handleiding (volledig)
----------------------------
MARDEC software zonder Arduino IDE
Installatie handleiding (MARDEC only)
----------------------------
Alleen CH340 drivers
Deze zijn nodig als je een Chinese Arduino hebt.

Wie durft?

More DCC fun with MARDEC!

Groetjes
Nico

PietB