thickness = 2; centre_d = 7; middle_d = 5.5; outer_d = 4; length = 32; $fn = 36; rim = 2; rim_thickness = 2; clearance = 0.1; shaft_radius = 2; shaft_length = 5; groove_width = 1; groove_length = 3; outer_centre = length/2 - outer_d/2; screw_d = 2.4; screw_depth = 1; delta = 0.1; module horn(thickness, length, centre_d, middle_d, outer_d) { cylinder(h=thickness, d=centre_d); translate([-outer_centre, 0, 0]) cylinder(h=thickness, d=outer_d); translate([outer_centre, 0, 0]) cylinder(h=thickness, d=outer_d); linear_extrude(height = thickness) polygon(points=[ [0, -middle_d/2], [-outer_centre, -outer_d/2], [-outer_centre, outer_d/2], [0, middle_d/2], [outer_centre, outer_d/2], [outer_centre, -outer_d/2] ]); } difference() { horn(thickness+rim, length+rim, centre_d+rim, middle_d+rim, outer_d+rim); translate([0, 0, -delta]) horn(thickness+delta, length + clearance, centre_d + clearance, middle_d + clearance, outer_d + clearance); translate([0, 0, thickness-delta]) cylinder(h=screw_depth+delta, d=screw_d); } difference() { translate([0, 0, thickness + rim - delta]) cylinder(h=delta + shaft_length, r = shaft_radius); translate([-shaft_radius*3/2, -groove_width/2, thickness + rim + shaft_length - groove_length]) cube([shaft_radius*3, groove_width, groove_length+delta]); }