Introduction: Wordclock

Ever since first seeing QLOCKTWO by Biegert & Funk a couple of years ago, I have wanted a word clock on my living room wall. The original, however, somewhat exceeds my yearly clock budget, so I started looking for alternatives.

The internet is riddled with DIY and commercial versions of this type of clock, but few are as stunningly beautiful as the original. A selection:

None of these felt "good enough", but I have found one DIY project that really stands out: Elektronika.ba's wordclock, proving that it is possible to build your own wordclock that is as pretty as the original.

Also, here is a video of the manufacturing process of the original: QLOCKTWO manufacturing

I have decided to build my own version, taking some queues from the sources in the above and making some changes (and adding some mistakes) of my own. Along the way, I have tried to take many pictures and I have written a build report in the form of this Instructable.

The entire device is open source hardware: all drawings, photographs, schematics, PCB designs and software are available. However, if you plan to build a clock of your own I encourage you to make some changes and add some twists.

GitHub: https://github.com/wouterdevinck/wordclock


For the Epilog challenge:

What could I possibly do with a laser cutter? Oh boy, what couldn't I do? At first I would probably make some enclosures in wood and acrylic (well, boxes basically...). When that gets old I would move on to some more advanced uses: engraving the anodized aluminium enclosure of one of my next projects (cannot tell you yet what it is, but it will be really cool!), cutting precise mechanical parts (gears a.o.), selectively removing paint from the back of a sheet of glass, ... In summary: a lot of good content for many Instructables!

Step 1: Think Long and Hard

Start with a good design/plan to avoid surprises down the road! This step mainly involves some thinking and maybe some drawings.

Some of my requirements for the clock were:

  • It had to be professionally looking: glass front (no acrylic), white edges to blend into the white wall, …
  • Be able to control all LEDs individually, not only in groups per word, so that it can be used as a matrix to display text and numbers (e.g. date and temperature)
  • Keep the cost down (but a couple 100 euros was acceptable)
  • Use a professionally made PCB
    Part of every project I do is to learn a new skill (or a few new skills). In this case some of the new skills I wanted to learn were designing a PCB (albeit a simple one) and preparing it of for manufacturing.
  • As thin a possible, no bulky frame around it
  • Precise up to the minute, in words
  • Be compatible with Arduino: use an ATmega328 microcontroller, running the Arduino bootloader and use the Arduino IDE and libraries to program it.
  • Automatically adjust the brightness of the LEDs

I decided to build a fairly large clock: 50 cm x 50 cm (20" by 20") with a 16 by 16 grid of characters, with behind every character a bright white LED. This makes for a total of 256 LEDs, which I wanted to be able to control individually. I will talk about the details of the circuit in the next step, but on the drawing you can already see that I opted to use a chip specifically designed to drive an 8 by 8 LED matrix (well, I of course had to use four of those to drive a 16 x 16 matrix).

The main body of the clock would be routed out of an 18 mm (~3/4") thick sheet of MDF, with in the front 256 conical holes and in the back a cavity for the PCBAs with LEDs and driving electronics. I also planned to close the back with a thin sheet of aluminium that could double as a heat sink for the voltage regulators and LED drivers. In retrospect, it probably would have been fine without heat sinking, but better safe than sorry (and its nice that the back is closed to protect the electronics).

The front (faceplate) is glued to the main body, which makes it hard to replace, but also makes it look good (no frame or screws or anything). It consists of three layers: a thin sheet of glass (2 mm), a black self-adhesive vinyl cutout and a diffuser (tracing paper). The vinyl sticker covers the entire sheet of glass and is stuck to the back of it. The (mirrored) characters are are cut out of the vinyl. The diffuser is sandwiched in between the vinyl and the main body. The faceplate was designed in Inkscape early in the project.

Also note the this is where I made my first horrible mistake (so that you don't have to). When I first laid out the grid of characters in Inkscape (just a black canvas with white text in the Droid Sans Mono fixed-width font), I forgot a word. I only noticed more than a year later after the vinyl cutout had been manufactured. I dare you to look at the drawing a find the mistake. The missing word can be formed by combining parts of two other words, so the clock still works, but it will be an eyesore for years to come. Don't be as stupid as I was, quadruple check your design!

Step 2: Schematics

Early on, I decided to use the following components (also refer to the block diagram):

  1. Atmel ATmega328 microcontroller
    • running at 16 MHz
    • with the Arduino bootloader
  2. Maxim (Dallas) DS3231 real time clock with built-in temperature compensated crystal
    • + 3V back-up battery
  3. Four Maxim MAX7219 LED drivers
    • each driving an 8x8 grid of LEDs
  4. Four Azoteq IQS127D capacitive touch sensor chips
    • will need an antenna behind the glass
    • one in each corner
    • alternative: if Azoteq is hard to find, Atmel has a similar part
  5. 256 PLCC-2 (3528) Power LEDs
  6. A buzzer
    • as feedback when "pressing" the capacitive buttons
  7. An light sensor (LDR)
    • to automatically adjust the brightness

The schematic is fairly straightforward: everything connects to the ATMega. The schematic is split in two: the main board and the led board. More about that in the next step, but for now all that matters is that there are four led boards (each with one of the LED drivers, one of the capacitive touch chips and an 8x8 LED grid) and one main board (with everything else: the micro, the RTC+battery, the buzzer, the LDR and the power supply).

  • The RTC connects to an I2C on the ATmega
  • The LED drivers are chained and use 3 GPIO pins for serial communication
  • The capacitive touch chips each use two GPIO pins: presence and touch
  • The buzzer uses one GPIO (obviously)
  • The LDR uses an analog pin (the ATmega has a built-in ADC)

The main board also has five 1117 5V linear voltage regulators: one for the main board and one for each LED board. This is overkill, but the regulators stay really cool this way and its an extremely simple setup. A more efficient power supply would have stayed cool as well, but would have been more complicated.

Step 3: PCBs

There are a couple of services available to hobbyists that manufacture PCBs at a reasonable price: Seeedstudio, OSH Park and ITead are a couple examples. Having said that, a 40 cm x 40 cm board would still have been quite expensive (e.g. 1250 USD at OSH Park, for 3 copies, ITead and Seeed had/have a maximum size of 30 cm x 30 cm). I also got a quote from Eurocircuits and that was still well over 300 euros (400 USD) for one copy.

So the circuit design had to take into account that the design had to be subdivided in multiple smaller (preferably identical) boards. After playing with the online pricing calculators and looking at the block diagram for a while, I decided to use five boards in the clock:

  • One cheap 5 cm x 5 cm board with the power supply, real time clock and microcontroller
  • Four (identical) more expensive, yet affordable, 20 cm x 20 cm boards with an 8x8 LED matrix, the Maxim LED driver and the Azoteq capacitive touch chip (as to be close to the corner as possible).

I got 0.8 mm thick boards from Seeedstudio in China: 10 copies of the main board (want one?) and 5 copies of the LED board for 120 USD (about 90 euros) including shipping. They are pretty decent quality, especially considering the low price.

I designed the boards in Eagle, because that is what most of the open source hardware projects use (definitely not because it is good or user friendly software). I made a small mistake in the main board, but it is easy to fix with a short jumper. Other than that I could have done a much better job at designing the silk screen layers, but in the end that doesn't really matter anyway. The pictures of front and back of the boards are annotated and hopefully clarify a couple of things.

The process of designing a PCB is a bit out of scope of this Instructable, but here is a good introduction to PCBs in Eagle: https://www.instructables.com/id/Turn-your-EAGLE-schematic-into-a-PCB/

Step 4: Glass Faceplate

I ordered a piece of 2 mm glass of 50 cm by 50 cm and had the vinyl sticker manufactured by a company called "Baby grafix" (they usually make "baby on board" decals for cars).

Before ordering the sticker, you need to prepare the file, many manufacturers ask for vector graphics in PDF or AI (Adobe Illustrator) format. I had originally used Inkscape, so I converted the text to vectors and exported the design to AI. I used a trial version of Adobe Illustrator to check the file before sending it off. Also make sure to specify to the manufacturer that you are going to apply the sticker to the back of the glass, which means they have to cut it in reverse.

Applying the (expensive) sticker to the glass is by far the most nerve wrecking step of the whole build. I used the wet application method, which I would recommend with a sticker this size. The downside of wet application is that at first it looks really bad (milky white streaks), it takes a couple of days to dry.

The pictures and annotations should provide plenty of info to complete this step successfully. The key is to work fast and watch out for dust.

At some point I would like to redo the face plate (without the missing word in my design) and use silk screening instead of a vinyl sticker. In the mean time: this is an Instructable about screen printing.

Step 5: Soldering the Four LED Boards

Soldering 256 LEDs may seem like a lot of work, but it only to me about half an hour per board. Two hours of work is quite okay considering the total amount of time spent on this project. I start by putting a bit of solder on one pad of the LED, the push it on place with tweezers (while heating the blob of solder) and then solder the other pad. There is a video in the above.

Step 6: Soldering the Main Board and Testing All Electronics

Once the LED boards are assembled they can be tested using an Arduino and once the main board is assembled and tested the whole system can be tested. Finally the five boards can be permanently attached together with solder.

Step 7: Main Body: Routing and Drilling

This step is by far the most work. And the most dusty.

  1. Route a shallow cavity in the back of a 50 cm by 50 cm piece of MDF, covering most of the surface. The LED board will sit in this cavity.
  2. Route a deep cavity for the main board. I opted to route one cavity in the wrong place and one in the right place.
  3. Drill 256 pilot holes
  4. Drill 256 10 mm holes
  5. Countersink the inside of all 256 holes with a small countersink (for the LED to sit in)
  6. Countersink the front of all 256 holes with a large (I used 25 mm ~ 1 inch) countersink

Bear in mind that MDF dust is harmful and power tool can hurt you, so wear adequate protection.

Step 8: Main Body: Painting

I covered the front of the MDF with reflective spray paint. This paint is pretty nasty, it contains Xylene, so I advise working outside and/or wearing a respirator. Also make sure to cover the surroundings, especially outside on a windy day.

I also covered the edges of the front in black paint because the vinyl sticker was slightly smaller than the glass.

Step 9: Main Body: Bringing Parts Together

Some small steps:

  • Routed a hole and slot for the power jack
  • Put the LDR in a hole on the bottom edge
  • Hot glued a serial port connector in the back
  • Had to enlarge to hole behind the o' in "o'clock" because of the '

Step 10: Main Body: Edges

To clean up the MDF edges, I applied white iron-on edge banding. The pictures and annotations should clarify.

Step 11: Software

I used the Arduino IDE to program the clock and used the following libraries:

The current code and a future updates are available on GitHub:

https://github.com/wouterdevinck/wordclock/blob/ma...

Step 12: Aluminum Back Plate (heat Sink)

I cut a thin piece of aluminium (1 m x 0.5 m x 0.5 mm) in two using regular scissors. I drilled and countersunk 12 holes to screw the aluminium back plate into the clock body. I also drilled two holes for the wall attachment.

The LED driver chips are thermally bonded to the back plate using some thermal paste and the power supply (5 regulators on the main board) is connected using thermally conductive pads (because it sits deeper).

Step 13: Touch Antennas

I made four antennas out of aluminium, one for each corner. I am still not sure what the two touch inputs on the top will be, but the ones on the bottom are to temporarily display date and temperature respectively.

The antennas are connected to the PCB with a short piece of wire. On the PCB, the trace to the test pad was cut using a utility knife.The pieces of aluminium sit in shallow cavities and are held in place with a bit of glue. The cavities are a bit deeper that the thickness of the aluminium, but that does not matter, the antenna does not need to be flush with the glass.

Step 14: Power Cable

I decided to make the power cable a little less ugly by putting it in a braided sleeve. It is red because there already some other red accents in my living room.

Step 15: Tweaks

There are a few things that can easily be tweaked:

The maximum brightness of the LEDs (brightness 15 in software):

Every LED driver chip has a current set resistor. I am still playing with the extra boards to see how bright I can go without destroying the LEDs or the chip and without using a ridiculous amount of power.

The sensitivity of the touch inputs:

If the touch inputs are to sensitive because of the large antenna, there is an extra pad on the back (C7, in each corner) for an extra capacitor on the antenna line. Refer to the Azoteq datasheet for details.