A few months ago I came across an interesting project, an Arduino Word Clock. If you aren't familiar with the term, it's basically a clock that tells you the time as a sentence instead of with digits. So instead of 10:30pm, it would say, it is half past ten. The reported time accuracy is within 5 minutes, which is good enough for a general clock / interesting piece of art. I decided to build one as a Christmas present for my dad.

Although I read a few different designs on the web, I decided to take my own path and design my own. I encourage you to do the same; sometimes it's easier to do things the way you want to do them and look to others for inspiration, than follow instructions to the last detail.

The general steps are: 1) Create the clock face, 2) Wire the lights, 3) Build the driver for the lights, 4) Add the clock, and 5) Final assembly.

Creating the clock face

I started to create the clock face by planning out the word placement. I went with a layout like this, that has 23 words:

Since I decided on a proportional font, I had room for the extra word/letter A in the first row. I also added in some spaces. If you go with a fixed-width font, you would need to remove the A and all the spaces. I created this SVG to guide my stencil, printed it, and glued it to some thick cardboard. I then drilled holes into the center of each letter that will hold an LED for each letter. I also printed the stencil in reverse and used some rubber cement to temporarily glue the stencil to a thick piece of black oak tag paper, which will make the clock face. I used an x-acto knife to cut out each letter. This was a time consuming endeavor, to say the least. Be sure to save the middle cutouts for any letters that have one, so they can be glued back in during the final assembly.

Wiring the LEDs

This was also a time consuming process, mainly due to soldering a resistor to each of the 99 LEDs. Each word was soldered up in parallel, and connected to a pin on a shift register (more on that later). I went with individual LEDs for each letter, to ensure an even amount of light would be illuminated behind each letter. In retrospect, I wonder if using some LED strips would have looked good enough. It's a good idea to label each group so you won't make any mistakes while soldering. For ground, I used a strip of bare wire along each row. Since the shadow box that would be my final mount had a lot of room, I kept the positive lead on the LEDs sticking straight up.

Building the Arduino Driver

With the need to drive lights for 23 words, we will need to use shift registers, as the Arduino UNO doesn't have 23 pin outs. If you don't know what a shift register is, it's basically a memory buffer that can be used to control a larger set of outputs from a smaller set. In our case, we will use 3 pins from the Arduino to drive three 8-bit 74HC595 shift registers. So, from three pins we can control up to 24 output states.

The nice part of the 74HC595, is that they can be chained together. Theoretically you could have infinite pins under your control.

Before I soldered things up, I created a small prototype to ensure I was able to properly control each LED group. The Arduino ShiftOut tutorial was quite helpful here.

After everything was working well, I soldered it up on some perf board. Again, this was time consuming as there were many connections to make.

Adding the clock

A clock is only good if it can tell accurate time. And, it didn't seem like a great option to build a bunch of controls to set the time each time it's powered up. Instead I opted to add a battery backup RTC (Real Time Clock) to the device. Luckily Adafruit sells an Arduino RTC breakout board based on the popular DS1307 IC. Their tutorial was also quite helpful.

A small aside: I ran into trouble getting the breakout to work. The issue was a crossdev toolchain problem with the RTC library and my Gentoo Linux laptop. Details about the issue are on the Adafruit forums. Chances are very few people will run into this same issue.

Final assembly

If you are reading this deep in the article, you are probably wondering about the code used to power the clock. Before I wrote any code, I created these maps to show which register and pin should be lit for each word.

Next the LEDs need to be hooked up to the Arduino driver board. Lots of wires, lots of fun!

On the front of the LED board, I blocked off each section by first cutting strips of oaktag paper to block off each row, and next block off each word with a small piece of cardboard. Each word is blocked out so words not lit appear dark. It will take some adjusting to get things looking proper during the final assembly. Behind the front face stencil, I included a piece of dark tissue paper to filter the light though and create a nice effect.

Mount everything else inside your display case (I used a shadowbox purchased at a local craft store), and you are done!