From e0120ef491f1d7131ee999eb5d562f981600c68e Mon Sep 17 00:00:00 2001 From: chl33 <64091421+chl33@users.noreply.github.com> Date: Sat, 21 Sep 2024 12:59:38 -0400 Subject: [PATCH] add ebox (#9) --- README.md | 6 +++++ images/ebox-reservoir-hook.png | Bin 0 -> 7380 bytes scad/ebox_hook/README.md | 1 + scad/ebox_hook/hook.scad | 39 +++++++++++++++++++++++++++++++++ scad/ebox_hook/print_hook.scad | 3 +++ scad/ebox_hook/print_hook.stl | Bin 0 -> 33884 bytes 6 files changed, 49 insertions(+) create mode 100644 images/ebox-reservoir-hook.png create mode 100644 scad/ebox_hook/README.md create mode 100644 scad/ebox_hook/hook.scad create mode 100644 scad/ebox_hook/print_hook.scad create mode 100644 scad/ebox_hook/print_hook.stl diff --git a/README.md b/README.md index a9fe1e8..1fb8ea9 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,12 @@ OpenSCAD code for the project box housing the PCBA is in the [scad/box/](scad/bo ![EBox design in OpenSCAD](images/scad-plant133-ebox.png) +### Project box reservoir hanger + +Code for a plate which allows you to hang the EBox on the side of a water reservoir is in [scad/ebox_hook](scad/ebox_hook). This is screwed to the bottom part of the EBox. + +![Reservoir hanger](images/ebox-reservoir-hook.png) + ### Reservoir insert Inside the water reservoir, an insert holds a float for detecting the water level and 1-4 aquarium pumps for watering the plants. The code for this insert is in [scad/reservoir_insert](scad/reservoir_insert). diff --git a/images/ebox-reservoir-hook.png b/images/ebox-reservoir-hook.png new file mode 100644 index 0000000000000000000000000000000000000000..7c360bcaf36cbb5cf30a9daa0e865aa37391f567 GIT binary patch literal 7380 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 literal 0 HcmV?d00001 diff --git a/scad/ebox_hook/README.md b/scad/ebox_hook/README.md new file mode 100644 index 0000000..6d4785b --- /dev/null +++ b/scad/ebox_hook/README.md @@ -0,0 +1 @@ +This is a plate you can screw the EBox bottom onto, which then allows you to hang the EBox on the side of a water reservoir. diff --git a/scad/ebox_hook/hook.scad b/scad/ebox_hook/hook.scad new file mode 100644 index 0000000..26c3142 --- /dev/null +++ b/scad/ebox_hook/hook.scad @@ -0,0 +1,39 @@ +include <../box/board.scad> +include <../box/box.scad> + +epsilon = 0.01; + +screw_head_height = 2; +wall_thickness = 1; +reservoir_thickness = 3; +gap = 0.2; + +module plantl33_hook() { + module recessed_hole() { + w = 2; + d = screw_head_height + wall_thickness; + translate([0, 0, -epsilon]) { + cylinder(d+1, 1.5, 1.5); + cylinder(screw_head_height, 4, 4); + } + } + + union() { + // Ebox mount plate. + difference() { + $fn = 40; + cube([inner_dims[0]+2, inner_dims[1], wall_thickness+screw_head_height]); + // Screw holes fox ebox; + translate([-0, -5, 0]) { + translate([15, 15, 0]) recessed_hole(); + translate([40, 40, 0]) recessed_hole(); + } + } + sep = wall_thickness+reservoir_thickness+gap*2; + // Inside reservoir. + translate([0, 0, -sep]) cube([5, inner_dims[1], wall_thickness]); + // Top of the hook, spaning the reservoir wall. + translate([-wall_thickness+epsilon, 0, -sep]) + cube([wall_thickness, inner_dims[1], wall_thickness+sep+screw_head_height]); + } +} diff --git a/scad/ebox_hook/print_hook.scad b/scad/ebox_hook/print_hook.scad new file mode 100644 index 0000000..b5f170f --- /dev/null +++ b/scad/ebox_hook/print_hook.scad @@ -0,0 +1,3 @@ +include + +plantl33_hook(); diff --git a/scad/ebox_hook/print_hook.stl b/scad/ebox_hook/print_hook.stl new file mode 100644 index 0000000000000000000000000000000000000000..92b180861b2d3a4ba944f8d822bb90442b53e830 GIT binary patch literal 33884 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 NQkrV(NJ<}u{{z}tIL`n8 literal 0 HcmV?d00001