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 |
+
+
+
+### 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 0000000..951c216
Binary files /dev/null and b/tests/png/ht_pipes.png differ
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]
+ ]);
}