diff --git a/printed/printed_pulleys.scad b/printed/printed_pulleys.scad index 9f8112d..60b6e3c 100644 --- a/printed/printed_pulleys.scad +++ b/printed/printed_pulleys.scad @@ -1,5 +1,5 @@ // -// NopSCADlib Copyright Chris Palmer 2018 +// NopSCADlib Copyright Chris Palmer 2020 // nop.head@gmail.com // hydraraptor.blogspot.com // @@ -16,11 +16,9 @@ // You should have received a copy of the GNU General Public License along with NopSCADlib. // If not, see . // -// -// Printed pulleys are a remix of droftarts's (see ) Parametric Pulleys -// on Thingiverse (see ) and are licensed under the -// Creative Commons - Attribution - Share Alike license (see ) -// +//! Printed pulleys are a remix of droftarts's (see ) Parametric Pulleys +//! on Thingiverse (see ) and are licensed under the +//! Creative Commons - Attribution - Share Alike license (see ) // include @@ -28,6 +26,8 @@ include printed_pulley_GT2_profile = [[0.747183,-0.5],[0.747183,0],[0.647876,0.037218],[0.598311,0.130528],[0.578556,0.238423],[0.547158,0.343077],[0.504649,0.443762],[0.451556,0.53975],[0.358229,0.636924],[0.2484,0.707276],[0.127259,0.750044],[0,0.76447],[-0.127259,0.750044],[-0.2484,0.707276],[-0.358229,0.636924],[-0.451556,0.53975],[-0.504797,0.443762],[-0.547291,0.343077],[-0.578605,0.238423],[-0.598311,0.130528],[-0.648009,0.037218],[-0.747183,0],[-0.747183,-0.5]]; +function printed_pulley_inverted(type) = pulley_hub_dia(type) < pulley_flange_dia(type); //! Need to print upside down to prevent overhang + function printed_pulley_od(tooth_count, tooth_pitch, pitch_line_offset) = tooth_count * tooth_pitch / PI - 2 * pitch_line_offset; @@ -93,79 +93,98 @@ module printed_pulley(type) { //! Draw a printable pulley or = pulley_od(type) / 2; screw_z = pulley_screw_z(type); + stl(str("printed_pulley_", type[0])); + module core() { translate_z(pulley_hub_length(type) + ft) linear_extrude(w + 1) let($fa = 1, $fs = 0.1) if ("GT2" == str(pulley_type(type)[0], pulley_type(type)[1], pulley_type(type)[2])) difference() { printed_pulley_GT2_teeth(type); - circle(r = pulley_bore(type) / 2); + circle(d = pulley_bore(type)); } else difference() { circle(or); printed_pulley_teeth(type); - circle(r = pulley_bore(type) / 2); + circle(d = pulley_bore(type)); } } module screw_holes() { - if (pulley_screws(type)) + if(pulley_screws(type)) translate_z(screw_z) for(i = [0 : pulley_screws(type) - 1]) rotate([-90, 180, i * -90]) - teardrop(r = screw_pilot_hole(pulley_screw(type)), h = pulley_flange_dia(type)/2 + 1, center=false); + teardrop(r = screw_pilot_hole(pulley_screw(type)), h = pulley_flange_dia(type) / 2 + 1, center = false); } - // hub - if (hl) - translate_z(pulley_hub_dia(type) >= pulley_flange_dia(type) ? 0 : hl + w + 2 * ft) - render_if(screw_z && screw_z < hl) - difference() { - linear_extrude(hl) - difference() { - circle(r = pulley_hub_dia(type) / 2); - circle(r = pulley_bore(type) / 2); - } - if (screw_z < hl) + module hub() + linear_extrude(hl) + difference() { + circle(d= pulley_hub_dia(type)); + circle(d = pulley_bore(type)); + } + + translate_z(printed_pulley_inverted(type) ? - hl : 0) { + // hub + if(hl) + translate_z(printed_pulley_inverted(type) ? hl + w + 2 * ft : 0) + if(screw_z && screw_z < hl) + render() difference() { + hub(); + screw_holes(); + } + else + hub(); + + // bottom flange + translate_z(hl) + linear_extrude(ft) + difference() { + circle(d = pulley_flange_dia(type)); + circle(d = pulley_bore(type)); } - // bottom flange - translate_z(hl) - linear_extrude(ft) - difference() { - circle(d = pulley_flange_dia(type)); - circle(r = pulley_bore(type) / 2); - } - // top flange - translate_z(hl + ft + w) { - // inner part, supported by core - linear_extrude(ft) - difference() { - circle(r = or); - circle(r = pulley_bore(type) / 2); - } - // outer part at 45 degrees for printing - rotate_extrude() - translate([or -eps , ft]) - vflip() - right_triangle(ft, ft); - } + // top flange + translate_z(hl + ft + w) { + // inner part, supported by core + linear_extrude(ft) + difference() { + circle(r = or); + circle(d = pulley_bore(type)); + } + // outer part at 45 degrees for printing + rotate_extrude() + translate([or -eps , ft]) + vflip() + right_triangle(ft, ft); + } - difference() { // T5 pulleys have screws through the teeth - render_if(screw_z && screw_z > hl) - core(); - if (pulley_screw_z(type) > hl) - translate_z(pulley_hub_dia(type) >= pulley_flange_dia(type) ? 0 : hl) - screw_holes(); + if(screw_z && screw_z > hl) + render() + difference() { // T5 pulleys have screws through the teeth + core(); + + translate_z(printed_pulley_inverted(type) ? hl : 0) + screw_holes(); + } + else + core(); } } -module printed_pulley_assembly(type, colour) { //! Draw a printed pulley with its grub screws in place +module printed_pulley_assembly(type, colour = pp1_colour) //! Draw a printed pulley with its grub screws in place +assembly(str("printed_pulley_", type[0])) { translate_z(pulley_offset(type)) { - color(colour) - printed_pulley(type); + stl_colour(colour) + if(printed_pulley_inverted(type)) + translate_z(pulley_height(type)) + hflip() + printed_pulley(type); + else + printed_pulley(type); if (pulley_screws(type)) translate_z(pulley_screw_z(type)) diff --git a/readme.md b/readme.md index 3040856..c7bfd32 100644 --- a/readme.md +++ b/readme.md @@ -37,12 +37,12 @@ See [usage](docs/usage.md) for requirements, installation instructions and a usa Extrusions Opengrab Stepper_motors PSU_shroud Rounded_right_triangle Fans PCB Swiss_clips Press_fit Sector Fuseholder PCBs Toggles Printed_box Sweep - Geared_steppers PSUs Transformers Ribbon_clamp Thread - Green_terminals Panel_meters Tubings SSR_shroud Tube - Hot_ends Pillars Variacs Screw_knob - Hygrometer Pin_headers Veroboard Socket_box - IECs Pulleys Washers Strap_handle - Inserts Wire + Geared_steppers PSUs Transformers Printed_pulleys Thread + Green_terminals Panel_meters Tubings Ribbon_clamp Tube + Hot_ends Pillars Variacs SSR_shroud + Hygrometer Pin_headers Veroboard Screw_knob + IECs Pulleys Washers Socket_box + Inserts Wire Strap_handle Zipties @@ -5041,6 +5041,73 @@ It can also have printed feet on the base with the screws doubling up to hold th | 1 | box2_assembly | +Top + +--- + +## Printed_pulleys +Printed pulleys are a remix of droftarts's (see ) Parametric Pulleys +on Thingiverse (see ) and are licensed under the +Creative Commons - Attribution - Share Alike license (see ) + +[printed/printed_pulleys.scad](printed/printed_pulleys.scad) Implementation. + +[tests/printed_pulleys.scad](tests/printed_pulleys.scad) Code for this example. + +### Functions +| Function | Description | +|:--- |:--- | +| `printed_pulley_inverted(type)` | Need to print upside down to prevent overhang | + +### Modules +| Module | Description | +|:--- |:--- | +| `printed_pulley(type)` | Draw a printable pulley | +| `printed_pulley_assembly(type, colour = pp1_colour)` | Draw a printed pulley with its grub screws in place | +| `printed_pulley_teeth(type)` | Draw the pulley's teeth | + +![printed_pulleys](tests/png/printed_pulleys.png) + +### Vitamins +| Qty | Module call | BOM entry | +| ---:|:--- |:---| +| 1 | `screw(M3_grub_screw, 3)` | Screw M3 grub x 3mm | +| 2 | `screw(M3_grub_screw, 4.5)` | Screw M3 grub x 4.5mm | +| 2 | `screw(M3_grub_screw, 4)` | Screw M3 grub x 4mm | +| 4 | `screw(M3_grub_screw, 6)` | Screw M3 grub x 6mm | +| 1 | `screw(M4_grub_screw, 6)` | Screw M4 grub x 6mm | + +### Printed +| Qty | Filename | +| ---:|:--- | +| 1 | printed_pulley_GT2x12_pulley.stl | +| 1 | printed_pulley_GT2x16_plain_idler.stl | +| 1 | printed_pulley_GT2x16_pulley.stl | +| 1 | printed_pulley_GT2x16_toothed_idler.stl | +| 1 | printed_pulley_GT2x16x7_plain_idler.stl | +| 1 | printed_pulley_GT2x20_plain_idler.stl | +| 1 | printed_pulley_GT2x20_toothed_idler.stl | +| 1 | printed_pulley_GT2x20ob_pulley.stl | +| 1 | printed_pulley_GT2x20um_pulley.stl | +| 1 | printed_pulley_T2p5x16_pulley.stl | +| 1 | printed_pulley_T5x10_pulley.stl | + +### Assemblies +| Qty | Name | +| ---:|:--- | +| 1 | printed_pulley_GT2x12_pulley_assembly | +| 1 | printed_pulley_GT2x16_plain_idler_assembly | +| 1 | printed_pulley_GT2x16_pulley_assembly | +| 1 | printed_pulley_GT2x16_toothed_idler_assembly | +| 1 | printed_pulley_GT2x16x7_plain_idler_assembly | +| 1 | printed_pulley_GT2x20_plain_idler_assembly | +| 1 | printed_pulley_GT2x20_toothed_idler_assembly | +| 1 | printed_pulley_GT2x20ob_pulley_assembly | +| 1 | printed_pulley_GT2x20um_pulley_assembly | +| 1 | printed_pulley_T2p5x16_pulley_assembly | +| 1 | printed_pulley_T5x10_pulley_assembly | + + Top --- diff --git a/tests/png/printed_pulleys.png b/tests/png/printed_pulleys.png new file mode 100644 index 0000000..5c2c102 Binary files /dev/null and b/tests/png/printed_pulleys.png differ diff --git a/tests/printed_pulleys.scad b/tests/printed_pulleys.scad index 9b51a6b..44983e0 100644 --- a/tests/printed_pulleys.scad +++ b/tests/printed_pulleys.scad @@ -23,15 +23,23 @@ include <../printed/printed_pulleys.scad> use <../utils/layout.scad> -module PrintedPulley_test() { - layout([for (p = pulleys) pulley_flange_dia(p)]) { - rotate(-135) - printed_pulley_assembly(pulleys[$i]); - translate([0, 20, 0]) - rotate(45) - pulley_assembly(pulleys[$i]); +module printed_pulley_test(show_metal = false) { + layout([for (p = pulleys) pulley_flange_dia(p)]) let(p = pulleys[$i]) { + rotate(-145) + if($preview) + printed_pulley_assembly(p); + else + printed_pulley(p); + + if(show_metal) + not_on_bom() + translate([0, 20]) + rotate(-145) + pulley_assembly(p); } } -if ($preview) - PrintedPulley_test(); +if($preview) + printed_pulley_test(true); +else + printed_pulley_test();