Hand tools and fabrication machines
For the 2020 Brighton High School Musical production of Cinderella, the directors needed a large clock. It needed to be lit from inside and be able to move on cue. The director thought he had another way of doing this, and waited until 2 weeks before opening night to tell me that he didn't have anything. So, I started ordering motors and drivers.
The face was cut from six 1/8"x 4'x 8' sheets of white Plexiglass (~$600). Electrical tape was used to add an elegant design that carried a gothic arch motif from other set pieces used in the production. My daughter cut the 15" high vinyl numerals in graphic arts class. Additional graphics were provided by Callie Graphics.
The frame is 3/4" plywood. The spokes are 3 1/2" wide by 70.5" long. There are 1/8" wide grooves on each side of them to accept the plexiglass. The rim is also 3/4" plywood that has been grooved and kerf cut every 4" or so to help bend it around the spokes. A central hub was cut from solid oak and bored out for the hand axels. 3/4" plywood on the back holds the spokes together and 1/4" luan covers the rest of the back. Two 2x4s fastened to the back and rim help hold the clock flat.
Strips of RGB/W LEDs line the inside rear edge of the rim for lighting the clock. These are controlled with a wireless DMX controlled connected to the theatre's lighting system. The clock is flown with two aircraft grade cables. One cable runs continuously from the batten to 3:00, under the clock to 9:00 and back up to the batten. It is held in place with metal straps every few feet. This supports the weight (~500lbs.) of the clock evenly. A second cable is connected at the 12:00 position and is used mainly to stabilize and hold the clock vertically.
The axles are 3/4" and 1" plumbing pipe. These sizes of pipe almost fit together. A friend with a metal lathe turned down and bored out the pipes so they ran smooth inside each other. Standard flanges are used on each end to mount the foam clock hands and gears. The foam hands are counter weighted so it takes little power to move and hold them in position. My friend Todd restores bikes and provided 2 sets of sprockets and chains to drive the hands. I 3D printed adaptors to mount the sprockets to 8mm shaft couplers that mount to the stepper motors output shaft. The stepper motors are Nema 17 motors with a ~27:1 gear planetary box. The motors are driven by and Arduino Uno Wifi Rev 2 and some off the shelf stepper motor drivers. A couple of adjustable buck regulators reduce the output of a 12V power supply down so the motor current is ~1A (the motors are rated at 1.68A max).
The Arduino is programmed with several cues to move the clock to different positions and at different speeds during the show. The clock is manually set to 12:00 before the show and the Arduino is initialized. From there, the Arduino basically counts the motor steps to move from one cue to the next.
I tried using the AccelStepper and MultiStepper libraries since they had non-blocking functions, but ran into problems controlling two motors. So I fell back to the Arduino stepper library and programmed a non-blocking stepper control similar to blink. The main loop checks the current and target position of each hand and the time since the last step. If another motor step is due, the standard Arduino stepper library function steps the motor 1 step forward or backwards and the position is updated. During testing, the fastest I could step the motors was about 5ms per step. I'm not sure if this was due to the loop timing or the load on motors, but this proved to be fast enough for my purposes. The clock movements are pre-programmed in 4 arrays containing target positions and speed of the movements for each hand. There is a little math to setup each cue, which I think the AccelStepper library could handle, but it is pretty straight forward and I could make changes in a few minutes. Given a little more time, a more elegant method would have been nice to be able to adjust and store cues on the fly.
Commands for the various functions are received over WiFi in UdP protocol. I set up a simple 4 character command structure ($xxx) and one of the student stage managers programmed a phone app to send the commands. The Arduino echoes back the commands to let the app know it was received, since in several cases the clock is flown out of sight when it needs to move. For testing, I found a simple UdP transmitter program for MS Visual Studio. We ended up with 12 cues for the show including a 2x mode, a fast mode to make "time fly" to 11:59pm while Ella and the Prince dance, and strike midnight. The stepper motors have proven very reliable and accurate.
There is a bit of slop in the chain setup, and we had a problem with the minute hand dragging the hour hand forward during some cues. A simple block of wood with some foam and a metal strap provide enough drag on the hour hand chain to prevent this and not cause the motor to miss a step.
I'd like to thank Markus, Jeff, Dan, C.J., Andrew, Terry, and Todd for their help in assembling and fabricating parts of this project.