Ultra Low Power Binary Watch

by Aravind Vallaban in Circuits > Clocks

599 Views, 3 Favorites, 0 Comments

Ultra Low Power Binary Watch

Ultra Low Power Binary Watch
IMG_20260706_221335.jpg.jpeg
IMG_20260706_233207.jpg.jpeg
FM5BRGOMQU0BBPW.jpg
IMG_20260624_155451.jpg.jpeg

Most DIY binary watches sacrifice battery life for simplicity. I wanted to build one that could run for months from a CR2032 while still remaining compact and stylish. Using an STM32L0 microcontroller and aggressive power optimization, this watch sleeps at under 10 µA and only wakes when needed.

This watch consumes very little amount of power and thus it can run forever on the CR2032 battery but of course due to its self discharge, it will last for around 8-10 years. Along with time it shows weekday, date, month, year and you can even set alarms!

Lets see the rest of the Instructable to build you own!

All the files required are available in my Github.

Supplies

Note: Refer the Schematic for the exact value of components

STM32L010C6T6 × 1 Link

CR2032 Metal Battery Holder × 1 Link

CR2032 Battery × 1

Passive Buzzer × 1 Link

AO3400A MOSFET × 1

32.768 kHz Crystal × 1

0603 LEDs × 16

Resistors × 6

Capacitors × 8

Push Buttons × 3 Link

1mm Transparent Acrylic Glass

M2*3mm Philip Head Screws

M2*3mm Brass inserts

1mm Silicone sheet

0.5mm Silicone sheet

The Idea!

There are already tons of binary watches available but many of them have certain problems like higher battery usage or can only show time, cannot set alarms etc. So the criteria for this watch was to make something which can show time, weekday, date, month, year and even has alarm setting options with Casio style interface and durability. Yes! this one is going to be waterproof and somewhat shockproof as well. Though it is not completely waterproof, but it is water resistant. And with design revisions, we will be making it completely waterproof.

Features:

  1. Time (HH:MM)
  2. Weekday and Date
  3. Month and Year
  4. Set Alarm A and B
  5. Long lasting battery life
  6. Field watch style strap

Reading Time

matrix 1.png
matrix 2.png

Reading the time in this watch is very easy. Just as the name suggests, it shows time in binary, more specifically it shows in (BCD) Binary Coded Decimal. BCD is a type of encoding in which each number is represented by fixed number of bits. So to show time we need 4 number in which two are for hours and then the other two are for minutes. Each binary digit has its own weight. The bottom digit represents 1 and the top most represents 8. So we need 16 LEDs to show the time (4 rows and 4 columns).

So to read the time just add the digits in which the LED is turned on and ignore the one's which are off. See the above figure for better understanding.

You just read the numbers in BCD! Congrats!

In this way, we can display various other information too. In this watch we can see the time in hours and minutes, weekday and date, month and year too!

Creating the Schematic

Schematic_Binary-Watch_2026-06-24.png

The first part in designing a product is the selection of components. As this watch is going to use a CR2032 battery so it needs to be as much power efficient as possible.

LEDs: For the BCD display the choice was to use LEDs as a matrix which can show time. So a 4*4 matrix which means there will be 16 LEDs in total for the display. The modern SMT LEDs being very power efficient it doesn't draw more than a few milliwatts of power to glow. Also the SMD being the sie of 0603 which is very small and fits just perfectly into the design.

Microcontroller: I have used STM32L010C6 and the reason being that it has an inbuilt RTC peripheral with backup registers which means that you can save your alarm even if the battery is dead so you dont have to set it again when plugged in! Also it only draws around 0.6uA with the MCU being on Stop mode + RTC + 8KB of RAM retention according to the datasheet which is really nice increasing the battery life to several years.

Buzzer: This is where I think I have made a major mistake by choosing a electromagnetic buzzer instead of a piezo buzzer. So the buzzer used in this watch is a 5020 electromagnetic SMD buzzer. As it draws more current i have programmed it to have around 10% duty cycle for around 20s with 4KHz which was nearly identical to the sound produced by the Casio. Though you can still put in a piezo disc and drive it through the GPIO.

Battery: The battery being used a CR2032 3V nominal voltage with around 220mA capacity. The battery holder is made of metal because it looked much better and more durable than the plastic.

Switch: The switches that are used in this watch are really a stand-out feature. I managed to find these really cool SMD switches. Part No. PTS840ESDPMSMTRLFS

Now we need to create the schematic for the watch.

The schematic is fairly basic and is all minimum system requirements that is specified in the datasheets. The one method that always worked for me is creating the checklist. Follow this order for any microcontroller schematic creation.

  1. Decoupling caps on each VDD and VSS pins.
  2. Power On Reset (POR) circuit.
  3. Boot selection. (Always check the datasheets)
  4. Crystal and its required capacitors.

After the schematic is done we need to design the PCB and place all the components properly.

Designing the PCB

3d front.png
PCB_PCB_Binary-Watch_2026-06-24.png
3d back.png
PCB_PCB_Binary-Watch_2026-07-02.png


The PCB that I have designed is a standard 2 layer with ground planes on both layers. The PCB is of 36mm square with rounder corners. The PCB is fully routed by hand because I didn’t want the auto-router to mess up with some weird routing. I tried to make the routes as symmetric as possible. It took quite some time but turned out to be pretty good.

Next I exported the Gerber files and ordered the PCB which took a few weeks to arrive. I have attached the gerber files below :)

Now that the PCB is done, let's look into the firmware.

Creating the Firmware

stm32cubeide.png
cubemx.png

First I configured the MCU that I am using in the STM32 Cube IDE which has a graphical software known as Cube MX which makes configuration very easy.

So I set the clock source as LSE as I am using an external 32.768KHz crystal. The main reason is that 32,768 Hz is a power of two, which makes it incredibly easy to generate a 1 Hz clock.

32768 = 2^15

A digital counter just divides the frequency by 2 fifteen times to get 2 clock pulse each second for the RTC.

Also higher the frequency of crystal the smaller it can be manufactured.

f∝1/length​

So after configuring in the Cube MX, you can auto-generate the code and it will include all the required libraries with all the initialization code for the GPIO, Clock, RTC, Timer, etc. and you only require to write the main logic.

The code uses a lot of flags and conditional statements to configure different scenarios and button presses so that users can use it easily. The code is not perfect, it is not even optimized but for now it works. I will keep optimizing the code as there are still some problems like debounce for switches and sometimes the logic doesn't work.

How did I manage to optimise the power consumption?

So the whole design of the firmware is based on interrupts. Whenever the watch is not being used it goes into stop mode due to which the watch consumes around 0.6uA according to the datasheet. So whenever the user presses the button, an interrupt is generated, waking the watch from sleep mode.

Also the matrix LED is multiplexed meaning only a single column in turned on at a time but as its happening so fast that the naked eye cannot see that the leds are blinking.

All the other GPIOs that are not used are set as analog pin to make it high impedence so that no current can leak through.

The code uses 19.484 KB of space in the FLASH memory. The stm32L0 has 32KB of FLASH, so there is plenty more memory left if you guys want to add your own features :)

Soldering the PCB

IMG_20260627_111959.jpg.jpeg
IMG_20260701_193506.jpg.jpeg
IMG_20260701_193520.jpg.jpeg
WhatsApp Image 2026-06-24 at 15.57.10.jpeg

Soldering the PCB was a real tedious task. While soldering the crystal I had damaged it by heating it too much. I have not used any other instrument rather a soldering iron. I don't even have a soldering station!

I used my standard 900M Hakko style soldering iron and used the point tip for soldering the LEDs as they require some real good precision. If your soldering iron is also an adjustable wattage rather than an adjustable temperature make sure to turn of the iron when not using to avoid overheating and oxidizing the tips.

First I started with soldering the LEDs, always make sure to do a diode test before soldering the LED or just flip it and you will be able to see a small symbol indicating the cathode and the anode. After that I soldered the rest of the components, resistors, buzzer, crystal etc.

Then I flipped the PCB to start soldering the MCU. Soldering the MCU with an soldering iron is difficult but possible. First add a small amount of solder in a few pads of the LQFP-32 footprint in the PCB. Then heat the solder and place the MCU properly on the pads, if the different pins get soldered together, it is ok. Once the MCU is placed properly then apply solder to all the pins, put it all in. After this use a desolder wick and suck out all the excess solder from all the pins and then done!

After that I cleaned all the flux and residue with IPA 99% solution. Just poured some on the PCB and then use a toothbrush to remove all the residue and get the clean PCB.

If you guys want a video demonstration, then click here, it is a different project but has a full detailed process of desoldering the IC and soldering it back in another PCB.

Uploading Firmware to the Watch

IMG_20260702_154416.jpg.jpeg
swd connection.png
cube prog.png
prog.png

For flashing the firmwares we can use either STM32 STLINK Utility (as shown in above picture) or STM32Cube Programmer. If you have a clone chip that is unable to program with STM32Cube Programmer then use STM32 STLINK Utility.

Connect all the pins as shown in the above diagram.

I have attached the .hex files below. You can directly flash the firmwares without any modification and it will work as expected. As Instructables don't allow .zip files, to get the whole program and everything else, visit my Github.

Downloads

How to Use ?

watch front.png
watch back.png

Note: See the above figures for the naming conventions.

General

  1. Press the button (A) to turn on the display and see the time.
  2. To view Weekday and Date press the button (A) again. First two columns shows the Weekday in which Monday is represented by 1 and Sunday as 7 and the last two columns shows Date
  3. To view Month and Year press the button (A) again. First two columns shows the Month and last two columns shows the year.
  4. This watch goes on in this cyclic way with each button press. First it shows Time -> Weekday & Date -> Month & Year. Time is represented with a beep to avoid confusion.
  5. The display remains on for 5 seconds. To change the display timeout see the Step 5.

Setting Mode

  1. To enter setting mode press the button (A) once to turn on the watch and got to the specific screen then keep pressing button (A) until you hear a beep which indicated you are in setting mode.
  2. To set the time press the button (A) and and enter the time screen and then keep pressing the button (A) until you hear a beep.
  3. Once inside setting mode, press button (B) to increment the numbers.
  4. To change the current field inside the setting mode then press button (C) once. Example - After setting the Hour then press button (C) and set the minutes. If the button (C) is pressed again it will go again to the hour setting mode.
  5. To exit the setting mode, keep pressing the button (A) until you hear a beep.
  6. For setting the other parameter of the watch go to that specific screen and follow the above instruction.

Setting Alarm

  1. To view the current alarm, press button (C) after turning the watch on.
  2. To turn on the alarm press the button (B) and same to turn it off. The alarm turned on will be indicated by a red led.
  3. To edit the alarm, press button (A) for one second until you hear the beep, to enter alarm editing mode.
  4. Then use button (B) to increment the value.
  5. To change the field between hour and minute, press button (C).
  6. To exit the alarm edit mode press the button (A) for one second till you hear the beep.
  7. Then either turn on or turn off the alarm by pressing the button (B).
  8. To stop the alarm after it is triggered at the set time, press button (A).
  9. Note: The alarm time is stored even if the battery is removed. But it wont be enabled, to turn on the alarm, enter the alarm mode and press the button (B) to turn it on.

Flow Of Screen

  1. Normal Mode -> Screen Time -> Screen Weekday_Date -> Screen Month_Year

Designing the Enclosure

binarywatch-ezgif.com-video-to-gif-converter.gif
Screenshot 2026-07-05 195107.png
Screenshot 2026-07-05 195127.png
Screenshot 2026-07-05 195205.png



The watch enclosure was designed considering the PCB dimensions. I used a standard 22mm spacing for the watch strap. Designed considered Using a NATO watch strap.

The enclosure was designed with tolerance to avoid manufacturing inaccuracies. The design includes a total of 8 holes. 4 holes in front for mounting the glass and 4 in the back to mount the back panel.

Inserts are used as it's difficult to print the threads accurately. The back panel is designed big enough so that the battery can be replaced easily. The edges of the enclosure were rounded to avoid sharp edges.

And overall design of all components was kept minimalist so it would be better for 3D printing.

Assembly

IMG_20260706_230656.jpg.jpeg
IMG_20260706_235950.jpg.jpeg
IMG_20260707_000329.jpg.jpeg
IMG_20260707_000309.jpg.jpeg
IMG_20260707_000218.jpg.jpeg
IMG_20260707_000153.jpg.jpeg
IMG_20260707_000249.jpg.jpeg
IMG_20260707_000042.jpg.jpeg
IMG_20260707_000025.jpg.jpeg
IMG_20260707_001719.jpg.jpeg

Now we need to gather all the 3D printed parts and the silicone sheets to assemble into the watch.

I used a mini hacksaw blade to cut the acrylic glass to the size to fit inside on the watch. I also drilled 4 holes in the acrylic glass using a 2mm drill bit.

Then I cut the silicone into the shape to properly fit the front and the back panel. 0.5mm silicone sheet is also used between the buttons and the PCB.

Brass inserts are heated and then put inside the hole made in the design.

Then the silicone sheet under the glass is inserted following the glass and then it is screwed down in cross pattern so that the pressure is equal.

Silicone plays a crucial role in the watch's structural rigidity so make sure to create gaskets with good accuracy.

Power Calculations

WhatsApp Image 2026-06-29 at 19.22.44.jpeg
WhatsApp Image 2026-06-29 at 19.21.44.jpeg

The watch uses 0.9uA or 900nA when sleeping, 3.7mA when awake and uses around 4.5mA when the LEDs are turned on. The watch is awake only for 5 seconds when the button is pressed.

Assuming:

  1. Battery: CR2032 = 220mAh
  2. Sleep current: 0.9 µA (0.0009mA)
  3. Awake current (LEDs on): 4.5mA
  4. Watch is turned on: 20 times per day
  5. Each activation lasts: 5 seconds

Awake consumption per day:

Total awake time per day:

20×5=100 seconds

Convert to hours:

100/3600 = 0.02778 hours

Battery used while awake per day:

4.5 mA×0.02778 h=0.125 mAh/day

Sleep consumption per day:

Sleep time:

24−0.02778=23.9722 hours

Battery used while sleeping:

0.0009 mA×23.9722 h=0.0216 mAh/day

Total daily consumption:

0.125+0.0216=0.1466 mAh/day

Estimated battery life:

220/0.1466​=1500.7 days

Battery Life in Years:

1500.7/365=4.11 years

So if the watch is being used everyday it should last for around 4 years. If the watch is always sleeping then it will last 27.9 years, but the battery discharge will catch up before that.

Ta Da !

FH9EEGFMR0Y983A.jpg
FY29LH3MR0Y9903.jpg

The watch works just as expected and still holds up after a few months of use. Use NATO style strap of 22mm to wear it in your wrist. I will keep improving the CAD design for the watch by making it more durable.

If you guys have any doubts then drop down to the comments and I will surely answer all the queries. Also make sure to share an "I Made It" if you guys did, it will be Legen.. wait for it.. dary!