Modelspoormagazine 234 – april 2023 – Arduino Sketch van de draaischijf:

#include <Stepper.h>
#include <SpeedyStepper.h>
#define STEP_PIN   A4 // to STEP pin of driver
#define DIR_PIN   A3 // to DIR pin of driver
#define POS_1_PIN   2 // LOW = go to pos 1
#define POS_2_PIN   3 // LOW = go to pos 2
#define POS_3_PIN   4 // LOW = go to pos 3
#define POS_4_PIN   5 // LOW = go to pos 4
#define POS_5_PIN   6 // LOW = go to pos 5
#define POS_6_PIN   7 // LOW = go to pos 6
#define MS1    A1
#define MS2    A2
#define PULSES_PER_REV 600
int new_pos = 0;
int current_pos = 0;
int numsteps = 0;
//define in steps the track positions from homing point.
int a = 800;
int b = 1208;
int c = 2150;
int d = 2650;
int e = 3200;
int f = 3608;
// create the stepper motor object
SpeedyStepper stepper;
void setup() {
 pinMode(8,OUTPUT); // relay 1
 pinMode(9,OUTPUT); // relay 2
 pinMode(POS_1_PIN,  INPUT_PULLUP);
 pinMode(POS_2_PIN,  INPUT_PULLUP);
 pinMode(POS_3_PIN,  INPUT_PULLUP);
 pinMode(POS_4_PIN,  INPUT_PULLUP);
 pinMode(POS_5_PIN,  INPUT_PULLUP); 
 pinMode(POS_6_PIN,  INPUT_PULLUP);
 pinMode(MS1,   OUTPUT);
 pinMode(MS2,   OUTPUT);
 digitalWrite(MS1, HIGH);
 digitalWrite(MS2, HIGH);
 // connect and configure the stepper motor to its IO pins
 stepper.connectToPins(STEP_PIN, DIR_PIN);
 }
 void rotate() 
{ 
 stepper.setSpeedInStepsPerSecond(100);
 stepper.setAccelerationInStepsPerSecondPerSecond(30);
 stepper.moveRelativeInSteps(numsteps);
}
void loop() 
{ 
 if(digitalRead(POS_1_PIN) == LOW) {new_pos = a; digitalWrite (8, LOW); digitalWrite (9, LOW);}
 if(digitalRead(POS_2_PIN) == LOW) {new_pos = b; digitalWrite (8, LOW); digitalWrite (9, LOW);}
 if(digitalRead(POS_3_PIN) == LOW) {new_pos = c; digitalWrite (8, LOW); digitalWrite (9, LOW);}
 if(digitalRead(POS_4_PIN) == LOW) {new_pos = d; digitalWrite (8, LOW); digitalWrite (9, LOW);}
 if(digitalRead(POS_5_PIN) == LOW) {new_pos = e; digitalWrite (8, HIGH); digitalWrite (9, HIGH);}
 if(digitalRead(POS_6_PIN) == LOW) {new_pos = f; digitalWrite (8, HIGH); digitalWrite (9, HIGH);}
 numsteps = (new_pos – current_pos);
 rotate();
 current_pos = new_pos;
}


 

Modelspoormagazine 199 – februari 2020

Stap 1:
Arduino IDE versie 1.8.9
https://www.arduino.cc/en/Main/Software 

 

 

 

 

Klik op:  ‘just download’.
In downloads vindt u het bestand van Arduino terug.

 

Arduino 1Van zodra dit gedownload is gaat u verder naar stap 2 

 

Na het downloaden bij stap 2 ziet u deze namen staan in de downloads. Klik op ‘Bedieningsbord_…turing_Seinen.ino.
De computer vraagt of het programma mag geopend ,omdat het van het internet afkomstig is, en daar klikt u dan effectief op ‘open’. Mogelijks moet u nu nog één keer op ‘ja’ of op ‘oke’ klikken.

Arduino 2AArduino 2

In Modelspoormagazine 199, pagina 73 staat beschreven hoe we een vijftal seinen van onze modelspoorweg aansturen met een Arduino. Het programma hiervoor werd geschreven door Jan De Nil, en is enkel in het Nederlands.

Uitleg programma:

Kleuren tekst:

• alles in het groen is gewone tekst die uitleg geeft over de geschreven code. Tekst moet steeds worden voorafgegaan door twee schuine lijnen “//” of staan tussen de tekens /*……*/

• blauw en purper is code alsook sommige woorden in de zwarte kleur.

• De lijnen in “//***” scheiden de verschillende delen van het programma netjes van elkaar. Zij worden voorafgegaan door de 2 schuine lijnen (//) waardoor het programma begrijpt dat dit tekst is.


1 e deel: Variabelen voor in- en uitgangen:

• Zoals reeds gezegd zijn de drukknoppen en de leds van het sein aangesloten aan de pennen van de arduino. Men kan in het ganse programma met de nr’s van de pennen werken maar men kan ook zeggen dat bijvoorbeeld pen 5 gelijk is aan “Const int DrukknopSein1_Rood” en pen 6 gelijk is aan “Const int
DrukknopSein1_Wit”. “Const int” is code taal en staat voor “Constante integer” of in mensentaal een constant positief getal, in dit geval gelijk aan de nummer van de aansluitpen 5 en 6. De woorden “DrukknopSein1_Rood” en “DrukknopSein1_Wit” zijn woorden die men zelf kiest. Het is evident dat men deze bewoording kiest in functie van de toepassing waarvoor men het programma schrijft. Merk op dat deze woorden geen spaties mogen bevatten. “Drukknop Sein1 Wit” wordt niet aanvaard. “DrukknopSein1_Wit” is wel korrekt.

2 e deel: Void Setup:

• De code in deze void staat in zijn geheel tussen accolades ({…….}).

• De pennen van de arduino kan men gebruiken als ingangen of als uitgangen. Het programma moet weten welke pin een ingangspin is en welke een uitgangspin. Met de code “PinMode(pennr, INPUT_PULLUP)” geeft men aan dat de pen als ingang moet worden geconfigureerd en met de code “PinMode(pennr, OUTPUT) geeft men aan dat de pen als output wordt geconfigureerd.

• De configuratie van in- of uitgangspin moet in de void Setup plaats vinden.

• De void Setup wordt slechts 1x doorlopen.


3 e deel: Void Loop:

• De code van deze void staat ook in zijn geheel tussen accolades ({……}).

• De code van deze void wordt continu doorlopen dwz als de laatste codelijn is uitgevoerd, begint men opnieuw met de eerste codelijn. Het doorlopen gaat
razendsnel (in de orde van de msec). 

• Men begint met het inlezen van de drukknoppen dwz het programma kijkt na of een
drukknop wordt ingedrukt. Als dit zo is, wordt de integer variabele gelijk aan nul. Als
de drukknop niet wordt ingedrukt is de waarde van de integer gelijk aan 1.

De codelijn voor inlezen drukknop Rood sein 1 hiervoor is: Waarde variabele = lezen
ingangspen of in code: IngangSein1_Rood = digitalRead(DrukknopSein1_Rood)

• Na het inlezen gaat men nagaan wat de waarde van de ingelezen variabele is. Men doet dit met de vraagstelling: Als de waarde van de variabele gelijk is aan nul dan ….

In codetaal: If(IngangSein1_Rood == 0)
Als het antwoord op de vraag “ja” is m.a.w. er is op de rode knop gedrukt dan zal het rood sein moeten aangaan. Dit gebeurt door het aanroepen van “void Sein”met de volgende codelijn: Sein(Sein1_Rood, Sein1_Wit, Sein1_Geel, Sein1_Groen, 1,0,0,0);

De woorden “Sein1_Rood, Sein1_Wit, Sein1_Geel, Sein1_Groen” staan voor de uitgangspennen van de arduino (zie 1 e deel) en de cijfers 1,0,0,0 staan voor de
waarde dat deze uitgangspennen moeten krijgen. “1” betekent +5V en een “0” betekent nul volt. Dus de uitgangspen voor de rode led krijgt +5V waardoor deze zal gaan branden en de andere uitgangspennen worden op 0 volt gezet waardoor deze niet zullen branden. Het aansturen van de uitgangspennen wordt door de code “digitalwrite(pen, waarde)” uitgevoerd in de void “Sein”

• Alle code die betrekking heeft op de vraagstelling of op de drukknop rood is gedrukt If(IngangSein1_Rood == 0) staat tussen accollades ({..})

• Na de vraagstelling of er op de rode drukknop is gedrukt, volgt de vraagstelling voor de witte, de gele en de groene drukknop. De vraagstelling gebeurt voor alle seinen.

Menu