Fiber-Optic Digital Clock
A DIY digital wall clock that displays the current time as large glowing numerals on a custom LED matrix, synced automatically over WiFi via NTP (no RTC chip needed), with animated rainbow color effects and a 3D-printed enclosure designed in Fusion 360.
The project pairs a physical build with embedded firmware. The enclosure and optics were designed in Fusion 360 and exported as multiple STL parts, a multi-piece assembly meant for 3D printing.
The Challenge
- Physical-to-logical LED addressing — the 256 LEDs are wired as a single serpentine strip, but the display logic thinks in columns/rows, requiring lookup tables to map each coordinate to the correct physical pixel index.
- No RTC hardware — time has to be obtained purely from the network, with a blocking WiFi/NTP bring-up and a second SSID as fallback if the primary network isn't reachable.
- Custom numeral rendering — rather than a standard 7-segment font, digits 0–9 are drawn from a hand-authored 6×8 dot-matrix bitmap table rendered pixel-by-pixel each cycle.
- Burn-in / even wear — the same physical LEDs display the same digit positions constantly, so wear needed to be spread across the panel.
- Seconds indication in a digit-only display — a blinking indicator had to be folded into the same pixel buffer without a dedicated seconds readout.
Key Outcomes
- A fully functional, self-time-syncing RGB clock that requires no manual time setting — it connects to WiFi and NTP on boot and free-runs from there
- A working serpentine-to-grid LED mapping solved via two static offset tables, enabling arbitrary column/row addressing on a single-wire pixel strip
- A resilient WiFi bring-up sequence (primary + backup SSID) so the clock recovers automatically if one network is unavailable
- A visually distinct always-animated rainbow aesthetic layered on top of functional timekeeping
- A complete, printable physical enclosure (multi-part Fusion 360 design) to house the electronics
WiFi Auto-Connect with Fallback
Connects automatically on boot, with a primary/backup SSID pair so the clock recovers if one network is unavailable.
NTP Time Sync, No RTC Needed
Time comes purely from the network — configurable timezone and NTP server, blocking on a valid time callback before the clock starts rendering.
256-Pixel Serpentine LED Matrix
Two lookup tables map each (column, row) coordinate to the correct physical pixel on a single-wire 32×8 WS2812 strip wired in a serpentine run.
Custom 6×8 Dot-Matrix Digit Font
Digits 0–9 are defined as a hand-authored bitmap table and rendered pixel-by-pixel onto the mapped LED grid each cycle.
Rainbow Color-Cycling + Hourly Animation
An HSV-style Wheel() function drives a slowly shifting rainbow across all lit pixels, plus a full rainbow/theater-chase animation triggered on every hour change.
Blinking Seconds Indicator
A two-dot indicator folded into a dedicated slot of the same pixel buffer, toggled once per second.
Anti-Burn-In Column Shift
Nudges the digit rendering position by one column every time the minute changes, cycling through 4 offsets — the same idea as OLED pixel-shifting.
3D-Printed Fusion 360 Enclosure
A complete multi-part physical build (frame, digit panel(s), diffuser, mounting) designed in Fusion 360.