Added pulleys, bom item listing
This commit is contained in:
@@ -28,10 +28,12 @@ module corners() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module rails() {
|
module rails() {
|
||||||
frame_offset = frame_size / 2 + corner_size / 2;
|
frame_offset = yrail_offset;
|
||||||
colorize(stock_color)
|
colorize(stock_color)
|
||||||
{
|
{
|
||||||
for (xpos = [frame_offset, xsize - frame_offset]) {
|
for (xpos = [frame_offset, xsize - frame_offset]) {
|
||||||
|
rail_len = ysize - corner_offset * 2;
|
||||||
|
bom_item(printable=false, label = str("steel_bar(d=8mm, len=", rail_len, "mm)"));
|
||||||
translate([xpos,
|
translate([xpos,
|
||||||
frame_size / 2 + wall_thickness])
|
frame_size / 2 + wall_thickness])
|
||||||
rotate([-90, 0, 0])
|
rotate([-90, 0, 0])
|
||||||
@@ -41,13 +43,15 @@ module rails() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module ysled_rails() {
|
module ysled_rails() {
|
||||||
frame_offset = frame_size + corner_size / 2;
|
|
||||||
yoff = ysled_rail_spacing / 2;
|
yoff = ysled_rail_spacing / 2;
|
||||||
|
rail_len = xsize - frame_size - yrail_offset * 2;
|
||||||
colorize(stock_color)
|
colorize(stock_color)
|
||||||
for (ypos = [-yoff, yoff])
|
for (ypos = [-yoff, yoff]) {
|
||||||
|
bom_item(printable=false, label = str("steel_bar(d=8mm, len=", rail_len, "mm)"));
|
||||||
translate([frame_size / 2, ypos, 0])
|
translate([frame_size / 2, ypos, 0])
|
||||||
rotate([0, 90, 0])
|
rotate([0, 90, 0])
|
||||||
cylinder(d = rail_diam, h = xsize - frame_size * 2 - corner_size);
|
cylinder(d = rail_diam, h = rail_len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -59,15 +63,17 @@ module xsled() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module moving_parts(xpos = cur_xpos, ypos = cur_ypos) {
|
module moving_parts(xpos = cur_xpos, ypos = cur_ypos) {
|
||||||
translate([frame_size / 2 + corner_size / 2,
|
translate([yrail_offset, cur_ypos, 0])
|
||||||
cur_ypos, 0]) {
|
ysled_slider(spread = sled_ysize);
|
||||||
ysled_slider(spread = sled_ysize, associated_parts = true);
|
|
||||||
translate([xsize - frame_size - corner_size, 0, 0])
|
translate([xsize - yrail_offset, cur_ypos, 0])
|
||||||
rotate([0, 180, 0])
|
rotate([0, 180, 0])
|
||||||
ysled_slider(spread = sled_ysize, associated_parts = true);
|
ysled_slider(spread = sled_ysize);
|
||||||
ysled_rails();
|
|
||||||
|
translate([yrail_offset, cur_ypos, 0])
|
||||||
|
if($preview) ysled_rails();
|
||||||
|
|
||||||
}
|
|
||||||
translate([cur_xpos, cur_ypos, 0]) {
|
translate([cur_xpos, cur_ypos, 0]) {
|
||||||
// xsled();
|
// xsled();
|
||||||
xsled2();
|
xsled2();
|
||||||
@@ -75,8 +81,8 @@ module moving_parts(xpos = cur_xpos, ypos = cur_ypos) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
union() {
|
union() {
|
||||||
frame();
|
if($preview) frame();
|
||||||
rails();
|
if($preview) rails();
|
||||||
corners();
|
corners();
|
||||||
moving_parts();
|
moving_parts();
|
||||||
}
|
}
|
||||||
|
|||||||
5
lib.scad
Normal file
5
lib.scad
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
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));
|
||||||
|
}
|
||||||
47
parts.scad
47
parts.scad
@@ -1,4 +1,5 @@
|
|||||||
include <units.inc>;
|
include <units.inc>;
|
||||||
|
include <lib.scad>;
|
||||||
include <constants.scad>;
|
include <constants.scad>;
|
||||||
include <stock_parts.scad>;
|
include <stock_parts.scad>;
|
||||||
|
|
||||||
@@ -11,6 +12,8 @@ corner_size=30;
|
|||||||
// will be $L.
|
// will be $L.
|
||||||
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.
|
||||||
|
yrail_offset = (frame_size + corner_size / 2) / 2;
|
||||||
|
|
||||||
ysled_extralen = frame_size; // on each end
|
ysled_extralen = frame_size; // on each end
|
||||||
|
|
||||||
@@ -23,6 +26,7 @@ ysled_rail_spacing = (sled_ysize);
|
|||||||
|
|
||||||
// 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) {
|
||||||
|
bom_item(printable=false, label = str("tslot(", l, "mm)"));
|
||||||
colorize(stock_color) {
|
colorize(stock_color) {
|
||||||
translate([-frame_size/2, -frame_size/2, 0])
|
translate([-frame_size/2, -frame_size/2, 0])
|
||||||
cube([frame_size, frame_size, l]);
|
cube([frame_size, frame_size, l]);
|
||||||
@@ -60,23 +64,28 @@ module rail_holder(in_x) {
|
|||||||
ldim = frame_size/2 + corner_size;
|
ldim = frame_size/2 + corner_size;
|
||||||
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;
|
||||||
|
|
||||||
translate([frame_size/2, frame_size/2, -frame_size/2]) {
|
translate([frame_size/2, frame_size/2, -frame_size/2]) {
|
||||||
difference() {
|
difference() {
|
||||||
linear_extrude(frame_size)
|
linear_extrude(frame_size)
|
||||||
polygon(points = [[wall_thickness, wall_thickness],
|
polygon(points = [[wall_thickness, wall_thickness],
|
||||||
[wall_thickness, corner_size],
|
[wall_thickness, corner_size],
|
||||||
[corner_size, wall_thickness]]);
|
[corner_size, wall_thickness]]);
|
||||||
translate([corner_size / 2, corner_size/2, frame_size/2])
|
|
||||||
rotate([tube_rotation -90, tube_rotation, 0])
|
translate([translated_rail_offset, translated_rail_offset, frame_size/2])
|
||||||
translate([0, 0, -corner_size])
|
rotate([tube_rotation -90, tube_rotation, 0])
|
||||||
cylinder(d = rail_diam, corner_size * 2);
|
translate([0, 0, -corner_size])
|
||||||
|
cylinder(d = rail_diam, corner_size * 4);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// centered on
|
// centered on
|
||||||
module ysled_slider(spread, associated_parts = false) {
|
module ysled_slider(spread, associated_parts = $preview) {
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -145,35 +154,48 @@ module nema17_housing() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module flcorner() {
|
module flcorner() {
|
||||||
|
bom_item();
|
||||||
rotate([0, 0, 0]) {
|
rotate([0, 0, 0]) {
|
||||||
corner_base();
|
corner_base();
|
||||||
rail_holder(false);
|
rail_holder(false);
|
||||||
}
|
}
|
||||||
translate([(corner_size-wall_thickness)/2, 0, 0])
|
translate([(corner_size-wall_thickness)/2, 0, 0])
|
||||||
nema17_housing();
|
nema17_housing();
|
||||||
|
|
||||||
|
if($preview)
|
||||||
translate([(corner_size - wall_thickness) / 2,
|
translate([(corner_size - wall_thickness) / 2,
|
||||||
-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]) {
|
||||||
|
pulley(16,6,1,7);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module frcorner() {
|
module frcorner() {
|
||||||
|
bom_item();
|
||||||
rotate([0, 0, 90]) {
|
rotate([0, 0, 90]) {
|
||||||
corner_base();
|
corner_base();
|
||||||
rail_holder(true);
|
rail_holder(true);
|
||||||
}
|
}
|
||||||
translate([-(corner_size-wall_thickness)/2, 0, 0])
|
translate([-(corner_size-wall_thickness)/2, 0, 0])
|
||||||
nema17_housing();
|
nema17_housing();
|
||||||
|
|
||||||
|
if($preview)
|
||||||
translate([-(corner_size - wall_thickness) / 2,
|
translate([-(corner_size - wall_thickness) / 2,
|
||||||
-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]) {
|
||||||
|
pulley(16, 1, 6, 7);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module blcorner() {
|
module blcorner() {
|
||||||
|
bom_item();
|
||||||
rotate([0, 0, 270]) {
|
rotate([0, 0, 270]) {
|
||||||
corner_base();
|
corner_base();
|
||||||
rail_holder(true);
|
rail_holder(true);
|
||||||
@@ -181,6 +203,7 @@ module blcorner() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module brcorner() {
|
module brcorner() {
|
||||||
|
bom_item();
|
||||||
rotate([0, 0, 180]) {
|
rotate([0, 0, 180]) {
|
||||||
corner_base();
|
corner_base();
|
||||||
rail_holder(false);
|
rail_holder(false);
|
||||||
@@ -212,17 +235,20 @@ module xsled_slider() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if($preview)
|
||||||
rotate([0, 90, 0])
|
rotate([0, 90, 0])
|
||||||
bushing();
|
bushing();
|
||||||
}
|
}
|
||||||
|
|
||||||
module sled_cornera() {
|
module sled_cornera() {
|
||||||
|
bom_item();
|
||||||
corner_base();
|
corner_base();
|
||||||
translate([-frame_size/2 - wall_thickness, 0, -frame_size])
|
translate([-frame_size/2 - wall_thickness, 0, -frame_size])
|
||||||
xsled_slider();
|
xsled_slider();
|
||||||
}
|
}
|
||||||
|
|
||||||
module sled_cornerb() {
|
module sled_cornerb() {
|
||||||
|
bom_item();
|
||||||
corner_base();
|
corner_base();
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])
|
||||||
translate([-frame_size/2 - wall_thickness, 0, -frame_size])
|
translate([-frame_size/2 - wall_thickness, 0, -frame_size])
|
||||||
@@ -270,7 +296,7 @@ module xsled_frame() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module xsled2() {
|
module xsled2() {
|
||||||
|
bom_item();
|
||||||
|
|
||||||
tab_len = bushing_len * 2;
|
tab_len = bushing_len * 2;
|
||||||
tab_thickness = bushing_od + wall_thickness * 2;
|
tab_thickness = bushing_od + wall_thickness * 2;
|
||||||
@@ -368,4 +394,5 @@ module xsled2() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// render()
|
// render()
|
||||||
//xsled2();
|
// xsled2();
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
include <MCAD/math.scad>;
|
||||||
|
include <lib.scad>;
|
||||||
|
|
||||||
stock_color = "#aaa4";
|
stock_color = "#aaa4";
|
||||||
|
|
||||||
bushing_od = 12;
|
bushing_od = 12;
|
||||||
@@ -15,6 +18,7 @@ module colorize(colorname) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module bushing() {
|
module bushing() {
|
||||||
|
bom_item(printable=false, label="Bushing");
|
||||||
colorize(stock_color) render() {
|
colorize(stock_color) render() {
|
||||||
difference() {
|
difference() {
|
||||||
cylinder(d = bushing_od, h = bushing_len);
|
cylinder(d = bushing_od, h = bushing_len);
|
||||||
@@ -26,6 +30,7 @@ module bushing() {
|
|||||||
|
|
||||||
// located with the shaft in +z, face on the XY plane
|
// located with the shaft in +z, face on the XY plane
|
||||||
module nema17(depth = 23.5) {
|
module nema17(depth = 23.5) {
|
||||||
|
bom_item(printable=false, label="NEMA-17 stepper motor");
|
||||||
face = 42.3;
|
face = 42.3;
|
||||||
screw_pitch = 31 / 2;
|
screw_pitch = 31 / 2;
|
||||||
color(stock_color)
|
color(stock_color)
|
||||||
@@ -51,3 +56,65 @@ module nema17(depth = 23.5) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// belts and pulleys
|
||||||
|
belt_pitch = 2; // 2mm tooth width for GT2 = 2mm pitch
|
||||||
|
belt_width = 6;
|
||||||
|
belt_thickness = 3;
|
||||||
|
tooth_height = 2;
|
||||||
|
|
||||||
|
module pulley(teeth, lrim, urim, belt_width, shaft=5, toothed=true) {
|
||||||
|
bom_item(printable=false, label=str(
|
||||||
|
toothed ? "pulley(" : "idler(",
|
||||||
|
"teeth=", teeth, ", ",
|
||||||
|
"flange1=", min(lrim, urim), "mm, ",
|
||||||
|
"flange2=", max(lrim, urim), "mm, ",
|
||||||
|
"channel=", belt_width, "mm, ",
|
||||||
|
"shaft=", shaft, "mm",
|
||||||
|
")"
|
||||||
|
));
|
||||||
|
inner_rad = belt_pitch * teeth / TAU;
|
||||||
|
outer_rad = inner_rad + belt_thickness;
|
||||||
|
minor_rad = inner_rad - tooth_height;
|
||||||
|
mid_rad = inner_rad - tooth_height / 2;
|
||||||
|
|
||||||
|
dtheta = 180 / teeth;
|
||||||
|
|
||||||
|
tooth_points = [
|
||||||
|
for (i = [1:1:teeth])
|
||||||
|
let (theta = i * 360 / teeth)
|
||||||
|
each [
|
||||||
|
[sin(theta) * minor_rad, cos(theta) * minor_rad],
|
||||||
|
[sin(theta) * inner_rad, cos(theta) * inner_rad],
|
||||||
|
[sin(theta + dtheta) * inner_rad, cos(theta + dtheta) * inner_rad],
|
||||||
|
[sin(theta + dtheta) * minor_rad, cos(theta + dtheta) * minor_rad]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
//echo([each [0:1:teeth]]);
|
||||||
|
|
||||||
|
//echo(tooth_points);
|
||||||
|
|
||||||
|
colorize(stock_color)
|
||||||
|
render()
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
cylinder(r=outer_rad, h=lrim);
|
||||||
|
translate([0,0,lrim])
|
||||||
|
if (toothed) {
|
||||||
|
linear_extrude(belt_width)
|
||||||
|
polygon(tooth_points, convexity = teeth * 2 + 4);
|
||||||
|
} else {
|
||||||
|
cylinder(r = minor_rad, h = belt_width);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([0,0,lrim + belt_width])
|
||||||
|
cylinder(r=outer_rad, h=urim);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([0,0,-1])
|
||||||
|
cylinder(d=shaft, h=belt_width + lrim + urim + 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//!pulley(12, 6, 2, toothed=false);
|
||||||
Reference in New Issue
Block a user