The VL53L1X sensors were used since the detection angle can be controlled by the user down to 4 degrees which is what I needed to measure the distance of the foam balls within the transparent pipes. A wider angle would have caused reflections from the tube walls to interfere with the longer readings.
PID control is simple but when the seconds/minutes/hours wrap from max to min, the loop parameters must be changed to make sure the ball stops before hitting the bottom - so a strong differential gain is needed. In normal operating strong differential gain would drive the balls into oscillation.
All the small plastic parts were cut with a cheap desktop CNC machine. Each laser sensor is held at 3 points so it can be adjusted to point upwards.
A single Arduino could probably take care of the PID loops and the GPS/RTC timekeeping but in order to keep everything simple I decided to dedicate one Arduino for the timekeeping functions, minimizing interruptions to the PID loops.
All of the modules are off-the-shelf in order to keep cost down and minimize the building and soldering work. The only exception are the parts used to hold the tubes together. My initial idea was to cut them from plexi-glass the same way I did with the laser sensor holder and fan adapter but it didn't pan out as I wanted. I then decided to order the parts from a contractor and searched on-line for one but the price was too high. Finally I came up with the cheapest and most robust idea - make these parts from FR-4 PCB material by designing a PCB and sending it to be produced as prototype. This proved to be the cheapest and most rigid solution. I even made provisions to install LEDs on these PCBs but didn't get to it.
The numerals on the pipes are printed using my home laser printer on transparent sticker stock. Simple.
And most important is the demo mode - with the flip of a small switch I can adjust the time to 12:59:50 - 10 seconds before the 3 balls need to simultaneously fall to show 1:00:00. Flipping the switch back resumes normal operation.