BeneluxSpoor.net forum
Vraag en antwoord => Digitaal => Topic gestart door: Sven op 22 September 2016, 13:06:43
-
Het is onnodig om het wiel opnieuw uit te vinden, dus ik leg deze vraag even hier voor. Het lijkt me sterk als dit stukje programma al niet eerder geschreven is.
Wat ik heb is een ovaal met twee wissels en opstel"terrein" met twee sporen. Eigenlijk een standaard startset+ opstelling. Nu heb ik er twee treinen op rijden, in tegenovergestelde richting, en die moeten elkaar aflossen op het opstelterrein. Ik zal gaan werken met een magneet onder elke lok en reed contactjes, dus in feite zou ik dit met een relais zo al kunnen doen, rijrichting veranderen en wissels omzetten (kunnen evt ook gewoon open gereden worden). Maar wat ik wil is dat de tweede trein circa 10 seconden wacht met vertrekken als de eerste binnen is gekomen. Nu heb ik een Arduino Uno liggen waar ik tot nu toe alleen maar een Ledje mee heb laten knipperen en het lijkt me leuk om dat hiermee aan te sturen. Wellicht kan ik er nog andere functies aan koppelen. Het lijkt me een programmeerstukje uit de beginnersklas, dus hopelijk is het er al.
Kan iemand hier mee helpen?
-
startset: digitaal of analoog ??
-
Het is niet een startset, ik bedoelde meer het baanplan van een startset. Maar het antwoord op je vraag is analoog gelijkstroom. Het is voor mijn stoomtrammetjes.
-
Ok :)
Dus als ik het goed begrijp:
1) Loc + trein #1 rijdt een rondje clockwise,
2) #1 komt 'station' binnen, triggert 'stop'
3) na x tijd vertrekt Loc + trein #2 in tegengestelde richting
4) Loc + trein #2 rijdt een rondje couter clockwise,
5) #2 komt 'station' binnen, triggert 'stop'
6) na x tijd vertrekt Loc + trein #1 in tegengestelde richting
7) ga naar 1)
-
Exact, je hebt het al bijna geschreven als je er 'if' en 'go' voor in de plaats zet. :)
-
dit (http://modelrail.otenko.com/arduino/controlling-your-trains-with-an-arduino) dus?
of dit (http://ardutrain.blogspot.nl/)
-
Precies :)
Dus wat heb je nodig ?
1 x ompool relais
2 x on-off relais ( om de locs stroomloos te maken )
2 x reedcontact in de railsectie die je wilt uitschakelen.
Dus iig iets van een 'Relay-shield' met van die relais er op,
zoiets: (http://i.ebayimg.com/t/5V-4-Kanal-Relais-Modul-Shield-for-Arduino-UNO-R3-Four-Channel-Relay-Module-/00/s/MTEwMFgxMTAw/z/FmkAAOSwrklVZU8u/$_57.JPG) (http://www.ebay.de/itm/5V-4-Kanal-Relais-Modul-Shield-for-Arduino-UNO-R3-Four-Channel-Relay-Module-/171168404733?hash=item27da6e94fd:g:FmkAAOSwrklVZU8u)
Zitten er 4 op, met 2 ervan maak je je ompoler ;)
En dan een simpel progje in je arduino dat de reedcontacten scant en de acties doet (relais sturen).
Het voorbeeld van DJ is al iets meer geavanceerd, daarmee kun je ipv je ompoler ook de snelheid en rijrichting regelen ;)
Dit dus:
(http://i.ebayimg.com/t/L298P-Shield-R3-DC-Motor-Driver-Module-2A-H-Bridge-2-way-For-Arduino-UNO-2560-/00/s/MTAwMFgxMDAw/z/n8gAAOSwRoxXm2gm/$_57.JPG) (http://www.ebay.de/itm/L298P-Shield-R3-DC-Motor-Driver-Module-2A-H-Bridge-2-way-For-Arduino-UNO-2560-/172288087192?hash=item281d2b9498:g:n8gAAOSwRoxXm2gm)
die kan 2 x 2 Amp aan. Je hebt maar 1 kanaal nodig ;)
-
Die bestellijst heb ik helemaal. Ik heb nog wat oude Trix relais, eentje daarvan lijkt me hier wel geschikt voor.
Bedankt voor de info. Daar moet ik wel even goed voor gaan zitten om dat te laten bezinken, da's een boel informatie. Dat langzaam stoppen en starten wat ik daar lees bracht me wel op het idee om de locs een stop te laten maken aan de voorzijde van de layout. Moet de magneet wel in het midden onder een wagon, anders stopt elke trein weer op een andere plek. Zou dat allemaal met dezelfde Uno kunnen?
-
Dat analoog is in dit geval wel van belang. Om de treinen in tegengestelde richting te laten rijden zal je de spanning telkens moeten ompolen.
Goed, dan door naar het echte probleem ;D Natuurlijk kan dit maar je kan dit weer zo gek en ingewikkeld maken als je zelf wilt. Wil je alleen maar schakelen tussen de twee sporen (steeds met 10 seconde er tussen) of wil je het al gekker maken met optrekken, afremmen, seinen etc?
Wisssels
En wil je wel of niet de wissels aansturen? Aangezien ze in tegengestelde richting gaan zou je af kunnen met het open rijden van de wissels, Wil je de wissels aansturen kan dit met een transistor en een diode (en een weerstand als het een BJT is). Zoals hier (https://cdn-learn.adafruit.com/assets/assets/000/002/349/medium800/learn_arduino_schematic.jpg?1396782164) waar de motor dan de wissel is. Ook mag de wissel naar een andere voeding dan de 5V (zolang de GND van die andere voeding maar aan de Arduino GND hangt).
Relais
Ompolen kan makkelijk met een dubbelpolig relays (of twee enkele parallel). Makkelijkste is om gewoon een relais module te kopen. Als je zelf nog relais hebt dan heb je eigenlijk dezelfde schakeling nodig als voor wissels.
Snel een sketch in elkaar gegooid (maar makkelijk uit te breiden, ook naar meer sporen). Gaat uit van active HIGH relays en geen wissel aansturing.
byte track = 0;
bool waiting = false; //set to true if you want to start with waiting in the station
const byte TrackPins[] = {2, 3}; //connect between pin and GND
const byte ReedPins[sizeof(TrackPins)] = {4, 5};
const byte DirectionPin = 6;
const unsigned long WaitInterval = 10 * 1000UL;
unsigned long previousMillis = 0;
void setup() {
//setup ReedPins
for(byte i = 0; i < sizeof(ReedPins); i++){
pinMode(ReedPins[i], INPUT_PULLUP);
}
//setup TrackPins
for(byte i = 0; i < sizeof(TrackPins); i++){
pinMode(TrackPins[i], OUTPUT);
}
//setup direction pin
pinMode(DirectionPin, OUTPUT);
//if we don start with a wait, depart the first train!
if(!waiting){
departTrain();
}
}
void loop() {
//don't overshoot the number of tracks we have
if(track >= sizeof(TrackPins)){
track = 0;
}
//are we waiting in the station?
if(waiting){
//done waiting?
if(millis() - previousMillis >= WaitInterval){
//set we are done waiting
waiting = false;
//depart the next train
departTrain();
}
}
//not waiting to depart
else{
//has train arived?
if(!digitalRead(ReedPins[track])){
//stop all trains
stopTrains();
//set waiting and set time
waiting == true;
previousMillis = millis();
//goto next track
track++;
}
}
}
void departTrain(byte nr){
//do nothing if we call a non-existing track
if(nr < sizeof(TrackPins)){
//set the direction. Alternate direction per track
digitalWrite(DirectionPin, nr % 2);
//enable corresponding track
digitalWrite(TrackPins[nr], HIGH);
//wait till the reed is cleared
while(!digitalRead(ReedPins[track]));
}
}
void inline departTrain(){
departTrain(track);
}
void stopTrains(){
for(byte i = 0; i < sizeof(TrackPins); i++){
digitalWrite(TrackPins[i], LOW);
}
}
Timo
-
Bedankt voor je moeite, Timo. Dat lijkt me een leuk schema om mee aan de slag te gaan. Anders wel het tweede linkje (http://ardutrain.blogspot.nl/), gegeven door Falkenberg. Dat filmpje is precies wat ik voor ogen heb. Maar wat ik niet begrijp: is zo'n "motorshield" noodzakelijk, of kan ik het hele boeltje met een gewone, ouderwetse Trix modelspoorrelais aansturen? Als ik PWM wil, dan heb ik dat vast wel nodig, nietwaar? En uit het verhaal van Karst begrijp ik dat één motorshield voldoende is, omdat het meerdere kanalen heeft, ook al staat er op het plaatje (http://1.bp.blogspot.com/-42_wfJCPlLo/UcB6zhRUhhI/AAAAAAAABzQ/rj1wSmkc790/s1600/diagram.png) twee maal een motorshield? Ik controleer het even voor de zekerheid. Ik ben wel een beetje bekend met electronica, maar meer met basis schakelingen.
Zou ik met dezelfde hardware de trein halverwege een korte stop kunnen laten maken? Uiteraard langzaam afremmen en optrekken.
-
Oh, de wissels zouden in principe gewoon opengereden kunnen worden, maar desnoods kunnen ze nog met een eigen kring aangestuurd kunnen worden.
-
Maar vast een motorshield (http://www.ebay.co.uk/itm/1X-Motor-Drive-Expansion-Shield-Board-Module-L293D-Arduino-Duemilanove-Mega-UNO-/271901679032?hash=item3f4e9a5db8:g:chAAAOSwXSJXOWQS) besteld. Ziet er wel uit als interessant speelgoed. ;D
-
Is wel een 'zwakke' :P (1.2Amp max, 0.6 Amp continue...)
-
Als het altijd dezelfde lokjes zijn die op de baan rijden en op hetzelfde rondje, hoef je niet om te polen, je kunt ook van één van de lokjes het motortje 180graden draaien om zijn lengte as, dan gaat hij vanzelf de andere kant op dan de andere ;)
Groetjes
-
Goed dat je dat zegt, in mijn trams zitten kleine 10V motortjes. Komt maar een of twee wagonnetjes achter, dus dan zou het toch wel goed moeten komen, neem ik aan?
-
Is dit dan meer geschikt?: http://www.ebay.co.uk/itm/L298P-Motor-Shield-Dual-DC-Motor-Driver-Shield-1-65V-A-for-Arduino-/141699857644?hash=item20fdf83cec:g:pZQAAOSwDNdVh-Ei
-
Yep,
of gewoon degene die ik gelinkt heb. is meer dan de helft goeiekoper ;)
-
Je hebt maar 1 motorshield nodig als je met relais een spoor uitschakelt en met een ander relais de spanning ompoolt. Dan regel je met de ene motorshield (zeg maar je regelaar) de snelheid.
Dirkjan
-
of gewoon degene die ik gelinkt heb.
excuses. Ik had niet gezien dat dat plaatje een link was. :-\
-
Als ik het goed begrijp, kan ik toch een derde reedcontact aansluiten op de Arduino en daar kan ik een langzaam stoppen->stoppen en een x aantal seconden wachten->langzaam optrekken opdracht aan koppelen? Of is dat weer een ander script en kan dat niet deel zijn van dit script?
-
Wat betreft motordriver, als je niet perse een shield wilt: Tadaaaaa (https://www.aliexpress.com/item/New-Dual-H-Bridge-DC-Stepper-Motor-Drive-Controller-Board-Module-L298N-for-Arduino-Free-Shipping/32245304453.html) Motor driver is alleen nodig als je dus langzaam wilt kunnen stoppen/optrekken. Het vervangt ook gelijk het richting relais. Maar, zoals ik al zei, je kan het zo ingewikkeld maken als je wilt en dit maakt het weer wat lastiger. Zeker als je ook de motor kleef wilt overwinnen ;)
En wat bedoel je met "dit script"? Natuurlijk is de code altijd naar wens aan te passen.
In principe heb je geen extra reed nodig om langzaam te stoppen, deze moet alleen op de juiste plek zitten. Namelijk waar je wilt remmen ipv stoppen. De rest is dan een kwestie van het stoppen goed timen. Een extra reedcontact kan natuurlijk geen kwaad als backup (als hij door blijkt te schieten) maar dan wel één per spoor. Tenminste, ik weet niet wat je in gedachte had voor alleen het 3e reedcontact? Met een rem-reed en een stop-reed kan je het ook weer nog complexer maken ;D Vanzelf leren remmen bijvoorbeeld :) Zodat hij altijd goed uit komt.
Dus werkelijk waar, je kan zoveel tijd erin steken en zoveel functies inbouwen als je zelf wilt :D Willekeurige wachttijden bijvoorbeeld? ;)
Nog een linkje naar een relais module (https://www.aliexpress.com/item/20pcs-lot-1-Channel-5V-Relay-Module-Low-level-for-SCM-Household-Appliance-Control-FREE-SHIPPING/32551629267.html).
Timo
-
Je kunt ook b.v. een BD135 in een open collectorschakeling aan een PWM pin hangen, dan ben je ook geen motorprintje nodig.
-
Vanwege de tijdsdruk (moet allemaal op ExpoNG, 29 oktober a.s. werkend zijn) heb ik ook de motorshield die Karst aangaf besteld. Als dat binnen is maar eens een testronde opzetten. Hopelijk gaat het allemaal voorspoedig met het laten werken, maar gezien mijn onervarenheid ermee, zal ik ongetwijfeld hier weer aankloppen. :D