Cass-E Design

Design, Experiments, Games, Resources

LED Sun Clock

LED Sun Clock

An analog-ish LED sun clock! This design came about from my desire to make more functional glowy objects, and some trepidation towards designing a mechanical clock that is quiet & efficient enough to sit on a wall.

This project uses an ESP8266. It syncs with a local NTP server to keep time on track every 13ish hours, and accounts for Daylight Savings Time automatically! This time, I experimented with edge lighting the acrylic instead of backlighting, which allows for a thinner profile since I don't need as much distance from the wall for the LEDs to diffuse.

24 hour "Timelapse" of the clock. Warning for rapidly spinning Seconds light.

Reading the Clock

Once again, I wanted to play with a different way to read the device than normal clocks. I haven't invented the LED clock here, nor the sun-themed clock, but I had a lot of fun.

Hours - Red
Minutes - Orange
Seconds Marker - Yellow

Following the sun theme, I wanted to use warm colours for the lights. I decided to assign the colours by ascending frequency. Hours, like red, are lowest frequency, and seconds, like yellow, are highest. Supporting this, I made the red arc for hours widest, the orange next widest, and so forth. This also servers a second purpose.

Everything is represented by one set of 40 lights, so markers can overlap. Seconds overlaps Minutes and Hours, and Minutes overlaps Hours. By making Minutes narrower than Hours, and Seconds narrower than Minutes, when they overlap all markers remain visible.

For people who can't see warm colours well, here's a palette swap, which sort of makes it look like a porthole:

Palette Swapped LEDs to Blue/Green. Blue light illustrates my problems photographing this project!

Sun Clock Design

Designing this clock was a lot of fun. I went into this with absolutely no preconceptions of what it should look like, and my original ideas looked significantly different than my end result. My favourite part was designing the display method for the time. My favourite part of the physical end-product though is the gold filament. In my opinion, it makes the design.

The Original Design

The original concept was much bigger, in black, and had two rings of LEDs. One for backlighting, and one to tell the time. I wanted to experiment with some kind of moving part, but I didn't want to use it for timekeeping. The LED ring for the clockface would have been totally exposed, while the backlight played shifting colours (sort of like An Abstract Hug). I purchased LEDs while still designing the clock, which explains why I didn't use more densely packed LEDs with greater resolution. A larger design would have required significantly more of them, running the energy cost up and requiring a larger transformer. I consolidated to one LED ring for a few reasons.

The Final Design

I consolidated to a smaller LED sun clock and only one LED ring for several reasons. It was cheaper, more power efficient, and the original design was pretty ridiculous at 16-17" in diameter. The diffusion panel was a better look for the front, and leaving the back open for backlighting & diffusion saved weight and material. While I've used acrylic once before, I hadn't tried edge-lighting and I was eager to see how it compared. In addition, I would have needed to break the quadrants down even more to print them.

I had to print the outer ring in 4 interlocking quadrants, because the project is much larger than my printer bed. Each quadrant covered nearly the whole print area. Some of my patrons on Patreon, to whom I'm very grateful, got to see a WIP Preview of this project including some print timelapses for a few of the sections.

Didn't-Quite-Works

One aspect of the design which didn't work entirely as I wanted was the backlighting. I had intended for there to be more of it, radiating out from the back of the clock in rays, but for once I overestimated the WS2812b. On many projects I run them at barely 25%, so I tend to assume they're capable of infinite brightness. Sadly they aren't, especially in red.

Preview render with more backlighting
Hopeful preview render with more backlighting.

Another was the readability of the clock! It's readable, it's aesthetically pleasing, and I'm proud of it for being weird, but it's not the kind of instant to-the-minute read you might get from a standard analog clock. At least, not without experience.

Learned for Next Time

  • WS2812b do not have infinite brightness
  • The 1khz interrupt I was using from the RTC to track milliseconds interfered with the LED control signal, resulting in flickering LEDs. As a result, I had to guesstimate milliseconds, which I think has worked okay.
  • Triple check ballpark print durations early in the process to improve scheduling
  • Turning the WiFi back off on the ESP8266 may not be as straightforward as one might hope
  • RTCs may not account for milliseconds; They're great for timestamps, alarms, etc., but not as great for analog clocks.

Bill of Materials

  • Wemos D1 Mini ESP8266
  • DS3231 RTC Pi Breakout
  • 1 MicroUSB Cable (Power/Programming)
  • 40x WS2812b Addressable LEDs
  • roughly 9in2 Acrylic
  • Wire
  • Solder
  • Hot Glue
  • ~240g of PLA Filament

Tools

  • 3D Printer
  • Wire Cutters/Strippers
  • Soldering Iron
  • PlatformIO & C++
  • Sander(s)
Wireless Home Office Doorbell with Feedback

Wireless Home Office Doorbell with Feedback

I built a wireless home office doorbell of sorts with feedback! It gives my father a do-not-disturb indicator for when he's on calls and lets him respond when I ring it without having to mute his microphone. It utilizes ESP-NOW with two ESP8266s.

I styled these after parts of the intercoms in Star Trek: The Original Series for a few reasons. Firstly, my father and I have watched a lot of Star Trek together. Secondly, trek devices had abstract & tactile interfaces which compel me. For example, buttons are coloured & shaped, not labeled. This isn't always practical, but it inspires me to think about the different ways we interact with tech. How can I accomplish this message and this function most efficiently?

Here, 7 LEDs, 4 buttons, 2 microcontrollers, and 1 speaker can tell me when my father's in a call, and when I can bug him about dinner. And I'm hopeful the functionality is pretty intuitive.

I believe the functionality of my device is substantially different from the functionality depicted in the show, and I've made some alterations to the design. Still: I DO NOT OWN STAR TREK, NOR WAS THIS PROJECT AFFILIATED WITH PARAMOUNT IN ANY WAY. Paramount owns the design for their intercoms. If you represent Paramount or an affiliate and you'd like me to remove these images, please contact me.

For more details on this fancy home office feedback doorbell, and more pictures, read on:

Client/Visitor (Doorbell)

The client has one button for "May I come in?" which I call Request.

See above disclaimer about Paramount.

Hub/Occupant (Feedback)

The Hub sits upright on your desk for visibility & easy access. When someone outside hits Request, it plays a notification beep from the MicroSD card, which lets the user change or disable the sound effect.

The hub has 3 buttons, ordered closest to farthest by how often I expect they'll be used.
◻ - Wait
: Most often. The square is for stop or pause
◖ - No: Second most often. A down arrow which points to the Do-Not-Disturb light.
⬤ - Yes: Least often. A circle for Accept!

See above disclaimer about Paramount.

If you hold the 'No' button, it enables Do Not Disturb.

See above disclaimer about Paramount.

To help communicate the function of the inputs, both units show the effects in sync. When Request is pressed, both devices flash blue. When Decline is pressed, both devices flash red. This reinforces the functions with use.

Goals

  • Hub/Occupant can indicate when they're busy
  • Client/Visitor should be able to request entrance unobtrusively
  • Hub/Occupant should be able to respond easily and quietly

Implementation

Painting

I didn't have PLA that matched the light blue, so I took the opportunity to try painting PLA. I used acrylic, and I believe this had mixed results. It works, and it made the devices look wooden rather than plastic, but I was hoping the paint would help smooth things. While I sanded the PLA significantly before and slightly after priming, the paint formed a shell that remains unfortunately fragile. Rather than filling in and smoothing surface imperfections, it exaggerated them. Using a white primer underneath helped a lot in the end.

Microcontrollers & Firmware

This project is powered by two ESP8266 microcontrollers, programmed in C++. I use PlatformIO, but stuck with the Arduino framework. They communicate over ESP-NOW, which was fairly painless to implement once I got over the gotchas. ESP-NOW already includes features like receive-confirmation, so I built a minimal shared communication library with message structures and a few fun features.

The communications library for this project addresses potential interruptions in a few ways. These include state-based rather than event-based updates, a buffer for repeating the last message, and keep-alive messages. Rather than using event-based messages (ie. "button_one pressed") I'm sending the entire device state every update (ie. "button_one: true; button_two: false"). This way updates can be safely skipped, and only the newest message is needed to get back on track. The buffer & message failure tracking makes sure that if the latest update has failed, it'll keep trying until it goes through, even as that buffer is overwritten with newer state information. And the keep-alive messages provide a way of notifying the user if there's no longer anyone listening on the other side even without the user pressing buttons.

LEDs

While I originally planned to use old-fashioned discrete LEDs and transistors, as I developed the project I expanded the number of colours & animations I wanted. Implementing these changes with discrete transistors became overly complex.

Learned for Next Time

  • I didn't include enough depth in the Client/Visitor device for the LEDs to diffuse properly, so the LEDs themselves are quite visible. I'm happy with the final dimensions, but a few more millimeters might have been killer.
  • The ESP8266 (Or at least this D1 Mini breakout) had barely enough GPIO for this project. More advanced projects might need an IO expander or a less bare-bones breakout.
  • ESP-NOW is relatively easy to use if you can work inside the 250 byte packet limit.
  • I should come up with a cooler project name than 'doorbell'
  • My intent was for this to be used within speaking distance, as a less obtrusive method of saying hello. My father's actually deployed the devices much farther apart, so I've had to make a few modifications. This usage has suggested a few unincluded features:
    • Notification sounds at the client/visitor side
    • I've already significantly improved the message loss handling to address the larger distance
    • Possibly an external antenna for greater reliability

Bill of Materials

  • 2x Wemos D1 Mini ESP8266
  • 2 MicroUSB Cables (Power/Programming)
  • 7x WS2812b Addressable LEDs
  • 4x Omron B3F-4155 Buttons
  • Speaker
  • DFRobot DFPlayer
  • MicroSD Card
  • M3 Bolt
  • Wax Paper (Diffuser)
  • Wire
  • Solder
  • Primer
  • Acrylic Paint
  • ~100g of PLA Filament

Tools

  • 3D Printer
  • Wire Cutters/Strippers
  • Soldering Iron
  • PlatformIO & C++

This is the first post in the new Maker category! You can expect more projects in this category in the future.