Introduction: Word Clock
Another take on the popular word clock. Powered by an arduino clone and WS2812B LEDs, the design was inspired first by this example, then I rewrote the firmware incorporating some ideas from this instructable using the fastled library.
My goals for this design were to have:
- Largest/closest possible letters without light bleed between them
- Control over individual letters rather than one word at a time
- Suitable for hanging on a wall or sitting on a table
- User-friendly controls
- Impression of quality
- Laser cuttable
I tried to minimize common DIY telltales like the surface finish of a 3D printed object or the burn marks/finger joints/living hinges of a laser cut project. I appreciate when someone asks me where I bought something that I designed and built myself.
I may make the laser cut parts available from time to time here on Etsy.
Step 1: Tools, Materials, and Supplies
The main requirement for this design is access to a laser cutter that has a cutting area of 9" x 9" or greater. I am using the ubiquitous "K40" Chinese 40w CO2 laser that is available all over ebay and other overseas sites. Mine has been modified to allow it to cut a larger area (among other improvements), otherwise it wouldn't be suitable for this project right out of the box. If you use the K40, I highly recommend using K40 whisperer instead of whatever software it came with; my SVG files are drawn with that in mind.
- Laser cutter (9" x 9" area or greater, must cut wood)
- Computer with Arduino IDE
- Generic electronics stuff (wire cutters, strippers, etc)
- Soldering iron
- Hot glue gun
- Wood Glue
- Syringe (for applying wood glue, look for the curved plastic tip of a dental/irrigation syringe)
- Hot glue
- Masking tape
- Paint (clock face)
- Stain or paint (frame)
- Disposable cups and stir stick (for epoxy face)
- Wire (I used 22 gauge solid core)
- 1x Arduino Nano - $5 (ebay clone) to $22+ (official)
- 1x DS3231 RTC Module - $1 (ebay)
- 1x 10k Resistor - $1 for 50 (ebay)
- 3x Tactile switches 10mm - $1 for 20 (ebay)
- 1x WS2812B LED Strip 60 LED/meter - $15 to $23 (ebay)
- Must be 60 LEDs per meter to have correct spacing, typically sold as 300 LED 5m rolls.
- Look for the non-waterproof version
- This is usually called underlayment or Luaun
- Look for the straightest and nicest one
That is roughly $70 dollars total, however you will end up with enough LEDs for two clocks, so it may be worth grabbing another Arduino and piece of oak and make two at the same time. Why not?
Step 2: Cut Plywood Parts
This should be fairly straightforward. Cut one each of the SVG files that start with "3mm Plywood" from the attached zip file. First use a saw to turn the 4x8 sheet into something that will fit in your laser cutter (if that wasn't obvious)
You may notice the clock face is mirrored - I found that with my laser I get a more crisp edge on the bottom of the board, so I put the nicest face of the wood down. If that's not the case for you, simply mirror the file and cut it right side up. The small floating parts of the letters will be fragile, so try to avoid punching any of them out. I recommend adjusting your cut settings so that the letters fall out on their own - it is very easy to bust the middle of an O if you are poking any stuck parts out of the sheet.
If you do break a piece of a letter out - all is not lost. Hang onto the little bits and look ahead to the step where we prepare the face and you'll see that we can put them where they belong without too much trouble.
Don't forget to engrave the blue layer before cutting the red.
Step 3: Cut Oak Parts
I typically do this before I start or after I finish cutting the plywood pieces because it requires different cut settings and a little setup on the laser. We need one each of the pieces with the files named "Oak Frame" here. You'll notice that there is a blue rectangle in the file with the red cut lines. The idea here is to use a waste board as a jig/fixture in the laser so that we can cut the finger joints into the ends of the boards in a consistent way.
- Using a saw, cut the Oak board into 9" lengths
- Secure a scrap board onto the laser bed so it can't easily move.
- Cut out the blue rectangle. Don't restart or re-home the laser after this, the new hole in the scrap board is now our reference point for the rest of the cuts.
- Put the oak piece into the cutout and push it up into the top left corner (assuming your origin is the upper left. If not... the key is to get the end cuts on the oak and have the top edge consistently straight, so it may be OK wherever your origin is). Do your best not to move the scrap board while doing this.
I found the K40 cuts oak quite well, but you'll have to adjust your settings until you get a good result.
Step 4: Assemble the Frame
Give the oak parts a quick sanding to improve the surface, then lay them out and apply some glue to the finger joints. It's important that the frame ends up square (or matches the shape of the face if the laser cuts a trapezoid or parallelogram), a good way to make sure you get it right is to use the face as a guide before the glue is dry.
Double check the placement of the features, from the back (face down):
- The three holes for the buttons should be on the left side and towards the back of the clock
- The single hole for the photoresistor should be on the top and towards the back of the clock
- The notch for the power cable should be on the bottom and towards the back of the clock
If you have any misalignment with the top or bottom edges of the frame that is OK as long as they are not humongous. The example I have in the photo is no problem, a quick sanding will make it flush before staining.
You can use clamps if you have them, or masking tape also works quite well.
Step 5: Paint and Prepare the Face
I prefer to use spray paint on the face with a fairly neutral color. So far I've used different grays, silver, and gold for the face with good results. Darker colors give better contrast with the letters when they are illuminated. Avoid sanding the face due to the fragile nature of the letters. If you had any broken letter bits, paint those at the same time.
Second: Apply masking tape
The masking tape is going to allow us to fill the face with epoxy without it all escaping through the holes. Apply a layer to the back of the face and press down over the whole surface to ensure it is adhered well.
Third: Cut masking tape back 1/4" from the edge. We need to keep this clear so that we can glue the face into the frame without making the masking tape a permanent feature.
Fourth: Optional - if you had any broken letter bits, flip the face over and stick them down to the masking tape in the proper spot.
Step 6: Install the LEDs
First take your LED strip and snip it at the indicated marks into 11 pieces that are 11 LEDs each. There should be a line that shows where to cut right in the middle of the exposed copper pads. Scissors or wire cutters are fine.
Next, remove the backing and stick each strip down to the "grid" back plate. If you engraved the guidelines on this part earlier you can use them as a reference to keep things straight. Spacing here is not super critical, you'll probably notice that it shifts if you end up with a strip that has a solder joint in it already, I think you'll get a joint ever meter or so when you buy the 5m roll.
Important: notice the small arrow and Din/Dout. We want the arrow on the top row to go from left to right, then reverse on the next row. It should zig-zag from the top left and end at the bottom right.
Step 7: Solder the LEDs
This is probably the most tedious step. I use bare 22 gauge wire to save the effort of stripping both ends of these short wires.
Cut 10 each of these three lengths:
Each wire needs to be bent so that it can make the connection from the end of one strip to the beginning of the next. I usually grab a couple of objects that I can bend the wire around - a pen works well for the shortest one, the handle of a screwdriver for the medium one, and a small steel ruler for the longest one. You can check your bends by setting them on the board and seeing if they reach the pads and stay within the guidelines.
Solder these wires between the ends of the strips to form one continuous path from the top left to the bottom right - this should be pretty self explanatory in the photos.
Holding these wires is tricky, and you definitely shouldn't use your fingers because they get hot extremely fast. I have had success with an alligator clip, and also the gizmo you'll see in the photo. It may be easier to tin the pad first then hold the wire with tweezers also.
After you solder the wires you can adjust the clearance between them by bending them with a screwdriver or similar - they shouldn't touch of course.
I test the LEDs before I move on, but this step is optional.
Step 8: Attach Input Wires
Next we'll attach power, ground, and data to the beginning of our LED strip and just power and ground to the far end. The wires for the input side should be cut at roughly 13 inches long - I chose red for 5v, yellow for data, and the bare wire for ground.
Remove a section of the insulation in the top/center of the 5v wire now (see photo); we'll use this for the photoresistor later.
At the far end of the strip (lower left) from the back just use two wires for 5v and ground, these can be about 5 inches long.
I recommend securing the wires as shown with hot glue to prevent movement. The solder joints with the LED strips are particularly fragile.
Step 9: Assemble the Grid
There are four different types of grid piece, they're labeled if you engraved them earlier:
- 2x Horizontal End
- 2x Vertical End
- 10x Vertical
- 10x Horizontal
Glue is optional, but recommended. I like to use glue because we can apply a weight to the whole assembly as it dries and correct for any non-flatness which makes things easier in general.
First install the vertical parts. The "End" pieces go on the right and left sides, then fill in the middle with the rest.
Then install the horizontal parts. The "End" pieces go on the top and bottom, you'll notice that these don't have the extra little cutout on them. The rest of the horizontal parts have this extra notch so that they clear the connecting wires we soldered earlier. Align the notch with the wires and alternate sides as you go.
Last, if you used glue, flip the assembly face down on a flat surface and put something heavy on it while it dries.
Step 10: Stain the Frame and Install the Face
This is a good time to stain the oak frame, depending on the finish you want. We need to glue the face in place, and in this example I plan to use an oil finish on the wood - that will interfere with wood glue so I'm going to apply it later. Alternatively use a different type of glue that won't be affected.
Next we need to put the face into the frame. The critical thing here is to set the depth so that the back of the clock ends up flush or below the back surface of the frame and doesn't stick out. There are lots of ways to do this:
The small rectangular spacers are just right to set the distance from the front face of the frame to the face.
Another way to accomplish this is to set the frame face up on a flat surface, then stack up all of the internal parts (skip ahead to see how they go), and finally press the face down against them. Make sure that the wires don't come between layers however.
You could also stack up the parts and use calipers, whatever you want!
Step 11: Pour Epoxy
Support the back over the whole surface to help the masking tape stay put. Set it on a level surface.
Mix up about 5 ounces according to the instructions that come with your epoxy. Generally they will say to mix in one container for 6-10 minutes making sure to scrape the sides, then to transfer to a clean container and mix for another few minutes or until it reaches a certain temperature.
Pour the epoxy over the face. I try to fill the letters first to minimize air bubbles then cover the rest. Try to protect it from dust, and periodically use a heat gun or torch to remove bubbles.
Step 12: Install LED Grid and Diffuser
Remove the masking tape from the back of the face after the epoxy has finished curing.
Something to diffuse the light is recommended between the LEDs and the back of the face:
- No diffuser gives the impression of individual lights behind the letter
- A sheet of printer paper gives a very uniform light, but there is a tradeoff of reduced total brightness
- One or two sheets of white tissue paper is a good compromise
- Black tissue paper does reduce brightness but also makes the non-illuminated letters not stand out as much
Cut the paper so it fits in the frame and sandwich it between the LED grid and the face. Make sure the corner of the LED grid with the data wire is lined up with the letter "I" in the top left.
While you're at it, set the back plate into the frame and trace the cutout section onto the back of the grid with a pencil, this will help get the smaller parts aligned correctly later.
Fix the LED grid in place with hot glue.
Step 13: Add the Guts
Glue the segments that go around the center together as shown, then using the lines you traced onto the back of the LED grid, glue them down. Use the arduino and micro USB breakout board as spacers to make sure they will fit.
Glue the small rectangular spacers around the perimeter, making sure not to cover up the holes for the switches on the left and the photoresistor on the top.
Use hot glue to secure the Arduino and micro USB breakout boards.
Remove the angled header pins from your RTC module if applicable. Either desolder or just snip them off - we won't be using these.
Finally, use hot glue to secure the RTC module in the lower left. I recommend using the back plate as a guide to get it in the perfect spot. Tape the module into the board, glob on some glue, then put it in place and push the module down flush to the board below.
Step 14: Buttons and Photoresistor
Secure the switches in the lower left with hot glue, paying attention
to the orientation. The four pins on the switches are joined in pairs, I recommend rotating them so that one pair is near the bottom and the other at the top - this will make soldering easier later.
Glue the photoresistor in at the top - just center it on the hole in the top
Step 15: Solder 5v/VCC Connections
These all should end up connected to the VCC pin on the Micro USB breakout board.
- LED strip from upper right
- LED strip from lower left
- 5V on arduino
- VCC on the RTC module (third pin from the top)
Step 16: Solder Ground Connections
These should ultimately all connect to the VCC pin on the micro USB breakout board.
- LED strip from upper right
- LED strip from lower left
- Arduino GND
- RTC module GND (bottom pin)
- See the detail photo. Tactile switches have four pins but only one contact, they are internally connected in pairs. If you solder to both pins for the ground wire, check with an ohm meter to confirm that both pins are on the same side of the switch, otherwise you'll be shorting it out.
Step 17: Solder the Remaining Connections
- 10k resistor. Arduino pin A0 to ground
- Photoresistor. Arduino pin A0
- RTC. Second to the top on the module to arduino pin A4
- RTC. Top pin on the module to arduino pin A5
- Switch 1 (Mode/Set). Arduino D2
- Switch 2 (Up). Arduino D3
- Switch 3 (Down/Cancel). Arduino D4
- LED Data. Arduino D6
Apply a generous amount of hot glue to secure the wires, particularly to insulate the leads coming from the photoresistor and to solidify the switches.
Finally, pop a CR2032 battery in the RTC module.
Step 18: Upload Firmware
You will need a PC with the Arduino IDE to upload the firmware to the Arduino. Here are the settings that I used:
- Board: "Arduino Nano"
- Processor: "ATmega328P (Old Bootloader)
- In earlier IDE versions I did not need to choose the old bootloader option, but I believe there was a change to reflect an update to the official hardware that isn't present in the clone boards that have on hand
- Port: you'll have to figure out which one after plugging in the board
Six libraries are required, they can all be found through the Tools -> Manage libraries menu in the IDE:
- Wire (included by default I believe)
- EEPROM (also included by default)
- RTClib (Adafruit version 1.2.0)
- OneButton (Matthias Hertel version 1.2.0)
- SimpleTimer (Alexander Kiryanenko version 1.0.0)
- FastLED (Daniel Garcia version 3.1.6)
After setting the options and installing the libraries it should be a matter of compiling and uploading to the device with the "upload" button. To verify that the device is working you can open the serial monitor where there should be a brief message on boot.
Step 19: Set the Time
You may notice that the clock doesn't display anything at first - this is expected. At boot it looks for a saved color and animation in the EEPROM, but because there is nothing in memory it doesn't know what to do. Push button 2 or 3 (up/down) to select a color and it will update the display.
To set the clock:
- Hold "Mode/Set" to enter the clock setting mode. The hour should be displayed.
- Use "Up" and "Down/Cancel" to select the hour (0-23)
- Press "Mode/Set" to switch from hours to minutes
- Use "Up" and "Down/Cancel" to select the minute (0-59)
- Hold "Mode/Set" to save the time and return to clock display
While in "Set" mode, hold "Down/Cancel" to return to clock mode without saving a new time.
Also in "Set" mode, "Mode/Set" will switch between hours and minutes in case you need to go back without canceling.
Step 20: Add the Back Cover
Add some glue to the top edge of the spacers we installed earlier and that's the end of the build. I recommend leaving this to the end so that you have a chance to fix any wiring issues before it's all sealed up.
Step 21: Done!
The micro USB connector is there for convenience - in my experience it's much easier to find a nice looking braided micro cable than the mini-USB that fits the Arduino.
Operation is simple:
- Mode/Set selects a time change animation
- Up cycles through the colors
- Down cycles through the colors in the other direction
The brightness should adjust automatically with the light in the room, dimming as it gets dark.