
This part sits on top of our Grohe shower rail and holds the shower head while I shower. I'm a bit taller than my wife and always had to stoop a little — even with the other holder pushed all the way up. Now everyone has their own holder and all is well! ;)
By the way, the pin on the left of the image is a hook for my wife's soap bag. For a bonus point in married life.
How the holder is built
At its core a clamp that grips over the rail, plus an angled cradle for the shower head — all in a single difference():
- The body is a cylinder of outer diameter
b + 2*a(rail diameter plus twice the wall thickness); the rail itself (b) is cut out of the middle, so the holder clamps onto the shower rail. - Across it sits the arm, into which an angled cone (
cylinder(d1=18, d2=24)) and a large cylinder (d=40) cut the cradle for the shower head; the finalcubecut trims the underside cleanly. - The leading
#on#cylinder(h=14, d=6)highlights the small hook (for the soap bag) in the preview — handy for keeping one detail in view while editing.
// wall thickness
a = 7;
// diameter shower pole
b = 23;
// height shower pole adapter
c = 38;
$fn=80;
translate([-35,0,28])
#cylinder(h=14,d=6);
difference() {
union() {
cylinder(d=b+2*a, h=c);
translate([-c/2-22,0,(b+2*a)/2])
rotate([0,90,0])
cylinder(d=b+2*a, h=c*2-14+22);
}
cylinder(d=b, h=c);
translate([b+2*a,c/2-9,0])
rotate([28,0,0])
cylinder(d1=18,d2=24,h=b+2*a+8);
translate([0,-(b+2*a)/2-1,0])
rotate([0,90,90])
cylinder(d=40, h=b+2*a+2);
translate([-55,-20,20])
rotate([0,-30,0])
cube([40,40,40]);
}
Adapting it
The clamp is the part that adapts: set b to the diameter of your own rail, and a (wall thickness) for more or less clamping force. The cradle itself is shaped for a standard round shower head.


