// Clamp for a 32 mm diameter handlebar e = 0.1; $fn = 40; t = 2; // wall thickness r = 32/2; // inner clamp radius w = 30; // clamp width m = 3; // bolt diameter module clamp() { module ring() { difference() { cylinder(r=r+t, w); translate([0, 0, -e]) cylinder(r=r, w+e*2); } } module hinge() { k = 4*1.5; translate([-r-t*2.5, 0, k/2]) { j = m+t*2; difference() { hull() { translate([j/2+t/2, j/2, 0]) cylinder(d=m/2, w-k); translate([j/2+t/2, -j/2, 0]) cylinder(d=m/2, w-k); cylinder(d=j, w-k); } cylinder(d=m, w-k+e); // hole for a m3x30 } } } module clamp() { translate([r, 0, 0]) { j = m*3; difference() { union() { cube([m*3, t+1, w]); translate([0, -t-1, 0]) cube([j, t+1, w]); } translate([j/2, t*2, w/2]) rotate(90, [1, 0, 0]) cylinder(d=m, t*5); // hole for a m3x10 } } } module mount() { translate([0, r+t/2, w/2]) hull() { cube([w/2, t, w], center=true); translate([0, 11-t, 0]) cube([w, t, w], center=true); } } ring(); hinge(); clamp(); mount(); } module bottom() { // Bottom half of the clamp for printing j = m; difference() { clamp(); translate([-r+t, -1, -e]) cube([r*3, r*3, w*2]); translate([-r*2, j, -e]) cube([r*3, r*3, w*2]); translate([-r*2, -j-1, w/3]) cube([r*2, r*2, w/3]); } } module top() { // Top half of the clamp for printing j = m; difference() { clamp(); mirror([0, 1, 0]) translate([-r+t, -1, -e]) cube([r*3, r*3, w*2]); mirror([0, 1, 0]) translate([-r*2, j, -e]) cube([r*3, r*3, w*2]); mirror([0, 1, 0]) { translate([-r*2, -j-1, 0]) cube([r*2, r*2, w/3+0.5]); translate([-r*2, -j-1, w*2/3-0.5]) cube([r*2, r*2, w/3+t]); } } } top(); bottom();