BeneluxSpoor.net forum
Vraag en antwoord => Digitaal => Topic gestart door: JWS op 31 October 2022, 15:58:26
-
Goedemiddag,
Ik heb een handmatige arduino+toetsenbord besturing tbv de oude M-draaischijf 7186, een ontwerp van Markus Schild( https://www.marklin-users.net/forum/posts/t31505-Old-turntable-7186-controlled-with-ARDUINO) nagebouwd, en het werkt! Soms wat mechanische storing vd draaischijf zelf, maar dat is de ouderdom.
Mijn vraag (loop ik al een jaartje of wat mee rond) is of en hoe ik dat membraamtoetsenbord met 8 draadjes naar de arduino eenvoudig (zelf!?) kan vervangen middels een DCC gestuurd apparaatje, wat vervolgens ook door koploper kan worden bestuurd.
Als ik cijfer 1 indruk, gaat de draaischijf naar spooraansluiting 1, druk ik vervolgens opnieuw 1 in, dan draait de schijf 180 graden. Druk ik daarna 4 in, gaat de schijf via de kortste weg naar spoor 4. Dit werkt en zou moeten gelden voor 0 tm 9 (10 sporen). Er is ook nog een reset mogelijkheid door indrukken van * en # op het toetsenbord. Dat laaste hoeft niet persé digitaal te gebeuren.
Ik heb me ingeschreven voor de eerstkomende Arcomora levering, doch voorlopig nog een absolute leek op dit gebied. Zijn er simpele oplossingen te bedenken zodat Koploper gericht naar bv spoor 1 kan sturen, maw 1 vd cijfers vh toetsenbord kan aansturen. Bv gebruikmakend van een wisseldecoder? Als eea ook nog in automatisch verkeer zou kunnen worden verwerkt?
Met vr groet,
Jan Willem
-
Wat je kan is "relatief simpel".
Je kan zelf met een 6n137 optocoupler een DCC interface maken voor je Arduino. Als je google't op Arduino DCC interface, dan vind je schema's.
Voor Arduino Nano's heb ik DCC shields ontworpen. Als je een uno heb, kan je het makkelijkste een prototype shield kopen en daar je DCC interface op maken.
Ik heb zelf met 2 libraries voor DCC Arduino's werkend gekregen. Ook dat valt reuze mee. Het is niet veel werk. Ik denk dat dat niet moeilijk is om in je code te knutselen.
Je kan even googlen voor de nmraDcc library of de dynabay DCC library.
Je kan 5 wissel adressen gebruiken om 10 standen te doen. Meer adressen kan altijd nog. Ik weet alleen niet hoe je koploper moet vertellen om je draaischijf om te draaien. Geen ervaring mee.
Je kan ook je code hier posten tussen [ c o d e] tags dan kan ik het voor je aanpassen.
Mvg,
Bas
-
Ha Bas,
"6n137 optocoupler een DCC interface maken voor je Arduino" is wellicht wat teveel voor mij.
Ik heb wel een link naar de code die erbij hoort, is dat wat je bedoelt?
[ https://dl.dropboxusercontent.com/s/mnynbv5u5dsob8t/drehscheibe430.ino]
met groet,
Jan Willem
-
Het is maar een half uurtje werk. Het is 1 ic een diode en 3 weerstandjes.
Google search gaf ook een kant en klare oplossing https://www.dccinterface.com/product/arduino-model-railway-dcc-interface/ (https://www.dccinterface.com/product/arduino-model-railway-dcc-interface/).
Mvg,
Bas
-
Als je toch al een Arduino Uno hebt, kun je er ook een motorshield op drukken en DCC-EX installeren. Dan heb je een DCC centrale.
Maar beter is het een Arduino Mega te gebruiken, dan heb je genoeg geheugen voor o.a. EX-Rail.
Met de scripttaal EX-RAIL zou je dan de commando's richting de draaischijf kunnen sturen.
Meer info: https://dcc-ex.com/ (https://dcc-ex.com/)
Ik vraag me alleen af of Koploper daarmee overweg kan, maar anders kun je altijd nog overstappen op Rocrail ;)
-
Waarom zou een analoog bediende draaischijf als DCC centrale moeten fungeren??
-
Ik heb geen behoefte aan een andere centrale, mijn IB doet t nog goed. Ik heb wel behoefte aan een manier om het effect van daadwerkelijk een toets indrukken op het membraantoetsenbord kan worden vervangen door bv adressering van dezelfde arduinoporten op een alternatieve manier. Bv via een puls uit een relais wat via een andere uno die op dcc manier aangesproken kan worden, wordt verstuurd. Of via een wisseldecoder DR4018?? Dus geen wijziging in de originele sketch, maar vervangen van het toetsenbord......
Ik ben een lerende leek, heb net een dccnext in elkaar gezet, die zou ik ook wel willen inzetten, als dat handig lijkt.....
Met groet,
Jan Willem
-
Dus geen wijziging in de originele sketch
Hier ontkom je niet aan. Normaal kan je een Arduino pin op een andere arduino aansluiten waar al een schakelaar op zit.
In het geval van je toetsennatrix is dat erg lastig. Je kan wel een DCC next koppelen door IO lijnen te verbinden maar dat is naar mijn mening erg moeilijk doen.
Ik heb een kant en klaar DCC shield. Die kan je met 2 of 3 draadjes verbinden aan jouw Arduino en dan ik je sketch aanpassen voor je. Die print heeft wel pin 2 nodig van je Arduino. Het is een kleine ingreep.
Mvg,
Bas
-
Ha Bas,
Hierbij de link naar de sketch. Op dit moment is o.a. pin 2 bezet door/met het toetsenbord.
Veel verder begrijp ik er niet van....
https://dl.dropbox.com/s/mnynbv5u5dsob8t/drehscheibe430.ino
met gr.
Jan Willem
-
Wat je zou kunnen doen is om met een dcc library uit te lezen welke functie toets is ingedrukt, en die waarde (1 voor F1, 2 voor F2 etc) te gebruiken om de toetsen te simuleren.
Dat zet je op de positie neer van
char tastaturinput = keypad.getKey();
if (tastaturinput != NO_KEY) {
int ziel = (tastaturinput - '0');
en dan stuur je het geheel aan door die waarde naar 'int ziel' te schrijven
-
Ik heb code aangepast:
https://www.dropbox.com/s/o4m5s14ltb0llfk/keypad_dcc.ino?dl=0 (https://www.dropbox.com/s/o4m5s14ltb0llfk/keypad_dcc.ino?dl=0)
Ik kon het niet thuis compileren omdat ik jouw keypad en blink libraries niet heb.
Voordat jij het kan compileren, moet je de Nmra library installeren. Dit kan gelukkig via de ingebouwde library manager en is kapot simpel.
klik: sketch -> include library -> manage libraries
(https://images.beneluxspoor.net/bnls_2022/deleteme1-639ee30f0416d.png) (https://images.beneluxspoor.net/bnls_2022/deleteme1-639ee30f0416d.png)
zoek op nmra en klik op instal bij NmraDCC
(https://images.beneluxspoor.net/bnls_2022/deleteme-639ee30eef4d4.png) (https://images.beneluxspoor.net/bnls_2022/deleteme-639ee30eef4d4.png)
Ik heb mijn wijzigingen voorzien met commentaar. Als je in de code op zoek gaat naar 'bask185' dan vind je alles.
Ik heb de library geïnclude en een dcc object gemaakt
#include <NmraDCC.h> // bask185: library must be installed into arduino IDE
NmraDcc dcc ; // bask185: DCC PIN MUST BE CONENCTED TO ARDUINO PIN 2
Ik had een variabele nodig om DCC informatie naar de draaischijf functie te krijgen.
char dccChar ; // global variable used to relay DCC information to the turntable control functions
De dcc communicatie moet geïnitialiseerd worden in void setup()
dcc.init( MAN_ID_DIY, DCC_DECODER_VERSION_NUM, FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER, 0 ); // bask185: init DCC library
Dan heb ik deze lapjes code toegevoegd aan void loop() om de DCC informatie te koppelen aan de rest.
char tastaturinput = keypad.getKey();
dccChar = 0 ; // bask185: reset every cycle
dcc.process() ; // process DCC packets
if( dccChar != 0 ) tastaturinput = dccKey ; // if valid DCC instruction is received, copy it to 'tastaturinput'
if (tastaturinput != NO_KEY) {
En het laatste is de zgn. 'callback functie'. Deze wordt aangeroepen door de DCC library (indirect vanuit dcc.process() ) en hier staan je adressen en standen voor accessoires.
Ik heb hier uit willekeur adressen 100 t/m 104 gekozen. Zo komt de stand 'wissel 100 recht' overeen met jouw membraan knopje '0'. En stand 'wissel 100 gebogen' met knopje '1'.
Je kan dit zelf aanpassen naar believen.
void notifyDccAccTurnoutOutput ( uint16 Addr, uint8 Direction, uint8 OutputPower ) // bask185: this is called when accessory is set
{
switch( Addr )
{
case 100: if( Direction == 1 ) dccChar = '0' ; // DCC accessory address 100 straight
else dccChar = '1' ; // DCC accessory address 100 curved
break ;
case 101: if( Direction == 1 ) dccChar = '2' ;
else dccChar = '3' ;
break ;
case 102: if( Direction == 1 ) dccChar = '4' ;
else dccChar = '5' ;
break ;
case 103: if( Direction == 1 ) dccChar = '6' ;
else dccChar = '7' ;
break ;
case 104: if( Direction == 1 ) dccChar = '8' ;
else dccChar = '9' ;
break ;
}
}
( het kan zijn dat ik recht en gebogen heb omgedraaid.... dan moet je Direction == 1 veranderen in Direction == 0)
Dan heb ik nog kleine toevoeging. Jouw keypad gebruikt pin 2, dat moet je aanpassen fysiek en in code omdat die DCC library pin 2 nodig heeft.
byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad bask185: pin 2 wordt gebruikt voor DCC, je moet andere pinnen gebruiken
byte colPins[COLS] = {6, 7, 8, 9}; //connect to the column pinouts of the keypad
Het schema voor DCC heb ik op mijn site (https://train-science.com/digitale-modelspoor-elektronica/#dcc) gezet.
(https://trainsciencecom.files.wordpress.com/2022/12/afbeelding-17.png?w=1024)
Ik kan je voor 2€ een stukje gaten print met de componentjes sturen dan kan je hem zelf in elkaar solderen. (grofweg 10~15m werk) Ik kan je ook een DCC shield sturen die ik voor een arduino nano gemaakt heb. Die kan je met 3 jumper kabels in je arduino uno pluggen, en hoef je niet te solderen. Maar voor deze vraag ik 6€ incl verzending.
Mvg,
Bas
-
Dank je wel voor de moeite Bas, Ik stuur je een pb voor nader contact
Met groet,
Jan Willem
-
Ha Bas,
Heb je mijn pb's ontvangen?
groet,
Jan Willem
-
Yes, I have. Kom er op terug
-
Voorlopig resultaat eindelijk bereikt.
Mbv Bas is de sketch van Markus (zie de link in het eerste bericht) aangepast en kan ik nu de oude draaischijf 7186 bedienen via de IB met DCC wisselcommamdo's. Met een arduino NANO en een DCC interface erop. Heb ook de draaischijfmotor gereinigd, blijft wel kritisch krijg ik de indruk.
Nu proberen om de draaischijf binnen koploper automatisch aan te gaan sturen. Intussen heeft Chris Burger een eigen decoder en een handleiding voor Koploper ontwikkeld, zie het koploperforum. Ik zal wel zo beetje de laatste zijn die op deze manier de draaischijf aan het digitale praten krijgt, was als leek in ieder geval een heel leuk traject. In plaats van sudoku's om de geest scherp te houden.........
met groet,
Jan Willem
-
Intussen verder gegaan met de besturing via Koploper, is aardig aan het lukken, 6 wissels aangemaakt, kan nu 12 DCC signalen naar de Arduino sturen. Daar wil ik wellicht 12 ontkoppelrailscontacten van maken. Doch er is o.a. 1 probleem, nl dat ik aansluitend op het klikken met de muis op de gewenste wissel cq stand vd draaischijf (die dan normaal gaat draaien) op mijn scherm aansluitend de melding krijg: verbinding met de centrale verbroken, en vervolgens de volgende foutmelding:
"Exception EComPort in module koploper.exe at 0001452A.
ClearCommError functiom failed (win error code:5)
en vervolgens wordt Koploper afgesloten (door Windows?).
Dit gebeurt dus alleen als ik via Koploper (met loconet aan de laptop) schakel via mijn IB65000
Als ik direct via het IB toetsenbord zonder Koploper schakel gaat alles goed.
Iemand enig idee wat er aan de hand zou kunnen zijn?
Met groet,
Jan Willem
-
Volgens https://www.koploperforum.nl/topic.asp?whichpage=0,56&TOPIC_ID=5256& (https://www.koploperforum.nl/topic.asp?whichpage=0,56&TOPIC_ID=5256&) is dat wss een probleem ergens tussen de IB en de PC. Je kan misschien proberen een andere usb kabel te gebruiken. Maar als het echt alleen maar gebeurt bij de draaischijf, lijkt het me dat ook niet.
Kan je wel op andere DCC items zoals wissels klikken?
Bas