-
Delta Shower Head Holder Extension
The original shower head being too far overhead for Mary’s reach, I installed a Delta ProClean Shower Head which would also be too high. It has a hose, which means I can adjust the height:

Delta shower head holder extension – installed The InterWebs offer several 3D-printable versions of such a thing, but Delta offers many different shower heads, some of which are visually (to my eyes, anyway) indistinguishable from the 75740SN you see here. The model I tried did not fit the holder I have, so I conjured one from the vasty digital deep:

Delta shower head holder extension – solid model It builds standing on that tidy cutoff:

Delta shower head holder extension – PrusaSlicer warning Despite PrusaSlicer’s kvetching about the “collapsing overhang” inside the socket, it came out fine.
The shower head is still slightly too high for her, but now I can print another one with a longer offset and a slightly smaller plug to fit deeper in the OEM socket.
Worst case, there’s a wall-mounted holder to put the shower head at shoulder height.
The OpenSCAD source code as a 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// Delta shower head holder extension // Ed Nisley – KE4ZNU // 2025-05-02 include <BOSL2/std.scad> Layout = "Show"; // [Show,Build,Plug,Socket,Connector] MountAngle = 30; // between OEM and new holder MountOffset = 20.0; /* [Hidden] */ HoleWindage = 0.2; Protrusion = 0.1; NumSides = 3*3*4; ID = 0; OD = 1; LENGTH = 2; Insert = [21.0,24.5,35.0]; // hose connector taper PlugSize = Insert + [-0.3,-0.3,0]; // … for better fit in OEM holder Slot = [Insert[OD],14.6,3*Insert[LENGTH]]; // slot on OEM holder, arbitrary length WallThick = 8.0; // holder wall thickness Radius = 3.0; // shapely rounding $fn=NumSides; //———- // Define Shapes module Plug() { cyl(l=Insert[LENGTH],d1=PlugSize[ID],d2=PlugSize[OD],anchor=BOTTOM); } module Socket() { difference() { tube(l=Insert[LENGTH],id1=Insert[ID],id2=Insert[OD],wall=WallThick,anchor=BOTTOM); cuboid(Slot + [0,1.0,0],anchor=LEFT+CENTER); right(Insert[OD]/2) cube([Insert[OD],Insert[OD] + 2*WallThick,3*Insert[LENGTH]],anchor=LEFT+CENTER); } } module Connector() { difference() { left(MountOffset) cuboid([MountOffset + Insert[LENGTH]*sin(MountAngle),Slot.y,Insert[LENGTH]*cos(MountAngle)], anchor=LEFT+BOTTOM); yrot(MountAngle) right(Insert[ID]/2 + WallThick) cyl(l=Insert[LENGTH],d1=Insert[ID] + 2*WallThick,d2=Insert[OD] + 2*WallThick,anchor=BOTTOM); } } module Adapter() { union() { left(MountOffset) Plug(); yrot(MountAngle) right((Insert[ID] + 2*WallThick)/2) Socket(); Connector(); } } //———- // Build things if (Layout == "Plug") Plug(); if (Layout == "Socket") Socket(); if (Layout == "Connector") Connector(); if (Layout == "Show") Adapter(); if (Layout == "Build") up(Insert[ID]/2 + 1*WallThick + Insert[OD]/2) yrot(90-MountAngle) Adapter();