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.
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
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.
/*
* 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.voidmotor_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);
}
}
voidsetup() {
// put your setup code here, to run once:
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(A0,INPUT);
delay(2000);
}
voidloop() {
// 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.
}