A pair of torchiere lamps lit the living room for many, many years:
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:
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:
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 …
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:
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:
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:
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;|
|ID = 0;|
|OD = 1;|
|LENGTH = 2;|
|/* [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|
|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 (Shorten > 0)|
|translate([0,0,(ShadeTopDia + 2*SeatDepth)])|