Geometric Enlightenment

Rhombic-Dodecahedron Infinity-Mirror Lamp

Design & Build Document · Rev G · ~600 mm · 3D-printed frame + two-way mirrors
24 edge bars14 vertex hubs 12 two-way mirrors24 through-dowels WS2812C · ~1080 LEDs~3.9 kg
Assembled lamp

What it is

A faceted, edge-lit infinity lamp shaped like a rhombic dodecahedron: a 24-bar / 14-hub printed truss with twelve two-way acrylic mirror faces. Parallel mirror pairs create the infinity tunnel.

How the glass mounts

Each panel loads from outside onto a printed inner seat; one trimmable dowel threads through each bar and laps both adjacent faces. Push a dowel flush to free one face for service — neighbours stay put.

Electrical

WS2812C addressable strip (198/m, 5 V) down the inner channel — ~1080 pixels in 4 runs, one 5 V PSU with WLED brightness limiting. The dowel retention keeps the LED channel fully clear.

Status

Geometry and every printable part independently CSG-verified (watertight, zero interference, LED channel clear). Ready to print, wire, and glaze.

Contents

Interactive 3D build viewer

Explode the lamp, step through assembly, or watch it auto-assemble — built from the real documented parts.

▶ Launch construction viewer

1. Overview & Status

This document describes a faceted, edge-lit infinity-mirror lamp in the shape of a rhombic dodecahedron (RD). The structure is a “ball-and-stick” frame: 24 printed edge bars (frustums) meet at 14 printed vertex hubs. The 12 rhombic faces are two-way acrylic mirrors; addressable LED strip runs along the inside of the edges, and the parallel mirror pairs of the RD create the infinity-tunnel effect.

Status: The geometry and all mechanical features have been verified with an independent CSG engine (manifold3d): every printable part is a watertight single solid, the joint fits with zero interference, the LED channel is continuous and clear, and the glass is trapped from outside by an inner seat and one through-dowel per bar. Outstanding work is physical: source mirrors, dial in print tolerances with the test coupon, and wire the four LED runs.

Key design decisions: (1) screwed vertex hubs with a radial drop-in tenon so a closed frame can be assembled in any order; (2) glass loaded from OUTSIDE onto an inner seat and locked by ONE trimmable through-dowel per bar (a woodworking dowel-and-hole) that laps both adjacent faces, so the LED channel stays clear, every face glazes the same way (no bezel), and a face is freed by simply pushing its dowels through flush; (3) edge length is the single size driver, with the cross-section thickened to 22×16 mm for stiffness and a robust joint.

2. Bill of Materials

Item

Qty

Notes

Edge bar (frustum)

24

Printed; 228 mm long, 22×16 mm section

4-way (octahedral) hub

6

Printed; 4 mortise arms

3-way (cubic) hub

8

Printed; 3 mortise arms

Glazing dowel

24

Printed/cut; 1 per bar, laps both faces, choice 14

M3 self-tapping screws

48

Joint screws, 2 per bar (self-tap into pilots)

Heat-set inserts (optional)

Only if you want reusable brass threads

Two-way acrylic mirror

12

Rhombi ~374×264 mm (loaded from outside)

WS2812C LED strip

~5.5 m (6 rolls)

SMD2020 198/m, 5 V — 1080 LEDs

5 V power supply

1

5 V/40 A (capped); ~64.8 A full-white

LED controller

1

Addressable (WS2812), 4 data outputs

Hook-up wire / grommet

Power injection + vertex jumpers

Estimated consumables: ~1254 g filament (≈1 spool); ~2.1 kg of 3 mm acrylic. Finished weight ≈ 3.9 kg incl. hardware — size the mount accordingly.

3. Geometry & Mathematics

The rhombic dodecahedron has 12 congruent rhombic faces, 24 equal edges, and 14 vertices: 6 four-valent (octahedral) vertices where obtuse face-corners meet, and 8 three-valent (cubic) vertices where acute corners meet. Each edge joins one 4-way and one 3-way vertex, so all 24 bars are identical (one octahedral end, one cubic end).

3.1 Coordinate frames

Working in a unit where the face planes are 110·x = 2s (s = edge_len/√3): the 6 octahedral vertices sit at ±2s along the axes and the 8 cubic vertices at (±s,±s,±s). A canonical edge bar is built in world coordinates as the intersection of eight half-spaces (outer/inner facet, four radial end planes, two width caps). Two constant matrix tables drive placement: EDGE_M[24] rotates the canonical bar onto each edge; FACE_M[12] places each rhombic mirror. An “edge frame” (X = edge direction, Y = across, Z = outward bisector) is used for all local features (grooves, tenons, seat, dowel).

3.2 Size & scale — the three spans

OpenSCAD is unit-less; 1 unit = 1 mm in the slicer. The model is a true RD, so the edge (vertex-to-vertex) length equals edge_len exactly. Three different “overall sizes” exist — mixing them up is the usual scale confusion:

Span (opposite …)

Formula

At edge_len = 260

4-way vertices

(4/√3)·L = 2.309·L

600.4 mm

3-way vertices

2.000·L

520 mm

Faces (flat-to-flat)

2√(2/3)·L = 1.633·L

424.6 mm

To hit a target size: edge_len = targetVertexSpan × √3/4, or targetFaceSpan ÷ (2√(2/3)). A prior revision mislabeled the face-span formula as the vertex span; that is corrected here. Also note a single bar renders tilted in place, so its axis-aligned bounding box reads ~140 mm even though the bar is 228 mm long — use the print-flat option to measure/print true size.

Physical size & feel: at edge_len 260 the lamp spans ~600 mm (23.6 in) between opposite 4-way vertices and fits within a 600 mm cube; flat-to-flat across faces it is ~425 mm. That is a large statement piece — about a beach-ball footprint, wider than a microwave, roughly knee-to-thigh height on the floor. It weighs ~3.9 kg, so hang it from a proper ceiling anchor.

fig_scale.png

Size comparison: the lamp (~600 mm) beside a 1.75 m adult, a basketball, and a beach ball.

3.3 Mirror sizing

Each rhombic face has a √2:1 diagonal ratio (acute 70.5°, obtuse 109.5°). The two-way mirror tiles are scaled by a fit factor: the outside-insert (dowel) mode uses 0.88 so the glass laps the inner seat (≈ 374 × 264 mm, side 229 mm); the captured-slot mode uses 0.94 (≈ 399 × 282 mm) so the tile tucks ~5 mm into the bar grooves. You will cut/order 12 of these.

4. Mechanical Design

4.1 Edge bar (frustum)

The bar is the original “correct” frustum profile, thickened to a 22 mm × 16 mm section. Thickness is added on the inner side only, so the outer silhouette and the mirror windows are unchanged. The inner face carries a full-length LED channel; each end is a tenon.

fig_bar.png

Edge bar, print-flat: LED channel + retaining features run the full length; reduced tenon at each end.

4.2 Vertex-hub joint

Each bar end is a tenon that drops radially into an open mortise on the hub and is locked by one hidden M3 screw that self-taps into the mortise floor (a heat-set insert is an optional upgrade). Because the bar seats by a radial push (not an axial slide), a closed frame can be assembled in any order and the last bar still goes in — the classic failure of rigid axial sockets is avoided. Hub arms are cut from the same bar solid, so cross-sections match exactly and the assembled edges look continuous.

fig_exploded.png

Exploded 4-way joint: bars seat into the hub mortises; one concealed M3 screw per bar end.

Joint parameter

Value

Purpose

Engagement (eng)

16 mm

Tenon depth in the mortise

Tenon

12 × 8.7 mm

Keys the bar in Y and Z

Mortise floor

7 mm

Takes the M3 screw pilot (or optional insert)

Clearance (j_clear)

0.30 mm/face

Print fit; tune on the coupon

Fastener

M3 self-tapping screw

2 per bar (48 total)

Printability fix: the tenon originally met the body only at a coplanar face (zero overlap), which a slicer treats as a separate body and may not bond. The tenon now overlaps the body by 2 mm so each bar is one watertight solid.

4.3 Hubs

There are two hub types — a 4-way octahedral hub (6 needed) and a 3-way cubic hub (8 needed) — auto-generated from the edge groupings. Each hub also has a wire pass-through cavity linking its arms’ LED channels, and the bottom octahedral hub additionally carries the cable entry.

fig_hub.png

4-way hub: open mortises (screw pilot in each floor), central wire pass-through, cable bore.

5. Optics & Mirror Mounting

Faces are two-way (one-way) acrylic mirror, reflective side facing in. Edge LEDs sit just inside the mirror plane; light reflecting between the RD’s parallel mirror pairs produces the infinity tunnel. Keep brightness moderate and the interior otherwise dark for the deepest effect.

5.1 Glaze from outside: inner seat + through-dowel (default)

Two mounting methods are provided via mirror_mode. The default loads each panel from OUTSIDE onto an inner seat, then locks it with ONE thin dowel threaded through each bar (a woodworking dowel-and-hole) that laps both adjacent faces - this keeps the LED channel clear and treats every face the same. The captured-slot method is retained if you prefer to thread glass in as you build.


Seat + dowel (mirror_mode="dowel")

Captured slot ("slot")

Fit factor

0.88 (laps the inner seat)

0.94 (tucks ~5 mm in)

Install

Build frame, set glass from outside, thread 1 dowel/bar

Thread mirror in as the frame closes

Serviceable

Yes — push a dowel flush, lift the panel

No — must partly disassemble

Retention

Inner seat + one through-dowel/bar

Full groove on all 4 edges

fig_retention.png

Retention: glass loads from outside onto the inner SEAT; ONE dowel threads through the bar tunnel and laps the glass on both faces. The LED channel on the inner face stays clear.

Watch-outs: all retention is on the OUTER side of the bar, so the LED strip runs the full length of every bar uninterrupted. The frame edge hides the LED from straight-on; add diffusion if you see hot spots, and a dab of glue on a dowel tames any panel rattle.

5.2 The last face needs no bezel

Because the dowels are inserted from OUTSIDE, every face - including the one that closes the shell - is glazed exactly the same way: set the glass on the seat, then thread its dowels through from outside. There is no special closing panel and no separate bezel part. Any single face doubles as a service hatch: PUSH its dowels through until flush on the far side and the panel lifts out — the neighbouring mirrors stay put, because a dowel only releases the face on the side it retracts from. (The external-bezel keystone from Rev E has been removed.)

6. Electrical & Wiring

The edge graph has 6 even-degree (4-way) and 8 odd-degree (3-way) vertices. With 8 odd vertices, no single strip can trace all 24 edges without doubling back (an Eulerian path needs ≤2 odd vertices). The minimum is therefore four separate LED runs. The map below assigns every edge to one of four runs; each run starts at a star, which is also where you inject 5 V and feed data.

fig_wiring.png

Four LED runs covering all 24 edges. ★ = power-inject + data-in. Dark dots = 4-way hubs, grey = 3-way.

Runs in this map carry 5, 4, 6, 9 edges respectively (24 total). A strip cannot bend around a 3-D vertex, so each corner within a run is a cut-and-solder jumper routed through the hub pass-through.

6.1 LED strip — WS2812C SMD2020, 198 LEDs/m

Selected strip: DC5V WS2812C SMD2020 8 mm, 198 individually-addressable pixels per metre (ultra-dense), 59.4 W/m, IP20. It is a single-wire type: connect three conductors — V+ (5 V), DA (data), V- (GND). There is no clock and no backup data line, so data flows one way (DIN→DOUT) and a failed pixel halts everything downstream. The 8 mm FPCB drops into the 9 mm LED channel.

Spec

Value

IC / package

WS2812C (built-in IC) / SMD 2020

Density

198 LEDs/m (≈45 per 228 mm edge)

Voltage / power

DC 5 V / 59.4 W per metre

PCB

8 mm white FPCB, IP20

Wires

V+, DA (data, one-way), V-

Working temp

-20 °C … +50 °C

fig_strip.png

Strip wiring (3-wire) and power architecture: fused 5 V bus with injection at most vertices; one data line per run.

Heat: at 59.4 W/m this is a lot of heat for a sealed mirror box — 324 W at full white and ~81 W even at 25 %. Keep average brightness modest, prefer PETG over PLA, and consider small vents at the base; the strip itself is only rated to +50 °C.

6.2 Power budget (this strip)

LED run

Edges

LEDs

Full-white @5 V

Run 1

5

225

13.5 A

Run 2

4

180

10.8 A

Run 3

6

270

16.2 A

Run 4

9

405

24.3 A

TOTAL

24

1080

64.8 A / 324 W

Implications: full white is ~64.8 A (324 W) — you will not run that, but the wiring, PSU and fusing must tolerate the peak you allow; at a typical 25 % cap it is ~16.2 A (81 W). With 198/m the FPCB copper drops voltage quickly, so inject 5 V + GND about every 0.5 m (roughly at most of the 14 vertices), not every 1–1.5 m. Drive one data line per run (4 total).

6.3 Brightness, current & a single-PSU plan

You will run color at moderate brightness, not full white, so real current is far below the 64.8 A peak. Current scales roughly linearly with brightness, and a single solid color draws about one-third of white at the same level (one of three channels lit).

Brightness

White: A / W

Single color: A / W

100%

64.8 A / 324 W

21.6 A / 108 W

75%

48.6 A / 243 W

16.2 A / 81 W

50%

32.4 A / 162 W

10.8 A / 54 W

25%

16.2 A / 81 W

5.4 A / 27 W

10%

6.5 A / 32 W

2.2 A / 11 W

One PSU is fine. Two things make it safe and even: (1) software current-limiting — e.g., WLED's Automatic Brightness Limiter (ABL): enter the PSU's rated mA and it caps global brightness so you physically cannot exceed it; (2) a few power-injection taps off that one PSU's 5 V/GND bus to keep color uniform on the long runs. You do not need a tap at every vertex for color use.

Suggested supply: one 5 V / 40 A (200 W) unit with WLED ABL set to ~36 A. That covers ~50 % white (32 A) and any realistic color scene; for sustained full white, step up to 5 V/70 A or add a second supply.

Power-injection plan (taps off the single PSU bus, sized for ~50 % white):

Run

Edges

LEDs

A @50% white

Feed points

1

6

270

8.1 A

start + 1 mid

2

6

270

8.1 A

start + 1 mid

3

6

270

8.1 A

start + 1 mid

4

6

270

8.1 A

start + 1 mid

So ~8 feed points total (4 run-starts + 4 mid-run taps), all wired back to the one PSU's 5 V/GND bus; the controller drives one data line per run. The four runs are balanced at 6 edges / 270 LEDs each (see the run-list in 6.6). Add taps if you run brighter, drop the mids if you run dimmer.

6.4 Electrical specifications & consumables

Size conductors and protection for the peak you allow. Gauges below assume a capped build (~20–30 A total); for a higher cap go heavier or split the 5 V bus into several feeds.

Conductor

Carries

Peak (capped)

Gauge (AWG)

PSU → 5 V bus

all runs

~20–30 A

10 (8 if uncapped)

Bus → vertex injection

local segment

3–6 A

18

Power jumper at a vertex

downstream LEDs

up to ~6 A

18–20

Data line (DIN→DOUT)

signal

<0.05 A

24–26

Ground returns

match paired feed

same as feed

Consumables: rosin-core solder 0.7–0.8 mm (60/40 leaded is easiest, or SAC305) with a flux pen and a 25–40 W temperature-controlled iron; JST-SM 3-pin connectors for removable strip segments; a screw terminal or XT60 at the PSU with ferrules on stranded wire; an inline fuse on the 5 V trunk at ~80% of PSU rating; a 1000 µF (≥10 V) capacitor across 5 V/GND at the first LED and a 330–470 Ω resistor in series on the data line; a 3.3→5 V level shifter if your controller is 3.3 V; plus assorted heat-shrink, Kapton tape, and zip ties.

Power supply: 5 V. Full-white capability is ~64.8 A (324 W) → a 5 V/70 A unit or two paralleled supplies; most builds cap brightness — at ~30 % (~19 A) a single 5 V/40 A (200 W) supply is comfortable. Common all grounds and fuse the trunk.

6.5 Controller & WLED setup

Use an ESP32 (several data outputs) running WLED. Wire each of the four runs' data-in to its own GPIO and inject 5 V + data at that run's star (see the map). A 3.3->5 V level shifter (e.g., 74AHCT125) on each data line improves reliability; keep data leads short.

WLED setting

Value

Board

ESP32 - 4 outputs, e.g., GPIO 16 / 17 / 18 / 19

LED type / colour order

WS281x / GRB

Busses (outputs)

4 x 270 LEDs (one per run) = 1080 total

LED voltage / mA per LED

5 V / 60 mA (white)

Max current - ABL (mA)

set to the PSU rating, e.g., 36000 (5 V/40 A)

Brightness

cap to taste; ABL enforces the current limit

Why ABL matters: with the current limit set, WLED's Automatic Brightness Limiter scales brightness so the total can never exceed your single PSU - you cannot accidentally over-draw it. Define each bus's GPIO + length, common all grounds (PSU-ESP-strips), add the 1000 uF cap + 330-470 ohm data resistors, and you are set. A ledmap.json can later define true 3-D pixel order; for per-run effects, WLED segments are enough.

6.6 LED run-list (wire by corner label)

Corner labels: 4-way vertices are T(top) Bo(bottom) L(left) R(right) F(front) Bk(back); 3-way corners combine three, e.g. TRBk = top-right-back. Start each run at its inject corner and lay the strip edge-by-edge along the route, soldering a jumper at every corner. All four runs are balanced (6 edges / 270 LEDs each).

Run

LEDs

Inject @

Route (corner to corner)

1

270

BoRF

BoRF - Bo - BoRBk - R - TRF - T - TRBk

2

270

TLF

TLF - T - TLBk - Bk - BoLBk - Bo - BoLF

3

270

BoLBk

BoLBk - L - BoLF - F - TLF - L - TLBk

4

270

BoRBk

BoRBk - Bk - TRBk - R - BoRF - F - TRF

7. Implementation (OpenSCAD)

One file drives everything via a choice switch and a handful of parameters. Print parts are choices 2 (bar ×24), 3 (4-way hub ×6), 4 (3-way hub ×8), 14 (dowel ×24), and 16 (test coupon). Set print_flat=true for true-size, support-light bars and dowels.

Parameter

Default

Meaning

edge_len

260

Edge length → sets overall size (§3.2)

bar_hw / bar_t

11 / 16

Half-width / radial thickness

mirror_mode

"dowel"

Glaze from outside + dowels (§5)

seat_in / eng

16 / 16

Hub stub / joint engagement

j_clear

0.30

Joint clearance per face (tune!)

fastener

"selftap"

Self-tap screws (or "insert" for heat-set)

ins_d / ins_depth

2.6 / 6.0

Hub screw pilot (4.0 if insert)

bar_split

false

Split bars for small beds

7.1 Print settings & orientation

  • Bars print flat on the outer facet, 228 mm long — fits a 250 mm+ bed; brim recommended for the long, slim profile.

  • Hubs are 3-D nodes; arms splay ~54.7° off the vertex axis, so they need supports. Consider SLA/resin for the 14 hubs (small, strong, crisp) and FDM for the bars.

  • Material: PLA is fine mechanically, but the sealed interior + LEDs can approach its ~55 °C softening point at high brightness — PETG is the safer choice.

  • Hardware: by default the M3 screws self-tap straight into the printed pilot holes - no inserts to melt, which keeps assembly simple. If you want reusable brass threads, set fastener="insert" in the SCAD and melt heat-set inserts (a temperature-controlled iron with an insert tip helps).

7.2 Tolerances & fits

Clearances assume a well-calibrated FDM printer. Verify on the test coupon and adjust j_clear globally if your machine runs tight or loose.

Feature

Nominal

Fit / clearance

Note

Tenon in mortise

12 × 8.7 mm

0.30 mm / face

Snug slide; set by j_clear

Bar–hub seam

16 mm from vertex

Butt

Cosmetic seam line

M3 screw clearance

Ø3.4 mm

Free

Through the tenon

Screw counterbore

Ø6.2 × 3.2 mm

Head recess

M3 socket head, inner

Hub screw hole

Ø2.6 self-tap / Ø4.0 insert

thread / melt

Default = self-tap pilot

Dowel in bar tunnel

6 × 2.5 mm

Slide / 0.3

Through-tunnel; friction or glue

Glass on the seat

tile = 0.88 of face

laps seat ~3 mm

From outside; dowel locks it

LED channel

9 × 1.5 mm

Strip 8 mm

Adhesive-backed strip

7.3 Fastener schedule

Item

Spec

Qty

Location

Joint screw (default)

M3 self-tapping, ~12 mm

48

Self-taps into hub pilot Ø2.6

Heat-set insert (optional)

M3 brass (OD ≈4.6)

48

Only for reusable threads; hub hole Ø4.0

Splice screw (optional)

M3, ~12 mm

24

Mid-span if bar_split

Setting

Bars

Hubs

Dowels

Layer height

0.20 mm

0.20 mm

0.20 mm

Walls / perimeters

3–4

4

3

Infill

25%

30–40%

solid

Supports

none (flat)

yes

none

Bed adhesion

brim

skirt

skirt

Orientation

outer facet down

mortises up

base down

8. Design Trade-offs

Decision

Chosen

Alternative / why not

Topology

Edge bars + vertex hubs

Flat face panels print easier but a face is ~399 mm — too big for the bed at 600 mm

Joint

Radial tenon + screw

Axial dovetail can’t assemble a closed frame; glue isn’t serviceable

Glass retention

Inner seat + one through-dowel/bar (from outside)

Inner clips fouled the LED channel; 3 external pegs/bar worked but cluttered the look

Cross-section

22 × 16 mm

18 × 12 mm was too slim; thickness is “free” on the inside

Hubs separate

14 printed hubs

Integral bar-to-bar corners re-introduce the assembly problem

9. Testing & Verification

Because OpenSCAD’s renderer was not available in the authoring environment, the model was re-implemented independently with true CSG (trimesh + manifold3d) and checked numerically. Every result below passed:

Check

Result

Bar / hubs / dowel are watertight single solids

Pass (1 body each)

Bar↔hub interference

0 mm³ (clearance only)

Tenon merged into body (no slicer split)

Pass after 2 mm overlap

LED channel open at both ends

Pass

Dowel tunnel & dowel clear the LED channel

Pass (0 mm³; 6.5 mm gap)

Inner seat under glass / dowel over glass

Pass; glass trapped both ways

Hub wire channels form one connected void

Pass

LED edge graph → minimum runs

4 (8 odd-degree vertices)

9.1 Test coupon — do this first

Choice 16 prints a calibration cluster: one 3-way hub, a short bar stub (with the dowel tunnel), and a dowel. Print it before committing to the full set and verify, adjusting j_clear / dowel fit / mir_fit by 0.1–0.3 mm as needed:

  1. Tenon slides into the mortise with light resistance and seats fully.

  2. M3 self-tapping screw threads into the pilot and pulls the bar tight without stripping.

  3. Dowel slides through the bar tunnel from outside; it laps a glass offcut on both sides and holds it.

  4. LED channel accepts your actual strip width; a glass offcut seats on the shoulder.

10. Assembly Sequence

Plan on a relaxed weekend. Work on a soft, clean surface - the two-way mirror scratches easily. This build glazes from the OUTSIDE (mirror_mode = "dowel"); the detailed glazing procedure is 10.3. Order of operations matters: build the frame, do ALL the wiring and a full power-test while the shell is still open, then glaze.

10.1 Build the frame

  1. Lay out the printed parts: 24 bars (identical), 6 four-way hubs, 8 three-way hubs. The two hub types differ only in arm count - both take the same bar joint.

  2. Seat a bar: drop its tenon into a hub mortise (it goes in with a radial push - no sliding) and drive ONE M3 self-tapping screw from the inner face into the hub pilot. Snug it; don't overtighten plastic threads.

  3. Build out vertex by vertex. Because every bar seats with a radial push, the cage can close in any order and the final bar still drops in.

  4. Check: the frame sits true with no forced joints; each bar has two screws (48 total).

fig_exploded.png

Step 10.1 - each bar's tenon seats into a hub mortise (radial push), locked by one inner screw.

10.2 Electronics - do this BEFORE glazing

  1. Lay the four LED runs per the run-list (6.6): start each run at its inject corner and press the strip into the inner channel along each edge (reflective channel faces the lamp interior).

  2. At every corner, cut the strip and solder a 3-wire jumper (5V / DA / GND) to the next edge, routed through the hub pass-through. Respect data direction (DIN -> DOUT).

  3. Inject 5 V + GND at each run's star and one mid-run tap; common ALL grounds back to the single PSU; fuse the trunk. Add the 1000 uF cap + 330-470 ohm data resistors.

  4. Feed the main cable through the bottom-hub entry and grommet. In WLED: 4 outputs, GRB, and set the current limit (ABL) to your PSU rating.

  5. POWER-TEST every pixel now, while you still have full interior access. Fix any dead or mis-ordered pixels before a single mirror goes in.

fig_wiring.png

Step 10.2 - the four LED runs; start each at its inject corner (star) and feed 5 V there + one mid-run tap.

10.3 Install the mirrors (from outside) & dowel them

How it holds: each bar has an inner SEAT shoulder the glass rests against, and ONE dowel that threads through the bar tunnel and laps the glass's front rim on both adjacent faces. The glass is captured between them - the seat stops it falling inward, the dowel stops it falling outward. All of this sits on the outer half of the bar, clear of the LED.

fig_retention.png

Retention: inner seat (back) + through-dowel (front) trap the glass; reflective side faces in.

Before you start: glaze the faces in any order - each one is independent and done entirely from outside. Keep the protective film on each panel until it is seated, then peel from the edge. Reflective side faces INWARD.

For each of the 12 faces (any order):

  1. From OUTSIDE, set the panel into the face window so its rim rests on the four bars' inner seats; reflective side in.

  2. Thread one dowel through each of the four bars until it laps the glass on both sides; trim the protruding ends nearly flush. A drop of glue makes it permanent.

  3. Confirm there is no rattle; if loose, glue a dowel or add a small foam/silicone dot between glass and bar. Peel the film edge.

  4. Repeat for all 12 faces - the last one is no different from the rest.

10.4 Final glazing check

There is no special closing panel: the 12th face is glazed from outside and doweled exactly like the other eleven. With every face in, walk the frame once and confirm each panel sits flat on its seat with its dowels home and trimmed. To service the interior later, PUSH the dowels of any one face through until flush on the far side and lift that panel out — the other mirrors stay put.

10.5 Mount & first light

  1. Hang or stand the lamp from a reinforced vertex; confirm the mount carries the full ~3.9 kg.

  2. Power on at LOW brightness first, then bring it up while watching the strip temperature; set your scenes in WLED and enjoy the tunnel.

fig_overview2.png

The finished lamp - 24 bars, 14 hubs, 12 two-way mirrors.

11. Risks & Open Items

  • Treat the printed test coupon (choice 16) as the final fit authority before the full run - dial in clearances there first.

  • Mirror sourcing/cutting (12 large rhombi) is the long-lead, higher-cost item; confirm a supplier or jig before printing the frame.

  • Big acrylic panels can bow — thread a dowel through every bar and consider 3 mm acrylic for the largest faces.

  • Thermal: validate at your target brightness; move to PETG if parts warm.

  • If your bed is < 250 mm, set bar_split=true (adds a mid-span splice + 2 screws per bar).

  • Tenon is the smallest cross-section (8.7 mm); print bars flat so layer lines run along the bar — bending then loads across layers favourably instead of peeling them.

  • Two-way acrylic scratches easily and the coating is directional — keep the protective film on until final fit and face the reflective side INWARD.

  • Electronics: common all grounds (PSU–controller–strip); add a ~1000 µF cap at the first LED and a 330–470 Ω resistor in the data line; a 3.3→5 V level shifter improves reliability.

  • Voltage drop: feed a long run (the ~2 m, 9-edge run) with 5 V at both ends, not just the start.

  • Don’t force dowels hard onto acrylic — leave room for thermal movement to avoid stress-cracking.

  • Edge LEDs can read as bright lines; a thin diffuser over the channel softens hotspots.

  • Safety — low voltage but high current: a shorted 5 V / 20 A supply can overheat wiring; fuse the trunk, use adequate gauge, and insulate every joint.

  • Safety — power-test fused and at low brightness first; a two-way mirror plus bright LEDs can dazzle, so diffuse or limit brightness for comfort.

12. Appendix

12.1 Key formulas

  • s = edge_len / √3

  • Outer facet height (bisector): outZ = 4s/√6; inner: inZ = outZ − bar_t

  • Vertex span = 2.309·L · Cubic span = 2.000·L · Face span = 1.633·L

  • Mirror diagonals = (2√2·s, 2·s) × fit; √2:1 ratio (70.5°/109.5°)

12.2 File list

  • rhombic_dodecahedron_infinity_lamp_v5.scad — current model (Rev G): glaze from outside, inner seat + one through-dowel per bar

  • edge_mats.scad — EDGE_M / FACE_M matrices (unchanged)

  • fig_wiring.png, fig_exploded.png, fig_retention.png — diagrams in this document

  • RD_Lamp_Engineering_Drawings.pdf — dimensioned drawing set (bar, joint, hubs, dowel, mirror, glazing)

  • Mirror_Cut_Sheet.pdf + mirrors_12up.dxf / mirror_single.dxf — mirror cut spec for a shop (mm)

  • Assembly_Checklist.pdf — one-page printable build checklist

12.3 Revision history

Rev

Summary

A

Original: dovetail tongues + spherical hub; grooves inset from the ends

B (v2)

Screwed mortise/tenon hubs; full-length LED + mirror grooves; snap clips; hub wire passages

C (v3)

Corrected scale documentation; 22×16 mm section; print-flat orientations

D (v4)

Drop-in mirrors (tabs + clips) by default; test coupon; engineering drawings, mirror cut sheet/DXF, checklist, electrical specs

E (v5)

WS2812C strip integrated (power/heat); brightness table + single-PSU injection plan; size comparison; WLED setup + LED run-list; keystone closing-mirror bezel; clean documented code

F (v5)

Glaze from OUTSIDE: inner seat + external pegs (LED channel kept clear); keystone bezel removed; STL/3MF peg pack; drawings + checklist + doc updated; 3D construction viewer

G (v5)

Retention simplified to ONE through-dowel per bar (woodworking dowel-and-hole) lapping both faces; trimmable, friction/glue; push-through service access; docs/drawings/STL/viewer updated

12.4 Glossary

  • Tenon / mortise — the male tongue on the bar / the open socket in the hub.

  • Seat / dowel — the printed inner shoulder the glass rests on / the trimmable rod threaded through the bar that traps it from outside.

  • Heat-set insert — brass threaded insert melted into plastic to accept a machine screw.

  • Two-way (one-way) mirror — partially reflective acrylic; reflective side faces in.

  • Eulerian path — a single trail covering every edge once; impossible here (8 odd vertices) → 4 runs.

  • Power injection — feeding 5 V at several points along a strip to limit voltage drop.

  • DIN / DOUT — data-in / data-out of an addressable LED; data flows one direction only.

  • Dihedral — angle between adjacent faces (RD = 120°).

  • mir_fit / j_clear — mirror size factor / joint clearance per face.

RD Infinity-Mirror Lamp — Design Document · Page 3