H0 Modelspoor Forum

Onderhoud, reparatie en ombouwtechniek => Mechanische techniek => Topic gestart door: Robvd op 17 juli 2017, 22:42:32

Titel: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 17 juli 2017, 22:42:32
Hier een projectje dat ik al een tijdje geleden heb gedaan: een Fleischmann handdraaischijf aandrijven met een stappenmotor, besturing met een Arduino.
Het geheel heeft ongeveer 25 euro gekost (inclusief de 12,50 voor de draaischijf op Marktplaats), dus voor de prijs hoef je het niet te laten. De draaischijf wordt als segmentdraaischijf later in een kopstation ingebouwd. Maar met de stappenmotor is de draaischijf ook helemaal rond te draaien, dus deze ombouw is ook te gebruiken voor 'echte' draaischijven. (ik had op enig moment bijna spijt om er een segmentdraaischijf van te maken).

Benodigdheden:
- Een handdraaischijf van Fleishmann
- Een Arduino microcontroller
- Een stappenmotor (ik heb de stappenmotor gebruikt die in het Arduino assortiment zit)
- Een beetje programmeerkennis (voor het programmeren van de Arduino)
- en wat schroefjes, boutjes, draadjes enzo.

Dit is de basis

(http://www.xs4all.nl/~robvd/Forum/draaischijf01.jpg)


De mechanische kant eerst maar eens aangepakt. De brug van de draaischijf zit met een soort popnageltje vast aan de basis (de kuil). Die voorzichtig los gemaakt.

(http://www.xs4all.nl/~robvd/Forum/draaischijf02.jpg)

(http://www.xs4all.nl/~robvd/Forum/draaischijf03.jpg)


Op de stappenmotor (met 1:64 vertraging) zit een as met platte kanten. Het gat in de brug heb ik voorzichtig uitgevijld tot deze klem over de as van de motor gaat.

(http://www.xs4all.nl/~robvd/Forum/draaischijf04.jpg)


Daarna provisorisch de boel gemonteerd, en de brug loopt af en toe vast. Dat kan geen kwaad voor de stappenmotor zelf, maar nauwkeurig draaien en stoppen voor de sporen wordt zo wel een probleem. Na wat onderzoek zijn het de railcontacten die af en toe haken of stroef lopen. Die contacten zijn niet echt nodig, want de sporen worden apart van stroom voorzien en de brug heeft 2 glij contacten om stroom op te nemen. Dus de rail contacten zo verbogen dat ze nauwelijks nog tegen de randen veren.

(http://www.xs4all.nl/~robvd/Forum/draaischijf06.jpg)


Ook zitten er een soort van nokjes onder de rails. Hier klikt de brug enigszins in vast. Handig bij bij handbediening, maar ook niet meer nodig. Die vijlen we ook maar weg.

(http://www.xs4all.nl/~robvd/Forum/draaischijf07.jpg)


Tijd om de motor goed te bevestigen. Het gat in het midden groter geboord, zodat de as van de motor er doorheen kan. Ook 2 gaatjes geboord voor de bouten waar de motor mee wordt vast gezet. Twee M4 boutjes en moeren volstaan.

(http://www.xs4all.nl/~robvd/Forum/draaischijf08.jpg)

(http://www.xs4all.nl/~robvd/Forum/draaischijf09.jpg)


Een sensor is met name nodig bij het starten van draaischijf als de stroom weer aan gaat om te weten waar de beginstand is. De sensor is de verbinding een van de buitenste rails en een rail van brug geworden. Ik heb de contactjes weer iets teruggebogen.

(http://www.xs4all.nl/~robvd/Forum/Draaischijf11.jpg)


Daarna bleek het erg moeilijk de brug zuiver te laten bewegen en op de goede plek te laten stoppen. Het bleek dat de draaischijf constructie niet erg stabiel is ( de bodem tordeert makkelijk). Maar er zitten 3 schroefgaten onder de afdekplaatjes, dus eerst maar eens een stabiele ondergrond gemaakt uit een stevige spaanplaat van een afgedankte IKEA koffietafel.

(http://www.xs4all.nl/~robvd/Forum/Draaischijf12.jpg).


De ondergrond helpt, dus klaar voor een uitgebreidere test. De bewegingen voor:
- V60: soepel
- BR64: soepel
- BR78: soepel
- V160: stroef en onnauwkeurig
- V100: stroef en onnauwkeurig

Wat blijkt: locs met een goede gewichtsverdeling in het midden of over de hele lengte draaien heel sopel op de brug, maar locs met het gewicht op de uiteinden (draaistellen), geven veel druk op de plastic wieltjes en rails. De wrijving wordt te groot....
Uiteindelijk bleek dit op te lossen door de hoogte van de brug op de as nauwkeurig af te stellen. Een ringetje zorgt voor de juiste afstand.

(http://www.xs4all.nl/~robvd/Forum/Draaischijf14.jpg)


Nu doen zowel de V60 als V160 het goed.

(http://www.xs4all.nl/~robvd/Forum/Draaischijf15.jpg)

(http://www.xs4all.nl/~robvd/Forum/Draaischijf16.jpg)


De test van het oprijden, draaien en afrijden met de BR64 is vastgelegd op film:

! No longer available (http://www.youtube.com/watch?v=BuG71Fg7gGg&feature=youtu.be#)


Dus klaar voor de definitieve aansturing met de Arduino Nano (veel goedkoper dan zijn grote broer).

Om het een en ander in te kunnen bouwen in een compact schroeven-doosje van de bouwmarkt, zijn er andere pinnen gebruikt dan op de grote Nano, maar met wat andere definities in het stuurprogramma is dat snel op te lossen. Verder is de controller van de stappenmotor hier ingebouwd en is een 7-polige platte kabel voor het bedieningspaneel aangesloten: massa, plus, sensor en 4 draadjes voor de terugmeldings-LEDs.
 De mini-USB aansluiting wordt straks ook gebruikt als voedingskabel. Het geheel trekt minder dan 500mA, dus kan makkelijk op een telefoonlader draaien.

(http://www.xs4all.nl/~robvd/Forum/Draaischijf18.jpg)

Het bedieningspaneel is nog even los opgezet, zodat de knoppen en de LEDs later in het paneel van het station kunnen worden ingebouwd. Spanningsverdeler met 4 knoppen , 1 voor elk spoor, en 4 LEDs, ook voor elk spoor. Als je een knop indrukt, gaat de LED erbij knipperen zolang de draaischijf naar het spoor aan het draaien is. Eenmaal op de plek aangekomen brandt de led continue.

(http://www.xs4all.nl/~robvd/Forum/Draaischijf19.jpg)


Nog even een overzicht van de gehele constructie.

(http://www.xs4all.nl/~robvd/Forum/Draaischijf20.jpg)


En @mark mms , zal ik de Arduino sketch ook nog ergens neerzetten?

Rob

Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Raages op 18 juli 2017, 06:45:02
Dat is een mooie duidelijke uitleg van een interessant project.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Dirk T op 18 juli 2017, 08:52:21
En mark mms, zal ik de Arduino sketch ook nog ergens neerzetten?

Niet dat ik Mark ben, maar ik vind dat wel een goed idee. Mooi project, en mooi om na te bouwen!
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Wim Corduwener op 18 juli 2017, 11:37:16
Mooie beschrijving.
Blijf ons verrassen.
Ik ben natuurlijk zo analoog als een spaarvarken, maar dat principe van die stappenmotor verdient bij mij ook nog wel enige uitleg.
Ik heb ooit een draaischijfje voor H0e gemaakt...

(http://www.mijnalbum.nl/Foto-WAYXPGOM-D.jpg)
....maar daar zat een servo onder omdat die draaischijf niet helemaal rond hoefde te draaien.  ::)
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 19 juli 2017, 00:12:00
Voor de Arduino ingewijden, hier de 'sketch' waarmee de draaischijf wordt bestuurd.

Belangrijkste zaken:
- op de as zit speling ('slack'), die vooral opspeelt bij het veranderen van draairichting. Daar compenseert de software voor
- de knoppen zitten op een spanningsdeler (rijtje weerstanden tussen + en -) op een analoge input. Daarmee heb ik minder draden nodig (3) om de vier knoppen uit te lezen dan dat elke knop op een input pin zou zitten (5). De spanningsverdeler werkt niet precies in stappen van 1 volt, maar dat maakt niet uit, zolang het verschil maar groot genoeg is om de ingedrukte knop nauwkeurig te kunnen lezen.
- Bij het opstarten wordt de brug een beetje een kant op bewogen, om vervolgens weer terug te draaien naar de 'sensor' rail, Dit is dan het nulpunt waar vanuit alle bewegingen naar de andere sporen worden uitgeteld in stappen.
- De stappenmotor bediening is gedaan me Accelstepper. Daarmee kun je eenvoudig van een punt naar een andere draaien met een ooie versnelling en vertraging.
- Commentaar in de sketch is in het Engels... Voormalige beroepsdeformatie.

Daar gaat-ie dan:

/*
 * Turntable control
 * (partial turntable. 4 tracks at 15 degrees angle)
 */
/*-----( Import needed libraries )-----*/
#include <AccelStepper.h>

/***** Declare Constants and Pin Numbers *******/
#define FULLSTEP 4
#define HALFSTEP 8
// motor pins
#define motorPin1  12   // Blue   - 28BYJ48 pin 1
#define motorPin2  11   // Pink   - 28BYJ48 pin 2
#define motorPin3  10   // Yellow - 28BYJ48 pin 3
#define motorPin4  9    // Orange - 28BYJ48 pin 4

// sensor pins (analog)
#define startPin A0     // pin to detect turntable start position
#define buttonsPin A1   // analog pin to read buttons

# define trackled1 5   // led for track 1
# define trackled2 4   // led for track 2
# define trackled3 3   // led for track 3
# define trackled4 2   // led for track 4

const int ledpin = 13;  // LED on Arduino

// Turntable
const int slack = 11;      // steps of slack in stepper motor axel from middle
const int startcorr = 16;  // steps to move further after sensor active
const int initMove  = -70; // steps to move at initialisation before sensor read

// 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

/******* Global variables ******/
// Turntable variables
int currentTrack = 0;            // position after initialisation
int newTrack = 2;                // 1st position to move to after initialisation
int prevTurnDirection = 0;       // prev direction in Turntable = calculate for slack in movement
int curTurnDirection = 0;        // current direction in Turntable = calculate for slack in movement
int button = -1;                 // button pressed (0, 1 2 or 3, -1 is no button)
int track[] {0, -174, -343, -514};   //positions for 4 turntable tracks (motor steps from 0)

// Led display variables
int ledPins[] {trackled1 ,trackled2, trackled3, trackled4};   // array to light op track moving to or pointing at
int blnk = HIGH;

/****** Objects *******/
// NOTE: The sequence 1-3-2-4 is required for proper sequencing of 28BYJ48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

/****** Functions ******/
// ---- initialiation ----
// Turntable initialisation after starting/resetting Arduino.
// It moves turntable clockwise untill last track is sensed and then
// positions turntable exactly in front of the last track.
// When last track sensed directly, it assumes turntable is positioned
// precisely in front this track already and no movement is done.
// maximum steps is 700. When last track not sensed, error is returned.

bool initTurntable () {
  bool succesfull = true;     // return parameter
  int x = 0;                  // step counter
 
  digitalWrite (ledpin,LOW);  // show initialisation ongoing on Arduino board
 
  // move  turntable into start / reset position

  stepper1.setMaxSpeed(500.0);
  stepper1.setAcceleration(500.0);
  stepper1.setSpeed(500);
  // 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++;
  } while ( (digitalRead (startPin) == HIGH) && (x<700) ); //run until sensor active, max 700 positions (error)

  if (x < 700) { // start position sensed. Intialise stepper position
    stepper1.setCurrentPosition(startcorr);
    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-3 pressed.
// returns -1 if no button pressed
int getButtonPressed () {
  int r = analogRead (buttonsPin);
  int b = -1;
  if (r < 900) {            // a button was pressed
    b = 3 ;
    if ( r < 750) {
      b = 2;
    }
    if (r < 600) {
      b = 1;
    }
    if (r < 300) {
      b = 0;
    }
  }
  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;
  // consider slack when change in direction
  if ( newTrack > currentTrack ) {
    prevTurnDirection = -1;
  } else {
    prevTurnDirection = 1;
  }

  currentTrack = newTrack;
  newTrack = trk; 

  // Init new move
  // check direction for additional slack movement.
  //calculate new stepper position
  if ( newTrack > currentTrack ) {
    curTurnDirection = -1;   //clockwise
  } else {
    curTurnDirection = 1;    //counter clockwise
  }
  // calculate position to move to     
  pos = track[newTrack];     //bare track position
  pos = pos + (- slack * (prevTurnDirection - curTurnDirection));  // slack correction in case direction changes
  if (abs(abs(newTrack) - abs(currentTrack)) == 1  && (prevTurnDirection == curTurnDirection) ) {  // adjecent tracks and same direction
    pos = pos + (curTurnDirection*18); 
  }
  return pos;
}

// led on / of / blink function
// input: led number
//        func: 0 = off, 1=blink, 2 = on

void setLed (int led, int func) {
  if (func == 0) {
    digitalWrite(ledPins[led], LOW);
  }
  if (func == 2) {
    digitalWrite(ledPins[led], HIGH);
  }
  if (func == 1) {
    curms = millis();
    if (curms - prevms >= blnkint) {
      prevms = curms;
      if (blnk == HIGH) {
        blnk = LOW;
      } else {
        blnk = HIGH;
      }
      digitalWrite(ledPins[led], blnk);
    }
  }
}

/****** SETUP: RUNS ONCE ******/
void setup() 
{
  bool init = false;  // turntable intialisation status
  int x = 0;
  // set the digital led pins as output and initialise values
  while (x<4) {
    pinMode(ledPins[ x ], OUTPUT);
    analogWrite (ledPins[ x ], 255);
    digitalWrite (ledPins[ x ], HIGH); // show: initializing: all track leds on
    x++;
  }
  pinMode (ledpin, OUTPUT);
  digitalWrite (startPin,HIGH);     // initialise startpin high
  digitalWrite (buttonsPin,HIGH);   // initialise button read
  // turntable initialisation
  init = initTurntable() ;          // initialise turntable.
  while (not init) {                // Blink led indefenitely if initialisation returns an error
    digitalWrite(ledpin,HIGH);
    delay(100);
    digitalWrite(ledpin,LOW);
    delay(100);
  }
  x=0;
  while (x<4) {  // switch of track leds
    digitalWrite (ledPins[ x ], LOW);
    x++;
  }
  // Setings for speed and accelaration during normal operation
  stepper1.setMaxSpeed(65.0);
  stepper1.setAcceleration(100.0);
  stepper1.setSpeed(20);

  // move to initial track
  stepper1.moveTo(track[newTrack] - 2* slack);
  stepper1.runSpeed();
 
}//--(end setup )---


/****** LOOP: RUNS CONSTANTLY ******/
void loop()   
{
  stepper1.run();  // operate the stepper motor
 
  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
    if (button > -1 && button != newTrack) {     // button pressed for another track than positioned on
      setLed (newTrack,0); //turn off led for this track, we're moving away from it.
      stepper1.moveTo(calcNewPosition(button));  // ca;culate new stepper position and move to it.
    }
  }
  else { // turntable turning (moving to desired position)
    setLed (newTrack,1) ;              // blink the led for the track where is moving to
  }

}//--(end main loop )---


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



groeten,
Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 19 juli 2017, 00:36:24
Ik ben natuurlijk zo analoog als een spaarvarken, maar dat principe van die stappenmotor verdient bij mij ook nog wel enige uitleg.
Hoi Wim,
Oefff... Even een stappenmotor uitleggen gaat misschien een beetje ver.
Maar in het kort komt het er op neer dat je een rotor hebt met vaste magneten heel veel N-polen en vlak erbij heel veel Z-polen. Daaromheen zitten ook heel veel spoelen, vaak in 2 groepen. Door de groepen met spoelen om de beurt aan te zetten, maakt de rotor steeds een stapje.
Anders ff googlen voor een duidelijker uitleg.

In ieder geval kun je met een stappenmotor heel nauwkeurig bewegingen maken, al is de aansturing wel wat complex.Maar daar komt de Arduino in beeld. Hoe de stappenmotor beweging precies tot stand komt hoef je ook niet te weten. Anderen hebben daar al iets op verzonnen, in dit geval de Accelstepper 'bibliotheek' die je kunt downloaden en gebruiken.
Ik heb eens rondgelezen op de site van de snuiters die deze bibliotheek in elkaar gezet hebben, en dan kom je allemaal wetenschappelijke verhandelingen tegen hoe je de versnelling en vertraging en constante beweging van een stappenmotor moet berekenen.
Dat heb ik verder allemaal niet gelezen, maar geeft wel aan dat er goed over is nagedacht.... En dat blijkt ook wel, het werkt allemaal goed.

groeten,
Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: The Breeze op 19 juli 2017, 12:08:12
Top werk

Sta zelf op het punt om een dergelijke schijf zelf te printen
de aansturing had ik ook in mijn hoofd om op deze manier aan te sturen, alleen was ik van plan om per spoor een microsensor in te bouwen

ben er nog niet (eerst maar eens printen...) 
nog tips waar ik rekening mee moet houden ?

verder echt super uitvoering
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 19 juli 2017, 14:37:39
The Breeze,

Gaaf dat je een draaischijf gaat printen.
De beste tip die ik nu heb is: zorg voor een stabiele constructie. Mijn ervaring met dit project en andere aandrijvingen is dat buigen en torderen van de constructie de wrijving onvoorspelbaar maken. En dan wordt elke aandrijving onbetrouwbaar.
En verder is een stappenmotor met vertraging nodig (al geeft dit meer speling op de as).
Ook kun je alvast nadenken of de draaischijf helemaal rond moet gaan en hoe je de rails dan van stroom voorziet. Op zich zijn sleepcontacten niet nodig: met een microcontroller is het vrij eenvoudig te voorkomen dat de draaischijf te veel rondes één kant op draait. Ook de polariteit wisselen na een halve draai kun je vanuit de microcontroller regelen (even ervan uitgaande dat je 2 rail gelijkstroom rijdt). Op dit draajschijfje wisselt de polariteit met de sleepcontacten in het midden.

We zijn natuurlijk benieuwd naar de vorderingen van een geprinte draaischijf!

Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: mark mms op 19 juli 2017, 20:24:00
Rob bedankt!

Weer een sketch om uit te pluizen.
Dit moet een hele klus zijn geweest om deze uit te werken.
Top dat je hem wilt delen.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 19 juli 2017, 21:18:59
Weer een sketch om uit te pluizen.
Dit moet een hele klus zijn geweest om deze uit te werken.
Top dat je hem wilt delen.
Ja, zo'n sketch maken is wel een klusje. Maar meestal doe ik het in delen en voeg de boel dan later samen. Ongeveer in deze stappen:
Zo heb ik eerst een programmatje gemaakt om de brug heen en weer te bewegen;
Daarna een standaard beweging van de ene naar de andere positie (15 graden in stappen uitgerekend);
Vervolgens de 'nul 'positie bepaling bij het opstarten;
Dan 'random' naar 1 van de vier posities;
Gevolgd door de knoppen en hun bediening;
Vervolgens empirisch bepaald hoe groot de speling is en net zo lang de posities met stapje erbij, stapje eraf precies uitlijnen op elk van de sporen;
Daarna de leds toegevoegd (knipperen en aan).
En maar testen tussendoor...

Als je het in stukjes doet valt het wel mee...
En als je ergens niet uit komt bij het uitpluizen: laat maar even weten.

Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: The Breeze op 20 juli 2017, 12:01:12

Gaaf dat je een draaischijf gaat printen.


We zijn natuurlijk benieuwd naar de vorderingen van een geprinte draaischijf!

Rob

Ben nu op zoek naar de exacte maten, heb al iets gevonden maar een echte duidelijke maatgeving heb ik helaas nog niet gevonden)
is wel de bedoeling dat de schijf 360 gaat draaien (dus omkeren loc moet mogelijk zijn)

stabiliteit uiteraard
als de 1e print uit de printer komt zal ik de vorderingen hier plaatsen, maar eerst het ontwerp

Fred
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: nico op 20 juli 2017, 21:27:01
Hoi Fred, ik heb nog wel een Fleischmann draaischijf kuil voor je, als je hem wil hebben stuur me een pb met je adres, tegen de verzendkosten stuur ik hem op.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: The Breeze op 24 juli 2017, 08:33:21
Sorry  weinig tijd gehad

Top aanbod maar niet nodig, heb de maten al gevonden en de kuil is het minste probleem
ontwerpen gaat nog wel even duren maar heb al een file gevonden (ook een draaischijf om te printen) en die kan ik aanpassen naar mijn wensen

komt goed mits er tijd te vinden is (das meestal een probleem....)
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 14 november 2017, 00:03:39
De draaischijf is ondertussen ingebouwd in het station.
Na nog wat aanpassingen (zoals een grotere hoek tussen 2 sporen om ruimte te maken voor een lokloods) is het tijd om ook de visuele afwerking te gaan doen.

De inspiratie is deze segmentdraaischijf.

(http://www.xs4all.nl/~robvd/Forum/kluutzdraaischijf1.jpg)

Hij wordt bij mij iets minder vervallen, maar wat hier (mij) aan opvalt:
Lekker veel roest op het loopvlak
De kleur is de befaamde grijs-groen
De bodem van de kuil is grind of zand (met begroeiing)
De rand springt in


Goed eerst die rand dan maar. In eerste instantie dacht ik deze recht te maken.


(http://www.xs4all.nl/~robvd/Forum/08_Draaischijf1.jpg)

Maar dan lopen de beide kanten niet helemaal parallel (vanwege de uitbouw voor de bediening aan een kant) en dat vond ik er raar uit zien.
Dus dan toch maar rond. Ik heb een klei-muurtje opgetrokken op het randje waar de rails op ligt.

(http://www.xs4all.nl/~robvd/Forum/08_Draaischijf2.jpg)


Dat oogt beter.
Dan de bodem: er zitten een soort van randjes om staal- of betonplaten te imiteren. Die schraap ik weg. Ik wil hier straks zand in strooien.

(http://www.xs4all.nl/~robvd/Forum/08_Draaischijf3.jpg)


Maar voor er gestrooid wordt wil ik eerst het verfwerk een beetje af hebben. De betonrand krijgt een grijze kleur (dicht tegen de oorspronkelijke kleur aan, ik wil niet verven waar de draaischijf brug over de bodem glijdt).
Vervolgens met bruintinten al het 'staal' roestig gemaakt. De putjes in de bodem van de kuil heb ik laten zitten. Dat vond ik wel een leuk detail.

(http://www.xs4all.nl/~robvd/Forum/08_Draaischijf4.jpg)


Ik gebruik een donker bruin, die ik wat vlekkerig maak met nat-in-nat beige. Daarna nog een dry-brush met beige. Links is die dry-brush al gedaan, rechts nog niet.

(http://www.xs4all.nl/~robvd/Forum/08_Draaischijf5.jpg)


Ik kan nog niet gaan strooien zolang de verf niet droog is, dus dan eerst de brug maar aangepakt.
Eerst een hekwerkje plaatsen.

(http://www.xs4all.nl/~robvd/Forum/08_Draaischijf6.jpg)


Dan lekker met de kwast er tegenaan met bruin en een zelf gemengde grijs/groen.

(http://www.xs4all.nl/~robvd/Forum/08_Draaischijf7.jpg)


En als laatste nog wat dry-brush met bruin en beige.

(http://www.xs4all.nl/~robvd/Forum/08_Draaischijf8.jpg)


En ja, de hekjes staan inderdaad iets schuin naar buiten. Anders schuren de loks er langs.
Nu de hele boel laten drogen en dan kan de bodem van de kuil worden afgewerkt.

groeten,
Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Pierre op 14 november 2017, 08:40:16
Mooi gedaan Rob. ;)

Ik vind het wel een beetje jammer van die naar buitenstaande hekjes. Kan je niet gewoon een stripje tegen de brug plakken waar je het hekje tegenaan plakt? Ik weet het ... een beetje mosterd na de maaltijd maar nu kan het nog.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 14 november 2017, 20:09:38
Ik vind het wel een beetje jammer van die naar buitenstaande hekjes. Kan je niet gewoon een stripje tegen de brug plakken waar je het hekje tegenaan plakt? Ik weet het ... een beetje mosterd na de maaltijd maar nu kan het nog.
Hoi Pierre,
Ik hou het even in gedachten. Ik vind de neigende hekjes nog wel plausibel te praten: zuinig gebruik van materiaal, ook in het grootbedrijf. Maar ik kan de brug altijd vrij eenvoudig demonteren en aanpassen.
Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Wim Corduwener op 14 november 2017, 20:22:18
...zuinig gebruik van materiaal, ook in het grootbedrijf.
Mooie uitleg, die ga ik een keer van je lenen.  ;D
Citaat
Maar ik kan de brug altijd vrij eenvoudig demonteren en aanpassen.
Dat zou ik doen. Dat haalt het hele project naar een hoger level.
Komt er nog een huisje op die draaibrug?
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 14 november 2017, 20:40:27
Maar ik kan de brug altijd vrij eenvoudig demonteren en aanpassen.
Dat zou ik doen. Dat haalt het hele project naar een hoger level.
Komt er nog een huisje op die draaibrug?
De groepsdruk neemt weer toe  :o Ik ga er dan toch nog eens naar kijken.
Nee, geen huisje op de draaibrug. Er is te weinig bedrijf om vast personeel op de draaischijf te zetten. Misschien moet de stoker zelfs wel even uitstappen om de brug te draaien.
Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 14 november 2017, 21:10:34
Gewoon de hekjes rechtop gebogen en....
Het past net!

(http://www.xs4all.nl/~robvd/Forum/08_Draaischijf9.jpg)


En er is zelfs nog een beetje ruimte voor de speling op de assen.

Dank voor de pressie heren. Dit was wel een heel simpele fix.

Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Pierre op 15 november 2017, 00:23:48
Veel beter zo Rob. Top! ;)
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Wim Corduwener op 15 november 2017, 00:51:12
De groepsdruk neemt weer toe  :o
“Groepsdruk” mooie uitdrukking! Groepsdruk houdt voor mij de stoom op de ketel en zonder die eigenwijze mierenneukers hier op dit forum zou ik nooit zover zijn gekomen.  :)
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: NickvR op 15 november 2017, 07:52:08
Mooie draaibrug Rob! Vind het een interessant station worden, ik kijk uit naar het eind resultaat!
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 15 november 2017, 09:50:24
Groepsdruk houdt voor mij de stoom op de ketel en zonder die eigenwijze mierenneukers hier op dit forum zou ik nooit zover zijn gekomen.  :)
Klopt, Wim. Dat geldt voor mij ook (zowel het eigenwijs zijn als het verder komen onder druk).
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: mark mms op 14 februari 2018, 23:10:55
Hallo Rob,

Hoe staat het met de draaischijf?
Doet hij het zoals verwacht, of zou je nog dingen aanpassen als je het nogmaals zou doen?
Mijn neefje wilt graag een modelbaan bouwen met een draaischijf.
Aangezien hij alles zelf moet betalen is een draaischijf een dure grap.
Wellicht kan ik iets voor hem maken.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 14 februari 2018, 23:47:27
Hoi Mark,

De draaischijf doet het goed. Hij is niu regelmatig in bedrijf en  geeft eigenlijk weinig problemen. Heel soms is de uitlijning met de sporen niet helemaal goed, en dan is een reset van de Aruino voldoende.

Ik heb na het inbouwen nog wel wat uren zitten pielen om alles goed en betrouwbaar te krijgen. Vooral ook omdat, zoals later bleek, de brug niet meer goed klem zat op de as van de motor en daarmee een onvoorspelbare speling gaf. Dit kwam met name door vele tests en/of haperingen tijdens de provisorische aansluitingen waardoor de stappenmotor wel eens bleef lopen als de brug al op een eindpunt zat.... Toen ik daar achter was en de brug heb vastgezet (eerst natuurlijk ook alles optisch afgewerkt) ,was het draaien goed in te stellen en sindsdien werkt het allemaal betrouwbaar.

De constructie hier, met de brug direct op de as van de stappenmotor, werkt wel, maar vereist wel het nodige geduld en afstellen, zowel mechanisch als in de software.
Dus misschien niet helemaal geschikt voor neefjes.

Achteraf gezien zou ik een volgende keer werken met een groot tandwiel onder de brug en een klein tandwieltje op de stappenmotor. Dat is mechanisch wat ingewikkelder te maken, maar minder kritisch in het afstellen, denk ik. Wellicht zoiets als dit.

! No longer available (http://www.youtube.com/watch?v=6vn8OWk4kig#)

Kortom: het resultaat is als verwacht, maar de weg er naar toe was moeizamer dan voorzien.

Misschien kun je hier iets mee.

Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 14 februari 2018, 23:51:58
PS:
Leuk dat je je neefje helpt bij de modelspoorbaan.

En hier nog een filmpje van de draaischijf in werking (nog van voor mijn ATF experimenten)

! No longer available (http://www.youtube.com/watch?v=eoYE8l23SbY#)

Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: mark mms op 15 februari 2018, 13:19:02
Bedankt voor de info.
Ga toch nog eens kijken of ik een stappenmotor kan aansturen met Arduino.
Daarna zien we wel verder.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 15 februari 2018, 18:12:33
Mark,
Die stappenmotor aansturing heb je sowieso nodig, dus dat is een goed begin.
Succes!
Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: mark mms op 19 februari 2018, 21:35:11
Hallo Rob,

Ik heb zojuist een poging gedaan om een stappenmotor aan te sturen.
Ten eerste gebeurde er helemaal niets, bleek dat ik niet de juiste bibliotheek had.
Na het downloaden van "accel.stepper" kon ik de sketch wel gebruiken.

Als ik de sketch goed lees dan,
moet de motor op 9+10+11+12 (naar printplaatje van 1N1+1N2+1N3+1N4)
leds op 2+3+4+5 (en dan aan de GND???)
push button op A0 (en dan aan de GND???)
push button op A1 (en dan aan de GND???)

Op de foto's heb je verschillende weerstanden bij de leds enz.
Ik ben bang dat ik het helemaal verkeerd doe.
Heb je toevallig een schets van de aansluitingen?

Bvd Mark
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Theo op 19 februari 2018, 22:12:52
Hoi, Misschien is dit ook bruikbaar, ik heb zelf de stappenmotor (28BYJ-48) aangestuurd in JALedit.
Deze taal is erg makkelijk.
Ik heb hem bij de workshop PIC programmeren gezet.
Misschien kan je er wat mee.

Theo
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 19 februari 2018, 23:48:36
Hee Mark,

Je bent goed op weg. ik heb geen aansluitschema bij de hand, maar laat ik proberen antwoord te geven op je vragen.

moet de motor op 9+10+11+12 (naar printplaatje van 1N1+1N2+1N3+1N4)
Klopt

leds op 2+3+4+5 en dan aan de GND
inderdaad, maar met een weerstand van 100 ohm er tussen (Ik heb 1 weerstand genomen van de ground naar alle leds. Dat voldoet omdat in normaal gebruik slechts een led aan is).


push button op A0 (en dan aan de GND???)
push button op A1 (en dan aan de GND???)

De input pinnen werken een beetje anders.

A0 is de beginpositie sensor. Je weet bij het aanzetten van de Arduino niet waar de stappenmotor is gestopt voor de Arduino uit ging. Je moet dus een beginpositie 'voelen', waarvandaan alle andere standen uitgeteld worden (aantal stappen vanaf beginpositie).
Op pin A0 zit een schakelaar die wordt ingedrukt als de draaischijf de beginpositie inneemt. Ik gebruik hiervoor een van de spoorstaven maar je kunt ook een microswitch gebruiken. A0 wordt via de schakelaar (of rail) met de ground verbonden (maak contact).
In het programma gaat de stappenmotor eerst 70 stappen tegen de klok in (zodat-ie altijd weg is van de beginpositie), en gaat dan kleine stapjes met de klok mee, totdat de beginpositie wordt gedetecteerd. Van daaruit start het gewone programma, en draait de brug naar een eerste spoor.
Om eindeloos zoeken (en potentieel kapot draaien) te voorkomen, stopt dit zoeken naar de beginpositie na 700 stappen met een foutmelding (snel knipperende led op de Arduino). Dit is vooral handig bij het bouwen en testen.
Om te testen kun je na het starten van de Arduino pin A0 even verbinden met de GND.

Op A1 heb ik vier knoppen zitten (één voor elk spoor) in een zogenaamde spanningsdeler. Hiermee heb ik slechts 1 pin nodig, en wat minder draden dan elke knop op een afzonderlijke pin. Omdat dit een analoge pin is, kan ik uit de waarde opmaken welke knop is ingedrukt.
Het werkt als volgt: er zijn 4 weerstanden van 10 k-ohm in serie geschakeld tussen de +5V en de GND. Hier loopt dan een kleine stroom door en de spanning wordt in 4 stappen 'gedeeld' Afhankelijk van welke knop wordt ingedrukt leest de pin (ruwweg) 0 - 1,25 - 2,5 - 3,75 Volt uit (geen knop is 5 Volt).
Klinkt misschien wat ingewikkeld (ik had bij het ontwerp geen rekening gehouden met gebruik door anderen), maar op een foto ziet dat er zo uit.

(http://www.xs4all.nl/~robvd/Forum/Draaischijf21.jpg)

Aan de rechterkant de aansluiting van de Arduino: rood = 5V, bruin = pin A1, zwart = GND
Op elk knooppunt van de weerstandjes zit een drukknop, die aan de andere kant verbonden is met de input pin. De meest linkse knop is direct verbonden met de GND. Elke knop geeft daarmee een andere spanning op de pin, die als waarde tussen 0 en 1024 met analogRead wordt uitgelezen.

Op zich werkt dit goed, maar je kunt natuurlijk ook gewoon 4 pinnen gebruiken, elk met een knopje. Dan hoef je alleen de functie "getButtonpressed" aan te passen. Deze geeft waarde 0, 1, 2 of 3 terug als er een knop is ingedrukt (en -1 als geen knop is ingedrukt)


Ook zie je aan de onderkant van de foto de ledjes, met de gezamenlijke weerstand naar de GND.

Hoop dat dit helpt. Blijf anders gewoon vragen, hoor.

Rob



Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: mark mms op 20 februari 2018, 16:09:25
Rob, bedankt.
Vanavond of morgen avond ga ik weer proberen.

Als alternatief voor een draaischijf, was ik aan een rolbrug aan het denken.
Basis een lineaire stappenmotor van tante Ali.

https://nl.aliexpress.com/item/3D-Printer-guide-rail-sets-T8-Lead-screw-length-400mm-linear-shaft-8-400mm-KP08-SK8/32826927275.html?spm=a2g0z.search0104.3.47.5c4f2485dVFUuU&ws_ab_test=searchweb0_0,searchweb201602_4_10152_10151_10065_10344_10068_10342_10343_10340_10341_10084_10083_10618_10630_10304_10307_10301_5722316_5711211_10313_10059_10534_100031_10629_10103_10626_10625_10624_10623_10622_10621_10620_10142,searchweb201603_25,ppcSwitch_5&algo_expid=adda698d-bfec-4a7d-ab3a-d89a6cc531ef-7&algo_pvid=adda698d-bfec-4a7d-ab3a-d89a6cc531ef&priceBeautifyAB=0 (https://nl.aliexpress.com/item/3D-Printer-guide-rail-sets-T8-Lead-screw-length-400mm-linear-shaft-8-400mm-KP08-SK8/32826927275.html?spm=a2g0z.search0104.3.47.5c4f2485dVFUuU&ws_ab_test=searchweb0_0,searchweb201602_4_10152_10151_10065_10344_10068_10342_10343_10340_10341_10084_10083_10618_10630_10304_10307_10301_5722316_5711211_10313_10059_10534_100031_10629_10103_10626_10625_10624_10623_10622_10621_10620_10142,searchweb201603_25,ppcSwitch_5&algo_expid=adda698d-bfec-4a7d-ab3a-d89a6cc531ef-7&algo_pvid=adda698d-bfec-4a7d-ab3a-d89a6cc531ef&priceBeautifyAB=0)
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Wim Corduwener op 20 februari 2018, 16:59:52
Als ik dat zo bekijk kun je daar ook een portaalkraan mee aandrijven. @Pierre heeft dat ook een keer gedaan, maar dan natuurlijk zonder hulp van Tante Ali.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 20 februari 2018, 19:51:18
Hoi mark,

Als alternatief voor een draaischijf, was ik aan een rolbrug aan het denken.
Basis een lineaire stappenmotor van tante Ali.

Dat kan natuurlijk ook. Principe blijft hetzelfde: Een kant kiezen als "0"positie en daar een schakelaar (sensor) zetten. De andere sporen zijn dan gewoon uit te tellen. En met zo'n lineaire stappenmotor ben je ook heel nauwkeurig. De constructie van Ali ziet er stabiel uit en met 40cm lengte kun je ook wel wat sporen aansluiten.

En met de levertijd van tante Ali heb je ook nog even tijd om het stappenmotor gebeuren onder de knie te krijgen  :)
Ook kun je alvast kijken wat je over de stappenmotor 17HS2408S te weten kunt komen (spanning en stroomsterkte), zodat je de juiste motorcontroller erbij kunt vinden.
Maar alles stap voor stap, hè!

Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: mark mms op 20 februari 2018, 21:34:06
Hallo Rob,

Ik heb hem aangesloten zoals je hebt uitgelegd, maar er gebeurt zeer weinig.
De sketch heb ik niet aangepast.

De motor draait heel klein beetje en heel erg langzaam.
De LEDs branden alle vier constant.
Na enige tijd gaat stopt de motor met draaien en begint er een ledje te knipperen op de arduino.



Motorshield 1N1+1N2+1N3+1N4 op arduino 9+10+11+12
Motorshield voeding op GND en 5V van de arduino (dat zijn zwart (-) en wit (+))
De LEDs rechtstreeks in 2+3+4+5 en dan op het board daaraan een weerstand 100 ohm en door naar GND van het board



Dan van de arduino met geel naar de drukknoppen.
Aan de andere zijde van de drukknoppen bruggetjes gemaakt van 10k Ohm.
Een zijde, direct aan de drukknop en het eerste bruggetje, is verbonden aan GND.
De andere zijde aan de 5V, rode draad via board naar de arduino.

(https://myalbum.com/photo/un9rOmrrIEI6_5jnOZZ/1k0.jpg)

Wat doe ik fout?
Chinese arduino zou het toch ook moeten doen?

Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 20 februari 2018, 22:15:30
Hee Mark,

Alles is goed aangesloten en het werkt, hoor!
Wat je ziet gebeuren is het bepalen van de 0-positie. Dat is het opstart gedeelte.

Het enige wat je moet doen is pin A0 even met de ground verbinden als de motor kleine stapjes maakt en de vier ledjes branden.
Dat is het signaal dat de 0-positie is gevonden. De motor draait daarna de andere kant op en een van de ledjes gaat knipperen.
Als de motor stopt brand het ledje continue, en dan ben je bij het 'spoor' aangekomen.
Vanaf dat moment moeten de knopjes het doen!

Als de A0 niet even met de ground wordt verbonden, dan stopt de motor na 700 stappen en knippert de Arduino LED snel. Dat is de 'foutmelding' dat de 0-positie niet is gevonden. Deze voorkomt dat er eindeloos naar de 0 positie wordt gezocht.

Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: mark mms op 22 februari 2018, 21:28:15
Joepie!

Het werkt!
Die A0 had ik over het hoofd gezien.

Maar hoe kan ik meer sporen aansluiten.
Ik heb het een en ander geprobeerd.
Hij gaat wel naar die positie, maar direct weer terug naar de uiterst rechtste positie.
Kun je aangeven welke regel(s) veranderd moeten worden om 1-2-3 sporen toe te voegen?

Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 22 februari 2018, 21:55:46
Hee Mark,
Gefeliciteerd!

Je werkt nu nog met een oude versie van de sketch. Sinds de inbouw van de draaischijf heb ik wat verbeteringen toegevoegd.
Zo was de het uitlezen van de knoppen niet helemaal betrouwbaar.
En was het uitrekenen van de motorpositie ingewikkeld (en niet helemaal juist).
Verder heb ik de sketch wat opgeschoond en geprobeerd alles in definities onder te brengen, zoals de snelheden, afstanden (ik denk dat je met een spindelmotor eerder duizenden dan honderden stappen moet maken) en het aantal sporen instellen.
Verder branden bij het begin nu alleen led 1 en 4.

Voor meer sporen zul je ook meer knopjes en meer leds nodig hebben.
Voor de knoppen kun je de spanningsdeler uitbreiden: gewoon meer weerstanden op een rijtje. Je moet dan wel even uitvogelen wat de analoge waarden worden.je kunt daar eventueel even een korte sketch voor schrijven die de waarde op print (serial print).
Precies tussen deze waarden zet je de grenzen op in (zie de nieuwe versie van de sketch hier onder, werkt niet in de oude versie):

int buttonBoundary[] {900, 750, 600, 300}; // voltage divider boundary values between buttons on buttonsPin

Let op: dit moet van hoog naar laag.

Verder kun je het aantal ledjes uitbreiden. Dat doe je met de pindefinities en in deze array:

int ledPins[] {trackled1 ,trackled2, trackled3, trackled4};   // array for light track moving to or pointing at


Het aantal sporen en de stappen naar elk spoor zet je dan hier op:

#define numberOfTracks      4              // number of tracks on turntable
                                           // arrays below must correspond with number of tracks:
int track[]        {-9, -185, -454, -624}; // positions for 4 turntable tracks (motor steps from 0)



Ik heb het meer sporen niet uitgeprobeerd, maar dat kun jij dan mooi testen...
Ook als je de ledjes niet hebt aangesloten, moet je toch net zovel leds definiëren als er sporen zijn. Je kunt natuurlijk ook de bestaande Leds hergebruiken, led 1 = spoor 1 en 5, led 2 = spoor 2 en 6, etc. Dat doe je bijvoorbeeld zo voor 8 sporen:

int ledPins[] {trackled1 ,trackled2, trackled3, trackled4, trackled1 ,trackled2, trackled3, trackled4};   // array for light track moving to or pointing at



Affijn, hier is de nieuwe versie:
/* Turntable control
 * =================
 * For a partial turntable. 4 tracks at  angles of 15, 20 and 15 degrees
 *
 * Beschrijving (NL)
 * Besturing voor eeen modelspoor segmentdraaischijf met 4 sporen.
 * De draaischijf wordt aangedreven met een stappenmotor.
 * Bediening met een '0-positie' sensor en 4 drukknoppen op een spanningsdeler
 * Terugmelding over 4 LEDs: een LED voor elk spoor.
 */
/***** Import needed libraries ******/
#include <AccelStepper.h>
#define FULLSTEP 4
#define HALFSTEP 8


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

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

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

// led indicators pins
# define trackled1 5    // led for track 1
# define trackled2 4    // led for track 2
# define trackled3 3    // led for track 3
# define trackled4 2    // led for track 4

#define ledpin     13  // LED on Arduino


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

// ---- Turntable ----
// Physical definitions
#define slack               9          // steps of slack in stepper motor axel from middle
#define initMove          -30          // steps to move at initialisation before sensor read

#define numberOfTracks      4              // number of tracks on turntable
                                           // arrays below must correspond with number of tracks:
int track[]        {-9, -185, -454, -624}; // positions for 4 turntable tracks (motor steps from 0)
int buttonBoundary[] {900, 750, 600, 300}; // voltage divider boundary values between buttons on buttonsPin
int ledPins[] {trackled1 ,trackled2, trackled3, trackled4};   // array for light track moving to or pointing at

// Operational definitions
#define startTrack          1         // initial track to move to (after detecting 0-position sensor)
#define maxTurnSpeed       55.0       // maximum speed of stepper motor normal operation
#define startTurnSpeed     20.0       // start speed of stepper motor
#define turnAccelleration  46.0       // acceleration of stepper motor

// ---- 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 or 3, -1 is no button)

// ---- Led display variables ----
int blnk = HIGH;


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

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


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

// ---- 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(1);
  stepper1.setAcceleration(500.0);
  stepper1.setSpeed(1);
  // 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++;
  } while ( (digitalRead (startPin) == HIGH) && (x < maxSteps) ); //run until sensor active, or until 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-3 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 ) {
    curTurnDirection = -1;                 // counter clockwise
  } else {
    curTurnDirection = 1;                  // clockwise
  }
  // calculate position to move to     
  pos = track[newTrack];                   // bare track position
  pos = pos + (curTurnDirection*2*slack);  // correction for slack
  return pos;
}

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

void setLed (int led, int func) {
  if (func == 0) {
    digitalWrite(ledPins[led], LOW);
  }
  if (func == 2) {
    digitalWrite(ledPins[led], HIGH);
  }
  if (func == 1) {
    curms = millis();
    if (curms - prevms >= blnkint) {
      prevms = curms;
      if (blnk == HIGH) {
        blnk = LOW;
      } else {
        blnk = HIGH;
      }
      digitalWrite(ledPins[led], blnk);
    }
  }
}


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

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

  digitalWrite (ledPins[0], HIGH); // show: initializing: outermost track leds on
  digitalWrite (ledPins[3], HIGH);
  pinMode (ledpin, OUTPUT);
  digitalWrite (startPin,HIGH);     // initialise startpin high
  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 < numberOfTracks) {  // switch of 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
    if (button > -1 && button != newTrack) {     // button pressed for another track than positioned on
      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 )***********

Succes!

Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 22 februari 2018, 22:00:18
Help,
Het forum doet iets met de vierkante haken in de sketch....
Even kijken hoe ik dit goed kan posten.
[...]
Ah, gevonden. Sketch alsnog als "code" in de post gezet.
Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: mark mms op 23 februari 2018, 21:19:05
Hallo Rob,

Het is gelukt!
Ik heb nu zelfs zes sporen aangesloten.
Wellicht dat ik nog meer wil, maar voor zover ben ik zeer tevreden.

Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 23 februari 2018, 21:37:16
Da's mooi Mark. Gaaf!
Tsja, nu is het wachten op tante Ali, denk ik...
En zodra de spullen geleverd zijn ben ik wel benieuwd naar de bouw van de rolbrug (en ik ben vast niet de enige).
Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Stoomlokkie op 23 januari 2019, 17:10:49
Leuk project. Die Arduino stappenmotor herken ik. Want die heb ik thuis ook liggen. Helaas kan ik de sketch niet uploaden. krijg altijd een foutmelding. Waar zit hem dat in? Want ik wil dit wel na gaan maken, al heb ik de draaischijf nog niet in mijn bezit.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Semantha op 23 januari 2019, 19:12:39
Is de sketch een .jpg bestand???
Als dat zo is dan moet je hem eerst uploaden naar een externe server/host aangezien hier niet direct .jpg bestanden geplaatst kunnen worden vanwege de ruimte op onze eigen server.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 23 januari 2019, 23:31:21
Hoi Semantha,

Is de sketch een .jpg bestand???
Als dat zo is dan moet je hem eerst uploaden naar een externe server/host aangezien hier niet direct .jpg bestanden geplaatst kunnen worden vanwege de ruimte op onze eigen server.

Nee, het is tekst. Meestal zet ik sketches als 'çode' in het bericht.


Rob
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Stoomlokkie op 12 februari 2019, 11:24:37
Ik ga zo'n handdraaischijf een keer opsnorren! En dan ga ik dit eens maken. Het stappenmotortje heb ik al liggen.
Titel: Re: Aandrijving inbouwen in handdraaischijf
Bericht door: Robvd op 12 februari 2019, 13:54:33
Hoi Stoomlokkie,

Leuk.
Ik ga zo'n handdraaischijf een keer opsnorren! En dan ga ik dit eens maken. Het stappenmotortje heb ik al liggen.
Als je zover bent, laat het even weten: dan zet ik de nieuwste versie van het programma'tje (sketch) hier nog even neer.

Rob