mirror of
https://github.com/nophead/Mendel90.git
synced 2025-01-16 20:38:15 +01:00
244 lines
11 KiB
OpenSCAD
244 lines
11 KiB
OpenSCAD
//
|
|
// Mendel90
|
|
//
|
|
// GNU GPL v2
|
|
// nop.head@gmail.com
|
|
// hydraraptor.blogspot.com
|
|
//
|
|
// Rail supports
|
|
//
|
|
include <conf/config.scad>
|
|
include <positions.scad>
|
|
|
|
nut_trap_meat = 4; // how much plastic above the nut trap
|
|
wall = 3;
|
|
|
|
function bar_clamp_inner_rad(d) = d / 2;
|
|
function bar_clamp_outer_rad(d) = bar_clamp_inner_rad(d) + bar_clamp_band;
|
|
function bar_clamp_stem(d) = bar_clamp_inner_rad(d) + bar_clamp_outer_rad(d) + bar_clamp_tab - 2;
|
|
function bar_clamp_length(d) = bar_clamp_tab + bar_clamp_stem(d) + bar_clamp_tab;
|
|
function bar_rail_offset(d) = bar_clamp_tab + d / 2 + bar_clamp_band;
|
|
|
|
function bar_clamp_switch_y_offset() = 12;
|
|
|
|
function y_switch_x(w) = -w / 2 - bar_clamp_switch_y_offset();
|
|
function y_switch_y(d) = bar_clamp_inner_rad(d) + microswitch_thickness() / 2 + 2;
|
|
function y_switch_z(h) = h + microswitch_button_x_offset();
|
|
|
|
function bar_clamp_switch_x_offset() = y_switch_y(Y_bar_dia);
|
|
function bar_clamp_switch_z_offset() = microswitch_button_x_offset();
|
|
|
|
module bar_clamp_holes(d, yaxis) {
|
|
nut = yaxis ? base_nut : frame_nut;
|
|
nut_offset = (yaxis ? base_nut_traps : frame_nut_traps) ? -bar_clamp_tab / 2 + nut_radius(nut) + 0.5 : 0;
|
|
|
|
for(y = [bar_rail_offset(d) - bar_clamp_length(d) + 0.5 * bar_clamp_tab - nut_offset,
|
|
bar_rail_offset(d) - 0.5 * bar_clamp_tab + nut_offset])
|
|
translate([0, y, 0])
|
|
children();
|
|
}
|
|
|
|
zswitch_tweak = squeeze ? bar_clamp_band - min_wall - No2_pilot_radius - layer_height / 4 : 0;
|
|
|
|
module bar_clamp(d, h, w, switch = false, yaxis = false) {
|
|
stl(str(yaxis ? "y_bar_clamp" : "z_bar_clamp", (switch && yaxis) ? "_switch" : ""));
|
|
nutty = yaxis ? base_nut_traps : frame_nut_traps;
|
|
mount_screw = yaxis ? base_screw : frame_screw;
|
|
nut_depth = nut_trap_depth(screw_nut(mount_screw));
|
|
gap = 1.5;
|
|
inner_rad = bar_clamp_inner_rad(d);
|
|
outer_rad = bar_clamp_outer_rad(d);
|
|
stem = bar_clamp_stem(d);
|
|
length = bar_clamp_length(d);
|
|
rail_offset = bar_rail_offset(d);
|
|
|
|
cavity_l = stem - 2 * wall;
|
|
cavity_h = h - nut_trap_meat - nut_trap_depth;
|
|
cavity_w = max(w - 2 * wall, nut_trap_flat_radius(nut) * 2);
|
|
|
|
sbracket_length = -y_switch_x(w) + 4;
|
|
sbracket_thickness = 7;
|
|
sbracket_height = microswitch_length();
|
|
|
|
tab_height = part_base_thickness + (nutty ? nut_depth : 0);
|
|
|
|
|
|
translate([0, rail_offset, 0]) {
|
|
union() {
|
|
difference() {
|
|
translate([0,-length/2,0]) rotate([90,0,90]) linear_extrude(height = w, center = true, convexity = 6) {
|
|
difference() {
|
|
union() {
|
|
translate([0, tab_height / 2, 0])
|
|
square([length, tab_height], center = true); // base
|
|
translate([0, h / 2, 0])
|
|
square([stem, h], center = true); // stem
|
|
translate([(stem/2 - outer_rad), h, 0])
|
|
circle(r = outer_rad, center = true); // band
|
|
translate([-stem/2 ,h,0])
|
|
square([stem - outer_rad, outer_rad]); // band tab
|
|
|
|
}
|
|
translate([(stem/2 - outer_rad), h, 0])
|
|
poly_circle(r = inner_rad, center = true); // bore
|
|
|
|
translate([-rail_offset, h, 0])
|
|
square([stem, gap]); // gap
|
|
|
|
}
|
|
}
|
|
//
|
|
// plastic saving cavity
|
|
//
|
|
translate([0, -cavity_l / 2 - bar_clamp_tab - wall, cavity_h / 2 - eta])
|
|
cube([cavity_w, cavity_l, cavity_h], center = true);
|
|
//
|
|
// nut trap
|
|
//
|
|
translate([0,-length + 1.5 * bar_clamp_tab,0])
|
|
rotate([0,0,90])
|
|
nut_trap(screw_clearance_radius, nut_radius, h - nut_trap_meat, horizontal = true);
|
|
//
|
|
// mounting holes
|
|
//
|
|
translate([0, -rail_offset, tab_height])
|
|
bar_clamp_holes(d, yaxis)
|
|
rotate([0,0,90])
|
|
if(nutty)
|
|
nut_trap(screw_clearance_radius(mount_screw), nut_radius(screw_nut(mount_screw)), nut_depth, true);
|
|
else
|
|
tearslot( h = 100, r = screw_clearance_radius(frame_screw), center = true, w = 2); // mounting screw
|
|
|
|
if(!yaxis)
|
|
translate([-w / 2 - axis_end_clearance,
|
|
outer_rad + microswitch_thickness() / 2 - rail_offset,
|
|
h - outer_rad + microswitch_first_hole_x_offset() + zswitch_tweak])
|
|
rotate([0, 90, 90])
|
|
microswitch_holes();
|
|
|
|
*translate([0,-50,-1]) cube([100,100,100]); // cross section for debug
|
|
}
|
|
if(switch && yaxis) { // switch bracket
|
|
difference() {
|
|
union() {
|
|
translate([w / 2 -sbracket_length,
|
|
y_switch_y(d) + microswitch_thickness() / 2 - rail_offset,
|
|
y_switch_z(h) - microswitch_button_x_offset() - microswitch_length() / 2])
|
|
cube([sbracket_length, sbracket_thickness, sbracket_height]);
|
|
|
|
translate([w / 2 - sbracket_thickness,
|
|
y_switch_y(d) - microswitch_thickness() / 2 - rail_offset +0.5,
|
|
y_switch_z(h) - microswitch_button_x_offset() - microswitch_length() / 2])
|
|
cube([sbracket_thickness,
|
|
y_switch_y(d) - outer_rad + microswitch_thickness() / 2 + 1,
|
|
h - (y_switch_z(h) - microswitch_button_x_offset() - microswitch_length() / 2)]);
|
|
}
|
|
translate([y_switch_x(w), y_switch_y(d) - rail_offset, y_switch_z(h)])
|
|
mirror([0,1,0]) rotate([0, 90, 90])
|
|
microswitch_holes();
|
|
|
|
if(!nutty)
|
|
translate([0, - 0.5 * bar_clamp_tab - 0.5,0]) // screwdriver access
|
|
rotate([0,0,90])
|
|
teardrop(h = 100, r = 3, center = true, truncate = false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module bar_clamp_assembly(d, h, w, switch = false, yaxis = true) {
|
|
inner_rad = bar_clamp_inner_rad(d);
|
|
outer_rad = bar_clamp_outer_rad(d);
|
|
length = bar_clamp_length(d);
|
|
rail_offset = bar_rail_offset(d);
|
|
|
|
color(clamp_color) render() bar_clamp(d, h, w, switch, yaxis);
|
|
//
|
|
// screw and washer for clamp
|
|
//
|
|
translate([0, rail_offset - length + 1.5 * bar_clamp_tab, h + inner_rad + bar_clamp_band])
|
|
screw_and_washer(cap_screw, screw_longer_than(outer_rad + nut_trap_meat + washer_thickness(washer) + nut_thickness(nut, true)));
|
|
//
|
|
// Captive nut
|
|
//
|
|
translate([0, rail_offset - length + 1.5 * bar_clamp_tab, h - nut_trap_meat])
|
|
rotate([180, 0, 90])
|
|
nut(nut, true);
|
|
//
|
|
// mounting screws and washers
|
|
//
|
|
bar_clamp_holes(d, yaxis)
|
|
translate([0, 0, part_base_thickness])
|
|
rotate([0, 0, 90])
|
|
if(yaxis)
|
|
base_screw(part_base_thickness);
|
|
else
|
|
frame_screw(part_base_thickness);
|
|
//
|
|
// limit switch
|
|
//
|
|
if(switch)
|
|
if(yaxis)
|
|
translate([y_switch_x(w), y_switch_y(d), y_switch_z(h)])
|
|
mirror([0,1,0]) rotate([0, 90, 90]) {
|
|
microswitch();
|
|
microswitch_hole_positions()
|
|
screw_and_washer(No2_screw, 13);
|
|
}
|
|
else
|
|
if(top_limit_switch)
|
|
translate([-w / 2 - limit_switch_offset,
|
|
outer_rad + microswitch_thickness() / 2,
|
|
h - outer_rad + microswitch_first_hole_x_offset() + zswitch_tweak])
|
|
rotate([0, 90, 90]) {
|
|
microswitch();
|
|
microswitch_hole_positions()
|
|
screw_and_washer(No2_screw, 13);
|
|
}
|
|
}
|
|
|
|
|
|
module y_bar_clamp_assembly(d, h, w, switch = false) {
|
|
bar_clamp_assembly(d, h, w, switch, yaxis = true);
|
|
}
|
|
|
|
module z_bar_clamp_assembly(d, h, w, switch = false) {
|
|
bar_clamp_assembly(d, h, w, switch, yaxis = false);
|
|
}
|
|
|
|
//bar_clamp(Z_bar_dia, gantry_setback, bar_clamp_depth, true);
|
|
|
|
module y_bar_clamp_stl() translate([0,0,bar_clamp_depth/2]) rotate([0,90,0]) bar_clamp(Y_bar_dia, Y_bar_height, bar_clamp_depth, false, true);
|
|
module y_bar_clamp_switch_stl() translate([0,0,bar_clamp_depth/2]) rotate([0,90,0]) bar_clamp(Y_bar_dia, Y_bar_height, bar_clamp_depth, true, true);
|
|
|
|
module z_bar_clamp_stl() translate([0,0,bar_clamp_depth/2]) rotate([0,90,0]) bar_clamp(Z_bar_dia, gantry_setback, bar_clamp_depth, false, false);
|
|
module z_bar_clamp_switch_stl() translate([0,0,bar_clamp_depth/2]) rotate([0,90,0]) bar_clamp(Z_bar_dia, gantry_setback, bar_clamp_depth, true, false);
|
|
|
|
module bar_clamps_stl() {
|
|
gap = 3;
|
|
y2 = bar_clamp_length(Z_bar_dia) - bar_clamp_tab + gap;
|
|
y3 = y2 + bar_clamp_length(Y_bar_dia) - bar_clamp_tab + gap;
|
|
|
|
rotate([0, 0, 90]) { rotate([0, 0, 180]) z_bar_clamp_switch_stl();
|
|
translate([gap, -2 * bar_rail_offset(Z_bar_dia) + bar_clamp_length(Z_bar_dia), 0]) z_bar_clamp_stl();
|
|
|
|
translate([-9 - gap, y2, 0]) rotate([0, 0, 180]) y_bar_clamp_switch_stl();
|
|
translate([9 + gap * 2, y2 -2 * bar_rail_offset(Y_bar_dia) + bar_clamp_length(Y_bar_dia), 0]) y_bar_clamp_stl();
|
|
|
|
translate([0, y3, 0]) rotate([0, 0, 180]) y_bar_clamp_stl();
|
|
translate([gap, y3 -2 * bar_rail_offset(Y_bar_dia) + bar_clamp_length(Y_bar_dia), 0]) y_bar_clamp_stl();
|
|
}
|
|
}
|
|
|
|
if(0)
|
|
bar_clamps_stl();
|
|
else {
|
|
z_bar_clamp_assembly(Z_bar_dia, gantry_setback, bar_clamp_depth, true);
|
|
//bar_clamp(Z_bar_dia, gantry_setback, bar_clamp_depth, true, false);
|
|
|
|
translate([30, 0, 0]) y_bar_clamp_assembly(Y_bar_dia, Y_bar_height, bar_clamp_depth, true);
|
|
//translate([30, 0, 0]) bar_clamp(Y_bar_dia, Y_bar_height, bar_clamp_depth, true, true);
|
|
|
|
}
|