Givens:

  • Trains can run forward only.
  • For a given run only one train can be assigned one of the paths. i.e., Only one train will be assigned the large oval. If two trains were assigned the large oval going in the same direction the run would be trivial, in opposite directions the run would be short.


Conventions:

  • Trains are just an engine, locomotive or "loco" in this case a Plymouth ML-8 Industrial Switcher. Trains will be referred to by their color Black, Red, Orange, Yellow or Green.
  • The order the trains are 'parked' is arbitrarily in IEC (International Electrotechnical Commission) color code order. If a given run does not use all trains, 'the invisible hand of god' removes the unused train(s).
  • Clockwise, Counter-Clockwise are defined as on the left-hand end of the oval/figure-8 track layout.
  • In the Contents at left, new/updated entries have a * to highlight changed content in the current (weekly?) update.
  • Power bus:
    • Following other conventions, 15vdc is 15 volts DC, more or less. 5v0dc is 5.0 volts DC with tighter regulation of the output voltage. The "v" (5v0dc) replaces the decimal point which may be missed, which would cause problems. There is a critical difference between 5v0dc and 5.0vdc if you don't see the decimal point!
    • Red/White, Red 15vdc, White common (Power supply to Motor Shield). Red/White twisted pair 15v bipolar PWM DCC signal from Motor Shield to the track and all DCC controlled elements. (Lite blue/yellow twisted pair Program mode DCC from Motor Shield to switch and block #14.)
    • Black/Green, Black 5v0dc, Green common. 5vdc for Raspberry Pi, PWM HAT/Bonnets, IR sensors, Turnout LED indicators, etc.
    • Orange/Blue, Orange 12vdc, Blue common. 12vdc for Arduino, 60 56 semaphore LED lights and 4 dwarf signals in the parking lot. (This was 1v5dc until the semaphores design changed.)
  • Steam locomotives were invented in England and for whatever reason the engineer sat on the right side of the loco. This is still true and so that the engineer can see the signals he must follow, the signals too are on the right side of the track.


The aspect of the top signal on a pole reflects the mainline, i.e., the large or small oval. This would be through switches in the CLEAR position. The aspect of the lower signal on a pole reflects the status of the divergent route through a switch in the THROWN position, i.e. large or small figure-8.

  • Rainbow Ribbon cables: are used in many places to make interconnecting cables. They are a convenient source of small, #26 stranded, flexible wire and can be stripped to any number of conductors. The wires are colored in color code sequence so there is a natural order to the wires.
    • The IR Sensors mounted under the tack have a 3-pin connector, 5v0dc, ground, signal-out (right to left). The low order wire is connected to 5v0dc. For example, a 3-wire cable green(5), blue(6), violet(7). The green wire would be connected to 5v0dc Also see the Arduino for the other end of the cables.
    • Parking lot LED signals have 3 LEDs Red, Yellow and Green with a common wire. the cables are Red, Orange and Yellow, Green. The orange is the common. The dwarf signals have Red, Yellow, Green and white wires. The white wire is the common.
    • Servo cabling is a 3-wire female cable from the servo; Black or Brown ground, 5vdc (orange) and Yellow or White signal. A 3-wire ribbon extension cable is used to connect the servo to the RPi PWM HATs with ground on the bottom and the signal on the top. The low order wire of the rainbow ribbon extension cable is ground.
    • Cooling fan for the Raspberry Pi also connects to a PWM HAT: Brown, ground; Black, 5vdc; and White, signal. (Yes the first version is also shown Brown ground, Red, Orange.)
    • Wabbit Feedback cables connected to Wabbit connectors J5 and J6 pins 1, 2 and 3. The low order colored wire is connected to pin 1 of J5 or J6. I was not consistent about which jack, J5 or J6 I started with.
    • Several cables are symmetrical, (The pin in the middle (ground or 5vdc) designed to be plugged in either way, as needed. There is no standard used for these. For example, cables around the Tortoise, the red/green LEDs showing the state of the turnouts and the cable from the Arduino to the two relays.
  • Gray Ribbon cables are used in between the IOPi HAT and the Wabbit Feedback board. No I don't like them. 
    • There are two 10-wire cables with 2x5 plugs on each end. The ribbon cable is marked in red every 10 wires. The red marked wires are plugged into the left end of the headers where the 5vdc and ground are located.
    • There is one 8-wire cable connected to bus1 on the IOPi HAT. Again the red marked wire is plugged into the left most part of the header.


  • Software Naming Conventions: If anyone else ever reads my TrainThing code, conventions can help understanding. And there are effects of habits from a prior life. I follow standard Python naming standards. More restrictive if anything. To avoid having to rundown PEP 8 – Style Guide for Python Code I tried to follow these naming conventions.
    • If the scope of a name is intended to be local to a class, function or method, start the name with an underscore. _name. (In python not enforced. This helps me remember. Some IDEs give gentile warnings.)
    • If a name conflicts with, shadows, a reserved word add an underscore to the end. ReservedWord_. (This avoids having to concoct a name with odd spelling or obscure meaning to avoid conflicts.)
    • Modules, files: Lowercase, descriptive but short word.
    • Class: CapWords, or CamelCase. I don't like to type so single CapitalizedWord.
    • Functions/Methods: Lowercase descriptive word or words separated by an underscore. word_word.
    • Constants: CapitalizedWord or words. WORD or WORD_WORD. (In python there are no constants per say. This is a reminder not to assign a new value to a CONSTANT.)
    • Variables: Lowercase word or words. word or word_word. Hopefully descriptive.