When our son was about three or four years old we started expecting him to do things in a timely manner. I would say things like "We need to go in ten minutes!" or "Play with that truck for five more minutes, and then give someone else a turn". The problem was (a) he could not read a clock, either digital or analog, and (b) he had no sense of how long a minute is. I realized that he needed a clear way to see what five or ten minutes looks like, and be able to track the time remaining. So, I set out to design and build a visual timer. I had seen many variations, including the classic egg timer, but I felt like the rotation metaphor was not intuitive to very young children -- it is all about looking at angles and fractions of a circle. Once I settled on a more linear design, the idea of an electronic hourglass seemed obvious: it provides the right visual metaphor, and I could use an accelerometer to implement the ergonomics of turning it over to start and stop the timer.
My final design, which I'll show you here, is relatively simple. The visual part consists of a strip of individually addressable RGB LEDs (e.g., WS2812). Programming is accomplished with a single button (a capacitive touch button, because it is flat). An Arduino-compatible microcontroller (an Adafruit Metro) runs the program and reads orientation information from a 3-axis analog accelerometer. Power is provided by a rechargeable battery pulled from a phone power bank (a standard 18650 lithium ion). The nice thing about the power bank is that it includes the charging circuity, a micro-USB port, and it outputs 5V, which is what the microcontroller and the LED strip expect.
Depending on your level of experience you can probably make this timer in a weekend or two. You will need basic soldering skills and the associated tools and supplies. The biggest variable is the enclosure: I have woodworking power tools that make this job easier, but I'll also discuss alternative ways to build the enclosure without lots of tools.
Step 1: Materials and Tools
For the electronics:
- Portable cell phone power bank (with 18650 cylinder battery) -- the price range is huge, but don't pay more than $10
- 2-pin rocker switch -- something like this: http://a.co/d/7oyHJ5SWire
- Terminals for the switch -- a kit is useful: http://a.co/d/7oyHJ5SWire
- AVR microcontroller -- 5V power with at least three analog inputs. The Adafruit Metro Mini is perfect.
- 3-axis accelerometer -- Adafruit sells an ADXL335 breakout board.
- Capacitive touch button -- Adafruit sells a complete button board.
- Small prototyping breadboard (one with power rails) -- Adafruit Perma-proto boards are good quality
- Small JST power connector -- like this: http://a.co/d/0n3ckX6
- Addressable RGB LED strip (e.g., WS2812) -- get the 144 LED/meter strip: http://a.co/d/aYBjZEy
- 3-wire Dupont cable with female connector
Hookup wire (24 and 26 gauge)
For the enclosure
- Wood blank (at least 1.25 inches thick) OR Plywood of various thicknesses
- Wood strip for top and bottom (0.25 inches thick)
- Small sheet of plexiglass or acrylic
- Sheet of diffusion material -- thin plastic cutting mats are great: http://a.co/d/2x2hg9T
- #6 screws, flat head and pan head, 5/8 inches
- Zinsser shellac, wipe-on polyurethane
- Tape, glue, sandpaper
- Wire cutters and strippers
- Soldering iron
- Hack saw
- Wood saws
- Drill, drill bits, including countersink bit
- Chisels and files
- Plexiglass cutter or utility knife
- Table saw
- Band saw
- Saber saw
- Drill press
Step 2: Prepare the Battery
The first step is to pull apart the portable charger and remove the USB A connector. These devices are pretty simple: they have a 18650 lithium ion battery and a small board that contains the charging and discharging circuitry. There are typically two plugs: a micro-USB for charging the battery (input) and a larger USB A for providing power to phone charging cables (output). We are going to use the output to power the timer, so there is no need for the USB A connector. Use a combination of a soldering iron and pliers to remove it.
NOTE: Be careful not to damage the leads that are left behind on the board. We will need to use the two outer ones.
Step 3: Add the Power Connectors
Start by soldering a 24AWG wire onto each of the power leads where the USB A connector was. I use red and black to help me remember which one is power (5V) and which is ground. On the power side, add a terminal that fits the leads on the power switch. Prepare a second red wire with a terminal on one end.
If you connect the two terminals to the switch you should have two wires ends left -- one red and one black. Join them to one side of a JST connector. I like the JST connectors for power connections because the shape of the connector prevents you from plugging it in the wrong way and frying your circuit.
Prepare a red and black wire with the other side of the JST connector.
Make sure the wires will be long enough to reach along the length of the timer (see later photos). It's easy to trim or just stuff in extra wire.
Step 4: Assemble the Control Board
The control board is fairly simple, but there are a few details to look out for. Start with a perma-proto broad that has the same pin wiring pattern as a standard breadboard (note the power rails). Trim it as necessary to make it as small as possible, leaving the power rails and enough pin holes so that you can add the necessary hookup wires.
Solder the microcontroller and the accelerometer to the board using standard headers. NOTE the orientation of the two boards:
- Make sure the micro-USB connector faces the edge of the board, so that you can still access it for programming.
- Note the orientation of the accelerometer because that choice will determine what it considers "up" vs "down".
Step 5: Wire Power and Accelerometer
Decide which of the power rails will be 5V and which will be ground. Add small segments of wire from the power rails to the power and ground on both breakout boards.
Add three wires to connect the three outputs from the accelerometer to three analog input pins on the microcontroller. On my set up I connected the X output to A2, the Y output to A1, and the Z output to A0.
Step 6: Wire the Power Connector
Solder the free side of the JST connector assembly to the control board. Pay attention to the polarity: make sure the red wire is soldered to the 5V power rail, and the black one to the ground rail.
Step 7: Wire the LED Strip
In this step you will decide the overall size of the timer because we want the LED strip to run the full length. I chose an LED strip with 30 LEDs at a density of 144 LEDs/meter. The total height is about 8 1/2 inches. I laid out all of the parts on the wood blank to make sure it would fit.
Most of these strips can be cut to any length -- just make sure you cut at the specified point where the pads are exposed. Solder three wires onto the exposed pads at the input end of the strip. Most strips have some sort of indicator, like a tiny arrow, showing the direction of data travel. Power can be connected on either end, but data must go in the proper direction down the strip.
Make sure the wires are long enough, so that they can wrap from the front of the timer back around to the control board. Solder the power wires into the power rails on the control board, and solder the data wire to one of the digital pins on the microcontroller.
Step 8: Add the Capacitive Touch Button
Like the power switch, the capacitive touch button needs a removable connector because of the way it is attached to the timer. My strategy here is to solder straight headers onto the button, then solder a three-wire Dupont cable to the control board. The "female" Dupont connector fits the spacing on the header pins perfectly.
Solder the power and ground wires to the rails on the control board, like you did for the LED strip. Wire the data line (which will read "high" when the button is pushed) to one of the digital input pins on the microcontroller.
The complete circuit is shown in the final photograph. At this point you can power it up and, if you want, upload the code and test it.
Step 9: Lay Out the Enclosure
My enclosure is made primarily from a slab of maple about 8 1/2 inches long, 2 1/2 inches wide, and 1 1/4 inches thick. Use the LED strip as a guide for cutting the length, adding an extra 1/8 inch for wires and clearance.
The electronics should fit comfortable on the wood slab, with the battery and switch on the lower half, and the control board on the upper half. The final timer will actually have two separate enclosure spaces for these components.
Step 10: Alternative Enclosures
I realize that not everyone has the tools needed to make the enclosure described in the next several steps. There are a few alternatives that still come out very nice.
One strategy that will result in a very nice, modern-looking enclosure is to cut pieces of plywood into the necessary shapes and glue them together like a sandwich. This approach can be accomplished with just a few hand tools. You can get small pieces of high-quality plywood in various thicknesses at hobby and art supply stores.
Step 11: Slice Off the Front
In my first prototype of this timer, I drilled and chiseled out the spaces for the electronics, which turned out to be a huge pain, and I could never get it to look completely clean. Instead, I resaw the wood blank -- that is, I cut it into two boards that are the same size, but different thicknesses. The thin part becomes the solid front, which the thicker part becomes the part that holds the electronics.
To make sure that the spaces will be big enough I use the thickness of the battery to determine where to cut. This step can be done with a hand saw, but using a band saw makes it easier and more precise.
TIP: Mark the end of the board with a triangle or other mark right after you cut it, that way you can easily remember exactly how the two boards go back together.
Step 12: Lay Out and Cut Space for the Electronics
Working with the thick part, I lay out the rough shape of the timer. The walls of the enclosure will be about 3/8 inch thick. Use your electronics as a guide for the sizes of the spaces: the battery needs to fit in the lower space, the control board needs to fit in the upper space.
Start by drilling out the corners of the spaces. We will completely remove these rectangles, which is a quick job using a saber saw. Clean up the edges using a file and/or sandpaper.
Now you can dry-assemble the enclosure and make sure the electronics will actually fit!
Step 13: Cut Holes for the Connectors
It's a lot easier to cut the holes for the power switch and micro USB (for charging) before we glue the assembly together. Measure using the actual switch and charging board, and cut using a small saw. Clean up with files to get a tight fit.
We also need to cut a channel between the two chambers of the enclosure in order to connect the power. You can use any combination of chisels and saws -- this part doesn't need to be pretty because it won't be visible. But make sure it is wide enough to allow the JST connector to pass through.
Step 14: Glue the Enclosure Together
Glue the two sides of the enclosure together. Look carefully at your markings and at the wood grain to make sure you are glueing them back together the right way. You want the end result to look as though you never sliced the board at all!
I found it tricky to keep the boards aligned when clamping them, so I used a large parallel clamp at the top and bottom to keep everything from sliding around.
Step 15: Make the Top and Bottom
The top and bottom pieces can be whatever size and shape, and whatever wood you like. The only requirement is that it be thick enough to accommodate the capacitive touch button breakout board.
The part I found the most challenging about this step is getting the pieces lined up when I drilled the screw holes. My strategy is to drill the holes in the top and bottom pieces first, then line them up and mark the holes on the ends of the timer. Make sure you countersink the screw holes enough that the screws will not protrude -- otherwise the timer will wobble when you try to stand it up.
I still ended up with parts that were slightly askew. You can fix this problem by glueing a toothpick into the old hole, waiting for it to dry, cutting it off, and drilling a new hole.
Step 16: Cut Recess for Capacitive Touch Button
The capacitive touch button is on the end of the timer closest to the control board. This is the end that will be up when you set the timer and down when it is running. As with the screws, it is important that the button not protrude from the wood, otherwise the timer will be unstable when you turn it over.
Measure and cut a hole big enough to accommodate the pins of the board and the 3-wire Dupont connector from the control board. Place the button in position and trace the outline of the board. Using a combination of drilling and chiseling, form a recess that allows the button to sit low enough, so it does not interfere with the timer sitting flat on. I also found it helpful to trim the leads on the top of the board to make them as short as possible.
Step 17: Drill Holes in the End of the Timer for Wires
Both the capacitive touch button and the LED strip need wires that run from the inside of the enclosure. To make space for them, drill two holes in the end of the timer through to the inside of the enclosure.
The first hole make space for the three wires that power the LED strip. The shape is not crucial, but you need to carve out a little of the front of the timer so that they can bend around to the front.
The second hold runs from the control board to the capacitive touch button. The position and size of this hole should match the hole you cut in the previous step. Line up the top and mark the hole. Drill and chisel until the three-wire Dupont connector goes through cleanly to connect to the button.
Step 18: Cut Plexiglass Backing
The back of the timer is clear plexiglass, which holds the electronics in and shows them off! Trace the outline of the enclosure and use a scoring tool or utility knife to score the plexiglass. Cut the score line a few times to make it deep. Line up the score line with the edge of the table, and with a quick downward motion snap off the plexiglass piece. It should break cleanly.
This technique only works with breaks that run all the way through the plexiglass, so it might require two breaks to the get the right size. Leave the protective film on for now.
Step 19: Drill Holes for Backing
Line up the plexiglass back and tape it securely. Drill a hole at each corner for a small screw. I used 5/8" pan head number 6 screws. Be careful not to drill too far into the wood. Center the screw holes in the available wood at each corner to give maximum holding power.
Step 20: Mark the Back Alignment
One problem I've run into in the past is that I forget how the plexiglass was oriented when I drilled the holes. Small differences in the positioning of the screws, however, often mean that it won't fit any other way. Rather than guess, I create a mark that tells me exactly how the pieces should be oriented.
Before you remove the tape, use a file or a small saw to cut an asymmetric divot through the plexiglass and the wood. This mark will only line up when the pieces are in the right position.
Step 21: Cut Hourglass Shape
Now that the enclosure is essentially finished we can cut the hourglass shape. The exact dimensions are not critical, but make sure you don't weaken the enclosure too much by cutting close to the inside boxes.
Keeping the tape on, cut through the wood and the plexiglass at the same time. I used a band saw, but most hand saws can cut through both materials. Clean up the cuts with files and sandpaper.
Step 22: Cut Groove for LED Strip
The front of the timer has a groove to accommodate the LED strip as well as the diffusion material. Line up the LED strip and trace its outline on the wood. Add a set of parallel lines about 1/8 to 1/16 outside of those lines to mark when the diffuser will go.
This step is the most difficult without the proper power tools. I used a table saw with a dado blade to cut a deep channel for the LEDs (the inside lines). Make sure you don't cut through to the inside of the enclosure! Next I cut a shallow channel for the diffuser (the outer lines). Test fit the LED strip and make sure the leads comfortably reach around to the control board.
You're pretty much done at this point!
Step 23: Sand and Finish
Sand all three wood parts using 220 or higher sand paper. I also like to add a small bevel along all of the right angle edges to give the enclosure a more refined look and to make it more pleasant to hold.
I start with one or two coats of shellac, which sinks into the wood and really highlights the grain. It dries fast, so you won't need to wait long. Once dry, sand lightly with 320 or 400 sandpaper to even out the surface. But don't overdo it: you should still be able to see some of the glossy finish.
Next I apply a coat or two of wipe-on polyurethane, which is a tough, but attractive finish. You can buff it lightly with steel wool once it is dry.
Step 24: Assemble the Electronics
Start the final assembly by feeding the LED strip from the inside of the enclosure through to the channel on the front. Peel off the sticky tape or use a small amount of glue to affix the strip to the channel.
Next, hot glue the capacitive touch button into the recess in the top. You should be able to see the pins sticking out through the bottom. Make sure the button is flush (or lower) to the surface of the top part, so the timer doesn't wobble.
Insert the battery in the bottom compartment and feed the USB connector through. Use some hot glue to make sure it is secure in the space.
Add the control board to the top compartment of the enclosure. Feed the JST connector from the battery through the hidden channel in the center of the timer. Connect it to the JST connector on the control board.
Feed the 3-wire Dupont connector from the control board through the hole in the top and connect it to the pins on the bottom of the capacitive touch button.
Push the on/off button through the hole in the side of the enclosure (from the outside), until it sits snugly in place. Attach the two wire terminals to the two leads on the switch.
You should have the set up shown in the last photo.
Step 25: Finish Assembling the Enclosure
Line up the plexiglass and secure it in place with four screws. Screw on the top and bottom pieces. Check the alignment of everything and make sure the timer sits flat on the table on either end.
Step 26: Add the Diffusion Material
Cut a strip of diffusion material that is slightly wider than the channel around the LED strip. This will cause the diffuser to bow out a bit, holding it in place without glue, and providing more diffusion. In the general, the farther the diffuser is away from the LED, the more diffuse it makes them.
There a many suitable materials. I have used thin plastic cutting mats (cheap on Amazon) and this plastic "poster board" (which is thin and floppy, and not "board" at all).
Step 27: Customize and Upload the Code
Download the code from github.com/samguyer/VizTimer. You will also need the FastLED library, which provides the low-level drivers for the LEDs. The parts that you are most likely to need to change are right at the top: the five pins (the LED pin, the capacitive touch pin, and the three accelerometer pins). You might also need to set the number of LEDs in the strip.
Feel free to explore and modify the code!
Connect the control board to your computer and upload the code. You will need to remove the plexiglass backing to get at the micro-USB connector on the microcontroller.
Step 28: How to Use It
The goal of this design was to make setting and running the timer as simple as possible.
The timer has three modes: program mode, timing mode, and pause mode. The mode is determined by the orientation of the timer: program mode when the capacitive touch button is on the top, timer mode when it is on the bottom, and pause mode when the timer is on its side.
When you first turn it on you will see a blinking yellow "cursor" at the bottom of the LED strip. Touch the capacitive button to add time in 15 seconds increments. Each 15 seconds is shown as a purple dot. When you get to 60 seconds, the purple dots are replaced by a blue dot, which represents a minute. Hold the button down to add minutes continuously until the button is released. Every fifth minute dot is colored white to make it easier to see the total.
Turning the timer over starts the countdown. All of the dots start out lit up, regardless of the total time -- this was a design choice on my part. You could also program it so that each dot always means the same amount of time.
Dots fall one by one until the time is up. Then the timer displays a colorful "finale" for about 15 seconds. To go back to program mode, turn the timer back over. The yellow cursor will show again. If you start the timer again immediately without programming it, it will use the previous amount of time.
A nice addition to this timer would be a small speaker to play sounds, especially an alarm sound at the end.
During timing mode you can pause the timer by turning it 90 degrees and resting it on the side. The timing dots freeze in place, and pulse gently to indicate that the timer is waiting to be restarted. Turn it back to continue timing, or the other way to go back to program mode.
I hope you enjoy this device as much as I do!