Full write-up on my website, including imgur gallery and github repo: https://iamericmin.github.io/tm4.html


On the hardware side of things, the watch houses a Nordic nRF52832 SoC. It is an ultra low-energy System-on-a-Chip that has built-in Bluetooth Low Energy features as well as a handful of other radios. Its excellent power management allows it to be powered for days on a 12mm Lithium Coin cell. Three clicky buttons serve as the input, capable of handling long presses as well as double/triple clicks. Dual 7-segment LEDs show the time, and five auxiliary LEDs serve either as indicator lights or bling. Yes, I know I could've slapped on an OLED screen for better graphics and battery life, but I believe the cyberpunk aesthetics from the LEDs are completely worth it. There is a mini piezo buzzer capable of simple beeps and boops, but I haven't really implemented it in the firmware yet.
The nRF52832 chip sports a real time clock with an accuracy of +/-5 seconds a month. However, since the clock doesn't have a backup battery, the time is lost when the coin cell runs out of juice. However, with a Bluetooth connection to a computer or an Android smartphone, the time can easily be restored.
While the LEDs maintain a gorgeous aesthetic, it cripples the battery life. If I had used an OLED, for example, I believe the battery could have increased to about a week or more. Also, the segmented display becomes pretty dim after a few hours of use and stay that way until the battery dies. This is probably because the battery's nominal voltage of 3 volts is the minimum voltage for the display. The battery voltage is measured between 2.8 and 2.5 volts for the majority of the battery life. I think if I had used a 3.7v Lipo cell and a 3.3v regulator, the LEDs would stay at maximum brightness for the majority of the battery life.


he nRF52832 is programmed with Espruino, a Javascript interpreter for ARM microcontrollers, written by Gordon Williams. I chose it because I was not yet familiar with ARM-GCC. While much slower than C and consumes more power, it still allows easy firmware updates and most importantly, instant feedback from the REPL through a bluetooth connection. This is extremely handy when adding new features to the firmware, since I don't need to upload the entire firmware every time I need to test something out.
The watch firmware is still pretty early in development. It only displays the time and nothing else. The code also needs some optimization since when telling the time, the segmented display becomes significantly dimmer than usual. I don't know yet whether this is a software issue or a battery issue, but I'll need to look more into it. Once I learn ARM-GCC(I'm working on it) I will re-write the entire firmware in C for maximum efficiency and power management.