To solve the age-old first-world-problem of having too many automatic mechanical watches, configurable from a smartphone!
Code of the Mechanical Watch Winder for the ESP8266 (Arduino based).
Zip Archive - 8.63 kB - 01/29/2020 at 06:11
Schematics for the Mechanical Watch Winder electronics (rev 2.0).
Adobe Portable Document Format - 110.97 kB - 01/29/2020 at 06:11
3D printable STL files for the Mechanical Watch Winder
Zip Archive - 223.04 kB - 06/26/2019 at 15:40
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.
[this comment has been deleted]