I stumbled upon a solution to a first world problem that was so incredibly futile, and yet fascinating at the same time: a mechanical watch winder.
It is not good to have a mechanical watch stop, so it's important to either wind it manually from the crown or wear it enough so that it would wind itself using its weighted winding mechanism. Manually winding is annoying, in case you have many watches you may not wear them all enough to keep up with their time reserves.
A mechanical watch winder is a device that will turn the watch so it would recharge itself through its own weighted winding mechanism. There are many commercial models available, some even having multiple holders.
The idea fascinated me enough to try and make my own. It incorporates very basic things: motor, microcontroller and a mechanical structure.
The ESP8266 is the ideal microcontroller for this application and it can connect to the Internet, so might as well make it an IoT device.
After I saw that JLCPCB can manufacture 10 boards for $2 with a lead time of 2 days and express DHL shipping (I'm not actively promoting, just amazed and a bit concerned about their business model) I decided to design and order the electronics for the watch winder.
These are the boards:
Assembled it with some minor mistakes and temporary cables for power and programming:
Red cable is because I connected to the common pin of the darlington array to ground, it should've gone to 5V (short). The stepper didn't turn. Amazingly the thing just heated up, but didn't release its magic smoke. There's probably about $5-8 worth of electronics as of now.
The "motor driver" (darlington array) that came with the stepper motor was slightly too big for the PCB (16PDIP package), so I ordered some free samples from TI, I got 5 smaller versions (SO-16 package) of the ULN2003A which perfectly fit the available area.
The stepper motor connector was salvaged directly from the driver board it came with.
Since I had some space left I added a buzzer and broke out some pins just in case I wanted to add some features. I was expecting this to not be the first and only PCB for this project. I also added a large whited-out silkscreen area to write on (IP address, name, product code...) this will be gone too in the next version.
This is how the PCB will be mounted on the bottom of the winder:
The Internet of Things Mechanical Watch Winder prototype winding one of my watches with me controlling it via a Node-Red interface:
The frame squeaks quite a lot, some parts need to be modified, it's incredibly annoying after a couple of minutes...
I designed this project using SolidWorks, it has some fun tools (non-intuitive as they can be sometimes...) like motion study. It allows to show how the device moves/performs when the motor turns, if the mating between the parts is done properly all connected elements follow the driving motor.
I added a rotational motor to the axis of the stepper motor and after fiddling with the settings for a while I got this mesmerizing moving mechanical watch winder:
I used small bits of PLA filament to connect the rings so that they can rotate relative to each other. On the prototype I used a soldering iron to melt the filament pieces inside the rings, otherwise they would've fallen out, but it looked really ugly. I realized that the rings can be deformed enough so I can insert the filament piece without having to leave the side of the rings open.
It turns out the side supports were unnecessary as the front and back supports for the big ring held it well enough.
Finally, instead of using pieces of filament and glue to connect the big ring to the supports and the small ring to the "inner support" I decided to use screws to avoid glue.
Regarding the hardware of the IoT mechanical watch winder it was important to me for it to run silently and be made with rapid prototyping tools such as a 3D printer. I found a design I really liked on which I decided to base my own version.
I ordered a stepper motor with a driver from eBay to see how loud it would be during runtime. The motor runs relatively silently depending on speed and commutation approach. The precision of the movement was not important.
I wanted to use an ESP8266-01 for the controller, however I discovered that it really lacks in GPIO. I was able to run the stepper motor (which needed 4 control pins) by sacrificing both GPIO and the serial TX/RX pins, but this required way too many external components (pull-up resistors) and made it awkward to troubleshoot. The ESP8266-12 had a lot more GPIO pins and was barely more expensive, so I decided to use it instead.