Introduction: Froggy World 4 the Train
Step 1:
Let's start with something that didn't work too well. I set up a photocell and photoresistor--and they reliably detected the train--but I had 3 to 4 inches of variance in where the train actually stopped after detection.
Step 2:
Using a reed relay (Jameco #111448) and a bar magnet glued to a train car, I was able to get my "variable stopping distance" down to about one inch.
Connect wire wrap wire across the relay contacts--the relay will close when the magnet is near.
Connect wire wrap wire across the relay contacts--the relay will close when the magnet is near.
Step 3:
The stop arm is mounted to the servo horn (HiTec HS-311 servo, amazon.com) using #4-40 machine screws.
Step 4:
Using 4 x 3/4 wood screws, I mount the servo/arm assembly and support brace (opposite side of track) to the plywood base.
Step 5:
I wired the servo/arm, magnetic switch and relay (to control the train) in accordance with this schematic.
I put the following code into the Arduino:
I put the following code into the Arduino:
#include <Servo.h>
Servo gate;
int start=10;
int next=7;
int dummy=0;
int train=5;
int arrival=1;
int val=0;
int val2=0;
void setup()
{gate.attach (3);
pinMode (next, OUTPUT);
pinMode (start, INPUT);
pinMode(arrival, INPUT);
pinMode (train, OUTPUT);
digitalWrite (next, HIGH);
digitalWrite (train, LOW);
gate.write(130);
delay(1000);
}
void loop()
{val=digitalRead(start);
if(val==LOW or dummy==1)
{
gate.write(45);
delay (500);
digitalWrite(train,HIGH);
if(dummy=0)
{delay(5000);
dummy=1;}}
else
{val2=digitalRead(arrival);
if(val2==LOW)
{digitalWrite (train, LOW);
gate.write(130);
val2=0;
dummy=0;
val=0;
}}}
Step 6:
With the servo disconnected and arm up, adjust the train speed such that the engine always rolls to a stop just beyond the arm.
Now, enable the arm and the train WILL stop at the stop sign!
Now, enable the arm and the train WILL stop at the stop sign!





