My solar metric desk clock works!

Mike Olson
3 min readFeb 2, 2023
I know what time it is!

I’ve been working on this project, off and on, for most of a year, now. I’ve finally got the clock I promised myself!

If you want some background, you can read about my obsession with metric time and how that turned into a fascination with solar time. Once I got my circuitry designed and my software working in the last blog post, I got to work on a solar metric clock that I could keep on my desk.

Designing the case meant choosing a material. I thought about working with wood, but decided I’d prefer a nice black plastic case custom-designed for the three 4-digit, 7-segment LED displays I’d chosen. That meant learning how to use a computer-aided design tool (thank you, Tinkercad!) and finding a 3D printing service that could do the fabrication for me.

I found several such services on the web, but got frustrated with the turn-around time — two days to fab, generally, and then some indeterminate postal delay. Almost without fail, I’d make some tweaks to my design between the time I placed my order and when the package showed up.

That convinced me that I ought to buy my own 3D printer. I got a Prusa i3 MK3S, spent a day or two getting to know it, and have been happily cranking out prototype cases and refining them since. The case you see in the picture was custom-printed using black 1.75mm PLA filament. I think it came out gorgeous!

I’m using NIST NTP over WiFi as the authoritative time service. My DS3231 RTC is accurate to 2ppm, so I need to resync every fifty days given my 100-microday display accuracy (that is, four digits of metric time). I hard-coded both my WiFi credentials and my longitude. I thought about designing some UI that didn’t require that, but it would have complicated the clock enormously for no practical benefit. I’ve exposed both the barrel power jack and the USB port on the Arduino Uno Rev 2 WiFi board, and can update the program over USB if I move or change my WiFi.

The clock’s powered by a 9V 1A DC input. The Arduino Uno board I’m using is a 5V board, but the barrel power input needs to be 7V to 12V, and is rectified to 5V to feed the device via on-board circuitry. If you plug in 5V, the display will light up and the software will run, but you lack the power to drive the on-board WiFi AP, so can’t successfully connect to the network. If you draw power from USB instead, you never discover this discrepancy. That was a day or two of exasperated debugging before I finally read the specs, realized my mistake, and swapped out the 5V supply I’d been using for the 9V one. Then it magically worked!

In the picture, you can see that it’s 11am (bottom display). I show civil time on a 24-hour clock and adjust for DST in the local time zone.

The middle display is the metric equivalent of that time — in this case, 4585 hundred microdays have elapsed so far. Another way to read that: The day is 45.85% elapsed.

The top display shows the metric time corresponding to the current solar time — the location of the sun in the sky, right now, at my house. That’s 4167 hundred microdays, in the picture. I wrote about calculating solar time at length in my Time, Again! blog post (also linked above), so won’t repeat myself here. When I took this picture, the solar time was about 3.2 millidays (3200 microdays) ahead of civil time. That varies over the course of the year.

The black button on top allows me to adjust the display brightness, dimmer or brighter, depending on ambient light.

This project was a lot of fun!



Mike Olson

Berkeley-based techie with an interest in business. Worried about the world.