This website is under construction.

Images are being added and structure is being reshuffled.

✨ Check out what's newly added

Project Logbook

Split Flap Desk Clock

A running record of design decisions, builds and testing, organized by stage.

Concept & Design

Motor & MCU research, first Tinkercad proof of concept

Before touching any real hardware, I did initial research to settle on a motor and a microcontroller board. Landed on continuous rotation servos, expecting that they accepted specific angle-position and rotation-direction commands having used regular 180° servos in previous works. This would let each dial's rotation angle be matched to a display symbol via a lookup table. Stepper motors and other motor types were avoided early on, mainly due to the added complication of needing a dedicated motor encoder per motor.

For the microcontroller, an Arduino Mega was the initial choice, picked for its surplus of pins for connecting the various peripherals the project would eventually need.

Put both together into a rudimentary proof-of-concept circuit in Tinkercad, including a button to trigger a full riffle refresh of the display. Built late in the night on the 27th.

Tinkercad v0 proof-of-concept circuit, 27 August 2024

Move to Wokwi, RTC added, first parts purchased

After my frustrations with Tinkercad, I moved circuit simulation over to Wokwi.com. It's a much needed step up from Tinkercad, having a near-realtime speed and a larger library of circuit components, letting me simulate the project far more accurately.

Alongside the changeover, I added a real-time clock module to the circuit to begin integrating proper timekeeping into the design and switched the button for a servo enable switch.

I also purchased my initial electronics so I could start prototyping the design at my desk. An Arduino Mega, a DS3231 RTC, SG90 continuous servos, and some general electronic kit parts marked the start of the prototyping front.

Wokwi v0.1 circuit, 3 September 2024

First prototype: RTC, Mega and 6 continuous servos

My first parts order came in today with everything needed for a first prototype, plus a few spares just in case. The test code was simple, autonomously step each of the six spools through angles every couple of seconds while the RTC reports the current time to the Arduino IDE console.

Plugged everything in, using a breadboard as an intermediary, and uploaded the code to the Arduino. I had some initial trouble getting my computer to recognise the Mega as the board I'd bought came with a non-standard "CH340C" USB-to-serial chip. After tracking down and installing the CH340C driver, I was able to upload code.

During testing, the RTC returned the correct time to the console without issue. The servos were a different story however... Instead of ticking clockwise in neat increments, some weren't spinning at all, others were spinning continuously, and a few were even spinning counter-clockwise. Prompted to do a quick google search, I discovered that continuous rotation servos are really just glorified DC motors with a built-in encoder. A continuous servo takes a value between 0-180°, where, 0-89° means "rotate clockwise", 90° means "stop", and 91-180° means "rotate counter-clockwise". To my surprise, there was no way to request an exact angle. My original assumption, that I could rotate to exact defined angles in one direction, was wrong. This sent me on a hunt to find new actuators for the split-flap spools.

Arduino Mega wired up for the first prototype, 24 September 2024 Breadboard and RTC module wiring, 24 September 2024 Six continuous rotation servos wired for the first prototype, 24 September 2024

Dial layout finalized

Locked in the final dial arrangement and overall footprint (300 x 150 x 80mm). Each dial will use its own stepper rather than a shared cam-driven mechanism, trading some mechanical simplicity for independent control and easier debugging later on.

Prototyping

Front face, flap & driver CAD, plus system block diagram

After my first prototype, I discovered that continuous servos couldn't be used as easily as I'd hoped. Hence, it was back to the drawing board. Feeling a bit demotivated, I decided to switch gears and start on a 3D CAD model of the clock and its components instead. This would need doing eventually anyway to prototype the structure.

I began by sketching out a shape for the clock's face that felt right, knowing I'd want around six individual digits so the display could show 12-hour or 24-hour time, or even seconds. While redesigning, I also decided to add radio functionality as I have always had a fondness of retro radios. The idea came from growing up around an old tube radio that was always tuned to the ABC morning news and it felt like a natural fit for the equally retro split-flap display.

Some research into other split-flap projects pointed me toward stepper motors as the next actuator to try. Steppers need a driver to translate the Arduino's movement signals into motor phase pulses, so I settled on the TMC2209 as it has features like StealthChop, which tunes the voltage and current delivered to the motor to run it quieter while increasing torque.

I also put together a quick block diagram of how all the clock's components connect, mostly so I wouldn't confuse myself later.

CAD model of a pair of display flaps done in Autodesk Inventor, 7 October 2024 KiCad circuit schematic symbol for the TMC2209 stepper motor driver, 26 September 2024 CAD sketch of the clock's planned front face layout, 29 October 2024
Early hand-drawn circuit block diagram, 23 September 2024

First 3D-printed dial

Printed the first single-dial prototype to test flap tolerances and flip motion. The flap catch needed a 0.3mm clearance increase to stop binding at the top of the rotation.

Gear ratio revisions

Adjusted the gear ratio between the stepper and dial shaft to smooth out the flip motion and cut down on audible motor whine. This slowed the flip slightly but made the click noticeably more satisfying, which felt like the right trade-off.

Electronics & Firmware

Stepper driver bring-up

Got all six stepper drivers talking to the STM32L476 over a shared SPI bus with individual chip-select lines. Current draw at idle was higher than expected, so added per-driver current scaling once a dial reaches its target position.

RTC sync working

Wired up the DS3231 RTC module and confirmed the clock now survives a power cycle without losing time. Drift over a two-week test was under 5 seconds, comfortably within the ±10s/month target.

Assembly & Testing

Full assembly, first power-on

All six dials assembled into the case for the first time. First power-on had two dials flipping out of sync due to a firmware indexing bug, fixed by resetting each dial's home position individually on boot rather than assuming a shared zero point.