This project is a 3D-printed, word clock that displays the time using a 9×9 letter grid. The entire front enclosure was designed as a single piece that works as the display, LED adapter, light baffle, and diffuser. A TinyPICO microcontroller drives a matrix of APA102C LEDs and sets the time via NTP and WorldTimeAPI. Configuration is handled via an onboard accelerometer to adjust brightness, manually shift time zone, or reset WiFi credentials. The backplate is secured with M2 heat-set inserts and hex socket screws, provides cable strain relief, and mounts for the electronics.
- Microcontroller: TinyPICO
- Accelerometer: Adafruit LIS3DH
- Level Shifter: 74AHCT125
- LEDs: 16x16 APA102C LED matrix on a flexible pcb.
- Protoboard: Amazon Link
- Wires / Connectors: Assorted jumpers or soldered connections. Wago connectors were used in early prototypes but are optional.
- 3D-Printed Front Enclosure: Generated by
.scad
files in this repository and then exported to STL. - 3D-Printed Backplate: Also generated by
.scad
files, with holes sized for M2 heat-set inserts. - Heat Set Inserts: M2x8x2.5 Brass Knurled Inserts
- Screws: M2x8 Hex Socket Head Screws
- 3D Printer (capable of two-color printing or manual filament swaps). I used a Ultimaker UM3.
- Krylon Matte Finish (1311) or similar clear matte spray for surface finishing
- Soldering iron, solder, and basic electronics tools
- Heat gun or soldering iron for heat-set inserts
- Generate SCAD Files:
python3 clock.py
will produce OpenSCAD files for both the front and backplate. - Export to STL: Open each .scad file in OpenSCAD and render/export to .stl.
- Slicing: The print uses three colors. If using a dual-extruder printer, insert a pause command in your slicer after the first few layers to swap from clear to white manually. If using a printer that can print three colors at once, the python code can be modified to produce three separate color pieces for the front.
- Post-Processing: After printing, apply a coat of Krylon Matte Finish (1311) to the clock face. This helps diffuse light more evenly and improves the overall look.
This project was built and uploaded using the Arduino IDE. Make sure you have the necessary ESP32 board definitions installed.
You'll need to install esp32
version 2.0.17
. The 3.x
versions will not work with this code.
Library | Version |
---|---|
Adafruit BusIO | 1.16.1 |
Adafruit LIS3DH | 1.3.0 |
Adafruit Unified Sensor | 1.1.14 |
ArduinoJson | 7.0.4 |
AsyncTCP (by dvarrel) | 1.1.4 |
ESPAsyncTCP (by dvarrel) | 1.2.4 |
ESPAsyncWebServer | 3.1.0 |
FastLED | 3.7.8 |
TinyPICO Helper Library | 1.5.0 |
I don't have a real guide to wiring, here's a photo of one of the clocks internals:
Except as noted here, this project is released under the AGPL-3.0 license.
Exceptions:
- Name Smile Font Copyright © by Chequered Ink FontSpace
- The forked code from ESPConnect is under its GPL license.
- The forked code from NTPClient is under its MIT license