Word Clock — Build Guide

Everything behind the front panel: layer stack, LED options, controller options, wiring, power and assembly. Applies to both sizes — 90 × 90 cm (cell pitch 42.9 mm) and 50 × 50 cm (cell pitch 23.8 mm) — and to all eight language faces. Ready-made firmware with your exact letter layouts is included (wordclock_firmware.ino).

1 · How it goes together

1 · Front panel3 mm black acrylic / powder-coated aluminium — your laser-cut file 2 · Diffuser2–3 mm opal/milky acrylic (30–50% transmission), bonded to the front 3 · Baffle grid15 × 15 lattice, 10–15 mm deep — stops light bleeding between letters 4 · LED board6 mm MDF/ply drilled at cell centres, pixels pushed in from behind 5 · Back panel + framecloses the stack; controller + PSU mount here
Why the baffle matters. Each of the 225 letters + 4 dots is lit by one LED sitting ~10–15 mm behind the diffuser. Without a lattice separating the cells, light bleeds sideways and neighbouring letters glow. The baffle is the single biggest quality factor in this build. The front panel is bonded to the diffuser (transfer tape or thin double-sided adhesive sheet applied before cutting), applied before cutting. Every letter includes stencil gaps, so all counters stay attached and the face cuts intact.

2 · Bill of materials

Part90 × 90 cm50 × 50 cmNotes
Front panel3 mm black acrylic or 2 mm aluminium, 900×900same, 500×500your laser-cut file, cut through
Diffuser2–3 mm opal acrylic (e.g. WH10-type, ~30% transmission)2 mm opalbonded behind the front
Baffle grid15×15 lattice, cell 42.9 mm, 12–15 mm deepcell 23.8 mm, 10 mm deeplaser-cut cross-slotted strips (black 3 mm MDF/acrylic), 3D-printed sections, or black foamboard
LED carrier6 mm MDF/ply, 12 mm holes at cell centressame, 8–12 mm holesone hole per letter cell + 4 corner dots
LEDs229 pixels total (225 grid + 4 dots)see §3
ControllerESP32 dev board (or Wemos D1 mini)see §4
Level shifter74AHCT125 (or SN74HCT08N)3.3 V → 5 V data
PSU5 V / 10 A5 V / 6 Aquality brand (Mean Well LRS-50/75-5)
Sundries330 Ω resistor, 1000 µF 6.3 V+ capacitor, 18 AWG wire for 5 V rails, JST-SM connectors
Back + frame6 mm MDF back, wooden or aluminium frame, French cleat or keyhole hangers

3 · LED options

Option A — WS2811 pixel strings (recommended)

Strings of 12 mm "bullet" pixels (WS2811, 50 per string — buy 5 strings). Push each pixel into its hole in the LED carrier from behind; the wiring between pixels is already done. This is the classic word-clock approach because no strip pitch matches a 42.9 mm (or 23.8 mm) grid — strings don't care about pitch. IP68 versions run happily for years.

Option B — WS2812B strip, cut per cell

Cut a 60 LED/m strip into single-LED segments and solder 3 wires between every cell — 229 × 3 joints. Cheaper per LED, far more labour. Only worth it if you enjoy soldering.

Option C — SK6812 warm-white strings/strips

RGBW pixels with a true warm-white channel give the most authentic warm glow (the mockup's colour) and better CRI than mixing RGB. If you buy RGBW, set WARM_* handling accordingly (FastLED: use RGBW-capable branch or NeoPixelBus).

Power. Worst-case all-white: 229 × 60 mA ≈ 13.7 A. Real clock states light ≤ ~35 cells (≈ 2 A at full brightness), but the power-on animation or a test pattern can peak far higher — hence the 10 A PSU, thick 5 V feed wires and a second power injection point mid-chain. Set BRIGHTNESS 140 (default) for a comfortable indoor glow that also caps current.

4 · Controller options

OptionWhat you getEffortPick it if…
A · ESP32 + included firmware recommended WiFi + NTP time (auto DST via timezone string), all 8 languages compiled in — choose with one #define. Exact same letter tables as the website. Flash once with Arduino IDE, set WiFi + languageyou want it to just work, forever, with no buttons
B · Wemos D1 mini (ESP8266) + included firmware Same firmware, smaller/cheaper boardsameyou have one in a drawer
C · ESP32 + WLED Polished web UI, effects, Home Assistant / MQTT. But its word-clock usermod ships fixed (mostly German 11×10) layouts — your custom grids won't map without editing the usermod source. Flash WLED, then modify + rebuild the usermodyou already run WLED everywhere and don't mind C++ surgery
D · Multilayout-ESP-Wordclock Open firmware with web config, 35 built-in layouts across 13 languages — German/Swiss layouts exist, but again not your grids; adding one means a source-level layout file. moderateyou want its web configurator and will port a layout
E · Arduino Nano + DS3231 RTC (no WiFi) Fully offline; DS3231 keeps ±2 min/year. No NTP means manual DST changes twice a year (or add two buttons). small sketch changes (drop WiFi block, read RTC)the clock hangs where there is no WiFi
Why A/B are recommended: the included wordclock_firmware.ino was generated from the same verified state tables that drive the website — 144 states per language (288 for French, which is 24-hour aware for MIDI/MINUIT), so the wall clock and the web mockup can never disagree. DST is automatic via the POSIX TZ_STRING.

5 · Wiring

226 227 228 229 LED chain: 225 grid pixels serpentine, then 4 corner dots (TL→TR→BR→BL) start #1 (top-left, →) · end #225 · dots #226–229 5V PSU10 A (90cm) / 6 A (50cm) ESP32 / D1 miniWiFi + NTP time 74AHCT1253.3→5 V level shift 1000 µF capacross 5V at LED #1 LED chain 229 pxdata via 330 Ω resistor Common ground everywhere · second 5 V injection at ~pixel 113

6 · Assembly order

  1. Test the electronics flat on the bench first — flash the firmware, set WiFi + language, confirm the time phrase and dots before anything is glued.
  2. Drill the LED carrier using the face SVG printed at 1:1 as a template (or laser-etch the hole centres).
  3. Insert pixels in serpentine order; label pixel 1. Hot-glue any loose pixels.
  4. Build the baffle lattice onto the carrier; matte-black surfaces inside cells reduce reflections.
  5. Bond the diffuser to the back of the front panel (thin double-sided adhesive sheet or perimeter tape).
  6. Stack: front+diffuser → baffle → LED carrier → back; frame it; fit PSU + controller with strain relief; add ventilation slots near the PSU.
  7. Hang (French cleat for the 90 cm — it's heavy), power up, enjoy.

7 · Rough budget

ItemTypical cost
Front panel + diffuser cut (laser service)£40–120 depending on size/material
5 × WS2811 pixel strings (250 px)£25–45
ESP32 + level shifter + passives£8–15
Mean Well 5 V PSU£15–25
Sheet material (baffle, carrier, back) + frame£25–60
Total≈ £115–265 (prices vary — check current listings)
Companion to the laser-cut files from the web page. Firmware: wordclock_firmware.ino — set LANGUAGE, WIFI_SSID/PASS and TZ_STRING, flash with Arduino IDE (FastLED library required). All letter tables verified against the interactive mockup.