/* [General] */
// Minimum angle
$fa = 1; //[0:0.01:5]
// Minimum size
$fs = 0.25; //[0:0.01:5]
// Minimum Thickness of any
min_thickness = 3; //[0:0.1:50]
// Tolerance, e. g. additional clearance to add between faces
tol = 0.05; //[0:0.01:1]
// Kerf
kerf = 0.1;
/* [Base] */
// Total height of the mount
height = 30; // .1
// Diameter of the foot/rod
rod_d = 20; // .1
// Diameter of the mount
mount_d = 45; // .1
// Diameter of the ring intersecting all screw hole's centers
screw_ring_d = 37; // .1
// Number of screws for attachment
n_screws = 5;
// Diameter of a screw thread
screw_thread_d = 4; // .1
// Diameter of a screw head
screw_head_d = 7.7; // .1
// Screw Head Elevation
screw_head_z_offset = 7.5; // .1
// Minimum Thickness of mount surrounding rod
rim_thickness = 5; // .1
// Height at which the diameter reduction starts
reduction_z_offset = 10; // .1
// Diameter of chamfering
chamfer_d = 3; // .1
module foot_mount($fa = $fa, $fs = $fs, height = height, d_inner = rod_d,
outer_d = mount_d, rim_thickness = rim_thickness,
n_screws = n_screws, screw_thread_d = screw_thread_d,
screw_head_d = screw_head_d, screw_ring_d = screw_ring_d,
screw_head_elevation = screw_head_z_offset,
reduction_z_offset = reduction_z_offset,
chamfer_d = chamfer_d) {
// Assertions
assert(rod_d + 2 * screw_thread_d < mount_d); // the part ends up as one body
assert(rod_d < mount_d); // the rod is actually sorrounded by the mount
assert(screw_head_d >= screw_thread_d); // the screw head must be at least the
// size of the screw thread
assert(screw_ring_d >=
rod_d + screw_head_d); // screws must not intersect the rod
assert(screw_head_d + screw_ring_d <=
mount_d); // screw heads must not exceed mount_d
assert(chamfer_d <= rim_thickness) // required for the chamfer to be feasible
difference() {
rotate_extrude() {
difference() {
union() {
translate([ d_inner / 2 + kerf, 0 ])
let(width = (outer_d - d_inner) / 2,
chamfer_y_offset = height - chamfer_d / 2) {
square([ width - kerf, height - chamfer_d / 2 ]);
hull() {
translate([ chamfer_d / 2, chamfer_y_offset ])
circle(d = chamfer_d);
translate([ rim_thickness - chamfer_d / 2, chamfer_y_offset ])
circle(d = chamfer_d);
}
}
}
let(x_offset = outer_d / 2,
x_size = outer_d - d_inner - 2 * rim_thickness) {
translate([ outer_d / 2, reduction_z_offset + x_size / 2 ]) {
circle(d = x_size);
translate([ -x_size / 2, 0 ])
square([ x_size, height - reduction_z_offset ]);
}
}
}
}
// screws
for (angle = [0:360 / n_screws:360]) {
rotate([ 0, 0, angle ]) translate([ screw_ring_d / 2, 0 ]) {
cylinder(d = screw_thread_d + 2 * kerf, h = height);
translate([ 0, 0, screw_head_elevation ])
cylinder(d = screw_head_d + 2 * kerf, h = height);
}
}
}
}
module copy_mirror(vec = [ 1, 0, 0 ]) {
children();
mirror(vec) children();
}
module cylinder_hull(d, distance, h) {
hull() {
cylinder(d = d, h = h);
translate([ distance, 0, 0 ]) cylinder(d = d, h = h);
}
}
module linkage_clamp($fs = $fs, $fa = $fa, lower_d = 29, upper_d = 30.5,
plate_thickness = 20, allowed_height = 5,
hole_distance = 150, screw_shim_d = 20,
screw_thread_d = screw_thread_d) {
difference() {
union() {
linear_extrude(height = 20, scale = 0.8, convexity = 100)
translate([ 10, 0 ]) circle(d = 25);
// lower body
translate([ 10, 0, -10 ]) cylinder_hull(d = 25, h = 10, distance = 110);
}
// screw shim cutout
translate([ 30, 0, -10 ])
cylinder_hull(d = screw_shim_d, h = 5, distance = 90);
// screw cutout
translate([ 30, 0, -5 ])
cylinder_hull(d = screw_thread_d, h = 5, distance = 90);
}
}
linkage_clamp();