Nieuws:

Wil je ook treinenplaatjes in je onderschrift? Lees hier verder hoe je dat instelt op jouw profiel!

Zelfbouw draaischijf

Gestart door Bert1955 vrijdag 07 januari 2022, 21:01:53

0 leden en 1 gast bekijken dit board.
Zelfbouw draaischijf
Lid sinds: 2021

offline
Zelfbouw draaischijf
Ben van plan om zelf een draaischijf te bouwen. In eerste instantie analoog aangestuurd. Stoppen op microschakelaars. Gewenste stand te bereiken met een draaischakelaar. Dit is vrij simpel te doen.

Maar nu de vraag: de motor moet 2 kanten op kunnen draaien, kortste weg naar de gewenste positie.
Dit is op te lossen met 1 schakelaar en ompoolrelais maar liever heb ik dit automatisch.

Zit eraan te denken om de werkelijke positie en gewenste positie met weerstanden te vergelijken en daar een opamp achter te hangen maar daar kom ik nog niet uit.

Iemand leuke ideeën?
Re: Zelfbouw draaischijf, omkeren draairichting
Het omdraaien van de draairichting doe ik voorlopig maar met een schakelaar, het wordt pas interessant zodra het automatisch moet gaan worden.
Bezig geweest met een schakeling:


Enige uitleg:
Links de positieschakelaars. Het zijn microschakelaars die normaal gesproken allemaal ingedrukt zijn behalve diegene waar de schijf gestopt is.
Zodra de draaischakelaar in een gewenste positie gezet wordt gaat de motor draaien totdat hij de positie bereikt heeft, de positieschakelaar schakelt dan af.
Draairichting wordt bepaald door S6/K5.

Snelheid wordt ingesteld door het PWM bordje. Ik heb er bij Ali 1 gevonden die spanningsgestuurd is, daarvoor kan ikzelf niet gaan solderen.
De normale snelheid wordt ingesteld met de potmeter. De (micro)schakelaar ernaast reduceert de snelheid zodra de positie bijna bereikt is. Door de elko zou dat geleidelijk moeten gaan. Componenten moet ik nog gaan dimensioneren.  In plaats van een draaischakelaar ben ik van plan momentschakelaars met elk een houdrelais toe te passen.
Terugmelding zit er nog niet in, eerste hiermee experimenteren.

Ben benieuwd naar opmerkingen, ik sluit niet uit dat er nog een denkfout in zit......

Re: Zelfbouw draaischijf, omkeren draairichting
Nog een vraag waar ik niet nog uitkom.
Als voorbeeld deze schijf:



Er zijn 10 posities. (Meer dan ik nodig ben) Moet je dan 20 stopposities hebben zodra de loc er vooruit en achteruit af kan? Of alleen bij de doorrij sporen?
Re: Zelfbouw draaischijf, omkeren draairichting
Citaat van: Bert1955 op zondag 09 januari 2022, 11:08:39

Er zijn 10 posities.


Er zijn 10 aansluitingen, dat is iets anders. Er zijn maar 8 stop posities omdat er 4 in elkaars verlengde liggen.
Re: Zelfbouw draaischijf, omkeren draairichting
Ok, maar je wilt de loc toch kunnen omdraaien? Voor de goede orde, ik wil de Marklin schijf niet gaan nabouwen met de bediening die erbij hoort maar wil met het schema in 1 keer naar een gewenste positie??
Re: Zelfbouw draaischijf, omkeren draairichting
Dat doe je toch door of linksom of rechtsom naar een positie te draaien?
Re: Zelfbouw draaischijf, omkeren draairichting
Denk dat ik mijn verhaal onvoldoende belicht heb, met het schema heb ik de volgende bedoeling:

Stel ik heb totaal 6 sporen die naar de schijf gaan. Nummer 1-6.
En stel de schijf staat op positie 2 en ik wil naar 5. Dan druk ik op knopje 5 en de schijf gaat er direct naartoe.
Voor het drukken op 5 zet ik de draairichtingsschakelaar in de juiste stand.

Ik wil dus niet meermaals op 1 knop drukken waardoor hij eerst naar 3, dan naar 4 en tenslotte naar 5 gaat.

Een "nadeel" van mijn insteek is dat de sporen die tegenover elkaar liggen in feite 2 posities zijn ivm omdraaien van de loc?
Re: Zelfbouw draaischijf, omkeren draairichting
Citaat van: Bert1955 op zondag 09 januari 2022, 12:08:34

En stel de schijf staat op positie 2 en ik wil naar 5. Dan druk ik op knopje 5 en de schijf gaat er direct naartoe.


Dat snap ik. Maar je kunt er op 2 manieren naar toe: direct of indirect. Voor het de brug op rijden doet het er niet zo toe maar voor het er af rijden wel: vooruit of achteruit.
Re: Zelfbouw draaischijf, omkeren draairichting
Wat jij hier allemaal beschrijft is de "intelligentie" van je schakeling.
Ga je van x naar y: a) links om of rechts om b) langs de "korte" verdraaiing of via de "lange" verdraaiing en dan nog, hoe moet de loc van de schijf in vooruit of in achteruit?
Wanneer het een loods is, is het meestal achteruit maar voor de rest wie weet????

Waarom geen Aruino met motorshield?

Je hardware zal vééééééééééééééééééél eenvoudiger zijn en in je code kan je alle mogelijke "intelligentie" steken.
Is het een M* draaischijf waarmee je bezig bent, vervang dan terwijl je toch bezig bent de luidruchtige motor door een SB motor.

Dan is er nog de aandrijving zelf, direct drive of via reductie?
Hééééél belangrijk om toch iets nauwkeurig de brug te positioneren.

Als laatste nog de posities van de spooraansluitingen.
Een Duitser, ik kan het niet onmiddellijk terug vinden, heeft een PC en (ik dacht ook DCC) decoder gemaakt voor een M*draaischijf.
Op het tandwiel van de draaischijf heeft hij een zwart/wit kruis gemaakt.
X toeren van deze tandwiel = 1 spooraansluiting.
Dus x * y zwart/wit overgangen gezien door zijn sensor = verdraaiing van 1 spooraansluiting.
Re: Zelfbouw draaischijf, omkeren draairichting
Bedankt voor jouw reactie!
Heb de foto van de marklin er alleen bijgezet gezien mijn vraag naar het aantal stoppunten, daar kom ik nu wel uit.
Ik ga de schijf zeker zelf bouwen, op termijn zal ik er wel een verslag van maken. Ten eerste omdat ik het leuk vind om te doen, ook de investering in een draaischijf heeft geen prioriteit
Ik maak me inderdaad de meeste "zorgen" om de precieze stopposities maar ik heb de methode met microschakelaars vaker toegepast zien worden, bv Wilgenspoor.
Je hebt wel een punt wat betreft automatisering maar dat gaat allemaal later wellicht gebeuren.
De componenten zoals getekend, inclusief de motor kost erg weinig, mislukken is alles behalve een drama:)
Re: Zelfbouw draaischijf, omkeren draairichting
Lid sinds: 2011

Meet (kijk, voel, luister) en weet

offline
Re: Zelfbouw draaischijf, omkeren draairichting
Citaat van: mcs51 op maandag 10 januari 2022, 07:19:39
..... Een Duitser, ik kan het niet onmiddellijk terug vinden, ........
Op het tandwiel van de draaischijf heeft hij een zwart/wit kruis gemaakt.

Bedoel je de DSD2010? .Scrol naar technische zaken / draaischijf

groet
Harald
Re: Zelfbouw draaischijf, omkeren draairichting
Absoluut Harald, dat is het!
Re: Zelfbouw draaischijf, omkeren draairichting
Lid sinds: 2011

Meet (kijk, voel, luister) en weet

offline
Re: Zelfbouw draaischijf, omkeren draairichting
 @citaat
Ik heb de decoder ingebouwd en ben zeer tevreden.

groet
Harald
Re: Zelfbouw draaischijf, omkeren draairichting
Ben afgestapt van de gedachte de draaischijf analoog aan te sturen.
Deels door opbouwende opmerkingen in dit draadje maar zeker ook door een post bij de buren:
http://www.h0modelspoor.nl/index.php?topic=2992.0
Rob heeft flink werk ingestoken in het schrijven van Arduino code. Daarbij houd hij ook rekening met speling in de aandrijving.

3D printer is al druk met deze:
https://www.thingiverse.com/thing:1837520


Re: Zelfbouw draaischijf, omkeren draairichting
Nou, dat thingi project is mislukt:

Op de foto zat hij nog los in elkaar maar die loopt voor geen meter. Ondanks diverse pogingen blijft de stepper steeds steken door aanlopen van de tandwielen.
Verder zou het erg lastig zijn om slepers te monteren voor rijspanning en verlichting en zo. Na ja, het plastic is goedkoop, de tandwielen en het plateau kan ik deels wel gebruiken.

Dus, zelf maken van hout, deels geïnspireerd door het project van Piet https://forum.3rail.nl/index.php?topic=51785.msg1043139#msg1043139

Bij tante Ali voor weinig aangeschaft:


Ruim voldoende aansluitingen en mooi uit zicht/ stofvrij

3D ontwerp tot nu:


Lastig om een 3D plaatje goed in beeld te krijgen


Re: Zelfbouw draaischijf
Lid sinds: 2016

1 raiL + 1 raiL = 2 railS ;)

offline
Re: Zelfbouw draaischijf
Ik voorzie eveneens een zelfbouw-draaischijf, enkel de tijd ontbreekt nog.
De basis wordt een KIBRI-handdraaischijfje, met een Arduino-gestuurde stappenmotor of servo die enkel 180° graden hoeft te  draaien ( omkeren van stoomloc's nabij kopstation).
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Citaat van: Ludo1957 op donderdag 10 februari 2022, 21:37:46
Ik voorzie eveneens een zelfbouw-draaischijf, enkel de tijd ontbreekt nog.
De basis wordt een KIBRI-handdraaischijfje, met een Arduino-gestuurde stappenmotor of servo die enkel 180° graden hoeft te  draaien ( omkeren van stoomloc's nabij kopstation).
Wellicht is deze post bekend: http://www.h0modelspoor.nl/index.php?topic=2992.msg49385#msg49385
Rob heeft een Arduino Sketch geschreven, die implementeer ik graag.
Enkel 180 graden moet niet al te moeilijk zijn met een stappenmotor. Vraag me af of een servo genoeg power heeft, los van de vraag of je hem nauwkeurig genoeg op positie krijgt.
Re: Zelfbouw draaischijf
hoi,

Citaat van: Bert1955 op donderdag 10 februari 2022, 22:09:04
Vraag me af of een servo genoeg power heeft, los van de vraag of je hem nauwkeurig genoeg op positie krijgt.

Dan zou ik mij maar eens verdiepen in servo's. De kleine dingen veel gebruikt worden zijn niet sterk. Er zijn veel servo's die veel meer aan kunnen. Zelf heb ik een servo die 11 kg kan omzetten in gebruik bij mijn Segmentdraaischijf. Positionering: Perfect. Het is maar hoe je je de overbrenging doet. Hoe precies wil je dat doen.
Re: Zelfbouw draaischijf
Lid sinds: 2016

1 raiL + 1 raiL = 2 railS ;)

offline
Re: Zelfbouw draaischijf
@Ronald
Ik probeer eerst de combinatie van een 28BYJ-48-5V 4 Fase stappenmotor met 1:64 reductie en een  ULN2003A-stuurbord voor Arduino. Die heb ik ergens  8o liggen en wordt volgens YouTube met succes gebruikt bij meerdere DHZ-draaischijven (waaronder 1 met  massiefhouten draaiplateau ).
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Citaat van: Ludo1957 op vrijdag 11 februari 2022, 23:37:09
@Ronald
Ik probeer eerst de combinatie van een 28BYJ-48-5V
Precies wat ik gebruik, zeer lage investering. Wel nog met een extra ~1:11 reductie voor mijn 30cm schijf. Rob had een kleinere schijf direct aangestuurd maar zou het opnieuw met reductie doen.
Mijn proefopstelling werkt al prima
Re: Zelfbouw draaischijf
 @citaat  @citaat / @Ludo1957: Ik reageer op Bert1955 die zich afvraagd of servo's wel sterk genoegd zijn. En die zijn er. De steppenmotor die je wil gebruiken kan mogelijk ook wel sterk genoeg zijn. Zeker met een reductie erop.

Citaat van: Bert1955 op zaterdag 12 februari 2022, 08:49:56
Mijn proefopstelling werkt al prima

Dat is mooi  :thumbup: Test het ook met gewicht (van een goede zware lok) op de bühne. Dan weet of het een en ander soepel loopt.
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Citaat van: ronaldk op zaterdag 12 februari 2022, 09:06:42
: Test het ook met gewicht (van een goede zware lok) op de bühne. Dan weet of het een en ander soepel loopt.
Ga ik zeker doen, nog even wachten op lagers en de sleepring van tante Ali
Re: Zelfbouw draaischijf
Lid sinds: 2019

offline
Re: Zelfbouw draaischijf
Citaat van: ronaldk op zaterdag 12 februari 2022, 09:06:42
... ... ... Zeker met een reductie erop. ... ... ...

Naast het feit dat met een reductie kast het beschikbaar koppel aan de uitgang as vergroot, vergroot ook de positie nauwkeurigheid KLIK enkel maar goed nieuws dus  :)
Re: Zelfbouw draaischijf
Speciale Gast
Lid sinds: 2006

Trans Europ Express

offline
Re: Zelfbouw draaischijf
Met de geometrie van de draaischijven en de oplossingen van de stappenmotoren is er één grote maar en dat is de hoek. De F* en M* variant van de draaischijf (7286) heeft 48 posities ofwel 7,5 graden per positie. Met een standaard BYJ arduino motortje of een NEMA stepper kun je deze hoek nooit exact bereiken van wege het aantal stappen. De BYJ heeft namelijk 2048 stappen en een NEMA 200 (of 400 met een ander type). Bij beide motoren is een reductie nodig van minimaal 1:3 wil je een hoek van 7,5 graden kunnen bereiken.
Uiteraard zou je met microstepping een heleboel kunnen doen, maar dan lever je naast afstand per stap ook een deel kracht in wat met reductie niet het geval is.
Daarnaast is het kostenaspect ook nog iets, de (grote) steppers met reductie kunnen aardig in de papieren lopen.
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
De omtrek van een draaischijf is ruim afgerond 100cm (bij doorsnede iets boven 30cm) Komt niet precies, even voor het idee.
Delen door 2048 stappen is ~0,5mm resolutie. Toch niet echt slecht of maak ik een fout?
Zelf heb ik straks een overbrenging van ~1:11.
11 keer betere resolutie en kracht als ik dat goed zie 
Re: Zelfbouw draaischijf
Speciale Gast
Lid sinds: 2006

Trans Europ Express

offline
Re: Zelfbouw draaischijf
Bert,

Fouten maak je nooit met een zelfbouw! Alleen waar ik nu tegenaan loop met een 7286 draaischijf is de hoek. Met een Arduinostepper heb ik al een poging gewaagd met een 3:1 reductie, zo kom ik berekend exact op 7,5 graden met 128 stappen. De overbrenging was een riemoverbrenging met een 20/60 tand pulley, probleem hierbij was de "slack" in de overbrenging. Momenteel is er een Nema17 met ingebouwde 3:1 reductie onderweg uit China, dat moet een beter resultaat geven (hoop ik).
Voor jouw draaischijf die eigenbouw is gelden andere normen en specificaties, als je slecht gebruikt om te keren en een tweetal spoortjes die nog te plaatsen zijn zou ik lekken je project voortzetten, ik deel slechts mijn ervaringen.....
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Jouw ervaringen zijn zeker welkom!
Mijn ambities zijn wat hoger dan een paar spoortjes.........6 voudige ringloods op 15 graden plus 2-3 sporen.
Ik ga het zien met vallen en opstaan
Re: Zelfbouw draaischijf
Speciale Gast
Lid sinds: 2006

Trans Europ Express

offline
Re: Zelfbouw draaischijf
Ben,

Kun je een schatting geven wat de kosten zijn geweest om dit te realiseren? Dat kan meewegen in een keuze.....
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Mooi gemaakt Ben!
Denk wel een ander kostplaatje, ben benieuwd!
Zelf ben ik erg weinig kwijt, een Arduino nano, stepper met ULN, wat los spul, een euro voor PLA ( 3D geprinte tandwielen), een slepertje. Hout heb ik genoeg liggen.
Denk totaal~ 15€
Maar of het goed gaat werken, ga het beleven
Re: Zelfbouw draaischijf
ACTS.zuid
gast

Re: Zelfbouw draaischijf
 @citaat @citaat Het gaat bij mij zelden of nooit om geld en wat ik duur vind vind jij misschien goedkoop en andersom. Maar ik kom bij lange na niet aan de prijs van een digitale Marklin schijf.
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Vandaag de proefopstelling compleet gemaakt. Hij loopt als een tierelier, yep, nog zonder belasting van een loc.
De stepper maakt ongeveer 26.500 stappen voor 360 graden. Ongeveer 27 stappen per mm verplaatsing aan de rand van de draaischijf, lijkt me ruim voldoende. In de sketch wordt ook voor speling gecompenseerd, of dat nodig is zie ik later.
Hieronder de proefopstelling en het schema.



Nu nog een week of wat wachten op een paar onderdelen
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
mooie stap verder. Hij draait keurig naar 10 posities.
Sketch is klaar voorlopig.
Daar in de sketch "maar" 4 Trackleds waren voorzien (en er niet genoeg digitale poorten over zijn) is deze omgebouwd naar binair uit.
Sketch doet dat nu prima, zodra die binnen is zet ik er een demultiplexer achter, dan heb ik maximaal 16 uitgangen voor tracks, teveel....
Tevens gebruik ik die signalen om de deuren van de ringloods aan te sturen.

Tevens werkt het spersein. Die gaat eerst op rood (en wit uit) ff wachten, dan beweging, einde beweging weer een delay, dan rood uit/wit aan.

In ieder geval is het schema voorlopig ook klaar:

Het lijkt heel wat maar valt reuze mee. Kom maar op met opmerkingen / vragen
Re: Zelfbouw draaischijf
Speciale Gast
Lid sinds: 2006

Trans Europ Express

offline
Re: Zelfbouw draaischijf
Bert,

Zeer interessant stukje vlijt en er wordt goed over nagedacht. Momenteel ben ikzelf bezig met een aansturing van een 7286 draaischijf (de Marklin/Fleischmann). Hieraan hangt een Nema17 stappenmotor met een 3:1 vertraging en met microstepping kan deze met 9600 stappen rond. Voor mij is de exacte 7,5graden zeer belangrijk i.v.m. de geometrie. Dit alles wordt aangestuurd met een Arduino die de wisselcommando's van de centrale verwerkt zoals de originele wisseldecoder dat ook doet.
Op dit moment staat de 3D printer te rammelen om een bevestiging te printen voor de stappenmotor.
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Hoi Chris,
Leuk dat je er ook mee bezig bent, zie graag wat het wordt. (deel svp het draadje indien je er 1 gaat maken)
Met jouw vertraging heb je ongeveer 10 stappen per mm op de omtrek, dat moet ruim voldoende zijn.

Uiteraard kan ik de sketch delen. Hij is nog niet perfect. 2 belangrijkste zaken:
1. wil graag dat hij de kortste weg kiest, is een lastige.
2. Delay verbeteren tussen de spersein signalen en daadwerkelijke beweging.
Re: Zelfbouw draaischijf
Speciale Gast
Lid sinds: 2006

Trans Europ Express

offline
Re: Zelfbouw draaischijf
Bert,

Volgens mij heb je het aantal stappen tussen de posities gedefinieerd toch? Hierbij een voorbeeldje

void TurntableStep(){
  if (TurnDir==1){myStepper.step(StepsForTrack);}
  else if (TurnDir==2){myStepper.step(-StepsForTrack);}
}
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Hoi Chris,
Mijn kennis van C is wat beperkt dus kan het niet helemaal inschatten wat jouw code doet.
Betrek mijn zoon er nog weer bij, hij is IT'er en heeft een deel van de aanpassingen van de Sketch van Rob gedaan. Met name het ombouwen naar Binaire leds en implementeren van de spersein signalen.

Zelf heb ik van 4 Tracks er (voorlopig, kan wijzigen) 10 van gemaakt, dat is simpel.

Om het draairichting ,, probleem" simpel te schetsen zodat ik het zelf ook begrijp:

Ik heb net binnen van MP een 6voudige ringloods, mooi ding van Vollmer, deur 1-6 op 15graden.

Deur 1 op 0 graden, vervolgens 15, 30, 45, 60 en 75 graden. De testopstelling loopt keurig van 1 naar 2, 3, 4, 5, 6 en weer terug.
Stel het aanvoerspoor(x) zit op 225 graden tegenover deur 4.
Van x naar 6 is dan 150 graden. Zoals de Sketch nu is draait de brug van x naar 6 rechtsom, de kortste weg.
Maar van x naar 1 ook rechtsom, dat zou linksom moeten.
Maar de vraag was vast al duidelijk?




Re: Zelfbouw draaischijf
Speciale Gast
Lid sinds: 2006

Trans Europ Express

offline
Re: Zelfbouw draaischijf
Bert,

Had een stukje van de ArDiMo-Turn code geknipt, die is nog in ontwikkeling. Ben zelf nog wel aan het puzzelen, belangrijkste is dat je de sporen een nummer geeft en daaruit gaat rekenen. Met de loodsen op 15 graden heb je dus (om het makkelijk te houden) 2x 12 posities, waarvan 6 te gebruiken zijn.

Als je een bericht post kun je met de #-button de code wel in je bericht plakken, ik wil best wel eens kijken, want tussen IT'ers en IT'ers zit ook nog best wat verschil qua benadering. Daarnaast heb ik al wat ervaring met de code voor de Marklin draaischijf.

Je aansluitingen zijn dus 1-6 met 15graden ertussen met tegenover spoor 4 als aansluiting daar kan ik wel wat mee...
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
ok, in de sketch heb ik die posities er nog niet precies ingezet, voor de test had ik dat niet nodig.
Mijn zoon is een prima IT'er maar niet gespecialiseerd op Arduino.

Er zit nog veel onzin in de Sketch in de vorm van uitprobeersels maar daar lees je vast overheen:

/*
/* Turntable control
* =================
* For a turntable. 10 tracks
*
* Beschrijving (NL)
* Besturing voor een modelspoor segmentdraaischijf met 10 sporen.
* Middels 2 tandwielen een vertraging ingebouwd van 11* Hierop de stepper snelheid en track posities ingesteld
* Aantal sporen aanpassen:
        * #define numberOfTracks  10       // number of tracks on turntable
        * arrays below must correspond with number of tracks:
        * int track[numberOfTracks]{-100, -2000, -3100, -4200, -5300, -6400, -7500, -13000, -15000, -17000}; aantal stopposities aanpassen
        * int buttonBoundary[numberOfTracks]{1000, 900, 800, 700, 650, 550, 480, 380, 280, 180}; aantal waardes weerstanden aanpassen

* De draaischijf wordt aangedreven met een stappenmotor.
* Bediening met een '0-positie' sensor en 10 drukknoppen op een spanningsdeler
* Terugmelding over 4 LEDs, binaire uitgang, met een de-multiplexer kan er eenvoudig 1 led per track van gemaakt worden
* Waar in de sketch wordt gesproken over TrackLeds worden de 4 binaire uitgangen (D1, D2, D4 en D8) bedoeld.
* Bij Track 1 is dat "0000", Track 2 "0001", doorlopend tot Track 16 "1111"
* versie 3.0, 20 feb 2022
*
* Suggestie voor draairichting:
* Add variable "direction" and change your code at the end of the switch:

cstep += direction;
if cstep > 7  cstep = 0;
if cstep < 0  cstep = 7;
direction = 1; // go forward
direction = -1; // go backward
*/

/***** Import needed libraries ******/
#include <AccelStepper.h>

#define FULLSTEP 4
#define HALFSTEP 8


/***** Declare Pin Numbers *******/

// motor pins
#define motorPin1  2   // Blue   - 28BYJ48 pin 1
#define motorPin2  3   // Pink   - 28BYJ48 pin 2
#define motorPin3  4   // Yellow - 28BYJ48 pin 3
#define motorPin4  5   // Orange - 28BYJ48 pin 4

// sensor pins (analog)
#define startPin   8    // pin to detect turntable start position
#define buttonsPin A1   // analog pin to read buttons by Voltage divider

// led indicators pins
# define trackLed1 9    // led for track 1
# define trackLed2 10   // led for track 2
# define trackLed3 11   // led for track 3
# define trackLed4 12   // led for track 4

// spersein leds
# define sperledRed 6   // rode led spersein
# define sperledWit 7   // witte led spersein

#define ledpin     13   // LED on Arduino

/******* Definitions for turntable control ******/

// ---- Turntable ----
// Physical definitions
#define slack            18       // steps of slack in stepper motor axel from middle
#define initMove       -30       // steps to move at initialisation before sensor read
#define numberOfTracks  10       // number of tracks on turntable

// arrays below must correspond with number of tracks:
// positions for 10 turntable tracks (motor steps from 0) -> 1 omwenteling = ~ 26500 stappen.
int track[numberOfTracks]{-100, 26400, 3100, 4200, 5300, 6400, 7500, 13000, 15000, 17000};
int buttonBoundary[numberOfTracks]{1000, 900, 800, 700, 650, 550, 480, 380, 280, 180};

// Operational definitions
#define startTrack         0     // initial track to move to (after detecting 0-position sensor)
#define maxTurnSpeed       400.0 // maximum speed of stepper motor normal operation -> van 55 naar 400 =~ 60sec / omwenteling
#define startTurnSpeed     120.0 // start speed of stepper motor -> van 20 naar 120 verhoogd
#define turnAccelleration  46.0  // acceleration of stepper motor
int WTG = 0;                     // WayToGo Variable to determine turndirection resulting in shorttest way to go
int CurrentPos=0;                //

// ---- Led display ----
unsigned long prevms = 0;        // blinking led milisecs last on/off
unsigned long curms = millis();  // blinking led milisecs now
const long blnkint = 250;        // blink interval in milliisec.


/******* Global variables ******/

// ---- Turntable variables ----
int currentTrack = 0;            // position after initialisation
int newTrack = 0;                // 1st position to move to after initialisation
int button = -1;                 // button pressed (0, 1 2 3 4 5 6 7 8 or 9, -1 is no button)
// ---- Led display variables ----
int blnk = HIGH;

/****** Objects *******/

// ---- Stepper motor object ----
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

// array of pins used to send out the binary-encoded track number
int ledPins[]{trackLed1, trackLed2, trackLed3, trackLed4};

/****** Functions ******/

#define ArrayCount(x) (sizeof(x) / sizeof(x[0]))

// ---- initialiation: 0-position detection ----
// Turntable initialisation after starting/resetting Arduino.
// It first moves the stepper motor counterclockwise (defined by initMove),
// and then moves the turntable clockwise slowly untill 0-positions is sensed
// on "startPin".
// Motor position "0"is set to the sensor position.
// Function returns "true" if sensor has been detected.
//
// Maximum steps is to find sensor: last track position + initial move steps.
// When 0 position is not sensed, function returns "false".
bool initTurntable() {
    bool succesfull = true;     // return parameter
    int x = 0;                  // step counter
    digitalWrite(ledpin, LOW);  // show initialisation ongoing on Arduino board

    // calculate total maximum number of steps (maxSteps) to find sensor:
    // the number of steps to position of last track, including slack and initial move
    int maxSteps = abs(track[numberOfTracks - 1]) + abs(initMove) + 2 * slack;  // sensor must be found in less steps

    // move  turntable into start / reset position

    stepper1.setMaxSpeed(10); // verhoogd van 1 naar 10
    stepper1.setAcceleration(500.0);
    stepper1.setSpeed(10);    // verhoogd van 1 naar 10
    // start with a move counterclockwise in case just beyond sensor...
    x = initMove;

    // now keep turning the table slowly until start point sensed
    do {
        stepper1.runToNewPosition(x);
        x++; //was x++; nu sneller naar 0 positie
    } while ((digitalRead(startPin) == LOW) && (x < maxSteps)); //run until sensor active, or max steps done (error)

    if (x < maxSteps) {                   // start position sensed. Intialise stepper position
        stepper1.setCurrentPosition(0);   // sensor position = 0
        digitalWrite(ledpin, HIGH);       // end of initialisation
    } else {                              // initialisation error
        succesfull = false;
    }
    stepper1.disableOutputs();            // Turn off stepper motor power
    return succesfull;
}

// ---- read button sensor ----
// function to get button from analog pin
// returns button 0-9 pressed.
// returns -1 if no button pressed
int getButtonPressed() {
    int r = analogRead(buttonsPin);
    int b = -1;
    if (r < buttonBoundary[0]) {    // a button was pressed
        delay(200);                 // wait for analog pin to stabalize
        r = analogRead(buttonsPin);

        // check which boundary value has been read on analog buttonPin
        if (r < buttonBoundary[0]) {
            b = numberOfTracks - 1; // check lat button to first
            while (r > buttonBoundary[b]) {
                b--;
            }
        }
    }
    return b;
}

// ---- turntable movement calculation ----
// function to calculate new position for turntable to move to
// input: new track number
// output: new stepper position with corrections mechanical inaccuracies
int calcNewPosition(int trk) {
    int pos = 0;                 // new stepper motor position
    int curTurnDirection = 0;    // current direction in Turntable = calculate for slack in movement

    // keep values last move before calculating new move
    currentTrack = newTrack;
    newTrack = trk;

    // Init new move
    // check direction for additional slack movement.
    // calculate new stepper position
    //if (newTrack > currentTrack) { // Rob's intitial statement
    Serial.begin(9600);
    Serial.print ("current Track: "); //wat is de huidige Track
    Serial.println (currentTrack);
    Serial.print ("new Track: "); // en waar willen we naartoe
    Serial.println (newTrack);    //
   
    //if (newTrack > currentTrack && newTrack + currentTrack <-13250) { // shortest direction is choosen. 13250 equals 180 degrees turn
     //   curTurnDirection = -1;                  // counterclockwise
    //} else {
     //   curTurnDirection = 1;                   // voor test -1 ipv 1clockwise
    //}
    //Serial.print ("curTurnDirection: "); //
    //Serial.println (curTurnDirection);    // Hij trekt zich er dus niets van aan of je hem +1 of -1 maakt

   
   
    // calculate position to move to
    //Serial.print ("Current Pos: ");                     //
    //Serial.println (pos);
    CurrentPos = track[newTrack];           // store current position
    //if (newTrack = 3) {
    //pos = (track[newTrack]-10000);
    //}else{
    pos = track[newTrack];                      // bare track position
    //}
    Serial.print ("Current Position: ");                     //
    Serial.println (CurrentPos);
    Serial.print ("Position to go to: ");                     //
    Serial.println (pos);
    //CurrentPos = newTrack;
    //WTG = pos;                            // store current position
    Serial.print ("Distance to go in steps ");                     //
    Serial.println (pos - CurrentPos);
    Serial.println (" ");                     //
   
   
    //pos = -1*track[newTrack];                      // bare track position
    //pos = pos + (curTurnDirection * 2 * slack); // correction for slack
    pos = pos + (curTurnDirection * 1 * slack); // correction for slack
    //Serial.print ("Pos plus slack: "); //
    //Serial.println (pos);

   
    return pos;
}

// ---- LED indiator function ----
// led on / of / blink function
// trackNumber: track number
// func:        0 = off, 1 = blink, 2 = on

void setLed(int trackNumber, int func) {
    if (func == 0) {
        writeLedPins(trackNumber, LOW);
    }
    if (func == 2) {
        writeLedPins(trackNumber, HIGH);
    }
    if (func == 1) {
        curms = millis();
        if (curms - prevms >= blnkint) {
            prevms = curms;
            if (blnk == HIGH) {
                blnk = LOW;
            } else {
                blnk = HIGH;
            }
            writeLedPins(trackNumber, blnk);
        }
    }
}

// Set led pins depending on the binary input in the `ledPins` array, at position `led`.
void writeLedPins(int trackNumber, int value) {
    //Serial.println();
    //Serial.print("Track: ");
    //Serial.println(trackNumber);

    // Loop over all led pins.
    for (int i = 0; i < ArrayCount(ledPins); ++i) {
        // If the bit for the current led pin is set, set the pin.
        digitalWrite(ledPins[i], trackNumber & (int) round(pow(2, i)) ? value : LOW);
        //Serial.print(trackNumber & (int) round(pow(2, i)) ? value : LOW);
    }
    //Serial.println();
}

void setSperSign(bool isWhite) {
    digitalWrite(sperledRed, isWhite ? LOW : HIGH);
    digitalWrite(sperledWit, isWhite ? HIGH : LOW);
}

/****** SETUP: RUNS ONCE ******/

void setup() {
    bool init = false;  // turntable intialisation status

    //Serial.begin(9600);

    int x = 0;
    // set the digital led pins as output and initialise values
    while (x < ArrayCount(ledPins)) {
        pinMode(ledPins[x], OUTPUT);
        analogWrite(ledPins[x], 255);
        digitalWrite(ledPins[x], LOW); // show initializing: all track leds off
        x++;
    }

    // show: initializing: Loop through all leds
    for (int i = 0; i < numberOfTracks; ++i) {
        writeLedPins(i, HIGH);
        delay(250);
    }
    writeLedPins(0, LOW);

    pinMode(ledpin, OUTPUT);
    digitalWrite(startPin, LOW);    // initialise startpin low. Default HIGH, aangepast ivm IR tunnel

    digitalWrite(buttonsPin, HIGH); // initialise button read

    // turntable initialisation: search for 0-position sensor
    init = initTurntable();         // initialise turntable.

    while (not init) {              // Find 0-position (sensor), false = 0-pos. not found
        digitalWrite(ledpin, HIGH); // Blink led indefenitely
        delay(100);
        digitalWrite(ledpin, LOW);
        delay(100);
    }

    // no error: setup turntable and led indicators for normal operation
    x = 0;
    while (x < ArrayCount(ledPins)) {  // switch off track leds
        digitalWrite(ledPins[x], LOW);
        x++;
    }

    // Setings for speed and accelaration during normal operation
    stepper1.setMaxSpeed(maxTurnSpeed);
    stepper1.setAcceleration(turnAccelleration);
    stepper1.setSpeed(startTurnSpeed);

    // move to initial track
    stepper1.moveTo(calcNewPosition(startTrack)); // move to new position in normal operation
    stepper1.runSpeed();

}//--(end setup )---


/****** LOOP: RUNS CONSTANTLY ******/

void loop() {
    stepper1.run();                      // operate the stepper motor

    // turntable stop
    if (stepper1.distanceToGo() == 0) {  // turntable at desired position
        stepper1.disableOutputs();       // turn stepper motor off (all pins low)
       
        setLed(newTrack, 2);             //turn on led for track positioned to

        button = getButtonPressed();                  // check if a button was pressed

        delay(250);
        setSperSign(true);
           
        if (button > -1 && button != newTrack) {      // button pressed for another track than positioned on
            setSperSign(false);
            delay(100);                              // Wacht een seconde na het spersignaal

            setLed(newTrack, 0);                      //turn off led for this track, we're moving away from it.
            stepper1.moveTo(calcNewPosition(button)); // calculate new stepper position and move to it.
           
        }
    }// turntable moving
    else {                                // turntable turning (moving to desired position)
        setLed(newTrack, 1);              // blink the LED for the track where turntable is moving to
    }
}//--(end main loop )---


//*********( THE END )***********

Re: Zelfbouw draaischijf
Ziet er allemaal goed uit  :thumbup: Ben benieuwd naar de eerste bewegende beelden als het een en ander goed werkt  :thumbup:  :thumbup:
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf


Re: Zelfbouw draaischijf
Speciale Gast
Lid sinds: 2006

Trans Europ Express

offline
Re: Zelfbouw draaischijf
 //if (newTrack > currentTrack && newTrack + currentTrack <-13250) { // shortest direction is choosen. 13250 equals 180 degrees turn
     //   curTurnDirection = -1;                  // counterclockwise
    //} else {
     //   curTurnDirection = 1;                   // voor test -1 ipv 1clockwise
    //}

En als je al deze // eens weghaalt? Dit lijkt mij toch wel cruciaal stukje code.....
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Hoe voeg ik een video uit myalbum toe?
Bij afbeeldingen zie ik de link, bij een video niet....?
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Citaat van: Buzz_4stroke op woensdag 23 februari 2022, 16:30:57
//if (newTrack > currentTrack && newTrack + currentTrack <-13250) { // shortest direction is choosen. 13250 equals 180 degrees turn
     //   curTurnDirection = -1;                  // counterclockwise
    //} else {
     //   curTurnDirection = 1;                   // voor test -1 ipv 1clockwise
    //}

En als je al deze // eens weghaalt? Dit lijkt mij toch wel cruciaal stukje code.....

Die code werkt helaas niet, stond standaard in de code van Rob. Dit had ik erbij bedacht: && newTrack + currentTrack <-13250
Ten eerste: newTrack en currentTrack zijn niet de posities (bv 1000, 2000, 3000) maar de Tracknummers 0-9)
Ten tweede, al zet ik curTurnDirection hard op +1 of -1, hij trekt zich er niets van aan.
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Spullen van tante Ali binnengekomen, kon ik mooi verder:



Hij loopt lekker rustig en stopt keurig telkens op dezelfde plek. Met de slackcompensatie zit het dus ook wel goed.
Nu verder borduren
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Gisteren is de rest in 3D geprint. Het deel naast het spoor op de brug. Maar ik weet nog niet precies wat ik ermee aan moet, gaarne jullie ideeën:

Ik heb helaas geen K-rail maar heb het gevoel dat K veel beter uitkomt op de brug.
De looppaden naast het spoor zit nu veel lager dan het spoor zelf, heb het gevoel dat het op dezelfde hoogte moet. Kan de zijdelen natuurlijk wel van onderen opvullen en bijna strak tegen de spoorstaven aandrukken.
En/of K-rail erop wat doorloopt in de ringlocloods.

Hoor graag jullie gedachten!
Re: Zelfbouw draaischijf
Citaat van: Bert1955 op woensdag 02 maart 2022, 16:02:25
heb het gevoel dat K veel beter uitkomt op de brug.
Goed gevoel. Ballastbedding op een draaibrug is een beetje onrealistisch... 8o
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Dat heb je mooi opgelost Ben, dus K-rail zoeken :) en was overigens ook al van plan "parket" te gaan leggen, erg fraai!!
Misschien de shed ook nog met dun hout bekleden.
Ben overigens helemaal niet zo enthousiast over C-rail maar ja, daar heb ik het eea van
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Citaat van: ACTS.zuid op woensdag 02 maart 2022, 16:18:11

Misschien is dit iets ter inspiratie
Gr, Ben.

Hoe diep is jouw kuil Ben?
Re: Zelfbouw draaischijf
Speciale Gast
Lid sinds: 2006

Trans Europ Express

offline
Re: Zelfbouw draaischijf
 @citaat

Goed voorbeeld doet volgen! In ieder geval 70% van de post en de foto's......  :D
Re: Zelfbouw draaischijf
Lid sinds: 2021

offline
Re: Zelfbouw draaischijf
Ik wist niet dater zure forumleden zijn, jammer, maar mooie foto's. Ik ga de brug verder aanpassen, morgen hoop ik een handvol gebruikte K binnen te krijgen.