Refactored corners to position motor based on motor_shaft_xoffset; changed rail holder to use a rectangular block, added slots for belt tension adjustment
This commit is contained in:
@@ -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([ yrail_offset, cur_ypos, 0 ]) ysled_slider(spread = sled_ysize);
|
||||||
|
|
||||||
translate([ xsize - yrail_offset, cur_ypos, 0 ]) rotate([ 180, 180, 0 ])
|
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();
|
translate([ yrail_offset, cur_ypos, 0 ]) if ($preview) ysled_rails();
|
||||||
|
|
||||||
@@ -75,3 +75,9 @@ union() {
|
|||||||
corners();
|
corners();
|
||||||
moving_parts();
|
moving_parts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*intersection() {
|
||||||
|
ysled_slider(spread=sled_ysize);
|
||||||
|
translate([0, -1000, -1000])
|
||||||
|
cube([2000, 2000, 2000]);
|
||||||
|
}
|
||||||
9
lib.scad
9
lib.scad
@@ -2,4 +2,13 @@ module bom_item(printable = true, label = "") {
|
|||||||
print_label = printable ? " print " : " stock ";
|
print_label = printable ? " print " : " stock ";
|
||||||
item_label = label == "" ? parent_module(1) : label;
|
item_label = label == "" ? parent_module(1) : label;
|
||||||
echo(str("BOM:", print_label, item_label));
|
echo(str("BOM:", print_label, item_label));
|
||||||
|
}
|
||||||
|
|
||||||
|
module slotify(vector) {
|
||||||
|
for (child = [0:$children-1]) {
|
||||||
|
hull() {
|
||||||
|
children(child);
|
||||||
|
translate(vector) children(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
147
parts.scad
147
parts.scad
@@ -25,6 +25,8 @@ belt_height2 = belt_height1 + belt_width + 2;
|
|||||||
|
|
||||||
ysled_rail_spacing = (sled_ysize);
|
ysled_rail_spacing = (sled_ysize);
|
||||||
motor_shaft_xoffset = (corner_size - wall_thickness) / 2;
|
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
|
// Generates bar of length $l, centered on origin extending in +Z
|
||||||
module tslot(l) {
|
module tslot(l) {
|
||||||
@@ -39,8 +41,10 @@ module tslot(l) {
|
|||||||
module corner_base() {
|
module corner_base() {
|
||||||
odim = frame_size / 2 + wall_thickness;
|
odim = frame_size / 2 + wall_thickness;
|
||||||
ldim = frame_size / 2 + corner_size;
|
ldim = frame_size / 2 + corner_size;
|
||||||
|
|
||||||
cap_points = [
|
cap_points = [
|
||||||
[ -odim, -odim ], [ -odim, ldim ], [ odim, ldim ], [ ldim, odim ],
|
[ -odim, -odim ], [ -odim, ldim ], [ odim, ldim ],
|
||||||
|
[odim, odim], [ ldim, odim ],
|
||||||
[ ldim, -odim ]
|
[ ldim, -odim ]
|
||||||
];
|
];
|
||||||
difference() {
|
difference() {
|
||||||
@@ -65,17 +69,18 @@ module rail_holder(in_x) {
|
|||||||
tube_offset = (corner_size) / 2 + wall_thickness;
|
tube_offset = (corner_size) / 2 + wall_thickness;
|
||||||
tube_rotation = in_x ? 90 : 0;
|
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() {
|
difference() {
|
||||||
linear_extrude(frame_size)
|
cube([
|
||||||
polygon(points = [[wall_thickness, wall_thickness],
|
!in_x ? corner_size - wall_thickness : 10,
|
||||||
[wall_thickness, corner_size],
|
!in_x ? 10 : corner_size - wall_thickness,
|
||||||
[corner_size, wall_thickness]]);
|
wall_thickness * 2 + frame_size
|
||||||
|
]);
|
||||||
translate(
|
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 ])
|
rotate([ tube_rotation - 90, tube_rotation, 0 ])
|
||||||
translate([ 0, 0, -corner_size ])
|
translate([ 0, 0, -corner_size ])
|
||||||
cylinder(d = rail_diam, corner_size * 4);
|
cylinder(d = rail_diam, corner_size * 4);
|
||||||
@@ -84,7 +89,7 @@ module rail_holder(in_x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// centered on the rail.
|
// 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, ")"));
|
bom_item(label = str("ysled_slider(", spread, ")"));
|
||||||
sled_len = spread + frame_size;
|
sled_len = spread + frame_size;
|
||||||
sled_height = frame_size;
|
sled_height = frame_size;
|
||||||
@@ -122,12 +127,12 @@ module ysled_slider(spread, associated_parts = $preview) {
|
|||||||
translate(
|
translate(
|
||||||
[ pulley_sbend_offset - yrail_offset + motor_shaft_xoffset, 0, 0 ]) {
|
[ pulley_sbend_offset - yrail_offset + motor_shaft_xoffset, 0, 0 ]) {
|
||||||
translate([ 0, idler_spacing / 2, 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 ]) {
|
translate([ 0, -idler_spacing / 2, 0 ]) {
|
||||||
*cylinder(d = 3, h = 30, $fs = 1);
|
*cylinder(d = 3, h = 30, $fs = 1);
|
||||||
*idler(belt_height2);
|
*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() {
|
module nema17_housing() {
|
||||||
hwidth = corner_size + frame_size + wall_thickness;
|
hwidth = corner_size + frame_size + wall_thickness;
|
||||||
hheight = nema17_face + wall_thickness * 2;
|
hheight = nema17_face + wall_thickness * 2;
|
||||||
hdepth = frame_size + wall_thickness * 2;
|
hdepth = frame_size + wall_thickness * 2;
|
||||||
|
|
||||||
screw_dxy = 31 / 2;
|
screw_dxy = 31 / 2;
|
||||||
|
|
||||||
translate([ 0, -nema17_face / 2 - frame_size / 2 - wall_thickness, 0 ])
|
translate([ 0, -nema17_face / 2 - frame_size / 2 - wall_thickness, 0 ])
|
||||||
render() difference() {
|
slotify([0, -motor_mount_length_adjustment, 0]) {
|
||||||
cube([ hwidth, hheight, hdepth ], center = true);
|
|
||||||
|
|
||||||
translate([ 0, 0, -2 ])
|
translate([ 0, 0, -2 ])
|
||||||
cube([ nema17_face + 1, nema17_face + 1, hdepth ], center = true);
|
cube([ nema17_face + 1, nema17_face + 1, hdepth ], center = true);
|
||||||
cylinder(d = 23, frame_size);
|
cylinder(d = 23, frame_size);
|
||||||
|
|
||||||
for (x = [ -screw_dxy, screw_dxy ], y = [ -screw_dxy, screw_dxy ])
|
translate([ -screw_dxy, -screw_dxy, frame_size / 2 + wall_thickness ])
|
||||||
translate([ x, y, frame_size / 2 + wall_thickness ])
|
rotate([ 180, 0, 0 ]) {
|
||||||
rotate([ 180, 0, 0 ]) {
|
cylinder(d = 5, h = 3);
|
||||||
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);
|
cylinder(d = 3, h = total_height + 1, $fn = 60);
|
||||||
translate([ 0, 0, total_height - 2 ]) cylinder(r = 3, h = 3);
|
translate([ 0, 0, total_height - 2 ]) cylinder(r = 3, h = 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
idler(height = belt_height);
|
idler(height = belt_height, toothed=toothed);
|
||||||
}
|
}
|
||||||
|
|
||||||
module flcorner() {
|
module flcorner() {
|
||||||
bom_item();
|
bom_item();
|
||||||
rotate([ 0, 0, 0 ]) {
|
render() {
|
||||||
corner_base();
|
rotate([ 0, 0, 0 ]) {
|
||||||
rail_holder(false);
|
corner_base();
|
||||||
}
|
rail_holder(false);
|
||||||
translate([ (corner_size - wall_thickness) / 2, 0, 0 ]) nema17_housing();
|
}
|
||||||
|
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)
|
if ($preview)
|
||||||
translate([
|
translate([
|
||||||
(corner_size - wall_thickness) / 2,
|
motor_shaft_xoffset,
|
||||||
-nema17_face / 2 - frame_size / 2 - wall_thickness, frame_size / 2
|
-nema17_face / 2 - frame_size / 2 - wall_thickness, frame_size / 2
|
||||||
]) {
|
]) {
|
||||||
nema17();
|
nema17();
|
||||||
@@ -216,15 +249,29 @@ module flcorner() {
|
|||||||
|
|
||||||
module frcorner() {
|
module frcorner() {
|
||||||
bom_item();
|
bom_item();
|
||||||
rotate([ 0, 0, 90 ]) {
|
render() {
|
||||||
corner_base();
|
rotate([ 0, 0, 90 ]) {
|
||||||
rail_holder(true);
|
corner_base();
|
||||||
}
|
rail_holder(true);
|
||||||
translate([ -(corner_size - wall_thickness) / 2, 0, 0 ]) nema17_housing();
|
}
|
||||||
|
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)
|
if ($preview)
|
||||||
translate([
|
translate([
|
||||||
-(corner_size - wall_thickness) / 2,
|
-motor_shaft_xoffset,
|
||||||
-nema17_face / 2 - frame_size / 2 - wall_thickness, frame_size / 2
|
-nema17_face / 2 - frame_size / 2 - wall_thickness, frame_size / 2
|
||||||
]) {
|
]) {
|
||||||
nema17();
|
nema17();
|
||||||
@@ -236,6 +283,7 @@ module frcorner() {
|
|||||||
|
|
||||||
module blcorner() {
|
module blcorner() {
|
||||||
bom_item();
|
bom_item();
|
||||||
|
render()
|
||||||
rotate([ 0, 0, 270 ]) {
|
rotate([ 0, 0, 270 ]) {
|
||||||
corner_base();
|
corner_base();
|
||||||
rail_holder(true);
|
rail_holder(true);
|
||||||
@@ -244,6 +292,7 @@ module blcorner() {
|
|||||||
|
|
||||||
module brcorner() {
|
module brcorner() {
|
||||||
bom_item();
|
bom_item();
|
||||||
|
render()
|
||||||
rotate([ 0, 0, 180 ]) {
|
rotate([ 0, 0, 180 ]) {
|
||||||
corner_base();
|
corner_base();
|
||||||
rail_holder(false);
|
rail_holder(false);
|
||||||
@@ -325,11 +374,11 @@ module xsled2() {
|
|||||||
|
|
||||||
inner_ysize = sled_ysize - tab_thickness;
|
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;
|
film_height = belt_height2 + belt_width / 2;
|
||||||
ledge_width = 15;
|
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;
|
film_thickness = 0.25;
|
||||||
|
|
||||||
@@ -341,13 +390,13 @@ module xsled2() {
|
|||||||
[0, film_height + glass_thickness],
|
[0, film_height + glass_thickness],
|
||||||
[wall_thickness, film_height + glass_thickness],
|
[wall_thickness, film_height + glass_thickness],
|
||||||
[wall_thickness, film_height],
|
[wall_thickness, film_height],
|
||||||
[inside_ledge_width, film_height],
|
[outside_ledge_width, film_height],
|
||||||
[inside_ledge_width, film_height - glass_thickness + 0.5, ],
|
[outside_ledge_width, film_height - glass_thickness],
|
||||||
[ledge_width, film_height - glass_thickness + 0.5],
|
[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 ]) {
|
for (xsign = [ 1, -1 ], ysign = [ 1, -1 ]) {
|
||||||
translate([ sled_xsize / 2 * xsign, sled_ysize / 2 * ysign, 0 ])
|
translate([ sled_xsize / 2 * xsign, sled_ysize / 2 * ysign, 0 ])
|
||||||
rotate([ 0, -90 * xsign, 0 ]) {
|
rotate([ 0, -90 * xsign, 0 ]) {
|
||||||
@@ -388,6 +437,16 @@ module xsled2() {
|
|||||||
linear_extrude(inner_ysize) polygon(glass_holder_points);
|
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([
|
translate([
|
||||||
-10, -inner_ysize / 2,
|
-10, -inner_ysize / 2,
|
||||||
|
|
||||||
@@ -403,8 +462,8 @@ module xsled2() {
|
|||||||
[ 0, 0, film_height - glass_thickness / 2 + 0.5 ])
|
[ 0, 0, film_height - glass_thickness / 2 + 0.5 ])
|
||||||
cube(
|
cube(
|
||||||
[
|
[
|
||||||
sled_xsize - inside_ledge_width * 2,
|
sled_xsize - outside_ledge_width * 2,
|
||||||
inner_ysize - inside_ledge_width * 2,
|
inner_ysize - outside_ledge_width * 2,
|
||||||
glass_thickness
|
glass_thickness
|
||||||
],
|
],
|
||||||
center = true);
|
center = true);
|
||||||
@@ -427,4 +486,4 @@ module xsled2() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// render()
|
// render()
|
||||||
// xsled2();
|
// xsled2();
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
include <MCAD/math.scad>
|
include <MCAD/math.scad>
|
||||||
include <lib.scad>
|
include <lib.scad>
|
||||||
|
|
||||||
stock_color = "#aaa4";
|
stock_color = "#aaa";
|
||||||
|
|
||||||
bushing_od = 15;
|
bushing_od = 15;
|
||||||
bushing_id = 8;
|
bushing_id = 8;
|
||||||
@@ -59,7 +59,7 @@ belt_backing = 0.63 - belt_pld;
|
|||||||
tooth_height = 0.75;
|
tooth_height = 0.75;
|
||||||
|
|
||||||
pulley_od = 13;
|
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,
|
module pulley(teeth, lrim, urim, belt_width, shaft = 5, toothed = true,
|
||||||
od = 0) {
|
od = 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user