Wordclock - No Special Tools Required! Easy to Build




Introduction: Wordclock - No Special Tools Required! Easy to Build

Hi makers, do you want to own a wordclock?
There are a lot of nice instructions all over the web, but

  • You've no access to a 3D printer and cnc machines to cut, laser or mill
  • You don't want to waste time and nerves fiddling with itsy-bitsy parts
  • You don't want to waste money, if there is an inexpensive solution doing the same

This Instructable is written for makers regardless of which experience level as long as you are familiar with

  • A soldering iron
  • Arduino IDE with Nodemcu / ESP8266 extension
  • Basic wood working

What's new in this Instructable

  • How to make a multilayer wood / paper circuit
  • How to build a 25x25cm wordclock for less than 40€
  • How to make it within 3-4 hours from scratch
  • The choice of English or German front panel
  • Clock shows IP address at startup

What's not new but cool, anyway

  • Wifi connection accesspoint / station
  • Getting time from a NTP server
  • HTML interface to set display color and time offset for summer/winter

Here we go

Making a wordclock is cool! I've made some in the past using special machines like 3D printer, cnc mill and Silhouette cutting plotter. Each of them took a lot of time to build. Mostly weeding the text mask after cutting was a nightmare!

Reducing to the essential was the order of the day - especially due to Xmas and birthdays came up and I wanted to build 5 more clocks.

Is there a simple solution possible?

I've not reinvented the wheel, but this Instructable shows a cool approach to build electronic gadgets.
The answer is YES!

Design goals

  • Easy and quick to make and use
  • Using standard tools and parts
  • Assembly without fiddling
  • No need for a PCB
  • Should be awesome

Summary for the impatient experienced maker

Hi, brothers in mind! Here comes your fast lane - fasten your seat belts, please.

  1. print the 4 sheets (one of the text masks, separator, electronics and stripes)
  2. take one MDF board and stick stripes sheet top left orientated on it
  3. flip the board and stick electronics sheet top right orientated on it
    this is called "mainboard" from now on
  4. take second MDF board and stick separator template top left oriented on it
    drill 12mm holes now or later
  5. stick copper tape snippets on mainboard stripes
    5V, Gnd and data wrap around to electronics
  6. flip mainboard and stick copper tape snippets in this order:
    bottom layer (brown), isolation pads (red) and toplayer (green)
  7. cut from LED stripe 1x6, 9x10 and 1x4 LED snippets in an order, to not hit the solder joints
  8. stick the LEDs on mainboard stripes side
    follow the orientation arrows on template and LED stripe
  9. connect with unisolated thin wire LEDs to copper tape
  10. flip mainboard and stick modules with double sided tape on electronics
    fix USB breakout with tiny screws
  11. connect with unisolated thin copper wire modules to copper tape
  12. solder copper tape overlappings on both sides of mainboard, if not already done
  13. drill separator (12mm), if not already done
  14. compile software and upload it. Libraries used:
    NTPClient by Fabrice Weinberg, NeoPixelBus by Makuna and Time by Michael Margonis
  15. see manual for setup and configuration.
  16. mount the whole Enchilada into an IKEA Ribba (23x23 cm / 9x9 inch)
    1. acrylic screen with mirror foil sticked on it
    2. separator with text mask (en/de) sticked on
    3. mainboard
    Fix it with some (hot-) glue
  17. find a nice place for it and enjoy!

End of fast lane

How to do it in normal speed

First of all, oder the required parts as shown in the Supplies section if they are not in your grab bag.

To make a wordclock we need some electronics, some housing and last but important: the text mask.

What the heck is new in this Instructable?
As a maker I like to move off the beaten tracks and so I designed a multilayer paper/wood circuit to make things easier. The outcome was: making a wordclock is no longer rocket science.

We will start with the electronics to have fun in the beginning. The light separator will be made from a MDF panel with 100 holes. Boring can be boring - but it's a way for everybody without special tools and machines to make this extraordinary clock. The project finishes with uploading the software and put it in an IKEA Ribba picture frame as housing.


IKEA don't sell Ribba anymore in black or white, the successor comes along as a really good looking medium brown acacia frame. I like it!

Some words about programming

The D1 mini is an ESP8266 board, so you need this extension in your Arduino IDE (see Step 8). Furthermore we need a library to grab the time from a NTP server, one to manage Time and of course one to talk to the NeoPixels. If you do not have installed them already, here is the list:

  • NTPClient by Fabrice Weinberg
  • NeoPixelBus by Makuna
  • Time by Michael Margonis

Are you ready to start?

Good luck and have fun!


The links below are pointing to german shops. Anyway, you will see which parts I mean :-)



  • 1m copper wire unisolated 0.25 mm (AWG 30, 0.01 inch) like this
  • 2m copper tape adhesive 4-6mm mm (3/16 -1/4 inch) like thisorthis
    conductive adhesive not required

Other parts

  • 1 IKEA Ribba picture frame link
  • 2 MDF sheets 210x210x5 mm (8.25 x 8.25 x 0.2 inch) (see text for details)
  • 250x250mm self adhesive mirror foil (adhesive, not adherent!) like this
  • Self adhesive glossy photo paper (inkjet or laser, matching your printer) like this


  • 20cm double sided foam tape like this
  • Tiny screws 2x5mm
  • Small snippets of thin wood or cardboard to fix in picture frame

You'll find all parts at Amazon, IKEA and the MDF boards cut to size at your Home Depot

If your stock is empty it will be in total 120€ for 3 wordclocks. This is 40€ for each!

Tools required
as mentioned - nothing special

  • A soldering iron
  • Scissors
  • Boring machine (portable or drill press)
  • wood drill 12mm (10 - 14mm)
  • A coffee maker (not essential, but helpful)

Step 1: Print the Templates

What we do in this step

Let's start with printing the templates on self ahesive glossy photo paper with suitable printer settings.

Printer setting is A4
Don't use transparent foils for the text mask since the white medium act as light diffuser.

Stripes and Electronics act as assembly print for both sides of the first MDF board, Separator will be the boring template for the second MDF board. Mask English and Mask German are self-explanatory.

Tasks in this step

  • Print the mainboard assembly prints (electronics and stripes)
  • Print at least one of the text masks English or German
  • Print the boring template


  • The creative media sheets are selected because they are really sticky on wood. Of course it's also possible to use plain paper for Electronics and Stripes and boring, as long as they are fixed all over to the board.
  • The boring template will be removed afte drilling, so my experience says: use self adhesive photo paper.
  • The text mask have to be sticked immovable fixed on the separator board and it is mandatory to have a photo quality to get an opaque saturation.
  • Maybe you will try standard photo paper for this, but to fix it on the separator board without glue marks will be a callenge. Anywhere, do what you want - I use self adhesive photopaper for all of the sheets :-)

Step 2: Prepare the LED Stripes

What we do in this step

In this step the long NeoPixel stripe will be cutted into proper snippets.

Trivia about NeoPixel stripes

Neopixel WS2812 stripes are available in different configurations. We use a 5 meter stripe with 60 LEDs per meter. This will be enough for 3 wordclocks. Most of the suppliers offer their stripes in 3 different types:

  • IP30 - naked stripe with 3M adhesive
  • IP65 - stripe with no adhesive covered in a silicon shell
  • IP67 - stripe sealed in silicon - don't order this

IP30 is easy to use, if you bought IP65 you'll need double sided tape to stick them but it's also ok.


LED stripes are made out of several sections each 30 LEDs long, soldered to one long stripe. Follow the cutting plan below, to avoid the necessity to separate the stripe at soldering joints.

Tasks in this step

  • Remove the wires at the beginning of the stripe - in case of a new stripe
  • Cut one segment 6 LEDs long as the top row - in case of a new stripe
  • Cut nine segments, each 10 LEDs long
  • Cut one segment 4 LEDs long (minute points)

Hints to desolder the wires from the stripe

  • The manufacturer uses unleaded solder, you maybe need higher temperature or longer time to make it fluid.
  • Don't grill the LED!

Step 3: The 3-layer Wood/paper Circuit

What we do in this step

make our 3 layer paper/wood circuit board by sticking the copper tape and isolation pads on the 2 sides of the first MDF board. This board is called "mainboard" from now on.

What we need in this step

  • One MDF sheet
  • Mainboard assembly prints (electronics and stripes)
  • Self adhesive copper tape
  • The 4 isolation pads (or some scotch tape)

Tasks in this step

  1. Stick the stripes printout top left oriented on one MDF board
  2. Stick the electronics printout top right oriented on the other side
  3. Stick the copper tape on mainboard's LED stripe side
    5V, Gnd and Data wraps around to the electronics side
  4. Stick the copper tape on mainboard's electronic side
    - start with bottom layer on brown assembly print
    - next are the red isolation pads
    - last is top layer on green assembly print


  • The copper tape can be 3 to 6.5 mm in width (I use 4.5 mm)
  • Conductive adhesive is not necessary
  • If one of the isolation pads is lost, simply cut another one out of the spare photo paper or use any tape you'll find.

Step 4: Sticking the LEDs

What we do in this step

Now we are going to stick our NeoPixel snippets on.

What we need in this step

  • the mainboard with copper tape sticked on
  • our prepared NeoPixel snippets

Tasks in this step

  1. Take the mainboard with LED side up and "top" mark on top :-)
  2. Stick the 6 LEDs snippet on the top row, little red arrows showing the stripe orientation
  3. Repeat this for all other stripes - take notice of alternating orientation as shown by the arrows.


  • If you've ordered an IP65 LED stripe instead of IP30, simply use double sided scotch tape to stick them.
  • It's not mandatory to use 5mm copper tape, but it's easier to handle than a smaller one eg. 3mm
    Up to 6.5mm copper tape is also suitable.

Step 5: Connect the LED Stripes

What we do in this step

Gentlemen start your engines - heat up your soldering irons

We are going to solder the LED side first.

What we need in this step

The board with LEDs on it :-)
Thin unisolated copper wire as described in Supplies section

Tasks in this step

  • Tin the stripe contacts - left side: data and 5V, right side data and Gnd
  • Tin the copper tape at all relevant points
  • Solder copper tape joints to connect them
  • Solder the connections using the thin wire


  • It's not necessary to tin the thin copper wire
  • Don't beleive in conductiove adhesives. Solder the copper tape connections, please.
  • Don't make short circuit faults.
  • Don't grill the LEDs or the tiny capacitors near the LED's Do connection pads.

Step 6: The Electronics

What we do in this step

Stick modules on their place and connect them to copper tape.

What we need in this step

  • Mainboard
  • D1 mini
  • Level shifter
  • USB breakout board
  • Double sided foam tape
  • 2 tiny screws

Tasks in this step

  1. Tin the stripe contacts - left side: data and 5V, right side data and Gnd
  2. Tin the copper tape at all relevant points
  3. Solder copper tape joints to connect them
  4. Solder the connections using the thin wire


  • Mount the modules correct oriented according to the printed pictures.
  • Ensure that you've received the correct level shifter, the others are standard.

Step 7: Separator and Text Mask

What we do in this step

Now we are on the home stretch and the only boring job starts - the boring :-)

What we need in this step

  • The second MDF board
  • The boring template called Separator
  • A boring machine
  • A 12mm wood drill

Tasks in this step

  • Stick the Separator boring template top left oriented on the board.
  • Center mark the holes (I recommend this).
  • Drill the 100 holes from first side.
  • Remove boring template sticker - or whatever is left of it
  • Flip the board and drill. The tiny holes from wood drill's tip will auto center the drill now.

There are many approaches to drill holes in wood. My experiences say it's a good practice to drill from both sides. The wood drill's tip should poke out a little bit (1mm) so it will leave a mark on the other side in the shape of a tiny hole. If you allow the drill to find this hole with it's tip the drill will self center. This is exact enough for a light separator and really quick to make.

(see video part 2)


  • Use a wood drill (see picture)
  • It is much more easier to first center punch the bore position.
    You can do this with a nail in case of you do not own a center punch.
  • Drilling nice holes in wood without ugly edges is difficult. There are 2 tricks:
    1) Use a sacrificial plate to drill into, or
    2) Adjust the deepth stop at your drilling machine to drill only so deep, that the little tip of your wood drill makes a tiny hole on the other side of the board. Then flip the board and drill from the bottom side. The little hole is your center mark. I prefer this!

Step 8: Ready for the First Test Drive

What we do in this step

Put the whole Enchilada to your desk, compile and upload the software and try to get it running.
You'll find the detailled software description in the next step

What we need in this step

  • All parts we made so far - mainboard, separator and one of the text masks en/de
  • Arduino IDE - setup for ESP8266, libraries installed
  • A mobile phone, tablet or computer to connect to the clock's Wifi accesspoint

Tasks in this step

  • Connect your computer to D1 mini's USB port - not to USB breakout. This is power only.
    D1 mini's blue LED should do something.
    If it is not shining, check your Electronics for short circuits or wrong connections.
  • Flip the board to have the LED stripes above. put the separator on it and a text mask on top.
  • Open Arduino IDE and check the libraries
  • Download the source code, compile and upload it.
  • Connect to the clock's accesspoint and enter your home WLAN credentials
  • Reconnect to your home WLAN and configure the clock

Please check all wiring on clock's mainboard again.
Open Arduino IDE and check for correct board and libraries settings. There are 3 libraries used:
NTPClient by Fabrice Weinberg, NeoPixelBus by Makuna and Time by Michael Margonis - thanks to them!

How to
setup for ESP8266 family
install libraries.

Now we have reached the point where the frog jumps into the water!

Connect D1 mini via USB and select in Arduino IDE the correct port :-)
Download the software, compile and upload it.
Reset the controller by power off / on after each flash, otherwise ESP.restart will not work by design.

When everything works fine, the bottom right point should blink in red (approx. 20x) and then stay on continuously.

If the bottom LED doesn't shine, check your stripe and electronics connections!
The bottom right LED is the last in the chain, so if its blinking everything is fine so far.

What the heck ...

The clock tries to connect to a Wifi accesspoint, but we haven' let the cat out of the bag to which to connect.
The red LED indicates, that there is no connection to any wireless network possible and it is up to you to connect your mobile or whatsoever via Wifi to the clock's accesspoint called word_clock.
When connected, open a webbrowser and enter (de facto standard address for such things).
The credentials page (see picture) displays all Wifi accesspoints within reach.
Select your accesspoint, enter password and click OK. The clock reboots.

By the way, in the final software the password is masked :-)

Only English text mask?

  • Adjust ee_write_string(120, "de"); to ... "en" before the first compiling
    otherwise the first program start initializes the EEPROM to German Language.
  • Put the German text mask on - if you understand German words
  • The serial moitor will display the IP address as well. Open this in a browser and set to English (see below).

The web interface speaks English in all language settings.

After the first program start the EEPROM is initialized to German Language. The serial moitor will display the IP address as well.

Are we happy?

In case you've entered the correct credentials, you'll see the bottom right LED blinking again (approx. 10x) during WLAN connection. If connection was possible, the clock will display the IP address in words eg. (one nine two [pause] one six eight [pause] zero [pause] one two three
The first 2 numbers (192 and 168) are mostly the same at home, the last two numbers depend on your router since I've not hard coded the IP addresses.

Reconnect your computer to your home WLAN and enter the clock's address in your webbrowser.
If it was too fast simply reboot the clock.
Now, since we are comming via your home WLAN, the browser displays your clock's configuration page (see picture). Here we can change the color, set summer / winter time (auto for central european DST) as well as summer / winter offset hours to europe.pool.ntp.org standard time.

And last, but important: set the language appropriate to your chosen text mask. The German text mask can be used for north/west and south/east (fünfzehn nach acht / viertel neun)

Are you still here?

Congratulations! There is only one more thing to do: mount the marvel into a housing. I've used IKEA Ribba, because it's perfect fitting. IKEA kicked their 23x23cm / 9x9" Ribba in black and white - the successor is acacie.
Nevertheless, this looks much more better in a living room, I am going to replace all my black Ribbas to acacie.

Step 9: Home Sweet Home, Put It Into Ribba

What we do in this step

  • Making a home for the clock
  • Mount the clock

What we need in this step

  • The two boards
  • IKEA Ribba
  • 25x25cm mirror foil (maybe 2 of them, see below)
  • Some snippets of wood or cardboard to fix

Tasks in this step

  • Stick the mirror foil on Ribba's acrylic screen
  • Mount everything

Let's go for the last activity.

There are several solutions for a front face imaginable.

  • No front cover - ugly
  • White paper - boring
  • Mirror foil - Awesome!

Stick the text mask on the separator board - if not already done.
Stick together light separator and "mainboard" using some snippets of double sided foam tape. You will need two layers of foam tape to get enough distance (2mm) between the boards. It depends on the thickness of your tape.
Take the mirror foil, remove the protection cover and stick it on the acrylic (see Hints). Put the acrylic and the mounted boards into Ribba. Fix it with some snippets of cardboard or wood or whatever you want. Maybe glue it, but this is ultimate and not neccessary. Fix the USB cable to make a pull relief.

Close the back panel of Ribba.



  • Removing the mirror foil protection cover can be really easy using a scotch tape. Stick the tape on one edge of the foil an gently lift it.
  • Sticking a foil on acrylic can be simplified by sprinkling some water with a drop of dish-liquid mixed on the acrylic first. Smoothly bring out the air bubbles and water with a credit card or dough scraper.
  • If the mirror foil is too transparent and the text mask shines through, add one more layer of mirror foil
  • I've fixed the USB cable with some wood snippets and I'm using magnetic USB cables to avoid tractive force to the USB contact. The USB breakout is not very reliable.

What's left behind?

The software? See next step, please.

Step 10: The Software

How does it work?

My approach to coding a wordclock was consciously straightforward. Not compressed and not optimized. This will encourage you to read, understand and to customize whatever you want.
There are some sequences worth to be mentioned.

  • Configuration stored in EEPROM
  • Establish an accesspoint and shut it down after a given time
  • Periodical calls 1/sec, 1/min, 1/hour without delay()
  • Use NTP time
  • Calculate summer / winter time (here: Central Europe)
  • Use NeoPixel stripes
  • Display IP address at startup
  • Webinterfaces for AP and station mode (and determine by where we come from and what to do)
  • Configurate color, time offset and language via webinterface

Here are some details:

The EEPROM stores in address 0 a magic word to detect the first start after the first flash. This avoids unexpected behaviour. GetConfiguration()

There are 2 functions to write and read strings to EEPROM. ee_write_string and ee_read_string

Summer/winter time calculation is made by setting time to the last day of summer month, get the dayofweek number, calculate the last Sunday and make a comparable value out of it. The same for end of summertime. Each minute the actual time is compared to the limits and we know whether we are in summer or not.

once_per_second()checks Wifi connection and if lost, try a reconnection
it also handles the webserver and an accesspoint shutdown timer

once_per_minute() reads configuration, calculates summer/winter mix it with NTP time and displays the time.
Setting last_minute to 99 will force execution of once_per_minute() immediately (eg. webinterface color change)

NeoPixel:NeoPixelBus uses ESP GPI02. This is D4 on D1 mini. Pixelpin is ignored by the library. ahead of a display change all LEDS are set to black, new LEDs are set to color and only now the strip.Show() is called. This avoids flickering.

All the other code should be self-explanatory - if you are familiar with coding at all (if not, use it and don't care)

Step 11: At the Very End

Have enough guts to make such a nice gadget for your living room or as birthday gifts as I do.

Everybody with basic maker skills can do it! You don't beleive? Please watch the videos and you'll be convinced.

Thanks for reading this Instructable and please give me a feedback when you made your own Wordclock. I'm really curious about it.

1 Person Made This Project!


  • Pi Day Speed Challenge

    Pi Day Speed Challenge
  • Trash to Treasure Contest

    Trash to Treasure Contest
  • Microcontroller Contest

    Microcontroller Contest



Question 8 days ago

Nice project and documentation. I have completed the build and loaded the software successfully but can't get it to connect to wifi. 'word_clock' shows up on my phone wireless connection but when selected it times out with 'No Internet Connection' I also don't get to some of the screens shown in the description. My knowledge of microcontrollers is limited to loading software and libraries, and minor program changes. Any help or further guidance would be greatly appreciated. Thanks


Reply 7 days ago

Thanks for the link, I will have a look and see if I can figure anything out.


Reply 6 days ago

There are already more than 10 clocks running with this code version so there is no basic problem. Please open Arduino's serial monitor and maybe you'll see the connection issues. Otherwise tell me what you've seen on the serial monitor and I will help you :-)


Reply 6 days ago

Thanks for the quick response. The serial monitor information is -
Access point started

connect to:

connect to:
not connected to wifi
HTTP server started
Startup done

I tried it with as the default IPAaddress Accesspoint and with which is my router access point


Reply 6 days ago

... I've tested a fresh D1 mini with uploaded software and it's fine.
The procedure to connect to ESP based modules via phone is a little bit tricky because of the behaviour of
ESP module and phone connections. Maybe your phone is not patient enough and switches back to the known WLAN.
The solution is to click/tip several times on word_clock until it connects.
Wordclock's accesspoint will close 5 minutes after power on for security reasons, so be quick :-)

Connecting to wordclock step by step:

power on the clock
wait until LED stops blinking (serial monitor displays 'Startup done')
connect your phone to WLAN 'word_clock'
click word_clock again until it says 'connecting'
wait until phone displays 'no internet connection' - ignore this, it is ok and will disappear after a few seconds
If phone is not connected to word_clock select word_clock again until it is connected
when connected the serial monitor will display '* handle AP Root *'
open in browser (this is the only IP adress in word_clock's WLAN)
The page 'select WLAN and enter password ....) should appear -> enter your credentials and click ok


Reply 5 days ago

Success, after about 1 hour and 15 attempts following your step by step sequence the clock is now working. I think I need a better phone!.
FYI when I downloaded the English mask the formatting was not correct, it was a mixture of upper and lower case characters. I used Inkscape to fumble my way through the edit facility and produced a good print.
Thanks for your support


Reply 5 days ago

Nice to hear you're successful! The reason for hard to connect is not only your phone. It's the combination of ESP's WIFI, phone and WIFI traffic at your home. I've sometimes (!) the same problem in my living room with a lot of WIFI devices around, but not in my hobby room with router, laptop and some ESP modules.

Unfortunately I've used a non standard font with no lowercase :-(
I will replace this - thanks for your feedback!


Answer 6 days ago

Hi, 'no internet connection' is true, since your phone is now connected to the word_clock access point - and this is for setting up purposes only.
Please give the clock a little bit more time until the bottom right LED stops blinking, then try to connect to several times - maybe the clock's webserver is a little sleepy :-)
You've found word_clock on your phone indicates that software and WIFI are working correct.
After flashing the controller you shoud power off/on it to hard reset its WIFI settings.

Please let me know whether this helped and how I can support you


6 days ago

Very nice job! Thank you for sharing this amazing work!!!


18 days ago

Great project I’m going to try to make one with my son.
I wondered how you managed to create the letter screen? Did you print the black onto white paper?


Reply 17 days ago

It's printed black on self adhesive glossy white photo paper 120g/m2. White paper, because of it acts as the light diffusor we need. 200g/m2 photo paper will be too opaque.


20 days ago

Great idea and well implemented.
This is really also suitable for beginners.

Super Idee und toll umgesetzt.
Das ist wirklich auch für Anfänger geeignet.


26 days ago

Great Job, I Love it. Thank you for preparing and sharing your idea.

Penolopy Bulnick
Penolopy Bulnick

4 weeks ago

Nice job on this word clock! Thanks for sharing how you made it :)