A few months ago, I decided to make a word clock as a homemade Christmas gift for my grandparents. The main challenge I wanted to give myself was to 3D print the entire clock, except for the electronics.
This instructable will follow a slightly different format, since I chose to do a lot of optional things. Although my design may differ from the clock you intend to create, the steps below will work universally for designing your own.
Step 1: Required Materials
The materials for this project completely depend on what type of clock you want to create. As a guideline, here are the materials I used:
- Wood PLA (around 400-500g) = $15
- Black PLA (around 250g) = $6
- 100x Kuman ws2812b LED (NeoPixel clone) = $22
- Arduino Pro Mini clone = $3
- microUSB breakout board = $0.50
- DS3231 RTC breakout = $28
- 5V 1A microUSB power supply with switch = $10
- 2x micro button = cheap
- 3x 4.7k resistors = cheap
- Various wires = cheap
If you don't mind having a less precise time, you can save $25CAD by using a DS3231 clone instead of a genuine board.
Step 2: Determine the Layout
This was not the first step I did, but it should have been. Determining the layout of the clock will allow you to determine the amount of LEDs needed, as well as both the inner and outer dimensions of the case. A 10x10 layout as seen above will easily fit all of the necessary words, and has ample room to fit in a few custom phrases. Due to the limited space, I had to orient some words vertically, which made the clock a little more tricky to design.
Determining the 'hierarchy' of the words is also important. I did it by hand on a simple 10x10 table, which should work for most cases (even if it's not the prettiest). In all cases, the first few words need to follow the order below - words on the same number can be swapped around:
3. TWENTY, HALF, ***FIVE, TEN, QUARTER
4. TO, PAST
***FIVE must come after TWENTY
The remaining words representing the hour can be in any order, because they are always the last word in the phrase.
Step 3: Determine the Size of the Clock & Create the Letter Grid
The second step is to determine the overall size of the clock. This is extremely important because it allows you to budget the size of the letter grid within the overall design.
In my case, my delta printer can comfortably print a 20cm^2 square. Taking this into account, I budgeted a 16.5cm^2 area in the middle of the clock, which allows a 10x10 grid of characters which are each assigned a 1.5cm^2 square. Since I was using standalone LEDs, the spacing was not a concern for me. If you are using an LED strip (recommended) space the letters apart at the same distance as the LED spacing.
In order to transfer this into the word clock model, it needs to be both symmetrical and printable. In order to accomplish that, I downloaded the TC_LaserSans font and used adobe illustrator to center each of the letters in the middle of their designated squares. The easiest way to do this is to create 10 individual 10x1 vertical columns of letters and specify the vertical spacing, since each letter has a different width (but not height). You should be able to do the exact same using GIMP, or other free software.
Once the design is finished, export it as either a .dxf or .svg file.
Step 4: Determine What Your Clock Will Look Like
I can't offer much advice on how you want to design your clock. In my case, I wanted a simple 20x20cm clock, with a flat face and rounded edges. I also decided to print it in wood filament, in order to stain it a to a nice shade afterwards.
The important part is having a flat face which can stick to the print surface. You do NOT want to be using support material unless absolutely necessary, due to the fine detail of the surface.
It is a very smart idea to design all of the clock components at once, and make modifications after printing them one by one. I did not to this, and wish I did.
Step 5: Design & Print the Clock Body
I made a very simple clock face. There are two main things to do, regardless of your design or CAD program:
1. Import your .dxf / .svg file and extrude it through your clock body in order to create the letter grid
2. Plan your mounting system in advance
I wasn't sure how I was going to mount the clock, so I created two slots and screw holes to accommodate a stand or wall mount. I also added space for two buttons, which added the flexibility to add something like extra modes and a color selection menu.
Printing the clock was a little bit tricky, due to the fact that I had to find a perfect balance of printing speed - the wood filament I have tends to melt and stick if it's left heated too long, but the letters themselves need to stick to the print surface. I ended up printing the first layer at about 35mm/s, which worked fine. No jams! (on this part at least)
Step 6: Design & Print the LED Mounting System
The letter spacing is already determined from step 2, which makes designing the LED mount trivial. Simply space the LEDs at the same distance as the letters, and use your creativity to make a system of keeping them in place.
In my case, I created a grid with a spacing of 1.5cm. The LED mount needed to attach to the clock base somehow, so I designed it to press-fit into the back of the clock base, leaving 1cm for a diffuser.
When I was creating the clock, this was actually the first part that I created, hence the comment about jams in the previous step. It was not pretty, and I had to disassemble my entire print head and thoroughly clean it afterwards.
Step 7: Design & Print the Diffuser / Light Divider
The last mandatory part to create is the light divider and diffuser. This prevents bleed between the letters. It needs to be exactly the same depth as the distance between the LED mount and the letters in order for it to work properly.
I decided to do the divider in Illustrator, since it has much better features for creating patterns and I couldn't be bothered to make 100 squares by hand. Once again, I exported as a .dxf and created a part from it. For the diffuser, I decided I would rather cut a piece of photo paper instead of being a purist and printing it.
3D printing the part is very handy, due to the abundance of shiny black plastic. This is a fairly simple part to print, but I had a major issue with warping due to a roll of counterfeit PETG. It is very important to have NO WARP on this part, because it will allow light to bleed between letters.
Step 8: Assembly 1: the LED Mount
Use an LED strip, please. I wish I did, this took a tremendous amount of time.
I ordered 100 individual ws2812b LEDs, but they came attached together and needed to be broken apart. As a result, each one needed to be filed round in order to actually fit in the LED mount. Next, I needed to cut and strip 300 small pieces of wire to solder the LEDs together. Finally, I needed to perform 600 solder connections while being VERY careful to not accidentally short out the wires located 1mm from each other.
This step is where I stalled the most. An LED strip would have performed the exact same function, while being much easier. Eventually, I just decided to do it in one day.
Step 9: Assembly 2: the Electronics
The electronics are fairly simple to wire. The photo is using the breadboard setup for more clarity, although the electronics will go in a small box attached to the back.
GND -> GND (Arduino)
5V -> VCC (Arduino)
Din -> Pin 6 (Arduino)
GND -> GND (Arduino)
VCC -> VCC (Arduino)
SCL -> A5 (Arduino)
SDA -> A4 (Arduino)
VBUS -> VCC
GND -> GND
The buttons are completely optional. They simply use a pullup resistor setup to return either a high or low signal to the Arduino.
Step 10: Design & Print the Mounting System
How you choose to mount and display your word clock is totally up to you.
I created a stand which holds the clock at 15 degrees, with a mount for an electronics box which conveniently holds the electronics all in one place. After adding a wire harness, it eliminates most of the cable mess at the back of the clock.
An important lesson to be learned here is to make sure that your pro mini clone has a bootloader installed before you solder everything together.
Step 11: Programming
Programming the word clock is where most of the creativity goes.
EDIT: the code I have is essentially complete, and will not likely be changed further. It can be found at:
With the way I soldered the LEDs, the letters essentially form a continuous string that snakes back and forth - or at least from the code's point of view. In order to greatly simplify the rest of the program, I created an individual void function for each word on the clock, which can be passed a value which corresponds to the color shown. The result is that it is possible to type out a logical phrase within a function ( ie. it(); is(); ten(); ) and have the same phrase appear on the clock.
The code essentially reads the time value from the RTC and draws the logical phrases from that. Additionally, I added a fairly simple statement which will check the current date and display a birthday message if it is either of my grandparents' birthdays.
If you have any questions, feel free to leave a comment and I should be able to help you out.
Step 12: (Optional) Final Touches
Since I printed out of wood filament, I decided to stain the body. Unfortunately, the stain was nearly the exact same color as the filament itself. If I get a nicer wood stain, I'll update this picture.
Step 13: Finished!
By this point, there is a fully functioning word clock which is easily programmed. Although I couldn't quite stain the "wood" to a nice dark walnut color, it turned out quite similar to the render.
Thanks for reading!
Second Prize in the
LED Contest 2017