Photos and diagrams by Larry Cotton

Ancient clocks were mechanical, and evolved with round faces primarily for that reason (Figure A). When electricity became widely available, clocks’ faces copied (and still copy) the old mechanical ones because it was easy and cheap to rotate the hands. So we’ve gotten used to it, and today most clocks still have a round face with two or three hands that rotate. OK, there’s those boring digital clocks…

Figure A
Read articles from the magazine right here on Make:. Don’t have a subscription yet? Get one today.

Then along came stepper motors whose shafts still rotate, but in tiny steps, in either direction, at easily controllable speeds. So why don’t clocks use them? They would not need circular dials but would be just as accurate. It’s much easier to tell time on a stepper clock, too. (How long do kids spend learning how to “tell time”?) And they’re very cheap: How about six bucks for a set of five stepper motors and control boards from Amazon?

Check out Figure B. What time is it? This clock is powered by two stepper motors which move the hands along easy-to-read arc-shaped minute and hour dials. I considered moving at least one hand in a straight line (with a timing belt or rack and pinion — Figures C through E) but after much consternation and cogitation I settled on two arcs in an S-shape. I added a cheap clock mechanism ($.50 at AliExpress) with a lone second hand, mainly to show that the clock is running.

Figure B

Project Steps


My clock is timed by another cheap clock. Its electronics include an IC fed by a quartz crystal running at 32,768 cycles per second. A binary digital counter driven at that frequency overflows once per second, creating alternating positive and negative pulses to drive its solenoid. A positive pulse every 2 seconds is fine for driving stepper motors via proper programming and electronics. One caveat: The cheap clock must tick, not hum. Check out more on quartz clocks here and here.

YouTube player

Here’s a YouTube video that shows (about 3 minutes in) how to get that positive signal from a cheap clock. Connecting signal and ground wires to the two solenoid connection points should yield one positive pulse every 2 seconds, which can be sent to a programmable microcontroller board such as an Arduino or BASIC Stamp.

An alternative would be to use the microcontroller’s internal clock, but I discovered programming is easier, and a stepper clock is potentially more accurate, if timing comes from one of the (ticking) cheap clocks.

I’m a relative newbie to steppers, so I read tons of information and watched zillions of YouTube videos to try to divine their workings. Basically, they’re multi-coil motors whose shafts turn — in either direction — in tiny steps. Each step requires an electrical pulse to turn the shaft just a little bit. Here’s a good tutorial and information on the specific motor I used. The company offers lots of stepper-related products and help.

My clock uses two 28BYJ48 steppers to turn its minute and hour hands. The 28BYJ48 produces 32 steps per full motor revolution. Its output shaft is geared to yield 512 (or 513, depending on source) steps per revolution. For those familiar with Arduino programming and shields, you can find help programming stepper motors here.

No matter the source of the timing pulses, the board should be programmed to wait for 30 of them, then quickly move the minute-hand’s stepper motor from one minute to the next. After 60 minutes, a signal must go to the hour hand’s stepper to move it from one hour to the next. (The hands on my clock are attached directly to the stepper shafts.)

It’s visually satisfying to see the hands move quickly between minutes and hours: for example, at exactly 8:00 the hour hand will move from 7 to 8. When the hands get to the ends of their respective dials, they quickly reverse to their beginning points.

I programmed my steppers for 6 quick steps from minute to minute and 20 steps from hour to hour. Your mileage will vary depending on your clock face graphics. If you want to use my clock face, you can find it here.

Figure F. Click for larger version

See Figure F for my circuit. It shows a Parallax HomeWork Board, but connections to an Arduino would be similar. I included a power supply to send 1.5VDC to both cheap clocks; ½” wood dowels with screws in the ends replace their AA batteries (detail in Figure G). Any deviation from 1.5VDC will necessitate a change to the 51-ohm resistor.

Figure G


Whether using C++ or PBASIC, experiment with values for pause t to get a smooth but fast hand move. Too-short pauses may cause the hands to stutter. Too-long pauses take too much time to move the hands.

This subroutine (in PBASIC) quickly steps the minute hand clockwise, using the HomeWork Board’s input pins 1–4:

 FOR z=1 TO 6
 HIGH 1: LOW 2: LOW 3: LOW 4
 LOW 1: HIGH 2: LOW 3: LOW 4
 LOW 1: LOW 2: HIGH 3: LOW 4
 LOW 1: LOW 2: LOW 3: HIGH 4
 LOW 1: LOW 2: LOW 3: LOW 4

The first line begins a loop to step the minute hand enough times to move from minute to minute on the dial. The last line deactivates the stepper motor coils to keep the motor cooler and to draw less current.

Since I chose to move the hands in opposite directions, stepping the hour hand required reversing the previous coil activation sequence using pins 5–8; use enough steps to move the hand from hour to hour.

Returning the hands to 00 and 1 requires sending the cumulative number of forward pulses — in reverse order — to the steppers. In my case I used 360 (60 minutes × 6 steps per minute-hand move) and 240 (12 hours × 20 steps per hour-hand move) reverse steps.


I created my clock face in AutoSketch, including tiny circles to locate holes for the stepper and cheap-clock shafts; then I saved it as a PDF file. I had the clock face printed at Staples, because I didn’t want to drain an entire black-ink printer cartridge. Bonus: This face (13″×6½”) cost only 20 cents to print, so I added four backup prints!

Figure H

Next came light sanding and spray-painting both sides of a piece of good quality ¼” plywood, spray-gluing the face, trimming the edges, and drilling shaft holes. I screwed the stepper motors to the back of the plywood with the shafts poking through their holes and mounted the other seconds-only cheap clock (Figure H).

Figure I

I chose to build a floor clock, so I found a lamp at Target from which I cannibalized the stand. Since my electronics aren’t exactly, um, professional quality (Figures I and J), I mounted them low on the stand and ran the wires through the stand tubing.

Figure J

If the electronics were arranged more compactly, they could be mounted on the back of the plywood face for a desk or wall clock configuration. I’ve shown all the parts in Figure K.

Figure K. Click for larger version

Lazy builder/programmer tip: Set the clock by turning it off, positioning the hands at 1 and 00, and restarting it at exactly 1:00 p.m. Refer to Tip 3. Night owls may disagree.


1. It’s best to create your clock’s face based on actual movement of the hands. Program the minute hand to cover its arc in an hour, and the hour hand to cover its arc in 12 hours. To speed up the process, give each minute only 2 seconds when testing!

2. Be sure to turn your steppers off (all low signals) when not moving hands. The motors will run cooler and draw much less current.

3. Attach the hands with a short piece of flexible tubing that’s press-fit over the stepper shaft. If you mount them rigidly, extra coding at the beginning of the program will be required. In addition, setting and starting switches will be necessary (and are in fact shown in Figures I–K).

4. Ensure that your power supply supplies adequate current to the steppers. The small steppers I used don’t draw much current, but bigger ones would, especially if they have to hold a position against a load.

5. Use plugs and sockets on the long wires through the floor stand tubing. I regret not doing this!