include head_dist = 54; head_pin_dist = 5; head_spacing = 9; // distance from upright head_d = 3.5; head_pin_d = 1.2; head_pin_h = 0.75; $fn = 72; bottom = [7,16,3]; upright = [7,4,30]; conn_up = 50; connector = [12,4,12]; det_hole = 6; // connection to print head module conn() { difference() { union() { // bottom cuboid(bottom, anchor=BOTTOM+BACK, chamfer=0.4); // pin fwd(head_spacing + head_pin_dist) cyl(d=head_pin_d, h=head_pin_h, anchor=TOP, chamfer1=0.2); } // hole for screw fwd(head_spacing) cyl(d=head_d, h=bottom[2], anchor=BOTTOM, chamfer=-0.2); } } left(head_dist/2) conn(); right(head_dist/2) conn(); // upright to hold detector difference() { union() { // uprights left(head_dist/2) cuboid(upright, chamfer=0.4, anchor=BOTTOM); right(head_dist/2) cuboid(upright, chamfer=0.4, anchor=BOTTOM); // bottom rounding for strength left(head_dist/2) up(bottom[2]) cuboid([upright[0]-0.8,upright[1],upright[1]], chamfer=-4, edges=BOTTOM+FWD, anchor=BOTTOM); right(head_dist/2) up(bottom[2]) cuboid([upright[0]-0.8,upright[1],upright[1]], chamfer=-4, edges=BOTTOM+FWD, anchor=BOTTOM); // upper portion chain_hull() { left(head_dist/2) up(upright[2] - upright[1]/2) cuboid([upright[0], upright[1], upright[1]], chamfer=0.4); up(conn_up) cuboid(connector); right(head_dist/2) up(upright[2] - upright[1]/2) cuboid([upright[0], upright[1], upright[1]], chamfer=0.4); } } // hole for screw for the detector up(conn_up - det_hole/4) xrot(90) cyl(h=connector[1], d=det_hole, rounding=-0.2); } // mock filament detector // up(conn_up) fwd(15) cuboid([41,17,36]);