From 570118d6c23161ee370f6c5af8626c1d44bc29e1 Mon Sep 17 00:00:00 2001 From: Stephen J Carpenter Date: Sat, 2 Mar 2024 20:25:27 -0500 Subject: [PATCH] Initial Import Printed Version 1.0 --- fan_mount.scad | 181 +++++++++++++++++++++++++++++++++++++++++++++++ part_mount.scad | 26 +++++++ part_washer.scad | 27 +++++++ 3 files changed, 234 insertions(+) create mode 100644 fan_mount.scad create mode 100644 part_mount.scad create mode 100644 part_washer.scad diff --git a/fan_mount.scad b/fan_mount.scad new file mode 100644 index 0000000..8f32cdd --- /dev/null +++ b/fan_mount.scad @@ -0,0 +1,181 @@ +/* */ + +include +include +include + +/* [Mount Dimensions] */ +CASE_HOLE_X = 5.6; +CASE_HOLE_Z = 11.00; +CASE_HOLE_Y = 1.4; + +TAB_YOUT = 3.9; +TAB_THICK = 3; +TAB_Z = 9.6; + +SCREEN_Y = 19.0; // Saggitta of mesh path +SCREEN_X = 131.6; + +FAN_MOUNT_X = 128.6; +FAN_MOUNT_Z = 69.4; + +/* [Render Options] */ +render_show="none"; // [both, bottom, top, washer] +render_fs=.4; +render_fn=0; +render_fa=.4; + +// Set Render Options +$fs= ($preview) ? $fs : render_fs; +$fn= ($preview) ? $fn : render_fn; +$fa= ($preview) ? $fa : render_fa; + +module case_washer(align=V_CENTER, orient=ORIENT_Z) { + size=[CASE_HOLE_X+5, 3, CASE_HOLE_Z+5]; + orient_and_align(size,align=align,orient=orient,orig_align=V_CENTER, orig_orient=ORIENT_Z) + difference() { + cuboid(size); + left(3) { + cyl(d=3.5, h=4, orient=ORIENT_Y); + cyl(d=7, h=4, align=V_BACK, orient=ORIENT_Y); + } + } +} + +module case_hole(x=CASE_HOLE_X, y=CASE_HOLE_Y, z=CASE_HOLE_Z, align=V_FRONT) +{ + cuboid([x,y,z], align=V_FRONT); +} + + + +module snap(top=true) +{ + cut_align= top ? V_BOTTOM : V_TOP; + zi = top ? 1 : -1; + down(zi*2.2)up(zi*(.2+CASE_HOLE_Z/2)) { + difference() { + union() { + cuboid([CASE_HOLE_X-.2, CASE_HOLE_Y+.3, 3], align=V_FRONT); + fwd(CASE_HOLE_Y+1+.2) { + cuboid([CASE_HOLE_X-.2, 2, 4], chamfer=1, edges=EDGES_X_FR); + } + } + up(zi*.6)cuboid([CASE_HOLE_X, 6+CASE_HOLE_Y, 4], align=cut_align); + } + + } + %case_hole(); +} + +module snap_base() +{ + difference() { + cuboid([CASE_HOLE_X-.2, CASE_HOLE_Y/4, CASE_HOLE_Z-1.2], align=V_FRONT); + zspread(n=5,l=CASE_HOLE_Z-4) fwd((CASE_HOLE_Y)/2)cyl(h=CASE_HOLE_X, d=1, orient=ORIENT_X); + } +} + +function mesh_radius(s,l) = (s^2 + (l^2)/4) / (2 * s); +SCREEN_R = mesh_radius(s=SCREEN_Y, l=SCREEN_X); +echo ("MESHR: ", SCREEN_R); +function mesh_theta(l,r) = PI * 2*asin(l/(2*r)) / 180; +echo("Mesh_Theta", mesh_theta(SCREEN_X,SCREEN_R), "radians"); + +echo("mesh len = ", SCREEN_R * mesh_theta(SCREEN_X-4, SCREEN_R)); + +module meshpath(s = SCREEN_Y, l= SCREEN_X, w=2, h=130) { + r = mesh_radius(s=s, l=l); + echo(r); + intersection() { + fwd(r-21) difference() { + cyl(r=r+w/2, h=h); + cyl(r=r-w/2, h=h+w/2); + } + back(1) cuboid([128.6,30,h], align=V_BACK); + } +} + +module rail(left=true, h=265, align=V_BACK, orient=ORIENT_Z) { + lr = left ? 1 : -1; + size = [CASE_HOLE_X+2,9,h]; + orient_and_align(size, orient=orient, align=align, orig_align=V_BACK) + difference() { + back(0)cuboid(size, chamfer=1.5, edges=EDGES_Z_BK, align=V_BACK); + back(2)left(lr*FAN_MOUNT_X/2) meshpath(h=h+2); + } +} + +module endcap(orient=ORIENT_Z, align=V_BACK, s=SCREEN_Y, l=SCREEN_X, h=5) { + r = mesh_radius(s=s, l=l); + orient_and_align([99*2,25,h], orient=orient, align=align, orig_align=V_BACK) + difference() { + intersection() { + fwd(r-23)cyl(r=r+1, h=h); + cuboid([66*2,200,131], align=V_BACK); + } + back(2)up(2) meshpath(h=h, w=2.1); + //fwd(94-25)cyl(r=92, h=11); + } +} + + +//%meshpath(h=265-5); +module mesh_mount(h=265, align=V_FRONT,orient=ORIENT_Z,top=true, bottom=true) { + parts = (top && bottom) + ? [-1,1] + : top ? [1] : [-1]; + + echo("parts: ", len(parts)); + rh = len(parts) * h/2; + orient_and_align([2*128.6, 9, 265], orient=orient,align=align) union() { + difference() { + union() { + right(128.6/2) rail(left=true, h=rh, align=V_BACK); + left(128.6/2) rail(left=false, h=rh, align=V_BACK); + if (bottom) down(rh/2) endcap(align=V_BACK+V_TOP); + if (top) up(rh/2) endcap(align=V_BACK+V_BOTTOM, orient=ORIENT_ZNEG); + } + hoff = (len(parts) == 2) ? 0 : rh/2; + if (top) up(59.6/2-hoff)mount_holes(align=V_TOP); + if (bottom)down(59.6/2-hoff)mount_holes(align=V_BOTTOM); + } + brace_z = len(parts) * 10/2; + brace_off = (len(parts) == 2) + ? 0 + : top ? -(rh-brace_z)/2 : (rh-brace_z)/2; + up(brace_off) cuboid([125, 1, brace_z], align=V_BACK); + } +} + +module mount_holes(align=V_TOP) { + orient_and_align(size=[FAN_MOUNT_X,0,FAN_MOUNT_Z+CASE_HOLE_Z], align=align) + zspread(l=FAN_MOUNT_Z) { + xspread(l=FAN_MOUNT_X) { + back(0) xrot(90) thread_insertM3(bl=10,bz=-5,$die=true); + %back(0) xrot(90) thread_insertM3(bl=10,bz=-5,$die=false); + } + } +} + +module fdm_anchor(r=3, d=.4, h=.3) { + union() { + //back(d+r) + zrot(45) back(r) { + cyl(r=r, h=h, align=V_TOP); + fwd(r/2)cuboid([.5,r,h], align=V_FRONT+V_TOP); + } + } +} + + +module print_washer() { + back((CASE_HOLE_Z+5)/2)left((CASE_HOLE_X+5)/2) fdm_anchor(); + fwd((CASE_HOLE_Z+5)/2)left((CASE_HOLE_X+5)/2) zrot(90) fdm_anchor(); + back((CASE_HOLE_Z+5)/2)right((CASE_HOLE_X+5)/2) zrot(-90) fdm_anchor(); + fwd((CASE_HOLE_Z+5)/2)right((CASE_HOLE_X+5)/2) zrot(180) fdm_anchor(); + case_washer(orient=ORIENT_Y, align=V_TOP); +} + +if (render_show == "both") mesh_mount(top=true); + diff --git a/part_mount.scad b/part_mount.scad new file mode 100644 index 0000000..0bea182 --- /dev/null +++ b/part_mount.scad @@ -0,0 +1,26 @@ +/* */ + +include +include <./fan_mount.scad> + + + +/* [Render Options] */ +render_fs=.4; +render_fn=0; +render_fa=.4; + +// Set Render Options +$fs= ($preview) ? $fs : render_fs; +$fn= ($preview) ? $fn : render_fn; +$fa= ($preview) ? $fa : render_fa; + + +module print_mount() { + mesh_mount(bottom=true, top=false, orient=ORIENT_Y, align=V_CENTER); +} +back((260+5)/4)left((131+5)/2) fdm_anchor(); +fwd((260+5)/4)left((131+5)/2) zrot(90) fdm_anchor(); +back((260+5)/4)right((131+5)/2) zrot(-90) fdm_anchor(); +fwd((260+5)/4)right((131+5)/2) zrot(180) fdm_anchor(); +print_mount(); diff --git a/part_washer.scad b/part_washer.scad new file mode 100644 index 0000000..13da5ba --- /dev/null +++ b/part_washer.scad @@ -0,0 +1,27 @@ +/* */ + +include +include <./fan_mount.scad> + + + +/* [Render Options] */ +render_fs=.4; +render_fn=0; +render_fa=.4; + +// Set Render Options +$fs= ($preview) ? $fs : render_fs; +$fn= ($preview) ? $fn : render_fn; +$fa= ($preview) ? $fa : render_fa; + + +module print_washer() { + back((CASE_HOLE_Z+5)/2)left((CASE_HOLE_X+5)/2) fdm_anchor(); + fwd((CASE_HOLE_Z+5)/2)left((CASE_HOLE_X+5)/2) zrot(90) fdm_anchor(); + back((CASE_HOLE_Z+5)/2)right((CASE_HOLE_X+5)/2) zrot(-90) fdm_anchor(); + fwd((CASE_HOLE_Z+5)/2)right((CASE_HOLE_X+5)/2) zrot(180) fdm_anchor(); + case_washer(orient=ORIENT_Y, align=V_TOP); +} + +print_washer();