diff --git a/kabeljau.scad b/kabeljau.scad new file mode 100644 index 0000000..064c0fc --- /dev/null +++ b/kabeljau.scad @@ -0,0 +1,97 @@ +/* + * Kabeljau - Wall mounted cable holder + * + * Copyright (C) 2023 Matthias Neeracher + */ + +$fn = $preview ? 32 : 64; + +// Number of slots +slots = 4; // [1:1:20] + +/* [Other Parameters - Tune if Needed] */ +// Thickness of Walls +thickness = 3.0; // [2.0:0.25:5.0] + +// Spacing Between Slots +spacing = 15.0; // [10.0:1.0:20.0] + +// Width of Slots +width = 4.8; // [3.0:0.1:8.0] + +// Diameter of Slot Aperture +aperture = 6.5; // [0.0:0.1:12.0] + +// Length of Slots +length = 10.0; // [5.0:1.0:30.0] + +// Height of Slip Barrier +barrier = 10.0; // [0.0:1.0:20.0] + +// Height of Wall Plate +wall_height = 20.0; // [10.0:1.0:50.0] + +// Diameter of Mounting Hole +mount_hole = 2.1; // [1.0:0.1:10.0] + +module round_plate(x, y, z) { + r = thickness*0.5; + hull() { + // left back bottom + translate([r, r, r]) sphere(r); + + // right back bottom + translate([x-r, r, r]) sphere(r); + + // left back top + translate([r, y-r, r]) sphere(r); + + // right back top + translate([x-r, y-r, r]) sphere(r); + + // left front bottom + translate([r, r, z-r]) sphere(r); + + // right front bottom + translate([x-r, r, z-r]) sphere(r); + + // left front top + translate([r, y-r, z-r]) sphere(r); + + // right front top + translate([x-r, y-r, z-r]) sphere(r); + } +} + +module round_l(x) { + round_plate(x, thickness, length+2*thickness); + translate([0, 0, length+thickness]) round_plate(x, barrier+thickness, thickness); +} + +module kabeljau() { + // Back plate + offset=0.5*(wall_height-barrier); + difference() { + round_plate(slots*spacing, thickness+wall_height, thickness); + translate([offset, thickness+wall_height-offset, 0]) cylinder(h=thickness, d=mount_hole); + translate([slots*spacing-offset, thickness+wall_height-offset, 0]) cylinder(h=thickness, d=mount_hole); + } + + difference() { + union() { + round_l(0.5*(spacing-width)); + translate([(slots-1)*spacing+0.5*(spacing+width), 0, 0]) round_l(0.5*(spacing-width)); + + for (slot=[1:1:slots-1]) { + translate([(slot-1)*spacing+0.5*(spacing+width), 0, 0]) { + round_l(spacing-width); + } + } + } + for (slot=[1:1:slots]) { + translate([(slot-0.5)*spacing, 0, thickness+0.5*length]) rotate(-90, [1, 0, 0]) cylinder(h=thickness, d=aperture); + } + } +} + +kabeljau(); diff --git a/kabeljau_2.3mf b/kabeljau_2.3mf new file mode 100644 index 0000000..46dd89a Binary files /dev/null and b/kabeljau_2.3mf differ diff --git a/kabeljau_2.stl b/kabeljau_2.stl new file mode 100644 index 0000000..ef0c740 Binary files /dev/null and b/kabeljau_2.stl differ diff --git a/kabeljau_4.3mf b/kabeljau_4.3mf new file mode 100644 index 0000000..bb4e4b7 Binary files /dev/null and b/kabeljau_4.3mf differ diff --git a/kabeljau_4.stl b/kabeljau_4.stl new file mode 100644 index 0000000..11d9852 Binary files /dev/null and b/kabeljau_4.stl differ