Ran openscad-format over everything

This commit is contained in:
2022-03-03 14:14:37 +01:00
parent a7119fd012
commit ceca63b8d2
5 changed files with 290 additions and 371 deletions

View File

@@ -1,23 +1,19 @@
include <constants.scad>; include <constants.scad>
include <parts.scad>; include <parts.scad>
csize = 15; csize = 15;
module frame() { module frame() {
translate([corner_offset, 0, 0]) translate([ corner_offset, 0, 0 ]) rotate([ 0, 90, 0 ])
rotate([0, 90, 0])
tslot(xsize - 2 * corner_offset); tslot(xsize - 2 * corner_offset);
translate([0, corner_offset, 0]) translate([ 0, corner_offset, 0 ]) rotate([ -90, 0, 0 ])
rotate([-90, 0, 0])
tslot(ysize - 2 * corner_offset); tslot(ysize - 2 * corner_offset);
translate([corner_offset, ysize, 0]) translate([ corner_offset, ysize, 0 ]) rotate([ 0, 90, 0 ])
rotate([0, 90, 0])
tslot(xsize - 2 * corner_offset); tslot(xsize - 2 * corner_offset);
translate([xsize, corner_offset, 0]) translate([ xsize, corner_offset, 0 ]) rotate([ -90, 0, 0 ])
rotate([-90, 0, 0])
tslot(ysize - 2 * corner_offset); tslot(ysize - 2 * corner_offset);
} }
module corners() { module corners() {
@@ -29,14 +25,12 @@ module corners() {
module rails() { module rails() {
frame_offset = yrail_offset; 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; rail_len = ysize - corner_offset * 2;
bom_item(printable=false, label = str("steel_bar(d=8mm, len=", rail_len, "mm)")); bom_item(printable = false,
translate([xpos, label = str("steel_bar(d=8mm, len=", rail_len, "mm)"));
frame_size / 2 + wall_thickness]) translate([ xpos, frame_size / 2 + wall_thickness ]) rotate([ -90, 0, 0 ])
rotate([-90, 0, 0])
cylinder(d = rail_diam, h = ysize - corner_offset * 2); cylinder(d = rail_diam, h = ysize - corner_offset * 2);
} }
} }
@@ -45,34 +39,27 @@ module rails() {
module ysled_rails() { module ysled_rails() {
yoff = ysled_rail_spacing / 2; yoff = ysled_rail_spacing / 2;
rail_len = xsize - frame_size - yrail_offset * 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,
bom_item(printable=false, label = str("steel_bar(d=8mm, len=", rail_len, "mm)")); 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 = rail_len); cylinder(d = rail_diam, h = rail_len);
} }
} }
module xsled() { module xsled() {
xdiff = sled_xsize / 2 + frame_size / 2; xdiff = sled_xsize / 2 + frame_size / 2;
translate([0, 0, frame_size]) translate([ 0, 0, frame_size ]) xsled_frame();
xsled_frame();
} }
module moving_parts(xpos = cur_xpos, ypos = cur_ypos) { module moving_parts(xpos = cur_xpos, ypos = cur_ypos) {
translate([yrail_offset, cur_ypos, 0]) 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);
translate([xsize - yrail_offset, cur_ypos, 0]) translate([ yrail_offset, cur_ypos, 0 ]) if ($preview) ysled_rails();
rotate([180, 180, 0])
ysled_slider(spread = sled_ysize);
translate([yrail_offset, cur_ypos, 0])
if($preview) ysled_rails();
translate([ cur_xpos, cur_ypos, 0 ]) { translate([ cur_xpos, cur_ypos, 0 ]) {
// xsled(); // xsled();
@@ -81,9 +68,10 @@ module moving_parts(xpos = cur_xpos, ypos = cur_ypos) {
} }
union() { union() {
if($preview) frame(); if ($preview)
if($preview) rails(); frame();
if ($preview)
rails();
corners(); corners();
moving_parts(); moving_parts();
} }

View File

@@ -1,7 +1,7 @@
include <units.inc>; include <constants.scad>
include <lib.scad>; include <lib.scad>
include <constants.scad>; include <stock_parts.scad>
include <stock_parts.scad>; include <units.inc>
frame_size = 20; frame_size = 20;
wall_thickness = 2; wall_thickness = 2;
@@ -26,8 +26,6 @@ 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;
// 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)")); bom_item(printable = false, label = str("tslot(", l, "mm)"));
@@ -41,14 +39,12 @@ 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 = [[-odim, -odim], cap_points = [
[-odim, ldim], [ -odim, -odim ], [ -odim, ldim ], [ odim, ldim ], [ ldim, odim ],
[ odim, ldim], [ ldim, -odim ]
[ ldim, odim], ];
[ ldim, -odim]];
difference() { difference() {
translate([0, 0, -odim]) translate([ 0, 0, -odim ]) linear_extrude(odim * 2)
linear_extrude(odim * 2)
polygon(points = cap_points); polygon(points = cap_points);
// two bars... // two bars...
@@ -78,11 +74,11 @@ module rail_holder(in_x) {
[wall_thickness, corner_size], [wall_thickness, corner_size],
[corner_size, wall_thickness]]); [corner_size, wall_thickness]]);
translate([translated_rail_offset, translated_rail_offset, frame_size/2]) translate(
[ translated_rail_offset, translated_rail_offset, frame_size / 2 ])
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);
} }
} }
} }
@@ -94,29 +90,27 @@ module ysled_slider(spread, associated_parts = $preview) {
sled_height = frame_size; sled_height = frame_size;
idler_spacing = spread / 3; idler_spacing = spread / 3;
colorize("green") colorize("green") render() translate([ 0, -sled_len / 2, 0 ])
render()
translate([0, -sled_len/2, 0])
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, translate([
-frame_size / 2, 0]) pulley_sbend_offset - yrail_offset + motor_shaft_xoffset -
cube([frame_size + 5, frame_size, sled_len]); 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);
translate([0,0,-1]) translate([ 0, 0, -1 ]) cylinder(d = bushing_od, h = bushing_len + 1);
cylinder(d = bushing_od, h = bushing_len+1);
translate([ 0, 0, sled_len - bushing_len ]) translate([ 0, 0, sled_len - bushing_len ])
cylinder(d = bushing_od, h = bushing_len + 1); cylinder(d = bushing_od, h = bushing_len + 1);
for (zpos = [ frame_size / 2, sled_len - frame_size / 2 ]) { for (zpos = [ frame_size / 2, sled_len - frame_size / 2 ]) {
translate([sled_height/2, 0, zpos]) translate([ sled_height / 2, 0, zpos ]) rotate([ 0, 90, 0 ]) {
rotate([0,90,0]) {
cylinder(h = sled_height + 1, d = rail_diam); cylinder(h = sled_height + 1, d = rail_diam);
} }
} }
@@ -125,25 +119,20 @@ module ysled_slider(spread, associated_parts = $preview) {
// TODO: add posts for the idlers // TODO: add posts for the idlers
// color("#f00") // color("#f00")
translate([pulley_sbend_offset - yrail_offset + motor_shaft_xoffset, 0, 0]) { translate(
[ 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);
} }
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]) { rotate([ 0, 0, -90 ]) { idler_post(belt_height = belt_height2); }
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) {
bushing(); bushing();
translate([ 0, 0, sled_len - bushing_len ]) bushing(); translate([ 0, 0, sled_len - bushing_len ]) bushing();
} }
@@ -155,26 +144,19 @@ module nema17_housing() {
hdepth = frame_size + wall_thickness * 2; hdepth = frame_size + wall_thickness * 2;
screw_dxy = 31 / 2; screw_dxy = 31 / 2;
translate([0, translate([ 0, -nema17_face / 2 - frame_size / 2 - wall_thickness, 0 ])
-nema17_face/2 - frame_size/2 - wall_thickness, render() difference() {
0]) cube([ hwidth, hheight, hdepth ], center = true);
render()
difference() {
cube([hwidth, hheight, hdepth],
center=true);
translate([ 0, 0, -2 ]) translate([ 0, 0, -2 ])
cube([nema17_face+1, nema17_face+1, hdepth], cube([ nema17_face + 1, nema17_face + 1, hdepth ], center = true);
center=true);
cylinder(d = 23, frame_size); cylinder(d = 23, frame_size);
for (x = [-screw_dxy, screw_dxy], for (x = [ -screw_dxy, screw_dxy ], y = [ -screw_dxy, screw_dxy ])
y = [-screw_dxy, screw_dxy])
translate([ x, y, 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);
} }
} }
} }
@@ -208,8 +190,7 @@ 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]) translate([ 0, 0, total_height - 2 ]) cylinder(r = 3, h = 3);
cylinder(r = 3, h = 3);
} }
idler(height = belt_height); idler(height = belt_height);
@@ -221,38 +202,34 @@ module flcorner() {
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) if ($preview)
translate([(corner_size - wall_thickness) / 2, translate([
-nema17_face/2 - frame_size/2 - wall_thickness, (corner_size - wall_thickness) / 2,
frame_size/2]) { -nema17_face / 2 - frame_size / 2 - wall_thickness, frame_size / 2
]) {
nema17(); nema17();
translate([0, 0, -frame_size/2 + belt_height2]) { translate([ 0, 0, -frame_size / 2 + belt_height2 ]) { active_pulley(); }
active_pulley();
} }
} }
}
module frcorner() { module frcorner() {
bom_item(); 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) if ($preview)
translate([-(corner_size - wall_thickness) / 2, translate([
-nema17_face/2 - frame_size/2 - wall_thickness, -(corner_size - wall_thickness) / 2,
frame_size/2]) { -nema17_face / 2 - frame_size / 2 - wall_thickness, frame_size / 2
]) {
nema17(); nema17();
translate([ 0, 0, belt_height1 - frame_size / 2 ]) { translate([ 0, 0, belt_height1 - frame_size / 2 ]) {
rotate([180,0,0]) rotate([ 180, 0, 0 ]) active_pulley();
active_pulley();
} }
} }
} }
@@ -282,25 +259,21 @@ module xsled_slider() {
// translate([screw_tab_len, 0, 0]) // translate([screw_tab_len, 0, 0])
difference() { difference() {
union() { union() {
rotate([0, 90, 0]) { rotate([ 0, 90, 0 ]) { cylinder(d = frame_size, h = slider_len); }
cylinder(d = frame_size, h = slider_len);
}
translate([ 0, -frame_size / 2, 0 ]) translate([ 0, -frame_size / 2, 0 ])
cube([ slider_len, frame_size, frame_size / 2 ]); cube([ slider_len, frame_size, frame_size / 2 ]);
*translate([-screw_tab_len, -frame_size/2, frame_size/2]) *translate([ -screw_tab_len, -frame_size / 2, frame_size / 2 ]) cube(
cube([screw_tab_len * 2 + slider_len, frame_size, screw_tab_thickness]); [ screw_tab_len * 2 + slider_len, frame_size, screw_tab_thickness ]);
} }
rotate([ 0, 90, 0 ]) { rotate([ 0, 90, 0 ]) {
cylinder(d = bushing_od, h = bushing_len); cylinder(d = bushing_od, h = bushing_len);
cylinder(d = rail_diam * 1.1, slider_len * 2); cylinder(d = rail_diam * 1.1, slider_len * 2);
} }
} }
if ($preview) if ($preview)
rotate([0, 90, 0]) rotate([ 0, 90, 0 ]) bushing();
bushing();
} }
module sled_cornera() { module sled_cornera() {
@@ -320,41 +293,26 @@ module sled_cornerb() {
module xsled_frame() { module xsled_frame() {
translate([ -sled_xsize / 2 + corner_offset, -ysled_rail_spacing / 2, 0 ]) translate([ -sled_xsize / 2 + corner_offset, -ysled_rail_spacing / 2, 0 ])
rotate([0, 90, 0]) rotate([ 0, 90, 0 ]) tslot(sled_xsize - corner_offset * 2);
tslot(sled_xsize - corner_offset * 2);
translate([ -sled_xsize / 2 + corner_offset, ysled_rail_spacing / 2, 0 ]) translate([ -sled_xsize / 2 + corner_offset, ysled_rail_spacing / 2, 0 ])
rotate([0, 90, 0]) rotate([ 0, 90, 0 ]) tslot(sled_xsize - corner_offset * 2);
tslot(sled_xsize - corner_offset * 2);
translate([ -sled_xsize / 2, -ysled_rail_spacing / 2 + corner_offset, 0 ]) translate([ -sled_xsize / 2, -ysled_rail_spacing / 2 + corner_offset, 0 ])
rotate([-90, 0, 0]) rotate([ -90, 0, 0 ]) tslot(sled_ysize - corner_offset * 2);
tslot(sled_ysize - corner_offset * 2);
translate([ sled_xsize / 2, -ysled_rail_spacing / 2 + corner_offset, 0 ]) translate([ sled_xsize / 2, -ysled_rail_spacing / 2 + corner_offset, 0 ])
rotate([-90, 0, 0]) rotate([ -90, 0, 0 ]) tslot(sled_ysize - corner_offset * 2);
tslot(sled_ysize - corner_offset * 2);
translate([-sled_xsize / 2, -sled_ysize / 2, 0]) translate([ -sled_xsize / 2, -sled_ysize / 2, 0 ]) sled_cornera();
sled_cornera(); translate([ sled_xsize / 2, sled_ysize / 2, 0 ]) rotate([ 0, 0, 180 ])
translate([sled_xsize / 2, sled_ysize / 2, 0])
rotate([0,0,180])
sled_cornera(); sled_cornera();
translate([sled_xsize / 2, -sled_ysize / 2, 0]) translate([ sled_xsize / 2, -sled_ysize / 2, 0 ]) rotate([ 0, 0, 90 ])
rotate([0,0,90])
sled_cornerb(); sled_cornerb();
translate([-sled_xsize / 2, sled_ysize / 2, 0]) translate([ -sled_xsize / 2, sled_ysize / 2, 0 ]) rotate([ 0, 0, 270 ])
rotate([0,0,270])
sled_cornerb(); sled_cornerb();
// simulate a piece of film // simulate a piece of film
if (false) { if (false) {
color("#0008") color("#0008") cube([ 5 * inch, 4 * inch, 1 ], center = true);
cube([
5*inch,
4*inch,
1
],
center=true);
} }
} }
@@ -371,8 +329,7 @@ module xsled2() {
lip_width = glass_thickness; lip_width = glass_thickness;
glass_holder_points = [ glass_holder_points = [
[0,0], [ 0, 0 ], [ lip_depth + wall_thickness, 0 ],
[lip_depth + wall_thickness, 0],
[ lip_depth + wall_thickness, wall_thickness + 0.5 ], [ lip_depth + wall_thickness, wall_thickness + 0.5 ],
[ lip_depth, wall_thickness + 0.5 ], [ lip_depth, wall_thickness + 0.5 ],
[ lip_depth, wall_thickness + glass_thickness ], [ lip_depth, wall_thickness + glass_thickness ],
@@ -381,19 +338,14 @@ module xsled2() {
[ 0, tab_thickness ] [ 0, tab_thickness ]
]; ];
for (xsign = [ 1, -1 ], ysign = [ 1, -1 ]) {
for (xsign = [1,-1], translate([ sled_xsize / 2 * xsign, sled_ysize / 2 * ysign, 0 ])
ysign = [1,-1]) {
translate([sled_xsize / 2 * xsign,
sled_ysize / 2 * ysign,
0])
rotate([ 0, -90 * xsign, 0 ]) { rotate([ 0, -90 * xsign, 0 ]) {
difference() { difference() {
union() { union() {
cylinder(d = tab_thickness, h = tab_len); cylinder(d = tab_thickness, h = tab_len);
translate([-tab_thickness/2, translate(
ysign > 0 ? -tab_thickness/2: 0, [ -tab_thickness / 2, ysign > 0 ? -tab_thickness / 2 : 0, 0 ])
0])
cube([ tab_thickness, tab_thickness / 2, tab_len ]); cube([ tab_thickness, tab_thickness / 2, tab_len ]);
} }
translate([ 0, 0, -0.5 ]) { translate([ 0, 0, -0.5 ]) {
@@ -410,42 +362,42 @@ module xsled2() {
difference() { difference() {
union() { union() {
translate([ -sled_xsize / 2, -inner_ysize / 2, -tab_thickness / 2 ]) translate([ -sled_xsize / 2, -inner_ysize / 2, -tab_thickness / 2 ])
rotate([0, 90, 0]) rotate([ 0, 90, 0 ]) rotate([ 0, 0, 90 ]) linear_extrude(sled_xsize)
rotate([0,0,90])
linear_extrude(sled_xsize)
polygon(glass_holder_points); polygon(glass_holder_points);
translate([ sled_xsize / 2, inner_ysize / 2, -tab_thickness / 2 ]) translate([ sled_xsize / 2, inner_ysize / 2, -tab_thickness / 2 ])
rotate([0, 90, 180]) rotate([ 0, 90, 180 ]) rotate([ 0, 0, 90 ])
rotate([0,0,90]) linear_extrude(sled_xsize) polygon(glass_holder_points);
linear_extrude(sled_xsize)
polygon(glass_holder_points);
translate([ sled_xsize / 2, -inner_ysize / 2, -tab_thickness / 2 ]) translate([ sled_xsize / 2, -inner_ysize / 2, -tab_thickness / 2 ])
rotate([0, 90, 90]) rotate([ 0, 90, 90 ]) rotate([ 0, 0, 90 ])
rotate([0,0,90]) linear_extrude(inner_ysize) polygon(glass_holder_points);
linear_extrude(inner_ysize)
polygon(glass_holder_points);
translate([ -sled_xsize / 2, inner_ysize / 2, -tab_thickness / 2 ]) translate([ -sled_xsize / 2, inner_ysize / 2, -tab_thickness / 2 ])
rotate([0, 90, -90]) rotate([ 0, 90, -90 ]) rotate([ 0, 0, 90 ])
rotate([0,0,90]) linear_extrude(inner_ysize) polygon(glass_holder_points);
linear_extrude(inner_ysize)
polygon(glass_holder_points);
} }
translate([-10, inner_ysize/2 - 1 - lip_depth + glass_thickness, -tab_thickness/2 + wall_thickness + glass_thickness]) translate([
cube([20, glass_thickness + 1, 30]); -10, inner_ysize / 2 - 1 - lip_depth + glass_thickness,
-tab_thickness / 2 + wall_thickness +
glass_thickness
]) cube([ 20, glass_thickness + 1, 30 ]);
} }
} }
color("#fff3") color("#fff3") if ($preview) {
if ($preview) {
// draw glass sheets // draw glass sheets
translate([0,0,-tab_thickness/2 + wall_thickness + glass_thickness/2]) translate(
cube([sled_xsize - lip_depth*2, inner_ysize - lip_depth*2, glass_thickness], [ 0, 0, -tab_thickness / 2 + wall_thickness + glass_thickness / 2 ])
cube(
[
sled_xsize - lip_depth * 2, inner_ysize - lip_depth * 2,
glass_thickness
],
center = true); center = true);
translate([0,0,-tab_thickness/2 + wall_thickness + 3*glass_thickness/2]) translate(
[ 0, 0, -tab_thickness / 2 + wall_thickness + 3 * glass_thickness / 2 ])
cube( cube(
[ [
sled_xsize - lip_depth * 2 + glass_thickness * 2, sled_xsize - lip_depth * 2 + glass_thickness * 2,
@@ -453,12 +405,8 @@ module xsled2() {
glass_thickness glass_thickness
], ],
center = true); center = true);
} }
} }
// render() // render()
// xsled2(); // xsled2();

View File

@@ -1,5 +1,5 @@
include <MCAD/math.scad>; include <MCAD/math.scad>
include <lib.scad>; include <lib.scad>
stock_color = "#aaa4"; stock_color = "#aaa4";
@@ -22,8 +22,7 @@ module 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);
translate([0,0,-1]) translate([ 0, 0, -1 ]) cylinder(d = bushing_id, h = bushing_len + 2);
cylinder(d = bushing_id, h = bushing_len + 2);
} }
} }
} }
@@ -33,51 +32,42 @@ module nema17(depth = 23.5) {
bom_item(printable = false, label = "NEMA-17 stepper motor"); 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) render() difference() {
render()
difference() {
union() { union() {
translate([-face/2, -face/2, -depth]) translate([ -face / 2, -face / 2, -depth ]) cube([ face, face, depth ]);
cube([face, face, depth]);
translate([ 0, 0, -1 ]) { translate([ 0, 0, -1 ]) {
cylinder(d = 22, h = 2 + 1); cylinder(d = 22, h = 2 + 1);
cylinder(d = 5, h = 22 + 1); cylinder(d = 5, h = 22 + 1);
} }
} }
translate([1.25, -5, 4]) translate([ 1.25, -5, 4 ]) cube([ 10, 10, 20 ]);
cube([10, 10, 20]);
// screw holes // screw holes
for (x = [-screw_pitch, screw_pitch], for (x = [ -screw_pitch, screw_pitch ], y = [ -screw_pitch, screw_pitch ]) {
y = [-screw_pitch, screw_pitch]) { translate([ x, y, -10 ]) cylinder(d = 5, h = 20);
translate([x,y,-10])
cylinder(d=5,h=20);
} }
} }
} }
// 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 = 1.38; belt_thickness = 1.38;
belt_pld = 0.254; // distance between line of fixed length and tips of gear teeth belt_pld =
0.254; // distance between line of fixed length and tips of gear teeth
belt_backing = 0.63 - belt_pld; 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 + 2.5;
module pulley(teeth, lrim, urim, belt_width, shaft=5, toothed=true, od = 0) { module pulley(teeth, lrim, urim, belt_width, shaft = 5, toothed = true,
bom_item(printable=false, label=str( od = 0) {
toothed ? "pulley(" : "idler(", bom_item(printable = false,
"teeth=", teeth, ", ", label = str(toothed ? "pulley(" : "idler(", "teeth=", teeth, ", ",
"flange1=", min(lrim, urim), "mm, ", "flange1=", min(lrim, urim), "mm, ", "flange2=",
"flange2=", max(lrim, urim), "mm, ", max(lrim, urim), "mm, ", "channel=", belt_width, "mm, ",
"channel=", belt_width, "mm, ", "shaft=", shaft, "mm", ")"));
"shaft=", shaft, "mm",
")"
));
nominal_rad = belt_pitch * teeth / TAU; nominal_rad = belt_pitch * teeth / TAU;
inner_rad = nominal_rad - belt_pld; inner_rad = nominal_rad - belt_pld;
outer_rad = (od > 0) ? od / 2 : nominal_rad + belt_backing; outer_rad = (od > 0) ? od / 2 : nominal_rad + belt_backing;
@@ -87,36 +77,28 @@ module pulley(teeth, lrim, urim, belt_width, shaft=5, toothed=true, od = 0) {
dtheta = 180 / teeth; dtheta = 180 / teeth;
tooth_points = [ tooth_points = [for (i = [1:1:teeth]) let(theta = i * 360 / teeth) each
for (i = [1:1:teeth]) [[sin(theta) * minor_rad, cos(theta) * minor_rad],
let (theta = i * 360 / teeth)
each [
[sin(theta) * minor_rad, cos(theta) * minor_rad],
[sin(theta) * inner_rad, cos(theta) * inner_rad], [sin(theta) * inner_rad, cos(theta) * inner_rad],
[sin(theta + dtheta) * inner_rad, cos(theta + dtheta) * inner_rad], [sin(theta + dtheta) * inner_rad, cos(theta + dtheta) * inner_rad],
[sin(theta + dtheta) * minor_rad, cos(theta + dtheta) * minor_rad] [sin(theta + dtheta) * minor_rad, cos(theta + dtheta) * minor_rad]]];
]
];
// echo([each [0:1:teeth]]); // echo([each [0:1:teeth]]);
// echo(tooth_points); // echo(tooth_points);
colorize(stock_color) colorize(stock_color) render() difference() {
render()
difference() {
union() { union() {
cylinder(r = outer_rad, h = lrim); cylinder(r = outer_rad, h = lrim);
translate([0,0,lrim]) translate([ 0, 0, lrim ]) if (toothed) {
if (toothed) {
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 = idler_rad, h = belt_width); cylinder(r = idler_rad, h = belt_width);
} }
translate([0,0,lrim + belt_width]) translate([ 0, 0, lrim + belt_width ]) cylinder(r = outer_rad, h = urim);
cylinder(r=outer_rad, h=urim);
} }
translate([ 0, 0, -1 ]) translate([ 0, 0, -1 ])
@@ -139,7 +121,8 @@ module active_pulley(height=0) {
pulley(16, 6, 1, 7, od = 13); pulley(16, 6, 1, 7, od = 13);
} }
// required distance between centers of pulley and idler for an S-bend with right angles. // 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_sbend_offset = (9.5 + 9.7) / 2 + 0.63;
//! pulley(12, 6, 2, toothed=false); //! pulley(12, 6, 2, toothed=false);