-
HQ Sixteen: Improved Fabric Rod Bushings
Descending from the previous bearings / sleeves / bushings, I added a rib to hold them in place as the rod slides back and forth while fiddling with fabric:

HQ Sixteen – Rod Bushing – rib retainer – solid model – build view An idealized serving suggestion:

HQ Sixteen – Rod Bushing – rib retainer – solid model – show view Which might count as the “better design” I expected it would need.
They’re still almost invisible in use:

HQ Sixteen – Rod Bushing – rib retainer Which is as it should be: inconspicuous, no more black dust, and E-Z rotation.
The modified OpenSCAD source code is added to the original GitHub Gist:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// Bushing for HQ Sixteen table rods // Ed Nisley – KE4ZNU // 2026-02-20 // 2026-09-29 add retaining rib include <BOSL2/std.scad> Layout = "Show"; // [Show,Build] /* [Hidden] */ ID = 0; OD = 1; LENGTH = 2; HoleWindage = 0.2; Protrusion = 0.1; NumSides = 8*3*2*4; $fn=NumSides; Rod = [25.0,28.7,100.0]; // very short rod Sleeve = [Rod[OD] + 0.3,31.2 – 0.2,9.0]; // LENGTH = overall Rim = [Sleeve[ID],Sleeve[OD] + 6.0,0.6]; LockRing = [Sleeve[ID],Sleeve[OD] + 2*(1.0),4.0]; // locks sleeve on plate IdlerLength = 15.0; // far right end of rods NumSlots = 2*4; Kerf = 1.0; Gap = 5.0; module Bushing(oal,lk=false) { difference() { union() { tube(oal,id=Sleeve[ID],od=Sleeve[OD],anchor=BOTTOM); tube(Rim[LENGTH],id=Rim[ID],od=Rim[OD],anchor=BOTTOM); if (lk) up(oal) tube(LockRing[LENGTH],id=LockRing[ID],od=LockRing[OD],chamfer=LockRing[LENGTH]/3,anchor=TOP); } for (a=[0:NumSlots-1]) zrot(a*360/NumSlots) up(oal/4 + Rim[LENGTH]) right(Sleeve[ID]/2) cuboid([Sleeve[OD],Kerf,oal],anchor=BOTTOM); } } //—– // Build things if (Layout == "Show") { color("Gray",0.5) xcyl(Rod[LENGTH],d=Rod[OD]); right(Rod[LENGTH]/3) zrot(180) yrot(90) Bushing(Sleeve[LENGTH]); left(Rod[LENGTH]/3) yrot(90) Bushing(IdlerLength,lk=true); } if (Layout == "Build") { right(Rim[OD]/2 + Gap/2) Bushing(Sleeve[LENGTH]); left(Rim[OD]/2 + Gap/2) Bushing(IdlerLength,lk=true); } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// Bearing sleeve for HQ Sixteen table rods // Ed Nisley – KE4ZNU // 2026-02-20 include <BOSL2/std.scad> Layout = "Show"; // [Show,Build] /* [Hidden] */ ID = 0; OD = 1; LENGTH = 2; HoleWindage = 0.2; Protrusion = 0.1; NumSides = 8*3*2*4; $fn=NumSides; Rod = [25.0,28.7,100.0]; // very short rod Sleeve = [Rod[OD] + 0.3,31.2 – 0.2,9.0]; // LENGTH = overall Rim = [Sleeve[ID],Sleeve[OD] + 6.0,0.6]; IdlerLength = 15.0; NumSlots = 2*4; Kerf = 1.0; Gap = 5.0; module Bearing(oal) { difference() { union() { tube(oal,id=Sleeve[ID],od=Sleeve[OD],anchor=BOTTOM); tube(Rim[LENGTH],id=Rim[ID],od=Rim[OD],anchor=BOTTOM); } for (a=[0:NumSlots-1]) zrot(a*360/NumSlots) up(oal/4 + Rim[LENGTH]) right(Sleeve[ID]/2) cuboid([Sleeve[OD],Kerf,oal],anchor=BOTTOM); } } //—– // Build things if (Layout == "Show") { color("Gray",0.5) xcyl(Rod[LENGTH],d=Rod[OD]); right(Rod[LENGTH]/3) yrot(90) Bearing(Sleeve[LENGTH]); left(Rod[LENGTH]/3) yrot(90) Bearing(IdlerLength); } if (Layout == "Build") { right(Rim[OD]/2 + Gap/2) Bearing(Sleeve[LENGTH]); left(Rim[OD]/2 + Gap/2) Bearing(IdlerLength); }