diff --git a/assembly.scad b/assembly.scad index 137ac02..d572e60 100644 --- a/assembly.scad +++ b/assembly.scad @@ -57,7 +57,7 @@ module moving_parts(xpos = cur_xpos, ypos = cur_ypos) { translate([ yrail_offset, cur_ypos, 0 ]) ysled_slider(spread = sled_ysize); translate([ xsize - yrail_offset, cur_ypos, 0 ]) rotate([ 180, 180, 0 ]) - ysled_slider(spread = sled_ysize); + ysled_slider(spread = sled_ysize, is_left = false); translate([ yrail_offset, cur_ypos, 0 ]) if ($preview) ysled_rails(); @@ -75,3 +75,9 @@ union() { corners(); moving_parts(); } + +*intersection() { + ysled_slider(spread=sled_ysize); + translate([0, -1000, -1000]) + cube([2000, 2000, 2000]); +} \ No newline at end of file diff --git a/lib.scad b/lib.scad index 72c4254..b74ed9b 100644 --- a/lib.scad +++ b/lib.scad @@ -2,4 +2,13 @@ module bom_item(printable = true, label = "") { print_label = printable ? " print " : " stock "; item_label = label == "" ? parent_module(1) : label; echo(str("BOM:", print_label, item_label)); +} + +module slotify(vector) { + for (child = [0:$children-1]) { + hull() { + children(child); + translate(vector) children(child); + } + } } \ No newline at end of file diff --git a/parts.scad b/parts.scad index 55f46e3..0cff8e0 100644 --- a/parts.scad +++ b/parts.scad @@ -25,6 +25,8 @@ belt_height2 = belt_height1 + belt_width + 2; ysled_rail_spacing = (sled_ysize); motor_shaft_xoffset = (corner_size - wall_thickness) / 2; +motor_mount_length_adjustment = 4; +motor_mount_length = nema17_face + wall_thickness + motor_mount_length_adjustment; // Generates bar of length $l, centered on origin extending in +Z module tslot(l) { @@ -39,8 +41,10 @@ module tslot(l) { module corner_base() { odim = frame_size / 2 + wall_thickness; ldim = frame_size / 2 + corner_size; + cap_points = [ - [ -odim, -odim ], [ -odim, ldim ], [ odim, ldim ], [ ldim, odim ], + [ -odim, -odim ], [ -odim, ldim ], [ odim, ldim ], + [odim, odim], [ ldim, odim ], [ ldim, -odim ] ]; difference() { @@ -65,17 +69,18 @@ module rail_holder(in_x) { tube_offset = (corner_size) / 2 + wall_thickness; tube_rotation = in_x ? 90 : 0; - translated_rail_offset = yrail_offset - frame_size / 2; + translated_rail_offset = yrail_offset - frame_size / 2 - wall_thickness; - translate([ frame_size / 2, frame_size / 2, -frame_size / 2 ]) { + + translate([ frame_size / 2 + wall_thickness, frame_size / 2 + wall_thickness, -frame_size / 2 - wall_thickness ]) { difference() { - linear_extrude(frame_size) - polygon(points = [[wall_thickness, wall_thickness], - [wall_thickness, corner_size], - [corner_size, wall_thickness]]); - + cube([ + !in_x ? corner_size - wall_thickness : 10, + !in_x ? 10 : corner_size - wall_thickness, + wall_thickness * 2 + frame_size + ]); translate( - [ translated_rail_offset, translated_rail_offset, frame_size / 2 ]) + [ translated_rail_offset, translated_rail_offset, frame_size / 2 + wall_thickness ]) rotate([ tube_rotation - 90, tube_rotation, 0 ]) translate([ 0, 0, -corner_size ]) cylinder(d = rail_diam, corner_size * 4); @@ -84,7 +89,7 @@ module rail_holder(in_x) { } // centered on the rail. -module ysled_slider(spread, associated_parts = $preview) { +module ysled_slider(spread, associated_parts = $preview, is_left=true) { bom_item(label = str("ysled_slider(", spread, ")")); sled_len = spread + frame_size; sled_height = frame_size; @@ -122,12 +127,12 @@ module ysled_slider(spread, associated_parts = $preview) { translate( [ pulley_sbend_offset - yrail_offset + motor_shaft_xoffset, 0, 0 ]) { translate([ 0, idler_spacing / 2, 0 ]) { - idler_post(belt_height = belt_height1); + idler_post(belt_height = belt_height1, toothed = is_left); } translate([ 0, -idler_spacing / 2, 0 ]) { *cylinder(d = 3, h = 30, $fs = 1); *idler(belt_height2); - rotate([ 0, 0, -90 ]) { idler_post(belt_height = belt_height2); } + rotate([ 0, 0, -90 ]) { idler_post(belt_height = belt_height2, toothed = !is_left); } } } @@ -138,25 +143,38 @@ module ysled_slider(spread, associated_parts = $preview) { } } + + module nema17_housing() { hwidth = corner_size + frame_size + wall_thickness; hheight = nema17_face + wall_thickness * 2; hdepth = frame_size + wall_thickness * 2; screw_dxy = 31 / 2; + translate([ 0, -nema17_face / 2 - frame_size / 2 - wall_thickness, 0 ]) - render() difference() { - cube([ hwidth, hheight, hdepth ], center = true); + slotify([0, -motor_mount_length_adjustment, 0]) { translate([ 0, 0, -2 ]) cube([ nema17_face + 1, nema17_face + 1, hdepth ], center = true); cylinder(d = 23, frame_size); - for (x = [ -screw_dxy, screw_dxy ], y = [ -screw_dxy, screw_dxy ]) - translate([ x, y, frame_size / 2 + wall_thickness ]) - rotate([ 180, 0, 0 ]) { - cylinder(d = 5, h = 3); - } + translate([ -screw_dxy, -screw_dxy, frame_size / 2 + wall_thickness ]) + rotate([ 180, 0, 0 ]) { + cylinder(d = 5, h = 3); + } + translate([ screw_dxy, -screw_dxy, frame_size / 2 + wall_thickness ]) + rotate([ 180, 0, 0 ]) { + cylinder(d = 5, h = 3); + } + translate([ -screw_dxy, screw_dxy, frame_size / 2 + wall_thickness ]) + rotate([ 180, 0, 0 ]) { + cylinder(d = 5, h = 3); + } + translate([ screw_dxy, screw_dxy, frame_size / 2 + wall_thickness ]) + rotate([ 180, 0, 0 ]) { + cylinder(d = 5, h = 3); + } } } @@ -192,21 +210,36 @@ module idler_post(belt_height, toothed = true) { cylinder(d = 3, h = total_height + 1, $fn = 60); translate([ 0, 0, total_height - 2 ]) cylinder(r = 3, h = 3); } - - idler(height = belt_height); + + idler(height = belt_height, toothed=toothed); } module flcorner() { bom_item(); - rotate([ 0, 0, 0 ]) { - corner_base(); - rail_holder(false); - } - translate([ (corner_size - wall_thickness) / 2, 0, 0 ]) nema17_housing(); + render() { + rotate([ 0, 0, 0 ]) { + corner_base(); + rail_holder(false); + } + difference() { + translate([ + -frame_size/2 - wall_thickness, + -frame_size/2 - wall_thickness - motor_mount_length, + -frame_size/2 - wall_thickness + ]) + cube([ + frame_size + wall_thickness + corner_size, + motor_mount_length, + frame_size + wall_thickness * 2 + ]); + translate([ motor_shaft_xoffset, 0, 0 ]) nema17_housing(); + } +// translate([motor_shaft_xoffset, 0, 0 ]) nema17_housing(); + } if ($preview) translate([ - (corner_size - wall_thickness) / 2, + motor_shaft_xoffset, -nema17_face / 2 - frame_size / 2 - wall_thickness, frame_size / 2 ]) { nema17(); @@ -216,15 +249,29 @@ module flcorner() { module frcorner() { bom_item(); - rotate([ 0, 0, 90 ]) { - corner_base(); - rail_holder(true); - } - translate([ -(corner_size - wall_thickness) / 2, 0, 0 ]) nema17_housing(); + render() { + rotate([ 0, 0, 90 ]) { + corner_base(); + rail_holder(true); + } + difference() { + translate([ + -frame_size/2 - corner_size, + -frame_size/2 - wall_thickness - motor_mount_length, + -frame_size/2 - wall_thickness + ]) + cube([ + frame_size + wall_thickness + corner_size, + motor_mount_length, + frame_size + wall_thickness * 2 + ]); + translate([ -motor_shaft_xoffset, 0, 0 ]) nema17_housing(); + } + } if ($preview) translate([ - -(corner_size - wall_thickness) / 2, + -motor_shaft_xoffset, -nema17_face / 2 - frame_size / 2 - wall_thickness, frame_size / 2 ]) { nema17(); @@ -236,6 +283,7 @@ module frcorner() { module blcorner() { bom_item(); + render() rotate([ 0, 0, 270 ]) { corner_base(); rail_holder(true); @@ -244,6 +292,7 @@ module blcorner() { module brcorner() { bom_item(); + render() rotate([ 0, 0, 180 ]) { corner_base(); rail_holder(false); @@ -325,11 +374,11 @@ module xsled2() { inner_ysize = sled_ysize - tab_thickness; - lip_depth = tab_thickness - wall_thickness - glass_thickness; - lip_width = glass_thickness; film_height = belt_height2 + belt_width / 2; ledge_width = 15; - inside_ledge_width = ledge_width - 8; + inside_ledge_width = 8; + outside_ledge_width = ledge_width - inside_ledge_width; + film_thickness = 0.25; @@ -341,13 +390,13 @@ module xsled2() { [0, film_height + glass_thickness], [wall_thickness, film_height + glass_thickness], [wall_thickness, film_height], - [inside_ledge_width, film_height], - [inside_ledge_width, film_height - glass_thickness + 0.5, ], - [ledge_width, film_height - glass_thickness + 0.5], - + [outside_ledge_width, film_height], + [outside_ledge_width, film_height - glass_thickness], + [ledge_width, film_height - glass_thickness], + [wall_thickness * 2, -tab_thickness / 2] ]; - echo("Ledge width: ", ledge_width - inside_ledge_width); + echo("Ledge width: ", ledge_width - outside_ledge_width); for (xsign = [ 1, -1 ], ysign = [ 1, -1 ]) { translate([ sled_xsize / 2 * xsign, sled_ysize / 2 * ysign, 0 ]) rotate([ 0, -90 * xsign, 0 ]) { @@ -388,6 +437,16 @@ module xsled2() { linear_extrude(inner_ysize) polygon(glass_holder_points); } + for (x = [ -1, 1], + y = [ -1, 1]) { + translate([x * (sled_xsize/2 - outside_ledge_width - inside_ledge_width / 2), + y * (inner_ysize/2 - outside_ledge_width - inside_ledge_width / 2), + film_height]) + rotate([180,0,0]) { + cylinder(d=4, h = 50); + cylinder(d=5, h = 4 + glass_thickness ); + } + } translate([ -10, -inner_ysize / 2, @@ -403,8 +462,8 @@ module xsled2() { [ 0, 0, film_height - glass_thickness / 2 + 0.5 ]) cube( [ - sled_xsize - inside_ledge_width * 2, - inner_ysize - inside_ledge_width * 2, + sled_xsize - outside_ledge_width * 2, + inner_ysize - outside_ledge_width * 2, glass_thickness ], center = true); @@ -427,4 +486,4 @@ module xsled2() { } // render() -// xsled2(); +// xsled2(); \ No newline at end of file diff --git a/stock_parts.scad b/stock_parts.scad index 44a2b43..90889b6 100644 --- a/stock_parts.scad +++ b/stock_parts.scad @@ -1,7 +1,7 @@ include include -stock_color = "#aaa4"; +stock_color = "#aaa"; bushing_od = 15; bushing_id = 8; @@ -59,7 +59,7 @@ belt_backing = 0.63 - belt_pld; tooth_height = 0.75; pulley_od = 13; -pulley_clearance_rad = pulley_od / 2 + 2.5; +pulley_clearance_rad = pulley_od / 2 + 1.5; module pulley(teeth, lrim, urim, belt_width, shaft = 5, toothed = true, od = 0) {