mirror of
https://github.com/nophead/Mendel90.git
synced 2025-08-30 00:10:13 +02:00
Added rounded corners to some parts to make them easier to print.
Filled some gaps in the X ends to make them faster to print. D motor bracket lid now one piece again, as PCB now clears it. Calibration object now includes horizontal nut traps. Add c14n_stl.py to canonicalise the STL files. Corrected PLA sample diameter. Removed feed tube connector, works fine without it. Removed tube jig as not required in the kit. Manual updated with new part renders.
This commit is contained in:
@@ -219,18 +219,26 @@ module atx_brackets_stl() {
|
||||
atx_short_bracket_stl();
|
||||
}
|
||||
|
||||
module atx_brackets_x2_stl() {
|
||||
atx_brackets_stl();
|
||||
translate([-offset * 2 + 8, 2, 0])
|
||||
rotate([0, 0, 180])
|
||||
color("blue") atx_brackets_stl();
|
||||
}
|
||||
|
||||
module atx_brackets_x4_stl() {
|
||||
atx_brackets_x2_stl();
|
||||
translate([0, 41, 0])
|
||||
atx_brackets_x2_stl();
|
||||
squeeze = 2 * (sb_base_width - sb_frame_offset - 1);
|
||||
for(i = [0: 1]) {
|
||||
translate([0, i * 2 * (atx_bracket_width + 2), 0]) {
|
||||
translate([offset, 0, 0])
|
||||
rotate([0, 0, 180])
|
||||
atx_long_bracket_stl();
|
||||
translate([-offset, 2, 0])
|
||||
atx_long_bracket_stl();
|
||||
}
|
||||
translate([sb_corner_offset + sb_frame_width - i * (2 * sb_corner_offset + 2 * sb_frame_width + sb_base_offset + 1 - squeeze) - squeeze / 2,
|
||||
-(atx_bracket_width + 2), 0]) {
|
||||
translate([0, sb_corner_offset - sb_base_width - 2, 0])
|
||||
rotate([0, 0, 180])
|
||||
atx_short_bracket_stl();
|
||||
|
||||
translate([sb_base_offset + 1, -sb_corner_offset - sb_base_width , 0])
|
||||
atx_short_bracket_stl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(1)
|
||||
|
@@ -27,20 +27,36 @@ function bearing_holder_width(bearing) = bearing[1] + wall * 2;
|
||||
|
||||
function bearing_ziptie_radius(bearing) = bearing[1] / 2 + wall + eta;
|
||||
|
||||
module bearing_holder(bearing, bar_height, populate = false) {
|
||||
module bearing_holder(bearing, bar_height, populate = false, rad = 0) {
|
||||
bearing_length = bearing[0];
|
||||
bearing_dia = bearing[1];
|
||||
below = 5 * bearing_dia / 15;
|
||||
height = bar_height + bearing_dia/2 - below;
|
||||
offset = below + height / 2 - bearing_dia / 2;
|
||||
fence = 2.5;
|
||||
fence_width = sqrt(bearing_dia * bearing_dia - 4 * below * below) + eta;
|
||||
width = bearing_holder_width(bearing);
|
||||
length = bearing_holder_length(bearing);
|
||||
fence_offset = bearing_dia / 2 - fence + (fence + 1) /2;
|
||||
union(){
|
||||
difference() {
|
||||
translate([0, 0, -offset]) // Basic shape
|
||||
cube(size = [width, length, height], center = true);
|
||||
translate([0, 0, -offset]) // Basic shape
|
||||
if(rad)
|
||||
hull() {
|
||||
rounded_rectangle([width, length, height], center = true, r = rad);
|
||||
|
||||
translate([-width / 2, length / 2 - 1, -height / 2])
|
||||
cube(1);
|
||||
|
||||
translate([width / 2 - 1, -length / 2, -height / 2])
|
||||
cube(1);
|
||||
|
||||
translate([0, 0, height / 2])
|
||||
cube([width, length, eta], center = true);
|
||||
}
|
||||
else
|
||||
cube(size = [width, length, height], center = true);
|
||||
|
||||
rotate([90,0,0]) {
|
||||
cylinder(h = length + 1, r = bearing_dia / 2, center=true); // Bearing Cutout
|
||||
cylinder(h = length / 2, r = bearing_dia / 2 + relief, center=true);// releave the center so does not rock
|
||||
@@ -49,12 +65,12 @@ module bearing_holder(bearing, bar_height, populate = false) {
|
||||
|
||||
}
|
||||
}
|
||||
translate([0, (length - end_wall)/ 2, -fence_offset]) cube(size = [width,end_wall,fence + 1], center = true); // Blocks at the end to keep the bearing from sliding out
|
||||
translate([0, -(length - end_wall)/ 2, -fence_offset]) cube(size = [width,end_wall,fence + 1], center = true);
|
||||
translate([0, (length - end_wall)/ 2, -fence_offset]) cube(size = [fence_width,end_wall,fence + 1], center = true); // Blocks at the end to keep the bearing from sliding out
|
||||
translate([0, -(length - end_wall)/ 2, -fence_offset]) cube(size = [fence_width,end_wall,fence + 1], center = true);
|
||||
}
|
||||
if(populate)
|
||||
rotate([0,0,90])
|
||||
linear_bearing(bearing);
|
||||
}
|
||||
|
||||
bearing_holder(LM8UU, 20);
|
||||
bearing_holder(LM8UU, 20, rad = 7);
|
||||
|
@@ -14,7 +14,7 @@ module cal_stl() {
|
||||
union() {
|
||||
cube([10,40,5]);
|
||||
cube([40,10,6]);
|
||||
cube([20,20,10]);
|
||||
cube([25,25,10]);
|
||||
translate([10, 10])
|
||||
cylinder(r = 10, h = 15);
|
||||
}
|
||||
@@ -25,9 +25,16 @@ module cal_stl() {
|
||||
rotate([0,0,90])
|
||||
nut_trap(M3_clearance_radius, M3_nut_radius, M3_nut_trap_depth);
|
||||
|
||||
translate([0, 18, 5])
|
||||
rotate([90,0, 90])
|
||||
nut_trap(M3_clearance_radius, M3_nut_radius, M3_nut_trap_depth, true);
|
||||
|
||||
translate([30,5,6])
|
||||
nut_trap(M4_clearance_radius, M4_nut_radius, M4_nut_trap_depth);
|
||||
|
||||
translate([18, 0, 5])
|
||||
rotate([90, 0, 0])
|
||||
nut_trap(M4_clearance_radius, M4_nut_radius, M4_nut_trap_depth, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -94,9 +94,6 @@ module d_motor_bracket_lid_stl(motor = NEMA17, nuts = true) {
|
||||
translate([screw_x, side * screw_y, 0])
|
||||
rotate([0, 0, -side * 360 / 20])
|
||||
poly_cylinder(r = No2_clearance_radius, h = 100, center = true);
|
||||
|
||||
if(pcb && nuts)
|
||||
cube([100, slot_width, 100], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -850,26 +850,10 @@ module frame_assembly(show_gantry = true) {
|
||||
right_stay_x - fixing_block_height() / 2 - sheet_thickness(frame) / 2])
|
||||
explode2([0, 0, -4])
|
||||
translate([side, 0, -sheet_thickness(base)]) {
|
||||
color("silver") render() difference() {
|
||||
translate([0, 0, -tube_height(AL_square_tube) / 2])
|
||||
rotate([90, 0, 0])
|
||||
square_tube(AL_square_tube, base_depth - 2 * AL_tube_inset);
|
||||
|
||||
for(end = [-1,1])
|
||||
translate([0, end * (base_depth / 2 - fixing_block_width() / 2 - base_clearance), -tube_height(AL_square_tube)]) {
|
||||
base_screw_hole();
|
||||
cylinder(r = screw_head_radius(base_screw) + 0.5, h = tube_thickness(AL_square_tube) * 2 + 1, center = true);
|
||||
}
|
||||
}
|
||||
if(show_jigs)
|
||||
translate([0, (base_depth / 2 - AL_tube_inset), -tube_height(AL_square_tube) - tube_jig_base_thicnkess() - eta])
|
||||
if(side > 0)
|
||||
rotate([0, 0, -90])
|
||||
color("lime") render()
|
||||
tube_jig_stl();
|
||||
color("silver") render() base_tube();
|
||||
|
||||
for(end = [-1, 1])
|
||||
translate([0, end * (base_depth / 2 - AL_tube_inset + tube_cap_base_thicnkess() + eta), -tube_height(AL_square_tube) / 2])
|
||||
translate([0, end * (base_depth / 2 - AL_tube_inset + tube_cap_base_thickness() + eta), -tube_height(AL_square_tube) / 2])
|
||||
rotate([90, 0, 90 - 90 * end])
|
||||
explode([0, 0, -20])
|
||||
color("lime") render()
|
||||
@@ -988,6 +972,9 @@ module frame_stays_dxf() {
|
||||
frame_right_dxf();
|
||||
}
|
||||
|
||||
echo("Width: ", base_width, " Depth: ", base_depth, " Height: ", height + sheet_thickness(base));
|
||||
total_height = height + sheet_thickness(base) + (base_nuts ? tube_height(AL_square_tube) : 0);
|
||||
spool_height = total_height - height + spool_z + spool_diameter(spool) / 2;
|
||||
|
||||
echo("Width: ", base_width, " Depth: ", base_depth, " Height: ", total_height, " Spool Height:", spool_height);
|
||||
|
||||
echo("X bar: ", X_bar_length, " Y Bar 1: ", Y_bar_length, " Y Bar 2: ", Y_bar_length2, " Z Bar: ", Z_bar_length);
|
||||
|
@@ -84,3 +84,5 @@ psu_top = psu_z + psu_length(psu) / 2 + (atx_psu(psu) ? 0 : mains_inlet_depth())
|
||||
|
||||
controller_z = (height + psu_top) / 2 - controller_length(controller) / 2;
|
||||
controller_y = (base_depth / 2 + gantry_Y + sheet_thickness(frame)) / 2 - controller_width(controller) / 2;
|
||||
|
||||
spool_z = height - gantry_thickness + spool_diameter(spool) / 2 + 10;
|
||||
|
@@ -153,16 +153,22 @@ module ribbon_clamp_26_44_stl() ribbon_clamp_stl(26, M4_cap_screw);
|
||||
module ribbon_clamp_26_44N_stl() ribbon_clamp_stl(26, M4_cap_screw, nutty = true);
|
||||
|
||||
module ribbon_clamps_stl() {
|
||||
gap = 2;
|
||||
y1 = ribbon_clamp_width(cap_screw) / 2 + ribbon_clamp_width(base_screw) / 2 + gap;
|
||||
y2 = y1 + ribbon_clamp_width(base_screw) / 2 + ribbon_clamp_width(frame_screw) / 2 + gap;
|
||||
y3 = y2 + ribbon_clamp_width(frame_screw) / 2 + ribbon_clamp_width(cap_screw) / 2 + gap;
|
||||
y4 = y3 + ribbon_clamp_width(cap_screw) / 2 + ribbon_clamp_width(M3_cap_screw) / 2 + gap;
|
||||
y5 = y4 + ribbon_clamp_width(M3_cap_screw) / 2 + ribbon_clamp_width(M3_cap_screw) / 2 + gap;
|
||||
rotate([0, 0, 90]) {
|
||||
translate([0,1, 0]) ribbon_clamp_stl(bed_ways, cap_screw, nutty = true);
|
||||
translate([0,13,0]) ribbon_clamp_stl(bed_ways, base_screw, nutty = (cnc_sheets && base_nuts));
|
||||
translate([0,27,0]) ribbon_clamp_stl(x_end_ways, frame_screw, nutty = (cnc_sheets && frame_nuts));
|
||||
translate([0,40,0]) ribbon_clamp_stl(bed_ways, cap_screw);
|
||||
translate([0,51,0]) ribbon_clamp_stl(x_end_ways, M3_cap_screw);
|
||||
translate([0,62,0]) ribbon_clamp_stl(extruder_ways, M3_cap_screw);
|
||||
translate([0,0, 0]) ribbon_clamp_stl(bed_ways, cap_screw, nutty = true);
|
||||
translate([0,y1,0]) ribbon_clamp_stl(bed_ways, base_screw, nutty = (cnc_sheets && base_nuts));
|
||||
translate([0,y2,0]) ribbon_clamp_stl(x_end_ways, frame_screw, nutty = (cnc_sheets && frame_nuts));
|
||||
translate([0,y3,0]) ribbon_clamp_stl(bed_ways, cap_screw);
|
||||
translate([0,y4,0]) ribbon_clamp_stl(x_end_ways, M3_cap_screw);
|
||||
translate([0,y5,0]) ribbon_clamp_stl(extruder_ways, M3_cap_screw);
|
||||
}
|
||||
}
|
||||
if(1) {
|
||||
if(0) {
|
||||
ribbon_clamp_assembly(20, M4_cap_screw, 16, 4, nutty = true);
|
||||
|
||||
translate([0, -15, 0]) ribbon_clamp_assembly(20, frame_screw, frame_screw_length, sheet_thickness(frame), nutty = false);
|
||||
|
@@ -25,7 +25,6 @@ hook_r = 3;
|
||||
left = left_stay_x + sheet_thickness(frame) / 2;
|
||||
right = right_stay_x - sheet_thickness(frame) / 2;
|
||||
spool_x = (left + right) / 2;
|
||||
spool_z = height - gantry_thickness + spool_diameter(spool) / 2 + 10;
|
||||
spool_y = gantry_Y + sheet_thickness(frame) + 10 + spool_height(spool) / 2;
|
||||
|
||||
holes = psu_hole_list(psu);
|
||||
@@ -154,31 +153,6 @@ module dust_filter_stl() {
|
||||
}
|
||||
}
|
||||
|
||||
function feed_tube_connector_width() = 15;
|
||||
|
||||
module feed_tube_connector_stl() {
|
||||
stl("feed_tube_connector");
|
||||
|
||||
feed_tube_wall = 2;
|
||||
|
||||
w = feed_tube_connector_width();
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
translate([0, 0, feed_tube_wall / 2])
|
||||
rounded_rectangle([w, w, feed_tube_wall], r = 3);
|
||||
translate([0, 0, eta])
|
||||
cylinder(r = feed_tube_tape_rad + feed_tube_wall, h = feed_tube_tape + feed_tube_wall);
|
||||
}
|
||||
translate([0, 0, -eta]) {
|
||||
poly_cylinder(r = feed_tube_tape_rad, h = feed_tube_tape);
|
||||
translate([0, 0, feed_tube_tape + layer_height + eta])
|
||||
poly_cylinder(r = feed_tube_rad, h = 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
screw_tab = screw_boss_diameter(frame_screw);
|
||||
tab_thickness = part_base_thickness + ((frame_nut_traps) ? nut_trap_depth(nut) : 0);
|
||||
@@ -414,15 +388,12 @@ module spool_assembly(show_spool = true) {
|
||||
cylinder(r = 40, h = 5);
|
||||
}
|
||||
|
||||
color(plastic_part_color("red")) render()
|
||||
translate([0, 0, -truncated + tube_length / 2])
|
||||
feed_tube_connector_stl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
vitamin("PLA3020: PLA sample 0.3mm ~20m");
|
||||
vitamin("PLA3020: PLA sample 3mm ~20m");
|
||||
|
||||
end("spool_holder_assembly");
|
||||
}
|
||||
@@ -433,41 +404,41 @@ module spool_holder_holes()
|
||||
rotate([0, 90, 0])
|
||||
frame_screw_hole();
|
||||
|
||||
|
||||
//
|
||||
// A pair laid out for building
|
||||
// All four laid out for building
|
||||
//
|
||||
module spool_holder_brackets_stl() {
|
||||
gap = max(wall + 2 * tube_r + feed_clip_thickness + feed_tube_tape_rad + sponge_height / 2 + wall, sheet_thickness(frame) + hook ) + 2;
|
||||
|
||||
spool_bracket_female_stl();
|
||||
|
||||
translate([2 * bracket_width + gap, hook, 0])
|
||||
rotate([0, 0, 180])
|
||||
spool_bracket_female_stl();
|
||||
|
||||
translate([bracket_width + tube_r + wall, -bracket_height +hook + hook_overlap + tube_r + feed_clip_thickness + tube_spacing + 2, 0])
|
||||
rotate([0, 0, -90])
|
||||
dust_filter_stl();
|
||||
|
||||
translate([bracket_width - feed_tube_connector_width() / 2 - frame_bar_width - 2, feed_tube_connector_width(), 0])
|
||||
feed_tube_connector_stl();
|
||||
w = top_tube_y - bottom_tube_y;
|
||||
gap = 2 * tube_r + 2;
|
||||
h = w / 2 + gap / sqrt(2);
|
||||
x = h - top_tube_x;
|
||||
for(i = [0:3]) assign(odd = i % 2)
|
||||
rotate([0, 0, i * 90])
|
||||
translate([x, (odd ? -1 : 1) * (top_tube_y + bottom_tube_y) / 2,0])
|
||||
if(odd)
|
||||
spool_bracket_female_stl();
|
||||
else
|
||||
spool_bracket_male_stl();
|
||||
}
|
||||
|
||||
module spool_holder_tall_brackets_stl() {
|
||||
|
||||
spool_bracket_male_stl();
|
||||
module spool_holder_tall_brackets_x4_stl() {
|
||||
|
||||
translate([2 * bracket_width + 2, hook_overlap + 2, 0])
|
||||
rotate([0, 0, 180])
|
||||
spool_bracket_male_stl();
|
||||
w = top_tube_y - bottom_tube_y;
|
||||
gap = 2 * tube_r + 2;
|
||||
h = w / 2 + gap / sqrt(2);
|
||||
x = h - top_tube_x;
|
||||
for(i = [0:3])
|
||||
rotate([0, 0, i * 90])
|
||||
translate([x, (top_tube_y + bottom_tube_y) / 2,0])
|
||||
spool_bracket_male_stl();
|
||||
|
||||
}
|
||||
|
||||
if(1)
|
||||
if(0)
|
||||
translate([0, 0, - spool_z])
|
||||
spool_assembly();
|
||||
else
|
||||
if(0)
|
||||
spool_holder_tall_brackets_stl();
|
||||
else
|
||||
spool_holder_brackets_stl();
|
||||
spool_holder_brackets_stl();
|
||||
|
@@ -11,31 +11,56 @@ include <conf/config.scad>
|
||||
include <positions.scad>
|
||||
|
||||
wall = 3;
|
||||
clearance = 0.25;
|
||||
boss = washer_diameter(M3_washer) + 1;
|
||||
punch = 3;
|
||||
base_screw_offset = fixing_block_width() / 2 + base_clearance - AL_tube_inset;
|
||||
length = wall + base_screw_offset + 10;
|
||||
width = tube_width(AL_square_tube) + 2 * wall + clearance;
|
||||
|
||||
function tube_cap_base_thicnkess() = 3 * layer_height;
|
||||
function tube_jig_base_thicnkess() = wall;
|
||||
function tube_cap_base_thickness() = 3 * layer_height;
|
||||
function tube_jig_base_thickness() = wall;
|
||||
|
||||
module tube_jig_stl() {
|
||||
module tube_jig(open) {
|
||||
stl("tube_jig");
|
||||
punch = 3;
|
||||
clearance = 0.25;
|
||||
h = tube_height(AL_square_tube);
|
||||
w = tube_width(AL_square_tube);
|
||||
W = w + 2 * wall + clearance;
|
||||
base_screw_offset = fixing_block_width() / 2 + base_clearance - AL_tube_inset;
|
||||
l = wall + base_screw_offset + 10;
|
||||
|
||||
translate([-wall, - W / 2, 0])
|
||||
translate([-wall, - width / 2, 0])
|
||||
difference() {
|
||||
cube([l, W, h + tube_jig_base_thicnkess()]);
|
||||
translate([wall, wall + clearance / 2, tube_jig_base_thicnkess()])
|
||||
cube([l, w + clearance, h + tube_jig_base_thicnkess()]);
|
||||
union() {
|
||||
cube([length, width, h + tube_jig_base_thickness()]);
|
||||
hull()
|
||||
for(side = [-1, 1])
|
||||
translate([length / 2, side * (width + boss) / 2 + width / 2, 0])
|
||||
cylinder(r = boss / 2, h = wall);
|
||||
}
|
||||
translate([open ? -eta : wall, wall + clearance / 2, tube_jig_base_thickness()])
|
||||
cube([length + 1, w + clearance, h + tube_jig_base_thickness()]);
|
||||
|
||||
translate([wall + base_screw_offset, W / 2, -1])
|
||||
translate([wall + base_screw_offset, width / 2, -1])
|
||||
poly_cylinder(r = punch / 2, h = h);
|
||||
|
||||
for(side = [-1, 1])
|
||||
translate([length / 2, side * (width + boss) / 2 + width / 2, 0])
|
||||
poly_cylinder(r = M3_clearance_radius, h = 100, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
module base_tube() {
|
||||
difference() {
|
||||
translate([0, 0, -tube_height(AL_square_tube) / 2])
|
||||
rotate([90, 0, 0])
|
||||
square_tube(AL_square_tube, base_depth - 2 * AL_tube_inset);
|
||||
|
||||
for(end = [-1,1])
|
||||
translate([0, end * (base_depth / 2 - fixing_block_width() / 2 - base_clearance), -tube_height(AL_square_tube)]) {
|
||||
base_screw_hole();
|
||||
cylinder(r = screw_head_radius(base_screw) + 0.5, h = tube_thickness(AL_square_tube) * 2 + 1, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module tube_cap_stl() {
|
||||
stl("tube_cap");
|
||||
w = tube_height(AL_square_tube);
|
||||
@@ -43,7 +68,7 @@ module tube_cap_stl() {
|
||||
t = tube_thickness(AL_square_tube);
|
||||
clearance = 0.3;
|
||||
|
||||
base_thickness = tube_cap_base_thicnkess();
|
||||
base_thickness = tube_cap_base_thickness();
|
||||
|
||||
w_outer = w - 1;
|
||||
h_outer = h - 1;
|
||||
@@ -66,6 +91,48 @@ module tube_cap_stl() {
|
||||
}
|
||||
}
|
||||
|
||||
tube_cap_stl();
|
||||
translate([20, 0, 0])
|
||||
tube_jig_stl();
|
||||
module tube_jig_base() {
|
||||
w = tube_width(AL_square_tube) + 2 * wall + clearance + 2 * boss + 2;
|
||||
|
||||
difference() {
|
||||
sheet(DiBond, base_depth, w, [5,5,5,5]);
|
||||
for(end = [-1,1]) {
|
||||
translate([end * (base_depth / 2 - fixing_block_width() / 2 - base_clearance), 0, 0])
|
||||
cylinder(r = punch / 2, h = 100, center = true);
|
||||
|
||||
for(side = [-1, 1])
|
||||
translate([end * (base_depth / 2 - AL_tube_inset - length / 2 + wall), side * (width / 2 + boss / 2), 0])
|
||||
cylinder(r = M3_clearance_radius, h = 100, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module tube_jig_dxf() projection(cut = true) tube_jig_base();
|
||||
|
||||
module tube_jig_assembly() {
|
||||
translate([0, 0, -tube_height(AL_square_tube) - wall - sheet_thickness(DiBond) / 2])
|
||||
rotate([0, 0, 90])
|
||||
tube_jig_base();
|
||||
|
||||
base_tube();
|
||||
for(end = [-1, 1])
|
||||
translate([0, end * (base_depth / 2 - AL_tube_inset), -tube_height(AL_square_tube) - tube_jig_base_thickness() - eta])
|
||||
rotate([0, 0, -90 * end])
|
||||
color("lime") render()
|
||||
tube_jig(end == -1);
|
||||
|
||||
}
|
||||
|
||||
module tube_jigs_stl() {
|
||||
tube_jig(true);
|
||||
translate([25, 0, 0])
|
||||
tube_jig(false);
|
||||
}
|
||||
|
||||
if(0)
|
||||
tube_jig_dxf();
|
||||
else
|
||||
if(1)
|
||||
tube_jig_assembly();
|
||||
else
|
||||
tube_jigs_stl();
|
||||
|
@@ -7,33 +7,51 @@
|
||||
// For making heat shields to prevent corner warping, see http://hydraraptor.blogspot.co.uk/2010/09/some-corners-like-it-hot.html
|
||||
//
|
||||
shield_thickness = 1;
|
||||
shield_base_thickness = 4;
|
||||
shield_base_height = 5;
|
||||
shield_base_thickness = 5;
|
||||
shield_base_height = 3;
|
||||
shield_clearance = 1;
|
||||
|
||||
module L(w,h,t) {
|
||||
translate([-t,-t,0])
|
||||
difference() {
|
||||
cube([w,w,h]);
|
||||
translate([t,t,-1]) cube([w,w,h+2]);
|
||||
}
|
||||
module shield_corner(w, h, r) {
|
||||
linear_extrude(height = h, convexity = 5)
|
||||
hull() {
|
||||
intersection() {
|
||||
translate([r, r])
|
||||
circle(r);
|
||||
square([r + 1,r + 1]);
|
||||
}
|
||||
|
||||
translate([w - 1, 0])
|
||||
square([1, w]);
|
||||
|
||||
translate([0, w - 1])
|
||||
square([w, 1]);
|
||||
}
|
||||
}
|
||||
|
||||
module corner_shield(w,h) {
|
||||
color([0,1,0])union() translate([-shield_clearance, -shield_clearance, 0]) {
|
||||
L(w,h,shield_thickness);
|
||||
L(w + shield_base_thickness - shield_thickness, shield_base_height, shield_base_thickness);
|
||||
}
|
||||
module L(w, h, t, r) {
|
||||
translate([-t, -t, 0])
|
||||
difference() {
|
||||
shield_corner(w, h, r + t);
|
||||
translate([t, t, -1]) shield_corner(w, h + 2, r);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
module corner_shield(w, h, r) {
|
||||
color([0,1,0])union() translate([-shield_clearance, -shield_clearance, 0]) {
|
||||
L(w, h, shield_thickness, r + shield_clearance);
|
||||
L(w + shield_base_thickness - shield_thickness, shield_base_height, shield_base_thickness, r + shield_clearance);
|
||||
}
|
||||
}
|
||||
|
||||
module side_shield(w,h) {
|
||||
translate([-w/2, -shield_thickness, 0])
|
||||
color([0,1,0]) union() {
|
||||
cube([w, shield_thickness, h]);
|
||||
translate([0,shield_thickness - shield_base_thickness, 0])
|
||||
cube([w, shield_base_thickness, shield_base_height]);
|
||||
}
|
||||
translate([-w/2, -shield_thickness, 0])
|
||||
color([0,1,0]) union() {
|
||||
cube([w, shield_thickness, h]);
|
||||
translate([0,shield_thickness - shield_base_thickness, 0])
|
||||
cube([w, shield_base_thickness, shield_base_height]);
|
||||
}
|
||||
}
|
||||
|
||||
//corner_sheild(20, 15);
|
||||
|
||||
//corner_shield(20, 15, 7);
|
||||
|
@@ -125,12 +125,10 @@ module wades_block_stl() {
|
||||
teardrop(r = extension_rad, h = extension + 1, center = true);
|
||||
}
|
||||
}
|
||||
*translate([92,base_thickness + 1,-1])
|
||||
rotate([0,0,45])
|
||||
cube([10,9,30]); // chamfer on fillet
|
||||
|
||||
translate([-11,-1,30]) rotate([0,60,0]) cube([30, base_thickness + 2, 60]); // slope on base
|
||||
|
||||
|
||||
translate([filament_x, 20, filament_z])
|
||||
rotate([90,0,0])
|
||||
teardrop(h = 70, r=4/2, center=true); // filament
|
||||
@@ -179,7 +177,18 @@ module wades_block_stl() {
|
||||
translate([motor_x - 40 + motor_leeway / 2 + 6, motor_y, -1])
|
||||
cube([40, 32, 7]);
|
||||
|
||||
translate([-5,-1,-1]) cube([16,60,30]); // truncates tail
|
||||
translate([-1,-1,-1]) cube([12,60,30]); // truncates tail
|
||||
|
||||
translate([11, 0, -1])
|
||||
fillet(4, 30);
|
||||
|
||||
translate([11, motor_y - NEMA_big_hole(NEMA17), -1])
|
||||
rotate([0, 0, -90])
|
||||
fillet(4, 30);
|
||||
|
||||
translate([motor_x + motor_leeway / 2 + 6, height, -1])
|
||||
rotate([0, 0, -90])
|
||||
fillet(4, 30);
|
||||
|
||||
//
|
||||
// hole for hobbed bolt
|
||||
@@ -196,7 +205,7 @@ module wades_block_stl() {
|
||||
//
|
||||
translate([driven_x, driven_y, width - 7]) b608(8); // top bearing socket
|
||||
translate([filament_x + 8, driven_y, filament_z - 4]) b608(8); // clearance for idler
|
||||
translate([driven_x, driven_y, -1]) b608(8); // bottom bearing socket
|
||||
translate([driven_x, driven_y, -1 + eta]) b608(8); // bottom bearing socket
|
||||
|
||||
//
|
||||
// Hole for hot end
|
||||
@@ -274,9 +283,14 @@ module wades_big_gear_stl() {
|
||||
|
||||
module wades_small_gear_stl() {
|
||||
stl("wades_small_gear");
|
||||
color(wades_small_gear_color)
|
||||
color(wades_small_gear_color) difference() {
|
||||
translate([-10, -10, 0])
|
||||
import("../imported_stls/wades_gear.stl");
|
||||
import("../imported_stls/wades_gear.stl", convexity = 10);
|
||||
translate([0, 0, 4])
|
||||
rotate([90, 0, -24 + 180])
|
||||
teardrop_plus(r = M3_clearance_radius, h = 100);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
module small_gear_assembly() {
|
||||
|
@@ -105,6 +105,7 @@ idler_back = idler_front + idler_depth;
|
||||
idler_width = ceil(2 * (M4_nut_radius + wall));
|
||||
|
||||
mbracket_thickness = 4;
|
||||
mbracket_corner = 7;
|
||||
motor_angle = 45;
|
||||
motor_w = ceil(min(max(sin(motor_angle) + cos(motor_angle)) * NEMA_width(X_motor), NEMA_radius(X_motor) * 2) + 1);
|
||||
mbracket_width = motor_w + 2 * mbracket_thickness;
|
||||
@@ -137,11 +138,12 @@ ribbon_nut_trap_depth = nut_trap_depth(ribbon_nut);
|
||||
ribbon_pillar_depth = 12;
|
||||
ribbon_pillar_thickness = wall + ribbon_nut_trap_depth;
|
||||
ribbon_clamp_x = back - ribbon_pillar_depth;
|
||||
ribbon_clamp_y = mbracket_front + washer_diameter(screw_washer(ribbon_screw)) / 2 + 2;
|
||||
//ribbon_clamp_z = x_carriage_offset() + extruder_connector_height();
|
||||
ribbon_clamp_y = mbracket_front + washer_diameter(screw_washer(ribbon_screw)) / 2 + mbracket_corner + eta;
|
||||
ribbon_clamp_z = mbracket_height + ribbon_clamp_length(extruder_ways, ribbon_screw) / 2 - thickness / 2 + 0.5;
|
||||
ribbon_pillar_width = nut_radius(ribbon_nut) * 2 + 2 * wall + 0.5;
|
||||
ribbon_pillar_top = ribbon_clamp_z + ribbon_clamp_length(extruder_ways, ribbon_screw) / 2;
|
||||
mbracket_rim_width = max(ribbon_pillar_depth + eta, 15 * NEMA_width(X_motor) / NEMA_width(NEMA17));
|
||||
mbracket_rim_inner_rad = 5;
|
||||
|
||||
function anti_backlash_height() = 24 + thickness / 2;
|
||||
anti_backlash_radius = Z_nut_radius + 0.2;
|
||||
@@ -171,9 +173,15 @@ module x_end_bracket(motor_end, assembly = false){
|
||||
//
|
||||
// Anti-backlash nut holder
|
||||
//
|
||||
translate([-z_bar_offset(), 0, thickness / 2 - eta])
|
||||
cylinder(r = anti_backlash_radius + anti_backlash_wall, h = anti_backlash_height() - thickness / 2, $fn = 6);
|
||||
translate([-z_bar_offset(), 0, thickness / 2 - eta]) union() {
|
||||
cylinder(r = anti_backlash_radius + anti_backlash_wall, h = anti_backlash_height() - thickness / 2 - eta, $fn = 6);
|
||||
translate([0, -(bearing_width - 2 * wall + 1) / 2, 0])
|
||||
cube([z_bar_offset() - bearing_depth + eta, bearing_width - 2 * wall + 1, anti_backlash_height() - thickness / 2]);
|
||||
if(motor_end)
|
||||
translate([back + z_bar_offset(), -(bearing_width - 2 * wall + 1) / 2, 0])
|
||||
cube([-back - z_bar_offset(), bearing_width - 2 * wall + 1, mbracket_height - thickness - eta]);
|
||||
|
||||
}
|
||||
//
|
||||
// Webs from bearing holder
|
||||
//
|
||||
@@ -293,17 +301,26 @@ module x_end_bracket(motor_end, assembly = false){
|
||||
union() {
|
||||
translate([back - mbracket_width / 2 + eta, mbracket_centre, mbracket_height / 2 - thickness / 2]) {
|
||||
difference() {
|
||||
cube([mbracket_width, mbracket_depth, mbracket_height], center = true); // outside
|
||||
rounded_rectangle([mbracket_width, mbracket_depth, mbracket_height], center = true, r = mbracket_corner); // outside
|
||||
translate([0, 0, -mbracket_thickness])
|
||||
difference() {
|
||||
cube([mbracket_width - 2 * mbracket_thickness, // inside
|
||||
mbracket_depth - 2 * mbracket_thickness, mbracket_height], center = true);
|
||||
if(!assembly)
|
||||
cube([mbracket_width - 30 + 4 * filament_width, // support tube
|
||||
mbracket_depth - 30 + 4 * filament_width, mbracket_height + 1], center = true);
|
||||
|
||||
if(!assembly) union() {
|
||||
rounded_rectangle([mbracket_width - 2 * mbracket_rim_width + 4 * filament_width, // support tube
|
||||
mbracket_depth - 2 * mbracket_rim_width + 4 * filament_width, mbracket_height + 1],
|
||||
r = mbracket_rim_inner_rad + 2 * filament_width);
|
||||
|
||||
translate([0, 0, - mbracket_height / 2 + mbracket_thickness + layer_height])
|
||||
rounded_rectangle([mbracket_width - 2 * mbracket_rim_width + 8 * filament_width, // support base
|
||||
mbracket_depth - 2 * mbracket_rim_width + 8 * filament_width,
|
||||
layer_height * 2], r = mbracket_rim_inner_rad + 4 * filament_width);
|
||||
}
|
||||
}
|
||||
translate([0, 0, (mbracket_height - mbracket_thickness) / 2 + layer_height])
|
||||
cube([mbracket_width - 30, mbracket_depth - 30, true ? 100: mbracket_thickness], center = true); // open top
|
||||
rounded_rectangle([mbracket_width - 2 * mbracket_rim_width,
|
||||
mbracket_depth - 2 * mbracket_rim_width, 100], r = mbracket_rim_inner_rad); // open top
|
||||
|
||||
}
|
||||
//
|
||||
@@ -311,7 +328,7 @@ module x_end_bracket(motor_end, assembly = false){
|
||||
//
|
||||
translate([-mbracket_width / 2 + mbracket_thickness - eta, 0, -mbracket_height / 2])
|
||||
rotate([90, 0, 0])
|
||||
right_triangle(width = 4, height = 4, h = mbracket_depth - eta, center = true);
|
||||
right_triangle(width = 4, height = 4, h = mbracket_depth - mbracket_thickness, center = true);
|
||||
}
|
||||
//
|
||||
// ribbon clamp pillar
|
||||
@@ -381,11 +398,8 @@ module x_end_bracket(motor_end, assembly = false){
|
||||
for(z = NEMA_holes(X_motor))
|
||||
rotate([0, motor_angle, 0])
|
||||
translate([x,0,z])
|
||||
rotate([90, -motor_angle, 0]) {
|
||||
rotate([90, -motor_angle, 0])
|
||||
teardrop_plus(r = M3_clearance_radius, h = 2 * mbracket_thickness + 1, center = true);
|
||||
translate([0, 0, mbracket_thickness])
|
||||
teardrop_plus(r = (washer_diameter(M3_washer) + 1) / 2, h = 2 * (mbracket_thickness - 3.999), center = true);
|
||||
}
|
||||
}
|
||||
//
|
||||
// ribbon clamp holes
|
||||
@@ -558,7 +572,7 @@ module x_motor_bracket_stl() {
|
||||
translate([0, 0, thickness / 2]) mirror ([1,0,0]) x_end_bracket(true);
|
||||
for(side = [-1, 1])
|
||||
translate([-back + mbracket_width, mbracket_centre + side * mbracket_depth / 2, 0])
|
||||
rotate([0, 0, 135 + side * 45]) corner_shield(20, 20);
|
||||
rotate([0, 0, 135 + side * 45]) corner_shield(20, mbracket_height - 1 - 2 * eta, mbracket_corner);
|
||||
}
|
||||
|
||||
module x_idler_bracket_stl()
|
||||
@@ -567,10 +581,30 @@ module x_idler_bracket_stl()
|
||||
|
||||
module x_ends_stl() {
|
||||
x_motor_bracket_stl();
|
||||
translate([-4, bearing_width / 2, 0])
|
||||
translate([-5, bearing_width / 2, 0])
|
||||
x_idler_bracket_stl();
|
||||
}
|
||||
|
||||
module x_motor_bracket_x2_stl() {
|
||||
translate([back - mbracket_width / 2 - 1, -mbracket_centre + mbracket_depth / 2 + 1, thickness / 2]) mirror ([1,0,0]) x_end_bracket(true);
|
||||
translate([mbracket_width / 2 - 1, mbracket_depth + 1, 0])
|
||||
rotate([0, 0, 180])
|
||||
corner_shield(20, mbracket_height - 1 - 2 * eta, mbracket_corner);
|
||||
|
||||
translate([mbracket_width / 2 - back, mbracket_centre - mbracket_depth / 2 - 1, thickness / 2]) rotate([0, 0, 180]) mirror ([1,0,0]) x_end_bracket(true);
|
||||
translate([-mbracket_width / 2, -mbracket_depth - 1, 0])
|
||||
corner_shield(20, mbracket_height - 1 - 2 * eta, mbracket_corner);
|
||||
|
||||
}
|
||||
|
||||
module x_idler_bracket_x2_stl() {
|
||||
for(a = [0, 180])
|
||||
rotate([0, 0, a])
|
||||
translate([-x_idler_offset() + 1, 0, 0])
|
||||
x_idler_bracket_stl();
|
||||
}
|
||||
|
||||
|
||||
if(0)
|
||||
x_ends_stl();
|
||||
else
|
||||
|
@@ -17,7 +17,7 @@ nutty = cnc_sheets;
|
||||
slot = nutty ? 0 : 2;
|
||||
tab_length = bearing_clamp_tab + slot;
|
||||
|
||||
function bearing_mount_width(bearing) = bearing_holder_width(bearing) + 2 * tab_length;
|
||||
function bearing_mount_width(bearing) = bearing_holder_width(bearing) + 2 * tab_length;
|
||||
function bearing_mount_length(bearing) = bearing_holder_length(bearing);
|
||||
|
||||
module tab() {
|
||||
@@ -46,30 +46,34 @@ module bearing_mount(bearing, height) {
|
||||
|
||||
endstop_w = bar_clamp_switch_x_offset() + microswitch_thickness() / 2 - bearing_holder_width(bearing) / 2;
|
||||
endstop_d = 3;
|
||||
endstop_h = 3; //height - bar_clamp_switch_z_offset() + microswitch_thickness() / 4;
|
||||
endstop_h = 3;
|
||||
endstop_inset = bearing_holder_width(bearing) / 2 - bearing_radius(bearing);
|
||||
rad = 7;
|
||||
endstop_root_inset = (1 - sqrt(0.5)) * rad;
|
||||
|
||||
stl("y_bearing_mount");
|
||||
color(y_bearing_mount_color) union() {
|
||||
bearing_holder(bearing, height);
|
||||
bearing_holder(bearing, height, rad = rad);
|
||||
for(end = [-1, 1])
|
||||
translate([end * (bearing_holder_width(bearing) / 2 - eta), -end * (bearing_holder_length(bearing) - bearing_clamp_tab)/2, -height])
|
||||
difference() {
|
||||
rotate([0, 0, 90 - end * 90])
|
||||
tab();
|
||||
|
||||
if(nutty)
|
||||
translate([end * (tab_length / 2 + nut_offset), 0, bearing_clamp_tab_height + nut_trap_depth(nut)])
|
||||
nut_trap(screw_clearance_radius, nut_radius, nut_trap_depth(nut));
|
||||
}
|
||||
hull() {
|
||||
translate([-(bearing_holder_width(bearing) / 2 + endstop_w / 2 - eta),
|
||||
translate([-(bearing_holder_width(bearing) / 2 + endstop_w / 2 - endstop_inset / 2 - eta),
|
||||
-(bearing_holder_length(bearing) / 2 - endstop_d / 2),
|
||||
-bar_clamp_switch_z_offset()])
|
||||
cube([endstop_w, endstop_d, endstop_h], center = true);
|
||||
cube([endstop_w + endstop_inset, endstop_d, endstop_h], center = true);
|
||||
|
||||
translate([-(bearing_holder_width(bearing) / 2 - eta),
|
||||
-(bearing_holder_length(bearing) / 2 - endstop_d / 2),
|
||||
- height + 3])
|
||||
cube([eta, endstop_d, eta], center = true);
|
||||
translate([-(bearing_holder_width(bearing) / 2 - endstop_root_inset - eta),
|
||||
-(bearing_holder_length(bearing) / 2 - endstop_root_inset - eta),
|
||||
- height + bearing_clamp_tab_height])
|
||||
cube(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -115,7 +119,7 @@ module y_bearing_mounts_stl()
|
||||
translate([-(bearing_mount_width(Y_bearings) - tab_length + 2), 0, 0]) y_bearing_mount_stl();
|
||||
}
|
||||
|
||||
if(1)
|
||||
if(0)
|
||||
y_bearing_assembly(Y_bearing_holder_height);
|
||||
else
|
||||
y_bearing_mounts_stl();
|
||||
|
@@ -61,6 +61,11 @@ module y_motor_bracket() {
|
||||
for(y = NEMA_holes(Y_motor))
|
||||
translate([x,y,0])
|
||||
poly_cylinder(r = M3_clearance_radius, h = 2 * thickness + 1, center = true);
|
||||
|
||||
for(side = [-1,1])
|
||||
translate([side * (width / 2 - tab), height / 2, 0])
|
||||
rotate([0, 0, -135 - side *45])
|
||||
fillet(r = 3, h = 100);
|
||||
//
|
||||
// mounting screw holes
|
||||
//
|
||||
@@ -104,6 +109,12 @@ module y_motor_assembly() {
|
||||
|
||||
module y_motor_bracket_stl() translate([0, 0, thickness]) rotate([0,180,0]) y_motor_bracket();
|
||||
|
||||
module y_motor_bracket_x2_stl()
|
||||
for(i = [0:1])
|
||||
translate([0, -(y_motor_bracket_height() + 2) * i, 0])
|
||||
rotate([0, 0, i * 180])
|
||||
y_motor_bracket_stl();
|
||||
|
||||
if(1)
|
||||
y_motor_assembly();
|
||||
else
|
||||
|
@@ -182,11 +182,23 @@ module z_motor_bracket_lhs_stl() z_motor_bracket(gantry_setback,
|
||||
module z_motor_bracket_rhs_stl() mirror([1,0,0]) z_motor_bracket(gantry_setback, true);
|
||||
|
||||
module z_motor_brackets_stl() {
|
||||
translate([length + 2, 0, 0]) z_motor_bracket_lhs_stl();
|
||||
z_motor_bracket_rhs_stl();
|
||||
translate([ length / 2 + 1, 0, 0]) z_motor_bracket_lhs_stl();
|
||||
translate([-length / 2 - 1, 0, 0]) z_motor_bracket_rhs_stl();
|
||||
}
|
||||
|
||||
module z_motor_bracketsX2_stl() {
|
||||
translate([0, -gantry_setback - 1, 0])
|
||||
z_motor_brackets_stl();
|
||||
rotate([0, 0, 180])
|
||||
translate([0, -gantry_setback - 1, 0])
|
||||
z_motor_brackets_stl();
|
||||
|
||||
}
|
||||
|
||||
if(0)
|
||||
z_motor_brackets_stl();
|
||||
if(1)
|
||||
z_motor_brackets_stl();
|
||||
else
|
||||
z_motor_bracketsX2_stl();
|
||||
else
|
||||
z_motor_assembly(gantry_setback, false);
|
||||
|
Reference in New Issue
Block a user