Added pulleys on Y sliders
This commit is contained in:
@@ -67,7 +67,7 @@ module moving_parts(xpos = cur_xpos, ypos = cur_ypos) {
|
|||||||
ysled_slider(spread = sled_ysize);
|
ysled_slider(spread = sled_ysize);
|
||||||
|
|
||||||
translate([xsize - yrail_offset, cur_ypos, 0])
|
translate([xsize - yrail_offset, cur_ypos, 0])
|
||||||
rotate([0, 180, 0])
|
rotate([180, 180, 0])
|
||||||
ysled_slider(spread = sled_ysize);
|
ysled_slider(spread = sled_ysize);
|
||||||
|
|
||||||
translate([yrail_offset, cur_ypos, 0])
|
translate([yrail_offset, cur_ypos, 0])
|
||||||
|
|||||||
84
parts.scad
84
parts.scad
@@ -13,14 +13,18 @@ corner_size=30;
|
|||||||
corner_offset = frame_size / 2 + wall_thickness;
|
corner_offset = frame_size / 2 + wall_thickness;
|
||||||
rail_diam = 8;
|
rail_diam = 8;
|
||||||
// distance between centerline of rail and centerline of frame Y tube.
|
// distance between centerline of rail and centerline of frame Y tube.
|
||||||
yrail_offset = (frame_size + corner_size / 2) / 2;
|
yrail_offset = (frame_size + corner_size) / 2;
|
||||||
|
|
||||||
ysled_extralen = frame_size; // on each end
|
ysled_extralen = frame_size; // on each end
|
||||||
|
|
||||||
|
// Both of these are distance from frame centerline
|
||||||
|
belt_height1 = frame_size / 2 + wall_thickness + belt_width / 2 + 2;
|
||||||
|
belt_height2 = belt_height1 + belt_width + 2;
|
||||||
|
|
||||||
// calculated
|
// calculated
|
||||||
|
|
||||||
ysled_rail_spacing = (sled_ysize);
|
ysled_rail_spacing = (sled_ysize);
|
||||||
|
motor_shaft_xoffset = (corner_size - wall_thickness) / 2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -83,11 +87,12 @@ module rail_holder(in_x) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// centered on
|
// centered on the rail.
|
||||||
module ysled_slider(spread, associated_parts = $preview) {
|
module ysled_slider(spread, associated_parts = $preview) {
|
||||||
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;
|
||||||
|
idler_spacing = spread / 3;
|
||||||
|
|
||||||
colorize("green")
|
colorize("green")
|
||||||
render()
|
render()
|
||||||
@@ -95,8 +100,11 @@ module ysled_slider(spread, associated_parts = $preview) {
|
|||||||
rotate([-90, 0, 0]) {
|
rotate([-90, 0, 0]) {
|
||||||
difference() {
|
difference() {
|
||||||
union() {
|
union() {
|
||||||
translate([-frame_size/2, -frame_size/2, 0])
|
translate([-frame_size/2, -frame_size/2, 0])
|
||||||
cube([frame_size + 5, frame_size, sled_len]);
|
cube([frame_size + 5, frame_size, sled_len]);
|
||||||
|
translate([pulley_sbend_offset - yrail_offset + motor_shaft_xoffset - pulley_clearance_rad - 4,
|
||||||
|
-frame_size / 2, 0])
|
||||||
|
cube([frame_size + 5, frame_size, sled_len]);
|
||||||
}
|
}
|
||||||
|
|
||||||
cylinder(d = bushing_id * 1.1, h = sled_len);
|
cylinder(d = bushing_id * 1.1, h = sled_len);
|
||||||
@@ -116,6 +124,23 @@ module ysled_slider(spread, associated_parts = $preview) {
|
|||||||
}
|
}
|
||||||
// TODO: add posts for the idlers
|
// TODO: add posts for the idlers
|
||||||
|
|
||||||
|
//color("#f00")
|
||||||
|
translate([pulley_sbend_offset - yrail_offset + motor_shaft_xoffset, 0, 0]) {
|
||||||
|
translate([0, idler_spacing / 2, 0]) {
|
||||||
|
idler_post(belt_height = belt_height1);
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
translate([0, -sled_len/2, 0])
|
translate([0, -sled_len/2, 0])
|
||||||
rotate([-90, 0, 0])
|
rotate([-90, 0, 0])
|
||||||
if (associated_parts) {
|
if (associated_parts) {
|
||||||
@@ -153,6 +178,43 @@ module nema17_housing() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// belt height is the center of the belt.
|
||||||
|
// Roration is in Z axis, from +x/+y
|
||||||
|
module idler_post(belt_height, toothed=true) {
|
||||||
|
gap=0.5;
|
||||||
|
|
||||||
|
post_radius = pulley_clearance_rad + 4;
|
||||||
|
top_shelf_thickness = 4;
|
||||||
|
total_height = idler_zmargin.y + belt_height + top_shelf_thickness + gap;
|
||||||
|
slot_radius = pulley_clearance_rad;
|
||||||
|
slot_height = idler_zmargin.x + idler_zmargin.y + gap * 2;
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
// outer shell
|
||||||
|
cylinder(h = total_height, r = post_radius);
|
||||||
|
translate([0, -post_radius, 0])
|
||||||
|
cube([post_radius, post_radius, total_height]);
|
||||||
|
translate([-post_radius,0, 0])
|
||||||
|
cube([post_radius, post_radius, total_height]);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([0,0,belt_height - idler_zmargin.x - gap]) {
|
||||||
|
cylinder(r = slot_radius, slot_height);
|
||||||
|
translate([-slot_radius, 0, 0])
|
||||||
|
cube([post_radius*2, post_radius * 2, slot_height]);
|
||||||
|
translate([0, -slot_radius, 0])
|
||||||
|
cube([post_radius * 2, post_radius * 2, slot_height]);
|
||||||
|
}
|
||||||
|
|
||||||
|
cylinder(d = 3, h=total_height + 1, $fn=60);
|
||||||
|
translate([0, 0, total_height - 2])
|
||||||
|
cylinder(r = 3, h = 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
idler(height = belt_height);
|
||||||
|
}
|
||||||
|
|
||||||
module flcorner() {
|
module flcorner() {
|
||||||
bom_item();
|
bom_item();
|
||||||
rotate([0, 0, 0]) {
|
rotate([0, 0, 0]) {
|
||||||
@@ -167,8 +229,8 @@ module flcorner() {
|
|||||||
-nema17_face/2 - frame_size/2 - wall_thickness,
|
-nema17_face/2 - frame_size/2 - wall_thickness,
|
||||||
frame_size/2]) {
|
frame_size/2]) {
|
||||||
nema17();
|
nema17();
|
||||||
translate([0, 0, 2]) {
|
translate([0, 0, -frame_size/2 + belt_height2]) {
|
||||||
pulley(16,6,1,7);
|
active_pulley();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,8 +250,9 @@ module frcorner() {
|
|||||||
-nema17_face/2 - frame_size/2 - wall_thickness,
|
-nema17_face/2 - frame_size/2 - wall_thickness,
|
||||||
frame_size/2]) {
|
frame_size/2]) {
|
||||||
nema17();
|
nema17();
|
||||||
translate([0,0,2]) {
|
translate([0,0,belt_height1 - frame_size / 2]) {
|
||||||
pulley(16, 1, 6, 7);
|
rotate([180,0,0])
|
||||||
|
active_pulley();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -393,6 +456,9 @@ module xsled2() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// render()
|
// render()
|
||||||
// xsled2();
|
// xsled2();
|
||||||
|
|
||||||
|
|||||||
@@ -60,10 +60,15 @@ module nema17(depth = 23.5) {
|
|||||||
// belts and pulleys
|
// belts and pulleys
|
||||||
belt_pitch = 2; // 2mm tooth width for GT2 = 2mm pitch
|
belt_pitch = 2; // 2mm tooth width for GT2 = 2mm pitch
|
||||||
belt_width = 6;
|
belt_width = 6;
|
||||||
belt_thickness = 3;
|
belt_thickness = 1.38;
|
||||||
tooth_height = 2;
|
belt_pld = 0.254; // distance between line of fixed length and tips of gear teeth
|
||||||
|
belt_backing = 0.63 - belt_pld;
|
||||||
|
tooth_height = 0.75;
|
||||||
|
|
||||||
module pulley(teeth, lrim, urim, belt_width, shaft=5, toothed=true) {
|
pulley_od = 13;
|
||||||
|
pulley_clearance_rad = pulley_od / 2 + 2.5;
|
||||||
|
|
||||||
|
module pulley(teeth, lrim, urim, belt_width, shaft=5, toothed=true, od = 0) {
|
||||||
bom_item(printable=false, label=str(
|
bom_item(printable=false, label=str(
|
||||||
toothed ? "pulley(" : "idler(",
|
toothed ? "pulley(" : "idler(",
|
||||||
"teeth=", teeth, ", ",
|
"teeth=", teeth, ", ",
|
||||||
@@ -73,10 +78,12 @@ module pulley(teeth, lrim, urim, belt_width, shaft=5, toothed=true) {
|
|||||||
"shaft=", shaft, "mm",
|
"shaft=", shaft, "mm",
|
||||||
")"
|
")"
|
||||||
));
|
));
|
||||||
inner_rad = belt_pitch * teeth / TAU;
|
nominal_rad = belt_pitch * teeth / TAU;
|
||||||
outer_rad = inner_rad + belt_thickness;
|
inner_rad = nominal_rad - belt_pld;
|
||||||
|
outer_rad = (od > 0) ? od / 2 : nominal_rad + belt_backing;
|
||||||
minor_rad = inner_rad - tooth_height;
|
minor_rad = inner_rad - tooth_height;
|
||||||
mid_rad = inner_rad - tooth_height / 2;
|
mid_rad = inner_rad - tooth_height / 2;
|
||||||
|
idler_rad = nominal_rad - belt_backing;
|
||||||
|
|
||||||
dtheta = 180 / teeth;
|
dtheta = 180 / teeth;
|
||||||
|
|
||||||
@@ -105,7 +112,7 @@ module pulley(teeth, lrim, urim, belt_width, shaft=5, toothed=true) {
|
|||||||
linear_extrude(belt_width)
|
linear_extrude(belt_width)
|
||||||
polygon(tooth_points, convexity = teeth * 2 + 4);
|
polygon(tooth_points, convexity = teeth * 2 + 4);
|
||||||
} else {
|
} else {
|
||||||
cylinder(r = minor_rad, h = belt_width);
|
cylinder(r = idler_rad, h = belt_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
translate([0,0,lrim + belt_width])
|
translate([0,0,lrim + belt_width])
|
||||||
@@ -117,4 +124,22 @@ module pulley(teeth, lrim, urim, belt_width, shaft=5, toothed=true) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
idler_zmargin = [ 6.4 / 2 + 1.05, 6.4 / 2 + 1.05 ];
|
||||||
|
|
||||||
|
module idler(height=0, toothed=false) {
|
||||||
|
// pulley(20, 1.05, 1.05, 6.4, toothed=toothed, od=18);
|
||||||
|
translate([0,0, height-idler_zmargin[0]])
|
||||||
|
pulley(16, 1.05, 1.05, 6.4, shaft=3, toothed=toothed, od=13);
|
||||||
|
}
|
||||||
|
|
||||||
|
active_pulley_zmargin = [ 9.5, 4.5 ];
|
||||||
|
|
||||||
|
module active_pulley(height=0) {
|
||||||
|
translate([0,0,-active_pulley_zmargin[0] + height])
|
||||||
|
pulley(16,6,1,7, od=13);
|
||||||
|
}
|
||||||
|
|
||||||
|
// required distance between centers of pulley and idler for an S-bend with right angles.
|
||||||
|
pulley_sbend_offset = (9.5 + 9.7) / 2 + 0.63;
|
||||||
|
|
||||||
//!pulley(12, 6, 2, toothed=false);
|
//!pulley(12, 6, 2, toothed=false);
|
||||||
Reference in New Issue
Block a user