diff --git a/include/common_objects.scad b/include/common_objects.scad index d0d5c670640482c15236d4184bbfef6b1014ada6..c5246739acec6b786188a26f3f0f6409a0a9ce5c 100644 --- a/include/common_objects.scad +++ b/include/common_objects.scad @@ -1,2 +1,5 @@ co_sd_card = [32, 24, 2.1]; co_usd_card = [15, 11, 1]; + +// IKEA stuff (mostly inaccurate, approximate measurements) +ikea_samla_22l_handle_slope = 3; diff --git a/src/rain_gutter_filter.scad b/src/rain_gutter_filter.scad index 48ed38f3c1c323751ac1f9277164692711e6b9a6..abd9667cb0d3e2ac79cb7828681cf7dd2b6ebbe3 100644 --- a/src/rain_gutter_filter.scad +++ b/src/rain_gutter_filter.scad @@ -1,27 +1,60 @@ use <../include/short.scad>; -tube_filter_diameter = 65; -tube_filter_length = 10; +tube_filter_diameter = 68; +tube_filter_length = 30; tube_filter_ear_count = 6; tube_filter_grid_spacing = 4; -tube_filter_grid_thickness = 4; +tube_filter_wall = 3; +tube_filter_lip = 10; +tube_filter_lip_thickness = 5; $fn = 100; module filter_rectangular( spacing = 4, wall = -1, - size = 23 + size = 23, + thickness = 5, + level_offset = 0.4 ) { _wall = wall < 0 ? spacing / 4 : wall; step = spacing + _wall; s = size - _wall; - for (x = [-s/2:step:s/2]) + + ext(thickness) for (x = [-s/2:step:s/2]) translate([x, -s/2]) square([_wall, size]); - for (y = [-s/2:step:s/2]) + ext(thickness - level_offset) for (y = [-s/2:step:s/2]) translate([-s/2, y]) square([size, _wall]); } +module filter_cylinder( + spacing = 4, + wall = -1, + diameter = 30, + thickness = 5, + length = 10 +) { + _wall = wall < 0 ? spacing / 4 : wall; + step = spacing + _wall; + + nr = ceil(diameter * PI / step); + nl = ceil((length - _wall) / step); + + for (i = [0:nr]) + rZ(i * 360 / nr) tX(diameter/2 - thickness) + tY(-_wall/2) + cube([thickness, _wall, length]); + for (i = [0:nl]) + tZ(i * (length - _wall) / nl) + ext(_wall) + ring(od = diameter, th = thickness); +} + +module gutter() { + d = 105; + tZ(tube_filter_length / 2) tZ(d/2) rX(90) cylinder(d = d, h = tube_filter_diameter * 2, center=true); +} + module ear() { w = tube_filter_diameter / 5; tX(tube_filter_diameter / 2) intersection() { @@ -31,26 +64,53 @@ module ear() { } module tube_filter() { - wall = 3; + wall = tube_filter_wall; diameter = tube_filter_diameter; - th = tube_filter_grid_thickness; + th = tube_filter_grid_spacing + 1; + length = tube_filter_length; // tube - ext(tube_filter_length) difference() { - circle(d=diameter); circle(d = diameter - wall * 2); - } + filter_cylinder( + spacing = tube_filter_grid_spacing, + diameter = diameter, + length = length, + thickness = wall + ); // filter grid - ext(th) intersection() { + intersection() { filter_rectangular( - spacing = tube_filter_grid_spacing, size = diameter); - circle(d = diameter); + spacing = tube_filter_grid_spacing, + size = diameter, + thickness = th + ); + ext(th) circle(d = diameter); } + // joiner rings at top & bottom + ext(th) ring(od = diameter, th = wall); + // ears - for (i = [0:tube_filter_ear_count]) { - rZ(i * 360 / tube_filter_ear_count) ext(th) ear(); - } + // for (i = [0:tube_filter_ear_count]) { + // tZ(length - th) + // rZ(i * 360 / tube_filter_ear_count) + // ext(th) ear(); + // } } -tube_filter(); \ No newline at end of file +difference() { + union() { + difference() { + union() { + intersection() { + sf = (tube_filter_diameter + tube_filter_lip * 2) / tube_filter_diameter; + gutter(); + tZ(tube_filter_wall) scale([sf, 1, 1]) cylinder(d = tube_filter_diameter, h = tube_filter_length * 1.1); + } + tube_filter(); + } + tZ(tube_filter_lip_thickness) scale([0.7, 1, 0.7]) gutter(); + } + } + tZ(tube_filter_wall + 5) cylinder(d = tube_filter_diameter - tube_filter_wall * 2, h = tube_filter_length * 2); +} diff --git a/src/samla_box_shaft_holder.scad b/src/samla_box_shaft_holder.scad new file mode 100644 index 0000000000000000000000000000000000000000..b1f89dd32e4a18d20f288ee615b3c87fbfdb8a93 --- /dev/null +++ b/src/samla_box_shaft_holder.scad @@ -0,0 +1,22 @@ +include <../include/short.scad>; +include <../include/common_objects.scad>; + +$fn = 32; + +shaft = 8; +wall = 2; +h = 8; +base = 25; +screw_hole = 3; +screw_head = 5; + +diff() { + hull() { + scale([1,1,1]) cylinder(d = base, h = wall); + cylinder(d = shaft + wall * 2, h = h); + } + rX(ikea_samla_22l_handle_slope) tZ(wall) ext(h) union() { + circle(d = shaft); + tX(-shaft/2) square([shaft, 100]); + } +} \ No newline at end of file diff --git a/src/text_tag.scad b/src/text_tag.scad new file mode 100644 index 0000000000000000000000000000000000000000..f209a04091fa2dbc5e513ad52b425371fe7e77a2 --- /dev/null +++ b/src/text_tag.scad @@ -0,0 +1,17 @@ +s=[35,15,3]; +pad=3; +r=1; +text_w = 0.8; +$fn=40; +hole=3; + +difference() { +minkowski() { + sphere(r); + cube(s-[r,r,r]); +} +co = hole/2+r/2; +translate([s[0]/2-r/2+co/2,s[1]/2-r/2,s[2]/2]) linear_extrude(s[2]) + scale([text_w,1,1]) text("1505", valign="center", halign="center", size=s[1]-pad); +translate([co,co,-50]) cylinder(d=hole,h=100); +} \ No newline at end of file