Project tutorial
Simple Automated Model Railway Layout | Arduino Controlled

Simple Automated Model Railway Layout | Arduino Controlled © CC BY-NC-ND

A simple and basic model railway layout controlled by an Arduino microcontroller.

  • 5,461 views
  • 1 comment
  • 15 respects

Components and supplies

Apps and online services

About this project

Arduino microcontrollers are a great addition to model railroading, especially when dealing with automation. Here is a simple and easy way to get started with model railroad automation with Arduino.

So, without any further ado, let's get started!

Step 1: Watch the Video

Step 2: Get All the Stuff

Here is the list of all the parts and components required for this project:

  • An Arduino microcontroller
  • An L293N motor driver module
  • A 'sensored' track
  • A 12-volt DC power source with a current capacity of at least 1A(1000mA)
  • 6 male to female jumper wires (3 to connect the motor driver's signal inputs to the output pins of the Arduino board and the other 3 to connect the 'sensored' track's terminals to the Arduino board.)
  • 4 male to male jumper wires(2 to connect the motor driver board to power and the other two to connect the motor drive's outputs to track power.)
  • A crosshead screwdriver
  • A computer(obviously ; )
  • A suitable USB cable to connect the Arduino board to the computer

Step 3: Program the Arduino Microcontroller

Make sure to go through the program carefully to understand how it works, later it will be fun to tweak it and make your own modifications.

Step 4: Set Up the Layout

Make an oval loop of track as shown in the picture.

Step 5: Make Wiring Connections to the Motor Driver

Remove the jumper connector from the pin marked 'ENB'.

Make the following connections:

  • Connect the 'ENB' pin to pin D10 of the Arduino board.
  • Connect the 'IN 3' pin to the pin D8 of the Arduino board.
  • Connect the 'IN 4' pin to the pin D9 of the Arduino board.

Step 6: Connect Track Power Wires to the Motor Driver

Connect the output terminal's wires to the power feeder connector.

Step 7: Connect the 'sensored' Track to the Arduino board

Make the following wiring connections:

  • Connect the VCC pin to +5-volt pin of the Arduino board.
  • Connect the GND pin to the GND pin of the Arduino board.
  • Connect the OUT pin to the A0 pin of the Arduino board.

Step 8: Place the Train on the Tracks

Use a re-railer to make sure that the wheels of the train sit perfectly well on the tracks.

Step 9: Connect to Power and Turn It On

Make sure no wiring connections are loose. Connect the Arduino boards power input to the power supply and turn it on.

Step 10: Sit Back and Watch Your Train Running

Code

Simple_Automated_Oval_Layout.inoArduino
/*
 * Arduino program to control a model train running in a basic oval loop with the help of a feedback sensor.
 * Made by Tech Build: https://www.youtube.com/channel/UCNy7DyfhSD9jsQEgNwETp9g?sub_confirmation=1
 * 
 */

int s; //Integer variable to store train's speed in the range from 0 to 255.
int maxSpeed = 140;//Integer variable to store the maximum speed the train will reach.
int t = 5; //Time delay(pause, in seconds) between each loop of operation, from start to stop.

void motor_go(){
 if(s>=1&&s<=255){
  digitalWrite(9,LOW);
  digitalWrite(8,HIGH);
  analogWrite(10,s);
 }
 if(s<=-1&&s>=-255){
  digitalWrite(8,LOW);
  digitalWrite(9,HIGH);
  analogWrite(10,-s);
 }
 if(s==0){
  digitalWrite(9,LOW);
  digitalWrite(8,LOW);
  analogWrite(10,s);
 }
 
 
}

void setup() {
  // put your setup code here, to run once:
  pinMode(10,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(A0,INPUT);

  delay(2000);
}

void loop() {
  // put your main code here, to run repeatedly:

  for(s=0;s<=30;s++){ //Providing low voltage to the tracks to just turn on th locomotive's lights.
    motor_go();
    delay(10);
  }

  delay(4000);

  for(s=s;s<=50;s++){ //Starting the train.
    motor_go();
    delay(500);
  }

  delay(5000);

  for(s=s;s<=80;s++){ //Speeding up a bit.
    motor_go();
    delay(500);
  }

  delay(1000);

  while(digitalRead(A0)==LOW); //Wait for the train to cross the 'sensored' track.

  for(s=s;s<=maxSpeed;s++){ //Speeding up the train to maximum speed value set in the beginning.
    motor_go();
    delay(500);
  }

  delay(1000);
  while(digitalRead(A0)==LOW); //Wait for the train to cross the 'sensored' track.

  delay(2000);

  for(s=s;s!=100;s--){ //Slow down the train a bit.
    motor_go();
    delay(1000);
  }

  delay(4000);
  while(digitalRead(A0)==LOW); //Wait for the train to cross the 'sensored' track.

  for(s=s;s!=80;s--){ //Slow down the train furthur.
    motor_go();
    delay(500);
  }

  delay(4000);

  for(s=s;s!=60;s--){ //Slow down the train, preparing to stop.
    motor_go();
    delay(500);
  }
  delay(1000);
  while(digitalRead(A0)==LOW); //Wait for the train to cross the 'sensored' track.

  delay(1000);
  
  for(s=s;s!=20;s--){ //Reduce the voltage on the tracks to just let the locomotive lights turned on.
    motor_go();
    delay(250);
  }

  delay(1000);

  for(s=s;s!=0;s--){ //Stop the power supply to the track and power down the locomotive.
    motor_go();
    delay(125/2);
  }

  delay(1000*t); //Wait for the set time before starting all over again.
}

Comments

Similar projects you might like

Automated Model Railway Layout with Passing Siding

Project tutorial by Kushagra Keshari

  • 8,733 views
  • 10 comments
  • 41 respects

Simple Automated Point to Point Model Railroad

Project tutorial by Kushagra Keshari

  • 1,457 views
  • 1 comment
  • 7 respects

Model Railway Layout with Automated Passing Siding (V2.0)

Project tutorial by Kushagra Keshari

  • 605 views
  • 0 comments
  • 2 respects

Simple Automated Model Railroad Loop with Yard Siding

Project tutorial by Kushagra Keshari

  • 2,395 views
  • 0 comments
  • 5 respects

Automated Point to Point Model Railroad with Yard Siding

Project tutorial by Kushagra Keshari

  • 1,481 views
  • 1 comment
  • 9 respects

Keyboard Controlled Model Train | PS/2 Interface

Project tutorial by Kushagra Keshari

  • 1,077 views
  • 1 comment
  • 10 respects
Add projectSign up / Login