Arduino Watch Winder


Automatic watches are expensive.  If you build your own winder and overwind or otherwise break your expensive watch, it is not my fault.  Use this information at your own risk!


A few years back, I received a Stauer quad watch winder for my birthday (it might be this one, I’m not sure). At the time, I had only one or two watches, and they were based on a 7750 movement that required 800 clockwise turns per day. The winder was hard wired for 4,320 TPD, so I simply put it on a lamp timer and ran it for only a few hours daily to get my 800.

My collection now has a watch that needs only 650 turns, and in both directions. While I could set one winder turntable to reverse direction periodically, there was no way to set the turns-per-day differently for each watch. I decided to take the winder apart and see if it was as simple as I expected it to be. This is what I found:

Original Circuitry

The control board was very simple. Looks like a microprocessor of some sort (unmarked) some transistors making up a pair of H-bridges, and some miscellaneous circuitry. I could have probably figured out what kind of processor it was and just made a replacement, but I decided to go with a Arduino instead.

J1 – Power switch/power supply jack.

J2 – Toggle Switch Input

J3 – Motor/LED Output

J4 – Toggle Switch Input

J5 – Motor/LED Output

The power supply was a 6V power wall transformer with the same polarity as the Ardunio.  The motors ran at the 6V voltage.  It was the perfect application for an Arduino.


On Spark Fun Free Day, after starting at the stroke of 11am and poking through the ordering pages, I finally got my order in– after free day had ended! Oh well.  Next time, maybe. I ordered my stuff anyway: an ArduMoto shield and a RTC module. I combined the two into one “Watch Winder Shield” and set to programming.

The winder’s motors turn at about 6.25 turns per minute when powered with the full 6V.  With this, I calculate how many seconds per hour the tables need to turn in order to give me the right number of turns-per-day.  (Turns / 24 hrs / 6.25 rpms) * 60.   One table reverses direction on odd- and even-hours for the watch that can wind in both directions.  Based on my needs, this means that the winders are turing between 4-5 minutes every hour.

Breathing LEDs

I have the LEDs setup to “breathe” or pulse while the motors are in standby.  While the motors are turning, the LEDs are set to be on-steady.  This mimics the behavior of the original winder (with the added breathing effect, rather than just a steady blink).  There is a post on Ladyada’s blog that details her effort to reverse engineer the breathing LED on a Mac.  Based on her oscilloscope trace, I figured that the “breathing” takes about 3 seconds to exhale and about 2 seconds to inhale.  I fit some parabolas with these numbers and came up with the following animation sequence:


I do some minor transformation on these values– I don’t want the LEDs running at full brightness, and I also didn’t want them to go completely out at the bottom of the “exhale”.   I still want to tweak this a little… I’d like it to pause a bit more at the bottom.  Also, I think my minimum value is still a bit too bright.  You’ll probably want to tweak things anyway for your application, should you decide to use this method.

Future Improvements

Each turn table has a 3-position, center-off SPDT switch that used to let you select between the clockwise mode and the reversing mode.  So far, I’m not using these switches, but in the future I may hook them up for something, perhaps as just a simple on/off switch for each turntable.

Also, I plan to add a “failsafe” to the code that reads the RTC.  Right now, I’m pretty sure that a failure to read the time would result in all 0′s coming back.  In this case, the code would assume its midnight, and also “less than the motor stop time”.  Hence the motors could run continuously.  I don’t want to overwind my watches, so I think some date/time verification is in order.  If the values come back all zeros, or if the date/time doesn’t make sense, I plan to shut down the motors and blink the LEDs back and forth in a manner that would indicate a fault.

I’d also like to add an optical sensor to index the wheels.  I’d like to be able to count the revolutions exactly, allowing precise turns-per-day for each turntable.  Also, I think it would be cool to be able to emulate the Orbita Tourbillon watch winder, in that the watch would come to rest at a different position every hour.  Also, with an indexed “home” position, it could be setup so that when the watch case opens, the motors turn to their “home position” and stop so you can insert or remove a watch.

Final Installation

Source code is here: Watch_Winder Arduino Source Code