include include include // 80 35 15 // screw holes on back plate // 42.5 47.5 // back plate height from profile 47, thickness 10 // full h 67 back_plate_s = [80, 10, 67]; bps = back_plate_s; // dist bitw back plate and back screw holder 26 bp_bsh_dist = 26; // openscad y is scanner z, and wise versa back_screw_holder_s = [80, 15, 35]; bshs = back_screw_holder_s; // for base part mounted on profiles base_wall_thickness = 10; bwt = base_wall_thickness; side_wall_s = [bwt, 65, 55]; sws = side_wall_s; limit_switch_pcb_s = [40, 17, 1.6]; ls_pcb_s = limit_switch_pcb_s; module profile_20x20x50() { scale([1, 1, 2]) translate([-0.06, -61, -10]) import("Modular profile 20x20 - 973094/files/Profilo_20x20_L50.stl"); } // hot inserts for m4 are not needed module m4_screw_hole(hole_side) { screw_hole( m = m4 + 0.2, id = m4 + 0.5, il = 15, hd = m4_head_diameter + 1, hh = m4_head_height, hs = hole_side); } module base_side_screw_holes() { // right x offset rxo = bshs[0] / 2 + bwt - m4_head_height; lxo = -rxo; // back y offset byo = sws[1] * 1 / 8; fyo = sws[1] * 7 / 8; zo = -20 / 2; translate([lxo, byo, zo]) m4_screw_hole(hole_side_left); translate([lxo, fyo, zo]) m4_screw_hole(hole_side_left); translate([rxo, byo, zo]) m4_screw_hole(hole_side_right); translate([rxo, fyo, zo]) m4_screw_hole(hole_side_right); } limit_switch_pcb_screw_hole_d = 3.5; lspshd = limit_switch_pcb_screw_hole_d; // dist betw holes 19 14 // dist betw hole side and short qpcb side = 1-1.1, // and 1.3 for long pcb side ls_pcb_h_delta_long = 1.3; ls_pcb_h_delta_short = 1.1; ls_pcb_h_delta_btw_holes = 19; // limit switch designed by makerbot.com // instructions: www.bigtree-tech.com // license: GPLv3 module limit_switch() { translate([0, -ls_pcb_s[1] / 2, 0]) union() { limit_switch_size = [13, 6.5, 6.5]; lss = limit_switch_size; // pcb color("red", 0.7) translate([0, 0, -ls_pcb_s[2] / 2]) cube(ls_pcb_s, center = true); // switch itself // 6.5 lss_xo = lss[0] / 2 - ls_pcb_s[0] / 2 + 6.5; lss_yo = -lss[1] / 2 + ls_pcb_s[1] / 2; lss_zo = -lss[2] / 2 - ls_pcb_s[2] / 2; color("black", 0.7) translate([lss_xo, lss_yo, lss_zo]) cube(lss, center = true); } d = lspshd; x_delta = ls_pcb_h_delta_short; y_delta = ls_pcb_h_delta_long; xd = d / 2 - ls_pcb_s[0] / 2 + x_delta; yd = -d / 2 - y_delta; // screw holes color("green", 0.4) union() { translate([xd, yd, 0]) cylinder($fn = dToFn(d), d = d, h = 4, center = true); translate([xd + ls_pcb_h_delta_btw_holes, yd, 0]) cylinder($fn = dToFn(d), d = d, h = 4, center = true); } // holes to cut color("blue", 0.4) { m3_id = m3_hole_insert_diameter; m3_h = m3_hole_insert_height; translate([xd, yd, m3_h / 2]) cylinder($fn = dToFn(m3_id), d = m3_id, h = m3_h, center = true); translate([xd + ls_pcb_h_delta_btw_holes, yd, m3_h / 2]) cylinder($fn = dToFn(m3_id), d = m3_id, h = m3_h, center = true); } } module base() { // base color("orange", 0.4) { // left wall translate([-sws[0] / 2 - bshs[0] / 2, sws[1] / 2, sws[2] / 2 - 20]) cube(sws, center = true); // right wall translate([sws[0] / 2 + bshs[0] / 2, sws[1] / 2, sws[2] / 2 - 20]) cube(sws, center = true); // top wall top_s = [bshs[0] + bwt * 2, sws[1], bwt]; translate([0, top_s[1] / 2, top_s[2] / 2 + bshs[2]]) cube(top_s, center = true); } } module stand() { // back plate/motor holder color("black", 0.5) translate([0, -bps[1] / 2, bps[2] / 2 - 20]) cube(bps, center = true); // back screw holder color("black", 0.5) translate([0, bshs[1] / 2 + bp_bsh_dist, bshs[2] / 2]) cube(bshs, center = true); // profiles base color("grey") { translate([-(bshs[0] - 20) / 2, 0, -20 / 2]) rotate([-90, 0, 0]) profile_20x20x50(); translate([(bshs[0] - 20) / 2, 0, -20 / 2]) rotate([-90, 0, 0]) profile_20x20x50(); } } module stand_top_m3_holes() { m3_id = m3_hole_insert_diameter; m3_h = m3_hole_insert_height; rxo = bshs[0] / 2 + bwt / 2; lxo = -rxo; for (xo = [rxo, lxo], yo = [sws[1] * 1 / 6, sws[1] * 3 / 6, sws[1] * 5 / 6]) { translate([xo, yo, -20 + sws[2] + bwt + $tiny_padding]) cylinder($fn = dToFn(m3_id), d = m3_id, h = m3_h * 2, center = true); } } module stand_top_m3_screw_holes() { m3_id = m3_hole_insert_diameter; m3_h = m3_hole_insert_height; rxo = bshs[0] / 2 + bwt / 2; lxo = -rxo; for (xo = [rxo, lxo], yo = [sws[1] * 1 / 6, sws[1] * 3 / 6, sws[1] * 5 / 6]) { translate([xo, yo, -20 + sws[2] + bwt + $tiny_padding]) //cylinder($fn = dToFn(m3_id), d = m3_id, h = m3_h * 2, center = true); scale([1, 1, 2]) screw_hole( m = m3, id = m3_hole_insert_diameter, il = m3_hole_insert_height * 2, hd = m3_head_diameter, hh = m3_head_height, hs = hole_side_top); } } module base_to_print() { difference() { base(); translate([0, sws[1], -20 + sws[2]]) limit_switch(); base_side_screw_holes(); stand_top_m3_holes(); } } module scanner_side_hole_cutters() { id = 4; side_offsets = [ back_bottom_side_hole_offset + [0, 0, 0], back_top_side_hole_offset + [0, 0, 0], top_side_hole_offset + [0, -id, -id], front_bottom_side_hole_offset + [0, -id * 2, 0], front_top_side_hole_offset + [0, -id * 2, 0] ]; // left x offset lxo = -main_frame_width_x / 2; rxo = -lxo; color("red") //translate([0, 0, 0]) translate([0, wt, 0]) for (so = side_offsets) { translate(so + [lxo, 0, 0]) screw_hole( m = m2, id = 4, il = m2_hole_insert_height * 2, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_left); translate(so + [rxo, 0, 0]) screw_hole( m = m2, id = 4, il = m2_hole_insert_height * 2, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_right); } } module scanner_holder() { top_s = [bshs[0] + bwt * 2, sws[1], wt * 2]; cut_s = [main_frame_width_x, sws[1] * 2, wt + $tiny_padding * 2]; difference() { color("green", 0.3) translate([0, top_s[1] / 2, top_s[2] / 2 + bshs[2] + bwt]) cube(top_s, center = true); color("red", 0.3) translate([0, top_s[1] / 2, cut_s[2] / 2 + bshs[2] + bwt + wt]) cube(cut_s, center = true); } } *stand(); *union() { base(); translate([0, sws[1], -20 + sws[2]]) limit_switch(); base_side_screw_holes(); stand_top_m3_holes(); } module scanner_holder_to_print() { difference() { scanner_holder(); stand_top_m3_screw_holes(); } } *translate([0, -back_wall_offset + wt, -20 + sws[2] + bwt + wt]) translate([0, 0, laser_holder_size()[2] / 2 + wt]) { scanner_side_hole_cutters(); color("yellow", 0.2) body_to_print(); } //stand_top_m3_holes(); //stand_top_m3_screw_holes(); color("grey", 0.6) *base_to_print(); //scanner_holder(); scanner_holder_to_print();