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.
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 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!
Participated in the
UP! Contest