From 932c68a2c01307fd22946b17f9419894f2de2e9f Mon Sep 17 00:00:00 2001 From: Chris Palmer Date: Sun, 6 Oct 2024 22:59:03 +0100 Subject: [PATCH] Updated images and readme. Pipes are now made with tube instead of differencing cylinders. HTpipeFitting() now uses rotate_extrude and corrected internal shape. The seal ring is now tube diameter + 13. --- readme.md | 99 +++++++++++++++++++++++++++++++++++++-- tests/HT_pipes.scad | 23 +++++----- tests/png/ht_pipes.png | Bin 0 -> 50950 bytes vitamins/ht_pipe.scad | 102 ++++++++++++++++++++++++----------------- 4 files changed, 166 insertions(+), 58 deletions(-) create mode 100644 tests/png/ht_pipes.png diff --git a/readme.md b/readme.md index 9f76dad..fa58111 100644 --- a/readme.md +++ b/readme.md @@ -48,9 +48,9 @@ A list of changes classified as breaking, additions or fixes is maintained in [C Gear_motors Pin_headers Tubings SSR_shroud Geared_steppers Potentiometers Variacs Screw_knob Green_terminals Pulleys Veroboard Socket_box - Hot_ends Washers Strap_handle - Hygrometer Wire - Zipties + HT_pipes Washers Strap_handle + Hot_ends Wire + Hygrometer Zipties --- @@ -1591,6 +1591,99 @@ Needs updating as mostly obsolete versions. | 4 | `ziptie(small_ziptie)` | Ziptie 2.5mm x 100mm min length | +Top + +--- + +## HT_pipes +Parametric PVC HT water pipes commonly found in hardware stores around germany. Great for building weather proof cases for IoT things. + +[vitamins/ht_pipes.scad](vitamins/ht_pipes.scad) Object definitions. + +[vitamins/ht_pipe.scad](vitamins/ht_pipe.scad) Implementation. + +[tests/HT_pipes.scad](tests/HT_pipes.scad) Code for this example. + +### Properties +| Function | Description | +|:--- |:--- | +| `pipe_length(type)` | Pipe length | +| `pipe_od(type)` | Outside diameter | +| `pipe_td(type)` | T-Pipe diameter | +| `pipe_wall(type)` | Wall thickness | + +### Modules +| Module | Description | +|:--- |:--- | +| `ht_cap(type)` | Draw specified cap | +| `ht_pipe(type)` | Draw specified pipe | +| `ht_tpipe(type)` | Draw specified T-pipe | + +![ht_pipes](tests/png/ht_pipes.png) + +### Vitamins +| Qty | Module call | BOM entry | +| ---:|:--- |:---| +| 1 | `ht_cap(HT_110_cap)` | PVC Waterpipe - HT 110 cap | +| 1 | `ht_pipe(HT_110_pipe_1000)` | PVC Waterpipe - HT 110 pipe 1000 mm | +| 1 | `ht_pipe(HT_110_pipe_150)` | PVC Waterpipe - HT 110 pipe 150 mm | +| 1 | `ht_pipe(HT_110_pipe_1500)` | PVC Waterpipe - HT 110 pipe 1500 mm | +| 1 | `ht_pipe(HT_110_pipe_2000)` | PVC Waterpipe - HT 110 pipe 2000 mm | +| 1 | `ht_pipe(HT_110_pipe_250)` | PVC Waterpipe - HT 110 pipe 250 mm | +| 1 | `ht_pipe(HT_110_pipe_500)` | PVC Waterpipe - HT 110 pipe 500 mm | +| 1 | `ht_cap(HT_125_cap)` | PVC Waterpipe - HT 125 cap | +| 1 | `ht_pipe(HT_125_pipe_1000)` | PVC Waterpipe - HT 125 pipe 1000 mm | +| 1 | `ht_pipe(HT_125_pipe_150)` | PVC Waterpipe - HT 125 pipe 150 mm | +| 1 | `ht_pipe(HT_125_pipe_1500)` | PVC Waterpipe - HT 125 pipe 1500 mm | +| 1 | `ht_pipe(HT_125_pipe_2000)` | PVC Waterpipe - HT 125 pipe 2000 mm | +| 1 | `ht_pipe(HT_125_pipe_250)` | PVC Waterpipe - HT 125 pipe 250 mm | +| 1 | `ht_pipe(HT_125_pipe_500)` | PVC Waterpipe - HT 125 pipe 500 mm | +| 1 | `ht_cap(HT_160_cap)` | PVC Waterpipe - HT 160 cap | +| 1 | `ht_pipe(HT_160_pipe_1000)` | PVC Waterpipe - HT 160 pipe 1000 mm | +| 1 | `ht_pipe(HT_160_pipe_150)` | PVC Waterpipe - HT 160 pipe 150 mm | +| 1 | `ht_pipe(HT_160_pipe_1500)` | PVC Waterpipe - HT 160 pipe 1500 mm | +| 1 | `ht_pipe(HT_160_pipe_2000)` | PVC Waterpipe - HT 160 pipe 2000 mm | +| 1 | `ht_pipe(HT_160_pipe_250)` | PVC Waterpipe - HT 160 pipe 250 mm | +| 1 | `ht_pipe(HT_160_pipe_500)` | PVC Waterpipe - HT 160 pipe 500 mm | +| 1 | `ht_cap(HT_32_cap)` | PVC Waterpipe - HT 32 cap | +| 1 | `ht_pipe(HT_32_pipe_1000)` | PVC Waterpipe - HT 32 pipe 1000 mm | +| 1 | `ht_pipe(HT_32_pipe_150)` | PVC Waterpipe - HT 32 pipe 150 mm | +| 1 | `ht_pipe(HT_32_pipe_1500)` | PVC Waterpipe - HT 32 pipe 1500 mm | +| 1 | `ht_pipe(HT_32_pipe_2000)` | PVC Waterpipe - HT 32 pipe 2000 mm | +| 1 | `ht_pipe(HT_32_pipe_250)` | PVC Waterpipe - HT 32 pipe 250 mm | +| 1 | `ht_pipe(HT_32_pipe_500)` | PVC Waterpipe - HT 32 pipe 500 mm | +| 1 | `ht_cap(HT_40_cap)` | PVC Waterpipe - HT 40 cap | +| 1 | `ht_pipe(HT_40_pipe_1000)` | PVC Waterpipe - HT 40 pipe 1000 mm | +| 1 | `ht_pipe(HT_40_pipe_150)` | PVC Waterpipe - HT 40 pipe 150 mm | +| 1 | `ht_pipe(HT_40_pipe_1500)` | PVC Waterpipe - HT 40 pipe 1500 mm | +| 1 | `ht_pipe(HT_40_pipe_2000)` | PVC Waterpipe - HT 40 pipe 2000 mm | +| 1 | `ht_pipe(HT_40_pipe_250)` | PVC Waterpipe - HT 40 pipe 250 mm | +| 1 | `ht_pipe(HT_40_pipe_500)` | PVC Waterpipe - HT 40 pipe 500 mm | +| 1 | `ht_tpipe(HT_50_tpipe)` | PVC Waterpipe - HT 50 T pipe | +| 1 | `ht_cap(HT_50_cap)` | PVC Waterpipe - HT 50 cap | +| 1 | `ht_pipe(HT_50_pipe_1000)` | PVC Waterpipe - HT 50 pipe 1000 mm | +| 1 | `ht_pipe(HT_50_pipe_150)` | PVC Waterpipe - HT 50 pipe 150 mm | +| 1 | `ht_pipe(HT_50_pipe_1500)` | PVC Waterpipe - HT 50 pipe 1500 mm | +| 1 | `ht_pipe(HT_50_pipe_2000)` | PVC Waterpipe - HT 50 pipe 2000 mm | +| 1 | `ht_pipe(HT_50_pipe_250)` | PVC Waterpipe - HT 50 pipe 250 mm | +| 1 | `ht_pipe(HT_50_pipe_500)` | PVC Waterpipe - HT 50 pipe 500 mm | +| 1 | `ht_tpipe(HT_50_40_tpipe)` | PVC Waterpipe - HT 50/40 T pipe | +| 1 | `ht_cap(HT_75_cap)` | PVC Waterpipe - HT 75 cap | +| 1 | `ht_pipe(HT_75_pipe_1000)` | PVC Waterpipe - HT 75 pipe 1000 mm | +| 1 | `ht_pipe(HT_75_pipe_150)` | PVC Waterpipe - HT 75 pipe 150 mm | +| 1 | `ht_pipe(HT_75_pipe_1500)` | PVC Waterpipe - HT 75 pipe 1500 mm | +| 1 | `ht_pipe(HT_75_pipe_2000)` | PVC Waterpipe - HT 75 pipe 2000 mm | +| 1 | `ht_pipe(HT_75_pipe_250)` | PVC Waterpipe - HT 75 pipe 250 mm | +| 1 | `ht_pipe(HT_75_pipe_500)` | PVC Waterpipe - HT 75 pipe 500 mm | +| 1 | `ht_cap(HT_90_cap)` | PVC Waterpipe - HT 90 cap | +| 1 | `ht_pipe(HT_90_pipe_1000)` | PVC Waterpipe - HT 90 pipe 1000 mm | +| 1 | `ht_pipe(HT_90_pipe_150)` | PVC Waterpipe - HT 90 pipe 150 mm | +| 1 | `ht_pipe(HT_90_pipe_1500)` | PVC Waterpipe - HT 90 pipe 1500 mm | +| 1 | `ht_pipe(HT_90_pipe_2000)` | PVC Waterpipe - HT 90 pipe 2000 mm | +| 1 | `ht_pipe(HT_90_pipe_250)` | PVC Waterpipe - HT 90 pipe 250 mm | +| 1 | `ht_pipe(HT_90_pipe_500)` | PVC Waterpipe - HT 90 pipe 500 mm | + + Top --- diff --git a/tests/HT_pipes.scad b/tests/HT_pipes.scad index 63d5ac6..52c897d 100644 --- a/tests/HT_pipes.scad +++ b/tests/HT_pipes.scad @@ -21,18 +21,17 @@ include <../vitamins/ht_pipes.scad> module ht_pipes() color("grey") - layout([for(p = ht_pipes) 40 + p[2]]) - translate([0, 0, 0]) { - // rotate(0) { - if (ht_pipes[$i][4] <= 34) - translate([0, 0, ht_pipes[$i][4]]) - ht_cap(ht_pipes[$i]); - if (ht_pipes[$i][4] >= 101) - ht_pipe(ht_pipes[$i]); - if (ht_pipes[$i][4] == 100) - ht_tpipe(ht_pipes[$i]); - // } - } + layout([for(p = ht_pipes) 40 + pipe_od(p)]) let(p = ht_pipes[$i], len = pipe_length(p)) { + if(len <= 34) + translate_z(len) + ht_cap(p); + + if(len >= 101) + ht_pipe(p); + + if(len == 100) + ht_tpipe(p); + } if($preview) ht_pipes(); diff --git a/tests/png/ht_pipes.png b/tests/png/ht_pipes.png new file mode 100644 index 0000000000000000000000000000000000000000..951c21672faccac2f0bf48c0dbe2ad6ca2263993 GIT binary patch literal 50950 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 I>zopr0N=Qx!vFvP literal 0 HcmV?d00001 diff --git a/vitamins/ht_pipe.scad b/vitamins/ht_pipe.scad index b1b1be3..f3ee3af 100644 --- a/vitamins/ht_pipe.scad +++ b/vitamins/ht_pipe.scad @@ -22,68 +22,84 @@ // include <../utils/core/core.scad> +use <../utils/tube.scad> function pipe_od(type) = type[2]; //! Outside diameter -function pipe_wall(type) = type[3]; //! Wall thickness -function pipe_length(type) = type[4]; //! Pipe length +function pipe_wall(type) = type[3]; //! Wall thickness +function pipe_length(type) = type[4]; //! Pipe length function pipe_td(type) = type[5]; //! T-Pipe diameter module ht_cap(type) { //! Draw specified cap vitamin(str("ht_cap(", type[0], "): PVC Waterpipe - ", type[1])); tube_id = pipe_od(type) - pipe_wall(type) * 2; - difference() { - union() { - cylinder(pipe_wall(type), tube_id/2 + pipe_wall(type) + 2.6, tube_id/2 + pipe_wall(type) + 2.6); - translate([0, 0, -pipe_length(type) - 5]) - cylinder(pipe_length(type) + 5, tube_id/2 + pipe_wall(type), tube_id/2 + pipe_wall(type)); - } - translate([0, 0, -pipe_length(type) - 5.01]) - cylinder(pipe_length(type) + 5.01, tube_id/2, tube_id/2); - } + + cylinder(pipe_wall(type), r = tube_id/2 + pipe_wall(type) + 2.6); + + translate_z(-pipe_length(type) - 5) + tube(or = tube_id/2 + pipe_wall(type), ir = tube_id/2, h = pipe_length(type) + 5, center = false); } module ht_pipe(type) { //! Draw specified pipe vitamin(str("ht_pipe(", type[0], "): PVC Waterpipe - ", type[1])); tube_id = pipe_od(type) - pipe_wall(type) * 2; - difference() { - union() { - translate([0, 0, pipe_length(type)]) - HTpipeFitting(pipe_od(type)); - cylinder(pipe_length(type), tube_id/2 + pipe_wall(type), tube_id/2 + pipe_wall(type)); - } - cylinder(pipe_length(type)*2, tube_id/2, tube_id/2); - } + + tube(h = pipe_length(type), or = tube_id/2 + pipe_wall(type), ir = tube_id/2, tube_id/2); + + translate_z(pipe_length(type)) + HTpipeFitting(pipe_od(type), tube_id); } module ht_tpipe(type) { //! Draw specified T-pipe vitamin(str("ht_tpipe(", type[0], "): PVC Waterpipe - ", type[1])); tube_id = pipe_od(type) - pipe_wall(type) * 2; tube_t_id = pipe_td(type) - pipe_wall(type) * 2; - difference() { - union() { - translate([0, 0, pipe_length(type)]) - HTpipeFitting(pipe_od(type)); - cylinder(pipe_length(type), tube_id/2 + pipe_wall(type), tube_id/2 + pipe_wall(type)); - translate([0, -25, pipe_length(type) - 25]) - rotate ([90, 0, 0]) - HTpipeFitting(pipe_td(type)); + + translate_z(pipe_length(type)) + HTpipeFitting(pipe_od(type), tube_id); + + render(convexity = 5) + difference() { + tube(h = pipe_length(type), or = tube_id/2 + pipe_wall(type), ir = tube_id/2, center = false); + + translate([0, -25, pipe_length(type) - 25]) // Cut the exit hole + rotate([90, 0, 0]) + cylinder(h = 50, d = tube_t_id, center = true); + } + + or = pipe_od(type) / 2; + translate([0, -or, pipe_length(type) - or]) + rotate ([90, 0, 0]) { + HTpipeFitting(pipe_td(type), tube_t_id); + + translate_z(-or) + render(convexity = 5) + difference() { // Notch the T tube to meet the internal bore + tube(h = or, or = pipe_td(type) / 2, ir = tube_t_id / 2, center = false); + + rotate([-90, 0, 0]) + cylinder(h = pipe_td(type), d = tube_id, center = true); + } } - cylinder(pipe_length(type)*2, tube_id/2, tube_id/2); - translate([0, 0, 75]) - rotate([90, 0, 0]) - cylinder(pipe_length(type), tube_t_id/2, tube_t_id/2); - } } -module HTpipeFitting(fit_dia) { - fitting_height = min(55, fit_dia * 0.8); - cylinder(10, fit_dia/2, fit_dia/2 + 2.6); - translate([0, 0, 10]) - cylinder(fitting_height, fit_dia/2 + 2.6, fit_dia/2 + 2.6); - translate([0, 0, fitting_height]) - cylinder(12, fit_dia/2 + 5, fit_dia/2 + 5); - translate([0, 0, fitting_height + 12]) - cylinder(3.7, fit_dia/2, fit_dia/2); - translate([0, 0, -30]) - cylinder(30, fit_dia/2, fit_dia/2); +module HTpipeFitting(tube_od, tube_id) { + fitting_height = min(55, tube_od * 0.8); + + tube_ir = tube_id / 2; + fit_ir = tube_od / 2; + fit_or = fit_ir + (fit_ir - tube_ir); + + rotate_extrude() + polygon([ + [tube_ir, 0], + [fit_ir, 10], + [fit_ir, fitting_height + 12 + 3.7], + [fit_or, fitting_height + 12 + 3.7], + [fit_or, fitting_height + 12], + [fit_ir + 6.5, fitting_height + 12], + [fit_ir + 6.5, fitting_height], + [fit_or, fitting_height], + [fit_or, 10], + [fit_ir, 0] + ]); }