IOT Mechanical Clock with Bluetooth App

Big clock from the 90's overhauled to obey an ESP32 instead of its old motherboard. Lots of possibilities for display. Very clicky.

Public Chat
Similar projects worth following
An old housemate of mine moved out of our house and left behind an old racing clock from the nineties he had acquired through questionable means. It was too expensive to repair, so I gutted the motherboard and created a circuit to make it obey an ESP32 feather with an RTC. Additionally, I added a bluetooth iOS app to interface with the clock, allowing for all kinds of cool user control. Picked up a lot of skills along the way - It was my very first PCB and my very first app integration within a hardware ecosystem. I've learned a lot and love the project and just wanted to share what I have so far!

Links posted for the GitHub Arduino code libraries that you can use to make this yourself!

So this thing took a long, long time to build and included a lot of trial and error, but I'm happy it is working!

It has several mode of operation:

- A basic 'clock' mode that supports time zone updates, 12-hour and military time, granular readouts, a 'dead time' period that will only flip the digits once every fifteen minutes or not at all, an alarm using the giant horn on the clock, and an 'enabled' switch

- (Not finished) a 'stopwatch' mode

- (Not finished) a 'timer' mode

- A scores mode that will keep score for up to 3 teams at once. Good for pickup games, volleyball, etc

- A 'date countdown' ability that dynamically counts down to a future date and time

- A 'message' screen that allows the clock to attempt to display viable strings

It also contains a bluetooth HUD with feedback for message send/receives, as well as generic toasts.  Lastly, there's a screen to select a wifi network and set the key and SSID.

Gerbers for the board, ready for JLCPCB

Zip Archive - 167.77 kB - 12/21/2020 at 20:55



The SwiftUI App to control the clock, demonstrating bluetooth communications with a board and how to use Core Data to keep a persistent application state, as well as generic toasts for bluetooth success / failure

Zip Archive - 216.77 kB - 12/21/2020 at 20:54


The entire embedded side of the current project, utilizing bluetooth, SPIFFS for preferences, RTC, and Wifi

Zip Archive - 14.68 kB - 12/21/2020 at 20:51


  • 6 × MC23017 I2C Port Expander
  • 12 × TBD62083 Series Gate Driver
  • 3 × Barrel Jack
  • 3 × Sparkfun QWIIC Connector 4-pin JST-SH
  • 3 × Sparkfun QWIIC Cable

  • Bluetooth App Demonstration

    Keenan Rebera12/21/2020 at 20:45 0 comments

    Just a quick demo of the app in realtime and my submissions to the "Goodbye, 2020!" Hackaday contest. I think the display / countdown fit the bill nicely, and since this project took all year, I'm pretty excited to celebrate where it's at!

    Here I have in set as a big countdown timer until Jan 1, 2021 at midnight, and show it displaying "HAPPY" and "2021"


  • Writing the App

    Keenan Rebera12/21/2020 at 20:44 0 comments

    The app took a long time to write, and takes advantage of both Core data and Core Bluetooth. Getting the clock to sync with the app was even harder, and required the use of SPIFFS and ArduinoJSON, as well as a finite state machine to keep track of all of the modes and messages. Here are some screenshots from the app:

  • Testing the Boards

    Keenan Rebera12/21/2020 at 20:42 0 comments

    Had to develop some initial code to test the performance of the boards, and ended up writing two Arduino libraries, one for one Signalex display and one for Several.

    The Chronomix library works with two competing queues to fill up and empty scheduled activations and to fulfill async time demands. When the clock is cleared the state is flushed and better known. It seems to even keep up with a stopwatch!

    I got really excited about this step, but wanted some more features, namely phone control and memory, so I went about developing an app for it

  • Installing the Boards

    Keenan Rebera12/21/2020 at 20:32 0 comments

    I ended up using an ESP32 Feather from Adafruit along with one of their RTC feathers for better time keeping. I tossed in a 5V regulator and a barrel jack splitter in order to provide power to all of the boards out of one jack. After that I modified the case for some basic input and testing, and rigged up the GIANT alarm horn to an NPN transistor in case I ever wanted to use it (it did a short stint as a sound bomb, lovingly dubbed the 'annoyatron')

  • Designing the Board

    Keenan Rebera12/21/2020 at 20:10 0 comments

    I had decided to use the MCP port expander in order to control several of these over I2C when I stumbled upon May Fourth's Sig7Seg design on Tindie. I noticed that she was using the TBD62083 in order to drive the digits, but I wanted a better footprint for mine. I wanted to be able to hot-swap and test the units without soldering the wires right to the board and I wanted to make it compatible with the QWIIC ecosystem. So I designed the board, ordered the parts, and got to work cooking them over a hotplate in the backyard.

    I noticed there was one wiring error in the board, which I have since updated in the design files. It was trivial to fix, however, so I just soldered small wires onto mine instead of reordering the boards.

  • Initial Idea

    Keenan Rebera12/21/2020 at 20:07 0 comments

    After reading the works of Andrew over at I had it in my head that I would repurpose the 5v drivers that originally came with the motherboard. I took a blowtorch to the poor thing and wired up a test circuit. Unfortunately, it didn't;t work very reliably, and I believe I may have melted most of them. Additionally, a 5v system wasn't a very attractive option to me anyways, so I decided to go about designing my own board for the thing.

View all 6 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates