Word clock on steroids

Nowaday it seems that everyone is building a word clock. The idea is nothing new anymore so I shouldn’t build one too, right? WRONG! Instead of going the easy route and rebuild a proven design I decided to create my own and beef it up a little. It’s definitely more expensive, more work, uses more power, produces more heat and has a lot of other drawbacks but I just need to have it. So far so good.


In order to do it right the first time some planning had to be done. (Thanks…captain obvious) The layout of other word clocks didn’t really please me so I did my own – in Swiss German! I didn’t want to show only the time but also the day, month and year. To display all that information at once I had to do a 15×15 raster. In the picture below a first test of the layout is shown. It was made using the laser I built in a previous project.


When the date and year is displayed there will be some gaps but I guess it won’t be too much of a problem to read it.

The clock has to be readable from at least 10m so the height of each letter has to be 30mm or more. I made each letter around 40mm just to be sure. Lets calculate the whole size: 15x 40mm + Space + Frame… that’s around 900x900mm. Because the LED spacings of standard WS2812b LED strips is either too big or to small I decided to build PCBs for my word clock. I didn’t want to make the clock too deep so I had to take more LEDs than just one to get an even light distribution over the letter.


Because the beam angle of the LED is around 120° a minimum distance of around 12mm to the front had to be kept. I used 2 8mm MDF sheets so the distance to the front will be around 15mm. I used 4 LEDs per letter that makes a total of 900 LEDs for the whole word clock! I used the LED panels that are described in an earlier blog entry. Each panel has 36 LEDs that makes 25 panels in total.





I used a stencil font because I didn’t want to deal with letters that would fall apart when lasering the front stencil.


Build time

The project took me quite long because it was a filler project with low priority. Here are some pictures of the building process…




I used low melting point solder paste because I don’t have a proper reflow oven, just a normal industrial oven that can’t do temperature profiles. It melts at around 138° so the soldering puts way less stress on the LEDs than with normal solder paste. Only one LED on a panel didn’t work and that was because I placed it the wrong way. I also couldn’t make out a difference in the intensities of the LEDs.





I didn’t have access to an SMT assembly machine and was too stingy to let them produce professionally so I placed every LED and capacitor by hand! Gosh that was a lot of monotonous work.


I put everything in the oven and after 5 minutes @ 160° the PCBs were soldered.


Now to the frame.. In the end I made it 860x860mm because the Y-Axis of the laser supports sheet just a little below 900mm.










I began to paint the frame but I noticed it doesn’t really make a difference in light intensity when the stencil is on. The frame won’t be seen afterwards and because I am lazy I didn’t paint the whole frame.


Light it up!

I used the FastLed3.1 Library from FastLed in combination with an Arduino Due to control the LEDs. Setting the library up and let the demo code run wasn’t a problem at all.

The code is basically a huge look up table. feld

There are 225 field of 4 LEDs. There are only 3 types of fields (cases). Field 1 consisting of LED 0,1,10,11 field 2 consisting of LED 2,3,8,9 and field 3 consisting of LED 4,5,6,7. All other fields are the base field plus a multiplication of 3 (-> 9 fields per panel).

For example the letter A in field 189 is case 0. 189* 4 LEDs per  letter gives us LEDs 757, 758, 759, 760.

This can be easily programmed using modulo and multiplication operations. Then we have 68 different field sequences (= arrays with different lengths). For example “halbi” is sequence 8 using fields 24,25,26,33,34. I wrote a function with an array as input that displays each field of the sequence. Now when we want to display 13:45 = “Es isch viertel vor zwei” the sequences 1,4,6 and 10 have to light up. So in another truth table I hard-coded all the possibilities.

There are 60 / 5 = 12 time steps, 12 hour steps, 31 day steps, 12 month steps and some year steps. Now i programmed a function void displayTime(int year, int month, int day, int hour, int minute, int R, int G, int B){} that gets the value from the DS3231 time module and rounds it to 5 minute time steps and displays it. Maybe it sounds complicated but it’s really not a big deal. So here is the code. At the moment the colors are fading slowly. Note I used the DS1307 Library for the DS3231 because the native library for the DS3231 doesn’t work on the arduino due.

DSC04488-1 DSC04493-2 DSC04494-3

In the meantime I moved to a new flat, the word clock has been installed and obviously something had to break. So while moving the solder joint of two of the 900 LEDs broke, which resulted in some weird display patterns. I then took the opportunity to update the code and move from the Arduino DUE platform to an ESP8266 so the microcontroller can be connected to my guest WIFI and get the time from a NTP server. I rewrote parts of the code and included another feature: From 9pm to 8am the LEDs will be in a dim red color. The reason for that feature is the fact that blue light can have a bad influence on the sleep quality. Moreover looking into a bright blue light during a nightly bathroom break is not really pleasant. So here’s the new code: