Skip to main content

Automatic Station Lights

 Following on from the station lights blog I published awhile ago I have now have the lights coming on automatic when a train comes into any of the four tracks using a Arduino Nano

As I have some spare Ezybus boards I used one of these to do all my connections to the Nano, it also has a 12 Volt input to power the Nano

As my layout is DCC I am using a MERG PMP7 for train detecting, which uses a opto-isolator, to control the LED on the control panel.

One side has a voltage on, in my case 5 Volts with a dropper resistor which brings it down to about 3.5 Volts, the other side is connected to ground 0 Volts.

One of the Nano pins reads this voltage, if it is 3.5 volts it does nothing but if it at 0 volts it switches on another pin on the Nano.

I have used 4 PMP7's for the 4 tracks and used 4 pins on the Nano ( one for each track ) if any of the pins goes to 0 Volts it will switch on the output pin, this in turn switches on a replay to power the LED's ( I have not used the output pin to power the LED's as the currant draw may be too much for the output pin to handle. 

Also I wrote  into the sketch is a 2 second delay for when the last train leaves the station.


Code for Nano ( I hope this is the right one, Keith)
int track71=A3;                                    //read pin:
int track72=A2;
int track81=A1;
int track82=A0;
int readVal1;                                     //readVal:
int readVal2;
int readVal3;
int readVal4;
float V1;
float V2;
float V3;
float V4;
int dt=5;                                             //delay time: 
int dt1=2000;                                          // delay time after train leaves
int stationLights=2;                                    //output Pin:


void setup()
{
  // put your setup code here, to run once:
  Serial.begin (9600);
  pinMode (track71,INPUT);                         //read pin:
  pinMode (track72,INPUT);
  pinMode (track81,INPUT);
  pinMode (track82,INPUT);
pinMode (stationLights,OUTPUT);                        //output pin:

}

void loop() {
  // put your main code here, to run repeatedly:
  readVal1=analogRead(track71);
  readVal2=analogRead(track72);
  
  readVal3=analogRead(track81);
  readVal4=analogRead(track82);
  V1=(5./1023.) *readVal1;
  V2=(5./1023.) *readVal2;
  V3=(5./1023.)*readVal3;
  V4=(5./1023.)*readVal4;
  Serial.println (readVal1);
  Serial.println (readVal2);
  Serial.println (readVal3);
  Serial.println (readVal4);
  

  if (V1<=1||V2<=1||V3<=1||V4<=1)
  {
  digitalWrite (stationLights,HIGH);
  delay (dt1);

  }

  if  (V1>=1.1&&V2>=1.1&&V3>=1.1&&V4>=1.1) 
  {
    digitalWrite (stationLights,LOW);
    
  }
  
delay(dt);

 

}






Comments