Here comes the sun[light]: An ambient Daylight Clock with time and space controls

6 Nov 2026

I built a Daylight Clock!

Photo of Daylight Clock on wall

This analog clock has a 24-hour period, with midnight at the bottom and noon at the top. The lights around the circumference illuminate the current daylight span, based on the clock’s home latitude and longitude.

I also built a time-and-space control box:

Photo of clock on wall
Photo of Daylight Clock’s control box on wall

What does this controller do?

Based on the relative longitude video, is it possible that this entire project was a way for me to illustrate the time zone grudge I’ve held for years? Not intentionally, but….

The grudge: I grew up in Michigan, on the west edge of the Eastern Time Zone (US); I later moved to the eastern side of that same zone, where the sun rises and sets a full hour earlier. This is distressing in the summer—by rights, the sun ought to set late in the summer!—and borders on criminal in the winter: the sun sets just after 4pm on the solstice. 😱

Envy-driven development (EDD):5 cceckman’s daylight-aware clock

My clock’s provenance is wholly attributable to my friend Charles and his very cool daylight-aware clock. In Charles’s words:

I’ve always lived at middle latitudes of 35-40 degrees. I notice the change in daylight / nighttime hours across the course of a year; in the winter, ending work at a reasonable hour still feels like “working into the night”.



I wanted to have a little passive reminder about how much daylight I am / am not getting. Not one tied to my computer or phone – something more ambient. Naturally, a reminder of the passage of time is… a clock!

Photo of Charles's daylight-aware clock.
Charles Eckman’s Daylight-Aware Clock
Photo credit: Charles Eckman.

When Charles started building his clock I was covetous, and knew I had to build my own.

We made a few different design choices—his time display is digital, mine analog; his daylight illuminates outward from the circumference of the clock, mine inward6—but we both put noon at the top,7 and I used his daylight calculation code wholesale. Also his pair programming assistance to sleuth out a mysterious failure mode!8 9

My clock’s time-space control box was inspired by Charles’s nifty virtual interactive daylight visualization:

Photo of Charles's visualization.
Charles Eckman’s Daylight-Aware Clock simulator visualization
[Source]

Physical design and construction: Clock body

The clock movement is an off-the-shelf 24-hour movement. You can just buy these!10

I designed the body of the clock and the body of the controller box in Cuttle.xyz, and cut the pieces on the laser-cutter at my local library’s free maker space(!).11 I designed the clock to have a circumference of exactly 48 neopixels on an Adafruit neopixel strip, so that the lights would subdivide nicely into the hours of the day.

Vectorized layout of clock housing.

Vectorized layout of clock housing. Cuttle design here.

The outer decoration is from the astronomical face of the astronomical clock of the Zytglogge, in Bern, Switzerland. I digitized a photo of the Zytglogge, then cleaned it up and scaled it properly in Cuttle.

Photo of Zytglogge's astronomical clock with labels.
Astronomical clock from the Zytglogge tower in Bern, Switzerland.
Photo credit Sandstein, Public domain, via Wikimedia Commons.

Painting was…an experience.

Photo of decorated face during painting
Photo of decorated face after painting

I used wood glue to make the press-fit connections permanent.

Photo of clock parts before assembly
Photo of clock parts mid-assembly
Photo of clock parts during gluing
Photo of clock parts after assembly

I painted the clock with acrylic paint, and attached the outer decorated ring with Blu Tack so that I can easily remove it and swap it for a different decoration.

Photo of clock parts with blu tack for outer piece

Physical design and construction: Controller box

I designed the controller box in Cuttle, too.

Vectorized layout of control box. Cuttle design here.

I used wood sealant on the front and acrylic paint on the sides.

Photo of controller box pre-parts

I failed to make the box deep enough to fit the ensuing tangle of wires crammed inside, so it doesn’t sit completely flush against the wall. Ah well, can’t win ’em all.

Photo of controller box assembled and on wall

Hardware design

The Daylight Clock runs off an Adafruit Feather RP2040 microcontroller. The rest of the components are:

Photo of electronics assembly
Photo of electronics assembly
Photo of electronics assembly

The microcontroller and all components live in the control box, except for the neopixels around the clock face, which are connected to the microcontroller via some hand-braided wires and a few connectors.The connectors are so that I can easily change the distance between clock and control box, without doing any additional soldering. The neopixels are powered through the board, which plugs in via standard wall wart.

The new-to-me aspects of this project were the RTC and—less glamorously!—the crimped wire connectors.

Software design

I programmed the Adafruit Feather with CircuitPython, relying heavily on the asyncio library. asyncio allowed me to separate monitoring the state of the input controllers—“has the slider position changed? the toggle toggled? the knob turned?”—from re-computing each neopixel’s resultant color.

I ported the sunrise and sunset calculations from Charles’s Rust implementation of the NOAA solar calculator.

I’ve made the code available here—and standard houseplant programming caveats apply.

Retrospective

This project took a lot of calendar time, and a disproportionate amount of mental space.

Challenges:

Thankfully the result looks really cool, and works as intended, and I love having it on the wall.

Photo of full assembly on wall

I bet you want to make one of your own now, yeah?

Go for it!

To get you started:

Feel free to ask if you are building one and need more guidance at any step; I didn’t want to take the time (heh) to write a full tutorial, but I’m more than happy to assist retroactively.

Also, if you want to make one, but don’t want to deal with quite so many electronics:

Thanks to Charles! Also AF, for build [emotional] support.


Footnotes

  1. Originally I was going to scan in increments of “day”, but after playing with it, “day” felt too short and required too many turns to see a difference, or to have a true understanding of how much time had passed. After experimenting, “week” had the most pleasing connection between turning the knob and seeing a physical shift in daylight.↩︎

  2. Brightness is controlled by the time knob too, when the clock is in “explore time and space” mode:

    The extreme contrast in all of these videos is because I turned the clock to full brightness for drama enhanced visibility, which resulted in some strange color autobalancing. The color in the photos is more representative.↩︎

  3. I’m particularly proud of that bit!↩︎

  4. Because the clock hands are not connected to the electronics, there’s no way for the clock hands to jump to a new time when a change in longitude crosses a time zone! Within a single time zone, however, there’s no need for the clock hands to shift. The longitude toggle therefore sets the relative longitude position within the clock’s default time zone—west, central, east. This makes visible the daylight shift across those different locations for the same time of day.↩︎

  5. EDD follows a grand tradition of other driven developments…↩︎

  6. I actually prefer the outward illumination of his to the inward illumination of mine, but when I started I didn’t know where I was going to hang my clock, or whether there’d be enough space around it on the wall to have a nice effect. The inward illumination makes the result slightly more self-contained.↩︎

  7. It seems like the convention is for standard 24-hour analog clocks to place midnight at the top of the circle rather than at the bottom—but it felt more right to me for “day” to be the top half of this clock: with noon at the top of the clock, it feels like the hour hand tracks the sun’s the progress across the sky. Which, it turns out in hindsight, follows the Astronomical Clock convention! And there are a lot of cool astronomical clocks out there…↩︎

  8. I thought maybe I’d mucked up something in my translation of his Rust to my CircuitPython, but the issue turned out to be due to the specifics of datetime handling in Python vs CircuitPython; I’d gotten the translation correct, but applied CircuitPython’s datetime incorrectly. An easy fix, once we found it. Programming: so fun. 🙄↩︎

  9. The real bug fixes are the friends we make along the way!↩︎

  10. One can also theoretically purchase phase-of-the-moon 28-day movements (!), although I haven’t managed it yet, as I’ve only seen factory-scale batches for sale and I’m not really interested in having 500 of them…↩︎

  11. If you’ve read any of my other project write-ups, you may notice a pattern here…↩︎

  12. The PR2040 doesn’t have Internet or Bluetooth connectivity, so I can’t :just: automatically grab the current time over an external connection. Thus, the RTC.↩︎


I attended the Recurse Center and all I got was this lousy blog footer