Creating a 3D-Printed Word Clock with Minute Accuracy
9 Feb 2025

In my spare time, I created a word clock using Arduino. I designed it in Fusion 360 and printed it on the Bambu X1C. Many word clocks you find online have only 5-minute accuracy, which I didn’t like. My goal was to build one from scratch with minute accuracy in Dutch. To achieve this, I had to learn soldering, Arduino programming, and Fusion 360 — skills I had little experience with — making this project a great challenge.
Prototyping in TypeScript
Before starting the physical build, I planned everything out and created a prototype in TypeScript. This allowed me to figure out how to achieve minute accuracy and arrange Dutch words sensibly on the grid. The prototype also helped generate data that I later used in the Arduino C++ code. Since I wasn’t familiar with C++, I researched where to start and found inspiration in a video by Leandro Linares, who upcycled a vintage clock into an Arduino word clock. Although his version had 5-minute accuracy, it gave me a strong foundation to improve upon.

The prototype was invaluable in refining the layout and fixing logical errors quickly. I used individually addressable LEDs arranged in a snake-like pattern on a 13x12 grid. For example, the first row was indexed from 0 to 12, the second from 25 to 13, the third from 26 to 39, and so on. I ultimately generated a multidimensional grid for every minute of the hour, mapping word positions to LED indices. For instance, at 2:13, the text reads “dertien over [currentHour]” (“thirteen past [currentHour]”). The prototype made it easy to determine which LEDs should light up.
Electronics & Soldering
After finalising the prototype, I moved on to the electronics. Since I was new to this, I debugged every step carefully. My LED strip was about 5 meters long, so before cutting it into smaller pieces, I tested it with an Arduino example sketch to ensure it worked. Once confirmed, I proceeded to cut and solder the strips together.
This step proved more difficult than expected. I struggled for a week with soldering — using different temperatures, flux, and techniques — but the solder wouldn’t stick properly. I eventually discovered that the quality of the solder itself made a huge difference. Upgrading to a better soldering material solved the problem. After connecting each new strip (13 in total), I tested it to catch any issues early. The final strip had 156 LEDs, all functioning correctly with the demo code.

3D Modeling, Coding & Printing
With the electronics working, I moved on to designing the case in Fusion 360. I started by ensuring that one LED strip fit correctly. After a couple of attempts, I got the right dimensions. I then laid a sheet of paper over the LEDs and sketched the letter positions.

At this point, I transitioned to the Arduino code. Porting the TypeScript logic to C++ was straightforward; I simply logged the arrays in JavaScript and used the data in Arduino. One challenge was that C++ requires uniform row lengths in multidimensional arrays. I solved this by padding unused elements with -1. Converting the logic to determine which LEDs should light up was then just a matter of simple loops and conditions.
For the time I used a RTC (real time clock) module, to keep track of the time even when the Arduino has no power.


With the letters and code ready, I ran the first full test. Most lights worked, but a few didn’t due to bad solder joints, which I fixed. The next step was building the rest of the case. This involved trial and error, as I initially didn’t leave enough space for wires, the Arduino, or the clock module. Adjusting these each time in Fusion 360 was frustrating until I discovered variables, which allowed me to change dimensions in one place instead of manually updating multiple values. This way I could easy make smaller prints of sections to try out if it fits before printing the complete model.

Final Touches & Improvements
For the front panel, I wanted interchangeable letters to allow different fonts for varying moods. I used a monospaced font to evenly space the letters. The first print fit well but had an issue — letters with enclosed areas (e.g., “a,” “q,” “o”) lost their inner sections. I solved this by slightly cutting the inner shapes to keep them connected, which also gave the clock a unique style.

In the end, the clock worked and I was happy with it. There are still areas for improvement, such as reducing cable length, adding adjustable time settings, implementing more colour effects, improving light diffusion, supporting standard LED strips, and creating an English version. Despite the challenges, this project was an incredible learning experience, and I’m excited to refine it further.
https://medium.com/media/c17f2b5eeb41c8cf64d888735c757e1b/href
Links: