// ####################################################### // #################### NEMA Steppers #################### // ####################################################### $fn = 15; nema17_size = 42.3; nema17_hole_off = 30.1 / 2; nema17_hole_size = 3.2; nema17_shaft_size = 5.0; nema17_shaft_length = 24.0; nema17_center_size = 22.0; nema17_center_height = 2.0; nema17_mount_wall = 8.0; nema17_mount_hole_size = 3.4; nema17_mount_hole_off_add = 3.5; nema17_mount_double_high = false; nema17_mount_back_support = true; draw_nema17_mount = false; // ####################################################### if (draw_nema17_mount) nema17_mount(30); module nema17_holes_face(height, length, hole) { translate([nema17_size / 2, nema17_size / 2, height - 4.5]) { translate([nema17_hole_off, nema17_hole_off, 0]) cylinder(d = hole, h = length); translate([-nema17_hole_off, nema17_hole_off, 0]) cylinder(d = hole, h = length); translate([nema17_hole_off, -nema17_hole_off, 0]) cylinder(d = hole, h = length); translate([-nema17_hole_off, -nema17_hole_off, 0]) cylinder(d = hole, h = length); } } module nema17(length) { difference() { cube([nema17_size, nema17_size, length]); nema17_holes_face(length, 5.0, nema17_hole_size); } translate([nema17_size / 2, nema17_size / 2, length]) { cylinder(d = nema17_center_size, h = nema17_center_height); cylinder(d = nema17_shaft_size, h = nema17_shaft_length); } } // TODO use not M4 with 2020 extrusion? module nema17_mount(slot) { // motor faceplate difference() { cube([nema17_size, nema17_size, nema17_mount_wall]); nema17_holes_face(4, nema17_mount_wall + 1, nema17_mount_hole_size); translate([nema17_size / 2, nema17_size / 2, -1]) cylinder(d = 24.0, h = nema17_mount_wall + 2); } // mount on side translate([nema17_size, 0, 0]) difference() { if (nema17_mount_double_high) { cube([nema17_mount_wall, nema17_size, nema17_mount_wall + (2 * slot)]); } else { cube([nema17_mount_wall, nema17_size, nema17_mount_wall + slot]); } for (i = [0, 1]) { translate([nema17_mount_wall + 1, nema17_size / 3 - nema17_mount_hole_off_add, nema17_mount_wall + (slot / 2) + (i * slot)]) { rotate([0, -90, 0]) cylinder(d = 4.4, h = nema17_mount_wall + 2); translate([0, nema17_size / 3 + (2 * nema17_mount_hole_off_add), 0]) rotate([0, -90, 0]) cylinder(d = 4.4, h = nema17_mount_wall + 2); } } } if (nema17_mount_back_support) { translate([nema17_size + nema17_mount_wall, 0, 0]) difference() { cube([slot, nema17_size, nema17_mount_wall]); translate([slot / 2, nema17_size / 3 - nema17_mount_hole_off_add, -1]) cylinder(d = 4.4, h = nema17_mount_wall + 2); translate([slot / 2, nema17_size * 2 / 3 + nema17_mount_hole_off_add, -1]) cylinder(d = 4.4, h = nema17_mount_wall + 2); } } }