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();