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!

<p>Hi,</p><p>very amazing project :-) we&acute;re ready to start with it in the Christmas Holidays but we still have some questions ;-)</p><p>1. Is it possible to get the Eagle-Files for ordering the PCB&acute;s?</p><p>2. Do you have a picture which includes all of the Words? You wrote that in your first picture you had a mistake so we&acute;d like to do the clock without this mistake ;-)</p><p>3. Which is the raster/distance of the letters? Which size of the letters did you use?</p><p>4. Do you have a technical drawing of the MDF Wood plate? How deep is the cuout for the LED-Boards? How deep is the cutout and the postition of the cutout for the mainboard?</p><p>5. How deep and the position for the cutouts in th front for the capacitive touches?</p><p>6. Is the software version at github the actual one or is there a newer one available ;-)</p><p>Sorry for the questions :-)</p><p>Thanks in advance for your help</p><p>Best Regards<br>Andi</p>
<p>Awesome work ! I'm thinking about making one myself and wanted to ask you if you had some template or at least some design rules to make the wordplate in french ? I don't really get what are the rules behind the design and I don't really see which word you forgot while designing yours. Thanks in advance !</p>
<p>Hi, first i want to say amazing job really really great, second i got a question on how do you stick together the MDF and the glass? the vinyl is sticky in the both sides?</p>
<p>I used some glue</p>
<p>Beautiful project. I'm thinking of making it...<br>Sorry to reply to an year old comment but you've documented everything in detail except how the glass faceplate is stuck to MDF body. Did you glue the MDF body to directly to the vinyl which in turn is stuck to the glass(i.e. MDF -&gt; vinyl -&gt; glass)? If so, the glass is hanging against gravity just by the sticky side of the vinyl? Did you face any problem with the glass peeling off the vinyl over time?</p>
<p>Other than changing &quot;it is&quot; to &quot;it's&quot; and adding &quot;eleven&quot; to the list of hours, I think the following would have the same functionality. It is a lot more dense, with word overlaps, totaling just over 13 rows (room for more information). I think there is only one wasted character space.</p><p>it's quarterhalf</p><p>twentytensixteen</p><p>twoneighteenfive</p><p>seventeenineteen</p><p>fourteenthirteen</p><p>twelveleventhree</p><p>pasto fiveighten</p><p>twoneleveninesix</p><p>seventhreetwelve</p><p>four oclock inat</p><p>nighthe morning</p><p>eveningafternoon</p><p>and coldcoolwarm</p><p>hot</p>
<p>Definitely my first DIY project for a birthday or wedding gift </p>
<p>I'll do it</p>
<p>Hi,</p><p>A group of friends wanted to do this Wordclock as a wedding gift. Two of them are the first that were married. For that reason we think that making this project as a wedding present could be a very good idea.</p><p>After a couple of months of intensive work, finally we have finished and with some improvements. Mainly in the firmware. We translated the faceplate from English to Catalan language and added new features such as:</p><p>- Wordclock</p><p>- Digital Wordclock</p><p>- Temperature and Humidity (using a DHT22 sensor)</p><p>- Analog Wordclock</p><p>- Conway's Game of Life (as a screen saver)</p><p>- Simon Says game</p><p>- Tetris game</p><p>- Final credits</p><p>We told Pijuana Wordclock to this wedding present. The name comes from a happily newly married couple, recipient of the clock as a present.</p><p>If you want to see the code you can find it on: <a href="https://github.com/svcabre/wordclock" rel="nofollow"> https://github.com/svcabre/wordclock </a> and it's a fork of the original project made by Wouter Devinck <a href="https://github.com/wouterdevinck/wordclock" rel="nofollow"> https://github.com/svcabre/wordclock </a></p><p>We also share some photographs and this videos: </p><p><iframe allowfullscreen="" frameborder="0" height="281" src="//www.youtube.com/embed/ERS7RF_401c" width="500"></iframe></p><p><iframe allowfullscreen="" frameborder="0" height="281" src="//www.youtube.com/embed/EURkpQhEdLk" width="500"></iframe></p><p>Finally we are very glad with the result and it wouldn't be possible without the help of this article and the lot of work and time required to do this possible.</p><p>Thank you so much to all of you!</p>
<p>Hi people, nothig to say that hasn't been said before...! It is simply amazing what you both have accomplished here! Congrats!</p><p>I've been reading and looking at all pics for days and even without knowing jack about electronics and even less about Arduino, I will build this clock (otherwise my grirlfriend will kill me :-) she wants one for our new house...).</p><p>I'm sure I will come back here many more times and I will have to ask some guidance over some details and maybe about some parts and I hope you guys can help.</p><p>Keep on!</p>
<p>hi </p><p>what is the size of the orange and yellow capacitor on the pcb</p><p>ragnar h&ouml;gni</p>
<p>Hi,</p><p>The orange capacitor is about 100uF aproximately, just for stability. The yellow squared component is a fuse, not a capacitor. And the diode we use for protection against wrong polarity is a Schottky type but I can't remeber exactly which one. All these components aren't strictly necessary if you don't want this protection.</p>
<p>hi</p><p>do u have any drawings of your changes(nano) </p>
<p>Hi,</p><p>I only have these pictures to show you a closer look of details of the connections with the Arduino Nano used instead of the Main Board designed by Wouter.</p>
<p>nice thanks for that</p>
<p>and the diode</p>
<p>Hello, I'm really impressed about all the functional extensions and the re-writen firmware code for the 'catalan version' that you did. I would love to build one for my kid and would Need to go for the English Version.</p><p>Do you happen to have as well a Firmware code for the English Version faceplate that Wouter Devinck has developed?<br>Alternatively do you happen to have a firmare extension for the original sketch of Wouter Devinck that includes the 'clock setting' function via the Touch-Buttons? It seems that this code section is missing in the firmware code example provided. A 'Set Minutes Touch Button' and a 'Set Hours Touch Button' would be just fine.</p><p>Many thanks in advance for any hints/tips on how to extend/modify the code...</p>
<p>Hi!</p><p>If you want to do the English Version of this clock using the Wouter faceplate, I think that it can be pretty easy even if you have little programming knowledge. You could merge the Wouter firmware code into our Catalan firmware version. </p><p>Our function in file Time.cpp: void showTimeWords() could be replaced more or less with Wouter fuction: void showTime().</p><p>And the word definition of all the word matrix you can find in the Time.h:</p><p>// Words</p><p>// Format: { line index, start position index, length }</p><p>const int w_it[3] = { 0, 0, 2 };</p><p>...</p><p>We also implement the functionality to adjust the time using the Touch Buttons in the function showTimeDigits():</p><p>timeMode == TIME_MODE_SETTING_HOUR ||</p><p>timeMode == TIME_MODE_SETTING_MINUTE</p><p>But I think that the first thing you need to do maybe is do the redesign of the little mistake that wouter did, leaving out the word 'eleven'.</p>
Awesome work! Thanks a lot for sharing!
<p>wow</p><p>that was awesome man.what I was planning to do with mine. nice firmware. </p><p>molt apreciat...</p>
<p>Hi wouterdevinck,</p><p>I've just started pulling the bits together to make this. Going through the parts list from Eagle, there is a question mark next to C1... what value capacitor did you end up using for this?</p><p>Thank you</p>
<p>Hello,</p><p>I would like to know if it would be possible to have the D1 diode reference (or BOM =) ?)</p><p>Moreover, you talk about a crossreference for the IQ127, would it be possible to have a reference ?</p><p>Thank you</p>
<p>I used an M7 (1N4007) diode for D1, but no need to be too picky for that part :) An alternative for the Azoteq part is the Atmel AT42QT1011-TSHR. Keep in mind that this part is <strong>not </strong>pin compatible. You can get free samples from Atmel at <a href="http://www.atmel.com/devices/at42qt1011.aspx" rel="nofollow">http://www.atmel.com/devices/at42qt1011.aspx</a></p>
<p>Thank you very much =).</p><p>Do you have any advices for getting the IQS127D ? (In europe, I am French).</p><p>Did you measure the total consumption ? and what kind of power supply do you use ?</p>
<p>I got them from the seller &quot;picarduino&quot; on ebay, but he does not seem to list them anymore. I found one seller on Aliexpress, but they are rather expensive: <a href="http://www.aliexpress.com/item/10PCS-IQS127D-Capacitive-Touch-Proximity-Sensor-free-shipping/602551434.html" rel="nofollow">http://www.aliexpress.com/item/10PCS-IQS127D-Capacitive-Touch-Proximity-Sensor-free-shipping/602551434.html</a> <br><br>On average it consumes about 1 Watt, I used a &quot;universal&quot; power adapter with settable voltage (set to 6,5 volts) that can deliver 2 Amps, which is of course overkill.</p>
<p>Hello,</p><p>I have an error while compiling your file:</p><p>C:\Users\Sirlinium\Documents\Arduino\libraries\Arduino-Chronodot-master\Chronodot.cpp:26:31: error: variable 'daysInMonth' must be const in order to be put into read-only section by means of '__attribute__((progmem))'<br> static uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };<br> ^<br>Erreur lors de la compilation.<br><br>Do you have an idea =) ?</p>
<p>Hello sirlinium, did you get an answer on your compiling challenge? In case you got it solved, please let me know, as I would really like to build this clock, but without functional code I will not be able to make it happen :-(.</p><p>Many thanks in advance for your support :-).</p>
<p>Hello,</p><p>I didn't manage it for the moment (I didn't worked on it since) 3 days ago</p><p>=(</p>
<p>Hi,</p><p>You need to replace this line, for this one:</p><p>static const uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };</p><p>The error is saying to you what to do.</p>
<p>Hi,</p><p>I'm sorry, I am really an arduino noob (but I ordered a book last week to learn =) ! )</p><p>consequently, should I replace &quot;uint8_t dayOfWeek() const;&quot; line 26 by &quot;static const uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };&quot; ?</p><p>because now I have this =)</p><p>Chronodot.h:26:83: error: invalid in-class initialization of static data member of non-integral type 'uint8_t [] {aka unsigned char []}'<br> static uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };</p>
<p>Hi Wouter,</p><p>Is there any way to display numeric temperature just like on third photo? I can't find out it in code. How do you display numbers on the matrix? Do you have to specify each number just like words?</p>
<p>hi wouter</p><p> <br>I would like to thank you for your great project that inspires me a lot.</p><p>I made your clock with a little change in lighting part. I made them by bright led. everything was fine till I upload the sketch and everything went wrong. clock was working strangely. when I reviewed your posts again I find that you turn your pcbs in making led grid in order to use one pcb layout, but i could not find anything in your sketch to change it to normal 4 led grids arrangement without turnings. any help would be appreciated alot.</p>
<p>The coordinate translation happens in setLed, if you don't do the rotation, you can greatly simplify this function. https://github.com/wouterdevinck/wordclock/blob/master/firmware/wordclock.ino#L439</p>
<p>Hi Wouter,</p><p>I was wondering, in the files you included did you update the faceplate image design to include the word that was originally left out? </p>
<p>No, I have not. But feel free to do a pull request on GitHub :)</p>
<p>What word did you leave out?</p>
<p>awesome work</p>
This is great! Suppose you scaled up the clock to 900mm by 900mm - do you think the 3528 leds would still be sufficient or would you need to go up to 5050 for additional brightness? Thanks
<p>I would definitely go for 5050's. You can always run them a little less bright.</p>
Hi Wouter,<br><br>Thanks for the prompt reply. Sourcing the 5050 LEDs looks doable - I guess the most simple solution is to just replace the 3528 footprint in the schematic here:<br><br>https://github.com/wouterdevinck/wordclock/blob/master/hardware/schematic-led-board.png<br><br>with the 5050 footprint? I couldn't see any resistors in the schematic above - I would normally have thought these would need to be changed but can't see any - are they incorporated within the SMD LEDs (I've only ever used through hole ones before). If they are then it looks pretty simply to change the footprint to incorporate the 5050s<br><br>Thanks and apologies for the further queries!<br><br>Richard
<p>Yes, you would have to change to component in the schematic (and then of course the placement on the board, because your boards will have to be larger).</p><p>The resistor that often accompanies an LED is there to limit the current flowing through the LED. In this case, those resistors are not needed because the MAX7219 LED driver takes care of limiting the current. There is one resistor (R1 on the LED board schematic) on the back of the board that sets the maximum current. Search the datasheet (<a rel="nofollow">http://datasheets.maximintegrated.com/en/ds/MAX721...</a>) for &quot;intensity control&quot; to read more about choosing a value for this resistor.</p><p>Having said that, the MAX7219 might not be up to the task if you want to drive the LEDs at more than 40mA.</p>
<p>You are right, the 5050s pull about 60mA which risk overheating the MAX7219s. I think the solution is to incorporate this modification into the board?</p><p><a href="http://forum.arduino.cc/index.php?action=dlattach;topic=230415.0;attach=75819" rel="nofollow">http://forum.arduino.cc/index.php?action=dlattach;topic=230415.0;attach=75819</a></p>
<p>Yes, that looks like a potential solution, thanks. Before modifying the board you could do a test on a breadboard though, the MAX7219 is available in a DIP package as well (e.g. http://www.ebay.com/itm/5pcs-x-New-Original-MAX7219CNG-IC-Chips-DIP24-/160974952093)</p>

About This Instructable




More by wouterdevinck:Aquarium stand Wordclock Square meter vegetable garden on wheels 
Add instructable to: