Torchiere Lamp Shade

A pair of torchiere lamps lit the living room for many, many years:

Torchiere Lamp Shade - original
Torchiere Lamp Shade – original

During their tenure, they’ve gone from 100 W incandescent bulbs to “100 W equivalent” CFL curlicues to “100 W equivalent” warm-white LED bulbs. The LEDs aren’t up to the brightness of the original incandescents, but you can get used to anything if you do it long enough.

After so many years, the plastic shades / diffusers became brittle:

Torchiere Lamp Shade - original broken
Torchiere Lamp Shade – original broken

That’s after a bump, not a fall to the floor. So it goes.

Some casual searching didn’t turn up any likely replacements. The shade measures 14 inch = 355 mm across the top, far too large for the M2’s platform, but maybe a smaller shade in natural PETG would work just as well.

ACHTUNG! This is obviously inappropriate for the original incandescent bulbs and would be, IMO, marginal with CFL tubes. Works fine with LEDs. Your mileage may vary.

OpenSCAD to the rescue:

Torchiere Lamp Shade - section
Torchiere Lamp Shade – section

That’s a section down the middle. The top is 180 mm across, leaving 20 mm of general caution on the 200 mm width of the platform. The section above the sharply angled base is 90 mm tall to match the actual LED height, thereby putting them out of my line-of-sight even when standing across the room.

I ran off a short version, corrected the angles and sizes for a better fit, tweaked the thickness to fuse three parallel threads into a semitransparent shell, and …

Torchiere Lamp Shade - M2 platform
Torchiere Lamp Shade – M2 platform

Producing what looks like thin flowerpot required just shy of seven hours of print time, as it’s almost entirely perimeter, goin’ down slow for best appearance. The weird gold tone comes from the interaction of camera flash with warm-white CFL can lights over the desk.

If you hadn’t met the original, you’d say the new shade grew there:

Torchiere Lamp Shade - no epoxy
Torchiere Lamp Shade – no epoxy

It’s definitely a Brutalist design, not even attempting to hide its 3D printed origin and glorying in those simple geometric facets.

Those three threads of natural PETG makes a reasonably transparent plate, clear enough that the bulb produced an eye-watering glare through the shade:

Torchiere Lamp Shade - no epoxy - lit
Torchiere Lamp Shade – no epoxy – lit

So I returned it to the Basement Laboratory, chucked it up in the lathe (where it barely clears the bed), dialed the slowest spindle speed (150 rpm according to the laser tach, faster than I’d prefer), and slathered a thin layer of white-tinted XTC-3D around the inside:

Torchiere Lamp Shade - lathe spinning
Torchiere Lamp Shade – lathe spinning

For lack of anything smarter, I mixed 2+ drops of Opaque White with 3.1 g of Part A (resin), added 1.3 g of Part B (Hardener), mixed vigorously, drooled the blob along the middle of the rotating shade, spread it across the width using the mixing stick, smoothed it into a thin layer with a scrap of waxed paper, and ignored it for a few hours.

If the lathe perspective looks a bit weird, it’s perfectly natural: I raised the tailstock end enough to make the lower side of the shade just about horizontal. Given the gooey nature of XTC-3D, it wasn’t going anywhere, but I didn’t want a slingout across the lathe bed.

The lit-up result isn’t photographically different from the previous picture, but in person the epoxy layer produces a much nicer diffused light and no glare.

I might be forced to preemptively replace the other shade, just for symmetry, but we’ll let this one age for a while before jumping to conclusions.

The OpenSCAD source code as a GitHub Gist:

// Torchiere Lamp Shade
// Ed Nisley KE4ZNU - July 2017
/* [Build] */
Section = false;
Shorten = false;
//- Extrusion parameters - must match reality!
/* [Hidden] */
ThreadThick = 0.25;
ThreadWidth = 0.40;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
Protrusion = 0.01;
HoleWindage = 0.2;
//- Dimensions
ID = 0;
OD = 1;
/* [Dimensions] */
ShadeThick = 1.2; // perpendicular thickness
BaseAngle = 42; // lamp base angle wrt vertical
BaseTopDia = 131.0; // lamp ID at top
ShadeBaseThick = 6*ThreadThick; // horizontal bottom thickness
SeatDepth = 10.0 + ShadeBaseThick; // shade bottom to base top
SeatDia = BaseTopDia - 2* SeatDepth / tan(BaseAngle); // lamp ID at seating depth
ShadeTopDia = 180.0; // top OD, limited by printer platform width
ShadeHeight = 90.0; // height above lamp base
ShadeHoleDia = 36.0; // central hole dia
ShadeAngle = atan(ShadeHeight / ((ShadeTopDia - BaseTopDia)/2));
echo(str("Shade angle: ",ShadeAngle));
ShadeHThick = ShadeThick / sin(ShadeAngle);
echo(str(" horiz thickness:",ShadeHThick));
NumSides = 6*4;
$fn = NumSides;
//- Build it
difference() {
union() {
cylinder(d1=SeatDia,d2=BaseTopDia,h=SeatDepth); // section within lamp base
translate([0,0,SeatDepth]) // inside of upper shade
cylinder(d1=BaseTopDia - 2*ShadeHThick,
d2=ShadeTopDia - 2*ShadeHThick,
h=ShadeHeight + Protrusion);
translate([0,0,ShadeBaseThick]) // seating base
cylinder(d1=SeatDia - 2*ShadeHThick,
d2=BaseTopDia - 2*ShadeHThick,
h=SeatDepth - ShadeBaseThick + Protrusion);
translate([0,0,-Protrusion]) // socket clearance
if (Section)
if (Shorten > 0)
translate([0,0,(ShadeTopDia + 2*SeatDepth)])