Crossing Signals - Part 3 of 4 - Designing the Circuit

As alluded to in Part 2 of 4 of this series of posts, I used an Arduino Pro Mini to handle the detection of trains and activation of the flashing crossing lights. On September 21, 2021 I discussed a handy tool for drawing wiring diagrams for Arduino circuits. Following is such a wiring diagram showing the wiring of my crossing light circuit on a breadboard. A breadboard is a device into which various electronic components can be plugged without the need to solder the components. This allows for the inevitable tinkering that is required in the design and testing of a circuit. Once one is satisfied with the circuit, a more permanent circuit can be created by soldering the various components together to create the final circuit.


The above diagram shows an Arduino UNO in the circuit. I used an Arduino Pro Mini in my final circuit because it is much smaller (width is about the size of a quarter-dollar coin) and cheaper but it has the same terminals and processing capacity as the UNO.

Note that the photoresistors are wired in series in pairs labelled 1 through 5. Following is a sketch showing which sensors on my model railroad correspond to those in the wiring diagram:


You will note that each pair of photoresistors are those that are physically closest to one another. While the lighting of my layout is fairly uniform, there are likely subtle differences in lighting that are not easily detectable with the naked eye (or even an eye with its clothes on!). As described in Part 2 of 4 in this series, photoresistors are linear devices that vary their amount of resistance to electrical current depending on how much light does or does not fall on them. I wanted the amount of light falling on each pair of photoresistors to be as consistent as possible because the Arduino detects the presence of rolling stock by comparing the amount of current running through each pair of photoresistors when fully lit against the amount of current when shaded by rolling stock.

Please note that I have not always been consistent with my terminology. My use of the words "sensor" and "photoresistor" mean the same thing.

In Part 4 of 4 of this series I will share the Arduino C++ code used to operate this circuit. I used the above breadboard configuration as I tinkered with the logic to make the crossing lights flash as I wanted them to. Once I was satisfied that the circuit behaved as I wanted it to, I recreated the circuit by soldering components to a PC board that is configured the same way as a breadboard. The following are two photos of the final product taken from two sides.


The green, yellow, orange, red and brown wires are those that go to the photoresistor pairs.

The blue, purple, grey, white and black wires all go from the positive side of the circuit to the photoresistor pairs.

The black and red wires (on the left in the first photo and on the right in the second photo) are from the 12 volt DC accessory buss under my layout. The little silver device is an L7805 voltage regulator which converts the 12 volts DC to the 5 volts DC which the Arduino needs to operate. In the first schematic of this blog post, the graphic shows a USB cord that supplies the 5 volts DC coming from the USB port of a computer. This voltage regulator takes the place of the USB cord. Following is a diagram from the Internet showing how to wire such a voltage regulator:





Crossing Signals - Part 2 of 4 - The Methodology for Train Detection

  The following sketch illustrates my track plan (not to scale):


The vertical brown strip depicts the road that passes over two level crossings. The Main Line (also referred to as Track 1) and the Branch Line (also referred to as Track 2) connect via the turnouts located to the East of the roadway. There are 6 possible directions of travel of rolling stock (see yellow arrows in the sketch below):

  • West to east on Main Line
  • West to east on Branch Line
  • East to west on Main Line
  • East to west from Main Line Siding and then on Main Line
  • East to west on Branch Line
  • East to west from Branch Line Spur and then on Branch Line



As my track already has electronic occupancy detection to control the signals (see blog post of December 1, 2020) I decided to use photoresistors to detect the presence of rolling stock. Photoresistors are inexpensive little electronic devices that, when exposed to light, create very little resistance to current flow. However, when the light is turned off (or shaded, as when model railroad passes over it) the level of resistance goes up. Photoresistors are non-polar in that they do not need to be hooked up to positive and negative leads in any particular way. They are analog and not digital meaning that the level of resistance varies depending upon how much light shines or does not shine, on them. Finally, as with regular resistors, photoresistors can be wired in series which means that if two are wired in series, shading one will increase the resistance of the whole circuit and shading both will also increase the resistance of the whole circuit. This is what the photoresistors look like (the head is roughly 4 to 5 mm across, depending on the direction measured - note that two sides are flat):



In order to detect rolling stock travelling from each of the six directions above I mounted photoresistors between the rails, flush to the ties, (called OUT sensors) at the locations marked in green below (sensors are not to scale). The photosensors, along with the crossing lights, will be wired to an Arduino Pro Mini microcontroller. The Arduino programming will be described in detail in Part 4 of 4.



Next, I mounted photoresistors between the rails adjacent to each crossing (called "CROSSING" sensors), as depicted by the blue dots below:




Let's follow a train travelling from West to East along the Main Line.



Position 1 (note the red arrow with the red "1" beside it) - the train shades the first OUT sensor. The Arduino will detect the presence of the train and start the crossing lights flashing. At this point the train could do one of three things:
  1. The train stops at position 1, shading the photoresistor. This means that the crossing lights will keep flashing for as long as the train is parked. This is prototypical. On many occasions I have stopped my vehicle at a level crossing at which the lights are flashing red and look down the track to see that the train is not moving. In this circumstance it is allowable to drive across the level crossing as long as you have come to a complete stop and have checked to make sure that the train is stopped and that it is safe to pass (much light a flashing red traffic light). However, it is not permitted to pass if physical crossing arms are in use at the crossing and the arms are in the lowered position.
  2. The train stops at position 1 and then reverses direction. The crossing lights must stop flashing because there is no longer a need for traffic to be stopped.
  3. The train does not stop but continues on its eastward journey. In this case the crossing lights must keep flashing.
Position 2 - the train has continued its journey and has now reached the level crossing. In this case the crossing lights must keep flashing for the entire time that the train occupies the level crossing.


Position 3 - the train passes over the second CROSSING sensor and, when the last car has passed, the lights must stop flashing.


Position 4 - the train passes over another OUT sensor. As the train has already passed over the level crossing it is important that the crossing lights DO NOT start flashing again. The Arduino needs to be able to differentiate between a train crossing an OUT sensor for the first time and another OUT sensor for a second time. However, once the last car of the train has passed over the second OUT sensor if it were to stop and then reverse direction to pass over the level crossing in reverse the Arduino must start the crossing lights flashing again.



The sequence must operate in exactly the same way no matter the direction of travel or the path followed.

Note that my crossing light design does not incorporate the bell sound. I have seen model railroads with this feature and is nice at first. However, after a while the novelty wears off and ringing bell becomes annoying, at least it does to me. It's my model railroad so I get to decide whether or not the crossings have bells! It would be a simple matter to attach a sound shield to the Arduino and, with some minor programming tweaks, incorporate the bell ringing effect.

In Part 3 of 4,  I'll explain how I wired this contraption.

Crossing Signals - Part 1 of 4 - Building the Crossing Lights

I have long wanted to have operating signals on my model railroad. These are the signals that flash to tell motorists of an approaching train. These are commercially available but I enjoy the problem-solving challenge of scratch building something myself so I thought I would take this on as a new project. This is the first of four blog entries on this topic which will include:

Part 1 of 4 - Building the Crossing Lights

Part 2 of 4 - The Methodology for Train Detection

Part 3 of 4 - Designing the Circuit

Part 4 of 4 - The Code

I first needed to determine the dimensions of crossing signals. A quick online search of "Canadian Grade Crossing Standards" located the following Transport Canada site which contains graphical images and dimensions along with far more information than I will ever need: Transport Canada Grade Crossing Standards. At the bottom of the page is a link to a 60-page PDF file that also contains all the information.

For those readers familiar with the US-style sign which has the words "Railroad" and "Crossing" on the crossbucks, this style has not been in use in Canada for decades. Being an officially english/french bilingual country, Canada removed all words from its crossing lights. This is a graphic taken from the above-mentioned guide:


While the above guide was helpful I wanted to see some real-world pictures of some signs because, depending on when the sign was constructed, the physical appearance of the sign components vary. Using Google Maps to look up crossings within a few kilometres of where I live I quickly was able to take screen shots of a few samples. Here is one:


Using a punch I cut sixteen 7.4 mm disks out of 0.01" thick styrene and in the centre of eight of these I cut a 3 mm hole. The other eight were cut to remove about 1/3 of the area. The following picture shows the first cut on the left. One of these is then turned into the piece in the centre (which houses the light) and the other is turned into the piece on the right (which shades the light).


I wrapped the shade piece on the right around a steel rod that was approximately 4 mm in diameter and held it place for a couple of hours with a clamp to create a slight bend. I then placed it on the light housing, applied a small amount of liquid styrene cement and coaxed the shade into position, holding it a few seconds as the cement dried.

Next, I built the lights that slide into the above housing. The following shows two red 3 mm LEDs. When working with LEDs it is extremely important to keep in mind that, unlike incandescent light bulbs, LEDs are polarity dependent. They will only work if the anode (the longer leg) is powered from the positive side of a power supply and the cathode (the shorter leg) is connected to the ground or the negative wide of the same power supply.


I decided I would use a 3/32" outside diameter hollow brass rod for the pole. In this way the pole itself can be used as a conductor of electricity. Each leg of the two LEDs will be soldered together and, in turn, ONE of them soldered to the outside of the hollow brass rod. In this way the brass rod acts as a conductor and only two thin wires need to be passed up through the hollow brass rod and connected to the other joined legs. I decided that I would wire my LEDs with common anodes (the long, positive legs of the LEDs). However, as I needed to cut both legs of each LED to be much shorter I put a small black dot on the side of the anode (positive) side of the LED at this stage so I didn't get confused over which was which when the legs are shortened.

I pressed one of the cutoff LEDs onto a wooden toothpick, as shown (note the black mark denoting anode):


I then added a second LED from the other side and soldered both legs together.


Using one of the legs that I had earlier cut off I soldered the common anodes together, as follows:


I then repeated the process to create the lights for the other crossing light:

Using a small file I cut a small opening in the wall of the hollow brass rod which is where one thin wire will pass through to the cathode (negative leg) of one of the pairs of LEDs and another thin wire will pass through and be soldered to the cathode of the other pair of LEDs. I then soldered the wire connecting the common anodes to the outside of the hollow brass rod, on the side OPPOSITE the location of the hole, as follows:


This photo shows the wires soldered in place. The red wire is soldered to the bottom of the brass rod. The blue and black wires are both fed through the tube and out of the hole. The blue wire is soldered to the cathodes of one pair of LEDs and the black wire to the cathodes of the other pair of LEDs.


Using the techniques described in my blog post of April 21, 2021 I created the crossbucks and "2 tracks" signs. I then glued the styrene light units onto each LED after painting them black and the signs to the post. I fashioned an electronic bell out of hollow styrene rod and glued it to the top of the pole. Finally, I painted the pole metallic silver.

This is a picture of the finished crossing lights: