DIY Automatische Treinbesturing met Arduino – Eenvoudig, Betrouwbaar en Aanpasbaar
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Jumper wires | 1 set |
| Arduino UNO (of Nano, Mega, etc.) | 1 |
| L298 Dual H-brug motordriver (module aanbevolen) | 1 |
Apps en online diensten
- Arduino IDE
Over dit project
Met dit simpele schema laat je je modeltrein automatisch rijden volgens een tijdschema. Je kunt rijtijd, stoptijd, versnelling en afremming instellen. Door de parameters in de sketch aan te passen, creëer je elk gewenst beweegpatroon. Alleen spanning aan en de trein vertrekt.
Tijdschema in de sketch
// 1 | 0 > Tijd < 5 sec
if (counterScheduler <= 5) { ... }
// 2 | 10 sec > Tijd < 15 sec
if ((counterScheduler >= 10) && (counterScheduler <= 15)) { ... }
// 3 | Richting omkeren
if (counterScheduler == 16) { ... }
// etc.
Bewegingsparameters
int brakingDelta = 5;
int accelerateDelta = 6;
Richtingbesturing
Pinnen D6 en D7 bepalen de richting:
// Standaard richting VOORUIT
digitalWrite(L298_IN1, HIGH);
digitalWrite(L298_IN2, LOW);
Je kunt de sketch eindeloos aanpassen voor nieuwe automatische rijpatronen. Goede reis!
Code
Swing Sketch (Arduino)
// L298 pinnen
#define L298_ENA 5
#define L298_IN1 6
#define L298_IN2 7
// Script variabelen
int counterScheduler;
unsigned long timerScheduler = 0;
unsigned long timerLocal = 0;
byte speedAuto = 0;
void setup() {
pinMode(L298_ENA, OUTPUT);
pinMode(L298_IN1, OUTPUT);
pinMode(L298_IN2, OUTPUT);
// Standaard richting VOORUIT
digitalWrite(L298_IN1, HIGH);
digitalWrite(L298_IN2, LOW);
}
void loop() {
// Scheduler tick elke seconde
if (millis() > (timerScheduler + 1000)) {
counterScheduler++;
timerScheduler = millis();
}
int brakingDelta = 5;
int accelerateDelta = 6;
// 1 | 0-5 sec: Opstarten en versnellen
if (counterScheduler <= 5) {
if (millis() > (timerLocal + 100)) {
if (speedAuto < 240) speedAuto += accelerateDelta;
else speedAuto = 255;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 2 | 10-15 sec: Afremmen en stoppen
if ((counterScheduler >= 10) && (counterScheduler <= 15)) {
if (millis() > (timerLocal + 100)) {
if (speedAuto > 30) speedAuto -= brakingDelta;
else speedAuto = 0;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 3 | 16 sec: Richting omkeren
if (counterScheduler == 16) {
digitalWrite(L298_IN1, LOW);
digitalWrite(L298_IN2, HIGH);
}
// 4 | 20-30 sec: Opnieuw starten en versnellen
if ((counterScheduler >= 20) && (counterScheduler <= 30)) {
if (millis() > (timerLocal + 100)) {
if (speedAuto < 240) speedAuto += accelerateDelta;
else speedAuto = 255;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 5 | 31-40 sec: Afremmen en stoppen
if ((counterScheduler >= 31) && (counterScheduler <= 40)) {
if (millis() > (timerLocal + 100)) {
if (speedAuto > 30) speedAuto -= brakingDelta;
else speedAuto = 0;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 6 | Na 40 sec: Reset naar stap 1
if (counterScheduler > 40) {
counterScheduler = 0;
digitalWrite(L298_IN1, HIGH);
digitalWrite(L298_IN2, LOW);
}
}
Schema's


Productieproces
- Anticonceptiepil: Geschiedenis, Voordelen, Risico's en Productie
- Geautomatiseerd Zwembadvul- en Monitoringssysteem
- Automatische Persmachines: Functie, Voordelen en Toepassingen Begrijpen
- Automatische krachtpressen: kenmerken, voordelen en toepassingen
- Automatische Buigmachines Begrijpen: Functies, Voordelen en Toepassingen
- Automatische Draaitafels Begrijpen: Precisie & Efficiëntie in Metaalbewerking
- Uitgebreide Gids voor Automatische Transmissiesystemen
- Automatische smeringssystemen: Hoe ze werken en waarom ze belangrijk zijn
- Regelschakelingen: Fundamenten, Toepassingen en Best Practices
- Bankwerk begrijpen: Definitie, toepassingen en voordelen
- Kwaliteitscontrole begrijpen: Consistentie en excellentie garanderen