Gyroscopic smart watch winder w/ AWS IoT integration, computer vision skew detection and OLED display.
This project is based on the 3d printed Gyro watch winder by NedalLive. The intent is to wind an automatic mechanical watch, track each watch's accuracy over time and display the accuracy and winding statics on the onboard OLED display. Eventually, I'd like to display via a webapp as well.
To achieve this, a camera is mounted to the rear support frame to periodically take photos of the watch-face. These watch-face images are uploaded to AWS and processed via an computer-vision algorithm to determine the displayed time, the inferred time is then compared with NTP and stored as a statistic for each unique watch.
Winder stepper control: Functional, complete. IoT Winder stats publish: Functional, needs work.. IoT Winder stats subscribe: Broken, subscription works, but messages no longer displayed to console. Needs some attention.
- Port/adapt ESP32 Camera driver to arduino.
- Design optimal path to upload the images. Probably a direct s3 object put & likely an API for metadata.
- Build training data set from my collection of automatic watches.
Board: Heltec ESP32 WiFiKit (ESP32 + OLED) Camera: ArduCam OV2640 Stepper motor/controller: 28BYJ-48 + ULN2003 Ribbon extension: 24pin FPC extension Glass Dome: Ikea BEGÅVNING Glass dome with base Gyro parts: 3d printed Gyro watch winder by NedalLive
I also have a couple of AI-Thinker ESP32-Cam boards I plan to test with. This package dramatically simplifies wiring, as the camera is integrated. It will also allow for additional remote mounting locations of the OLED display, since the OLED is more compact when not mounted to the
Both camera modules have zif/fpc ribbon cables, so I'm hoping to be able to extend this remote, so the camera can remain in the rear support arm and the hide the rest of electronics in the base. Not sure yet if this will work as the cam modules normally require short cable runs
I found an NTP Clock instructables project that conveniently used the same board. This proved
IoT integration is loosely based on the tutorial AWS IoT for ESP32 by ExploreEmbedded. Currently the Subscription is successful, but the handler doesnt seem to run. This happened after I sped up my main loop, so I suspect it may be a timing / resource issue, will troubleshoot later.
A core component to this project is the ability to read time from an analogue watch. I've just started research into this area, since I'll need to get a set of images from the camera to build a training set first.
Ultimately the project needs an ML algorithm for 2 core uses:
- Fingerprint each individual watchface
- Read displayed time from the analogue watchface
One of the goals is to attribute stats to each watch, since its likely people will use the winder with multiple watches, there needs to be a mechanism for selecting each watch when it is added. I'd like to avoid mandatory user interaction, so the system needs to fingerprint the watchface, this fingerprint can then be used as an ID to attribute stats to.
There has been some work in the industry in this space I'll be building from. Analogue clock and watch reader DeepTime
##Other References (no particular order) Arduino using ESP32 IDF modules