diff --git a/assembly-guide/README.md b/assembly-guide/README.md index 550b286..8d2ca5a 100644 --- a/assembly-guide/README.md +++ b/assembly-guide/README.md @@ -6,47 +6,47 @@ ## Instructions: Slide in M3 hex nuts into the Y-bars - 4 times. Each corner should have 3 hex nuts: -![insert heatset inserts](./gifs/slideHexNutsIntoYBar.gif) +![slideHexNutsIntoYBar](./gifs/slideHexNutsIntoYBar.gif) Glue magnets into magnet side-modules - 4 times: -![glue magnets to magnet modules](./gifs/addMagnetsToMagnetModules.gif) +![addMagnetsToMagnetModules](./gifs/addMagnetsToMagnetModules.gif) Glue top and bottom magnets into side walls - 2 times: -![glue magnets to side walls](./gifs/addMagnetsToSideWall.gif) +![addMagnetsToSideWall](./gifs/addMagnetsToSideWall.gif) Insert top and bottom dowel rods into side walls - 2 times: -![insert dowels into side walls](./gifs/insertDowelsIntoSideWall.gif) +![insertDowelsIntoSideWall](./gifs/insertDowelsIntoSideWall.gif) Slide Y-bars into X-bars - 2 times: -![slide y-bar into x-bar](./gifs/attachXBarWithYBar.gif) +![attachXBarWithYBar](./gifs/attachXBarWithYBar.gif) Screw together Y-bars and X-bars using 4 M3x12 FHCS screws (one screw per corner) - 2 times: -![attach x-bar with y-bar](./gifs/screwXBarAndYBar.gif) +![screwXBarAndYBar](./gifs/screwXBarAndYBar.gif) Screw in the side-modules with M3x8 FHCS screws. Orientation matters here. The magnets modules should be on the eventual front side, facing outwards, and the two hinge modules should be in the back. Do this 2 times (for both trays): -![attachSideConnectorModulesToYBars.gif](./gifs/attachSideConnectorModulesToYBars.gif) +![attachSideConnectorModulesToYBars](./gifs/attachSideConnectorModulesToYBars.gif) Screw in the main rails with M3x16 FHCS screws. -![connect xy-tray with main rails](./gifs/connectXYTrayWithMainRails.gif) +![connectXYTrayWithMainRails](./gifs/connectXYTrayWithMainRails.gif) Prop us the side wall using the side modules. Make sure the dowels are inserted properly, and the magnets align: -![prop up side walls](./gifs/propUpBottomXYTraywithSideWalls.gif) +![propUpBottomXYTraywithSideWalls](./gifs/propUpBottomXYTraywithSideWalls.gif) Slide in the other (top) tray. Make sure the magnets and dowels align. Screw in the main rails with M3x16 FHCS screws: -![attach xy-trays](./gifs/attachXYTrays.gif) +![attachXYTrays](./gifs/attachXYTrays.gif) Attach the top and bottom plates with 4 M3x8 screws each: ![slideHexNutsIntoYBarXYPlate](./gifs/slideHexNutsIntoYBarXYPlate.gif) -![attachXYPlates.gif](gifs%2FattachXYPlates.gif) +![attachXYPlates](./gifs/attachXYPlates.gif) Slide in hex nuts into feet - 2 times: -![slide hex nuts into feet](./gifs/slideHexNutToFeet.gif) +![slideHexNutToFeet](./gifs/slideHexNutToFeet.gif) Insert feet into the bottom of the rack: -![insert feet](./gifs/insertFeet.gif) +![insertFeet](./gifs/insertFeet.gif) Screw in feet using 4 M3x12 FHCS screws: -![screw feet](./gifs/screwFeet.gif) +![screwFeet](./gifs/screwFeet.gif) **FIN** \ No newline at end of file diff --git a/resource/sbc/rpi/rpi2b.scad b/rack-mount/one-offs/rpi/case.scad similarity index 72% rename from resource/sbc/rpi/rpi2b.scad rename to rack-mount/one-offs/rpi/case.scad index da385e8..82b7d3c 100644 --- a/resource/sbc/rpi/rpi2b.scad +++ b/rack-mount/one-offs/rpi/case.scad @@ -1,26 +1,15 @@ -/* -TODO this case has many many problems as it currently is. The following - should be addressed before it is printed again: - - risers are made of plastic and really easily break - - no locking lid for case -*/ - include <../../../config/common.scad> include <../../../helper/common.scad> -// All coordinates are in [x,y], or [x,y,z] format +// All coordinates are in [x,y], or [x,y,z] format pcbDimensions = [56.0, 85.1]; // [x,y] pcbThickness = 1.42; - // [+x, -x, +y, -y] pcbCaseSpace = [5, 2, 5, 2]; - pcbRise = 3; caseWallThickness = 2; caseBottomThickness = 2; - - mountPointDiameter = 5; mountPoints = [[3.65,23.30,0], [3.65,pcbDimensions[1]-3.65,0], [pcbDimensions[0]-3.65,23.30,0], [pcbDimensions[0]-3.65,pcbDimensions[1]-3.65,0]]; @@ -85,30 +74,6 @@ module cutoutProfileAirflow_N() { cube(size=[inf50, 80, 15]); } -difference() { - - union() { - pcbCaseWithRisers_(); - - // lugs - // -4 - translate(v=[pcbDimensions[0]+caseWallThickness+pcbCaseSpace[0],-caseWallThickness-pcbCaseSpace[3],-pcbRise-caseBottomThickness]) - cube(size=[2,5,5]); - - // 87.1 - translate(v=[pcbDimensions[0]+caseWallThickness+pcbCaseSpace[0],pcbDimensions[1]+pcbCaseSpace[2]-5+caseWallThickness,-pcbRise-caseBottomThickness]) - cube(size=[2,5,5]); - - // -> 87.1 + 4 = 91.1 - } - - union() { - cutoutProfile_N(); - cutoutProfileAirflow_N(); - } -} -//cutoutProfileAirflow_N(); - module mountPoints_N(cylHeight, cylRad1, cylRad2, cylFn, center) { for (i=[0:3]) { p = mountPoints[i]; @@ -118,15 +83,6 @@ module mountPoints_N(cylHeight, cylRad1, cylRad2, cylFn, center) { } - -*difference() { - union () { - pcb(); - mountPoints_N(7, mountPointDiameter/2.5, mountPointDiameter/2.5, 32, false); - mountPoints_N(5, mountPointDiameter, mountPointDiameter, 32, false); - } -} - // fucked up module cutoutProfile_N() { color([1,0,1]) @@ -143,6 +99,32 @@ module cutoutProfile_N() { } -*cutoutProfile_N(); -//pcb(); +module mainCase() { + difference() { + + union() { + pcbCaseWithRisers_(); + + // lugs + // -4 + translate(v = [pcbDimensions[0]+caseWallThickness+pcbCaseSpace[0], -caseWallThickness-pcbCaseSpace[3], -pcbRise- + caseBottomThickness]) + cube(size = [2, 5, 5]); + + // 87.1 + translate(v = [pcbDimensions[0]+caseWallThickness+pcbCaseSpace[0], pcbDimensions[1]+pcbCaseSpace[2]-5+ + caseWallThickness, -pcbRise-caseBottomThickness]) + cube(size = [2, 5, 5]); + + // -> 87.1 + 4 = 91.1 + } + + union() { + cutoutProfile_N(); + cutoutProfileAirflow_N(); + } + } +} + +mainCase(); \ No newline at end of file diff --git a/resource/sbc/rpi/frontPlate.scad b/rack-mount/one-offs/rpi/frontPlate.scad similarity index 100% rename from resource/sbc/rpi/frontPlate.scad rename to rack-mount/one-offs/rpi/frontPlate.scad diff --git a/resource/sbc/rpi/top.scad b/rack-mount/one-offs/rpi/top.scad similarity index 99% rename from resource/sbc/rpi/top.scad rename to rack-mount/one-offs/rpi/top.scad index 4752c9b..582fcfb 100644 --- a/resource/sbc/rpi/top.scad +++ b/rack-mount/one-offs/rpi/top.scad @@ -1,5 +1,4 @@ - difference() { union() { cube(size=[67,95.7,1]); diff --git a/resource/sfxPSU.scad b/rack-mount/one-offs/sfxPSU.scad similarity index 92% rename from resource/sfxPSU.scad rename to rack-mount/one-offs/sfxPSU.scad index 5828f4b..6404aed 100644 --- a/resource/sfxPSU.scad +++ b/rack-mount/one-offs/sfxPSU.scad @@ -1,9 +1,9 @@ module sfxPowerSupply() { - // corsair sf450 - length = 125.3; - width = 100.2; - height = 63.8; + + length = 125.0; + width = 100.0; + height = 64; screwD = 3.5; eps = 0.001; @@ -55,4 +55,6 @@ module sfxPowerSupply() { circle(d=screwD); -} \ No newline at end of file +} + +sfxPowerSupply(); \ No newline at end of file diff --git a/rack/connector/transformations.scad b/rack/connector/transformations.scad deleted file mode 100644 index c93b826..0000000 --- a/rack/connector/transformations.scad +++ /dev/null @@ -1,10 +0,0 @@ -// Spatial transformations between various parts' local spaces -include <./connectors.scad> - - -function transform(from, to) = - (from == "yBar" && to == "xBar") - ? identity - : (from == "xBar" && to == "yBar") - ? identity - : identity; diff --git a/rbuild.py b/rbuild.py index 80ee414..5a1f0d3 100644 --- a/rbuild.py +++ b/rbuild.py @@ -4,7 +4,7 @@ import argparse import subprocess import os -#------------- EDIT THESE VARIABLES WITH THE LOCATION OF YOUR OPENSCAD BINARIES +# ------------- EDIT THESE VARIABLES WITH THE LOCATION OF YOUR OPENSCAD BINARIES PATH_TO_OPENSCAD = '/usr/bin/openscad' PATH_TO_OPENSCAD_NIGHTLY = '/snap/bin/openscad-nightly' ############################################################################### @@ -180,7 +180,8 @@ def build_assembly_gifs(config, dz, nightly): def build_gif_from_png(fileName): try: - subprocess.run(["bash", BUILD_GIF_FROM_PNG_SCRIPT, fileName, ASSEMBLY_GIF_TEMP_DIR, ASSEMBLY_GIF_BUILD_DIR], check=True) + subprocess.run(["bash", BUILD_GIF_FROM_PNG_SCRIPT, fileName, ASSEMBLY_GIF_TEMP_DIR, ASSEMBLY_GIF_BUILD_DIR], + check=True) except subprocess.CalledProcessError as e: print(f"Error calling shell script: {e}") diff --git a/resource/sbc/rockpro/case.scad b/resource/sbc/rockpro/case.scad deleted file mode 100644 index dc3b845..0000000 --- a/resource/sbc/rockpro/case.scad +++ /dev/null @@ -1,197 +0,0 @@ -// test for screw tolerances - -include <./rockpro.scad>; - -include <../power/src/base.scad>; -$fn = 128; -outerD = 4.65; - -innerD = 2.93; - - -module caseOuter() { - rotate(a=[90,0,0]) - minkowski() { - cube(size=[80,40,195], center=true); - cylinder(h=0.00000000001, r=10); - } -} - -module caseInner() { - translate(v=[0,0,2]) - rotate(a=[90,0,0]) - minkowski() { - cube(size=[81.5,47,195+0.01], center=true); - *cylinder(h=0.00000000001, r=5); - } -} - - -module hgill(i) { - minkowski() { - *sphere(r=2); - translate(v=[0,i*10,5]) - rotate(a=[30,0,0]) - cube(size=[200, 4, 30], center=true); - } - } - -module caseShell() { - difference() { - caseOuter(); - - union() { - caseInner(); - - // side perforations - for (i=[-7:7]) { - hgill(i=i); - } - - // top perforations - for (i=[-3:3]) { - translate(v=[0,i*20,50]) - cube(size=[75,10,60], center=true); - } - - // bottom perforations - for (i=[2:4]) { - translate(v=[0,i*20,-20]) - cube(size=[60,8,50], center=true); - } - - for (i=[-4:0]) { - translate(v=[0,i*20,-20]) - cube(size=[60,8,50], center=true); - } - - } - } -} - - -module faceMountDiffs() { -translate(v=[45,0,20]) -rotate(a=[90,0,0]) -cylinder(r=innerD/2,h=300, center=true); - -translate(v=[45,0,-20]) -rotate(a=[90,0,0]) -cylinder(r=innerD/2,h=300, center=true); - -translate(v=[-45,0,-20]) -rotate(a=[90,0,0]) -cylinder(r=innerD/2,h=300, center=true); - -translate(v=[-45,0,20]) -rotate(a=[90,0,0]) -cylinder(r=innerD/2,h=300, center=true); -} - - -module caseWithMountHoles() { - difference() { - - union() { - caseShell(); - - translate(v=[-35, 25,-27.5]) - rotate(a=[0,0,-90]) - rockProMountPoints(6, 3.8, 64, false); - } - - union() { - translate(v=[-35, 25,-27.5]) - rotate(a=[0,0,-90]) - rockProMountPoints(6, innerD/2, 64, false); - - faceMountDiffs(); - } - } -} - -*caseWithMountHoles(); - - -module bottomTray() { -difference() { - -union() { -intersection() { - caseWithMountHoles(); - translate(v=[0,0,-115]) - cube(size=[500,500,200], center=true); -} - -translate(v=[-45.5,0,-15]) -rotate(a=[90,90,0]) -joinTriangle(185); - -translate(v=[45.5,0,-15]) -rotate(a=[90,90,0]) -joinTriangle(185); -} - - // bottom lugs - union() { - translate(v=[-40,-90,-29]) - cube(size=[10.2,10.2,2.5], center=true); - - translate(v=[40,-90,-29]) - cube(size=[10.2,10.2,2.5],center=true); - - translate(v=[40,90,-29]) - cube(size=[10.2,10.2,2.5],center=true); - - translate(v=[-40,90,-29]) - cube(size=[10.2,10.2,2.5],center=true); - } -} -} - - -module topTray() { - difference () { - union() { - difference() { - caseWithMountHoles(); - translate(v=[0,0,-115]) - cube(size=[500,500,200], center=true); - } - } - // bottom lugs - union() { - translate(v=[-40,-90,29]) - cube(size=[10.2,10.2,2.5], center=true); - - translate(v=[40,-90,29]) - cube(size=[10.2,10.2,2.5],center=true); - - translate(v=[40,90,29]) - cube(size=[10.2,10.2,2.5],center=true); - - translate(v=[-40,90,29]) - cube(size=[10.2,10.2,2.5],center=true); - - - - translate(v=[-45.5,0,-15]) - rotate(a=[90,90,0]) - scale(v=[1,0.9,1]) - joinTriangle(300); - - translate(v=[45.5,0,-15]) - rotate(a=[90,90,0]) - scale(v=[1,0.9,1]) - joinTriangle(300); - } - } -} - -topTray(); - -// TODO make sure rail works!!! - - -scale(v=[1,0.9,1]) -*joinTriangle(10); diff --git a/resource/sbc/rockpro/dual-tray-plate-part.scad b/resource/sbc/rockpro/dual-tray-plate-part.scad deleted file mode 100644 index c071f87..0000000 --- a/resource/sbc/rockpro/dual-tray-plate-part.scad +++ /dev/null @@ -1,125 +0,0 @@ -include <../rack-tray/rack-tray.scad> -include <../common.scad> -include <../rack/screws.scad> -include <./rockpro.scad> - -vU = 3; -uHeight = 10; - -plateScrewDiffV = uHeight*vU; -plateScrewDiffH = 180; - -plateScrewToHEdge = 4.5; -plateScrewToVEdge = 5.5; - -frontPlateThickness = 3; - -frontPlateV = plateScrewDiffV + 2*plateScrewToHEdge; -frontPlateH = plateScrewDiffH + 2*plateScrewToVEdge; - - -plateScrewToBoxMin = 6; - -module _frontPlateBody() { - translate(v=[-plateScrewToVEdge,0,-plateScrewToHEdge]) - cube(size=[frontPlateH,frontPlateThickness,frontPlateV]); -} - -module _plateHole() { - rotate(a=[90,0,0]) - cylinder(r=m4RadiusSlacked, h=inf, center=true); -} - - -module frontPlate() { - - difference() { - _frontPlateBody(); - - union() { - // TODO: introduce helper modules for this pattern - _plateHole(); - - translate(v=[plateScrewDiffH,0,0]) - _plateHole(); - - translate(v=[0,0,plateScrewDiffV]) - _plateHole(); - - translate(v=[plateScrewDiffH,0,plateScrewDiffV]) - _plateHole(); - } - } -} - -difference() { - frontPlate(); - union() { - translate(v = [13, 0, - 10]) - cube(size = [300, 100, 100]); - - translate(v=[6,0,0]) - cube(size=[5,5,5]); - - translate(v=[6,0,20]) - cube(size=[5,5,5]); - } -} - - - -// todo use library constants -module screwRiser(height) { - difference() { - cylinder(d=5, h=height, $fn=64); - cylinder(d=2.88, h=height, $fn=64); - } -} - -module mountPoints_N(cylHeight, cylRad1, cylRad2, cylFn, center) { - for (i=[0:3]) { - p = mountPoints[i]; - translate(v=[p[0], p[1], p[2]]) - cylinder(r1=cylRad1, r2=cylRad2, h=cylHeight, $fn=cylFn, center=center); - } - -} - -module rockProScrewMounts() { - for (i=[0:3]) { - p = mountPoints[i]; - translate(v=[p[0], p[1], p[2]]) - screwRiser(5); - } -} - - -module rockProDualTray() { - - - trayBody(); - translate(v=[9,8,trayBottomThickness]) - rockProScrewMounts(); - - translate(v=[9 + pcbDimensions[0],8,trayBottomThickness]) - rockProScrewMounts(); - -} - -*difference() { - rockProDualTray(); - // file specific bottom holes - union() { - translate(v = [10, 15, 0]) - minkowski() { - cube(size = [69, 100, 5]); - cylinder(r = 1); - } - - translate(v=[88,15,0]) - minkowski() { - cube(size = [69, 100, 5]); - cylinder(r=1); - } - } -} \ No newline at end of file diff --git a/resource/sbc/rockpro/dual-tray.scad b/resource/sbc/rockpro/dual-tray.scad deleted file mode 100644 index cb6a4b8..0000000 --- a/resource/sbc/rockpro/dual-tray.scad +++ /dev/null @@ -1,125 +0,0 @@ -include <../rack-tray/rack-tray.scad> -include <../common.scad> -include <../rack/screws.scad> -include <./rockpro.scad> - -vU = 3; -uHeight = 10; - -plateScrewDiffV = uHeight*vU; -plateScrewDiffH = 180; - -plateScrewToHEdge = 4.5; -plateScrewToVEdge = 5.5; - -frontPlateThickness = 2; - -frontPlateV = plateScrewDiffV + 2*plateScrewToHEdge; -frontPlateH = plateScrewDiffH + 2*plateScrewToVEdge; - - -plateScrewToBoxMin = 6; - -module _frontPlateBody() { - translate(v=[-plateScrewToVEdge,0,-plateScrewToHEdge]) - cube(size=[frontPlateH,frontPlateThickness,frontPlateV]); -} - -module _plateHole() { - rotate(a=[90,0,0]) - cylinder(r=m4RadiusSlacked, h=inf, center=true); -} - - -module frontPlate() { - - difference() { - _frontPlateBody(); - - union() { - // TODO: introduce helper modules for this pattern - _plateHole(); - - translate(v=[plateScrewDiffH,0,0]) - _plateHole(); - - translate(v=[0,0,plateScrewDiffV]) - _plateHole(); - - translate(v=[plateScrewDiffH,0,plateScrewDiffV]) - _plateHole(); - } - } -} - -difference() { - frontPlate(); - union() { - translate(v = [13, 0, - 10]) - cube(size = [300, 100, 100]); - - translate(v=[6,0,-2]) - cube(size=[5.5,5.5,5.5]); - - translate(v=[6,0,20-2]) - cube(size=[5.5,5.5,5.5]); - } -} - - - -// todo use library constants -// TODO these risers are prone to snapping off -module screwRiser(height) { - difference() { - cylinder(d=5, h=height, $fn=64); - cylinder(d=2.88, h=height, $fn=64); - } -} - -module mountPoints_N(cylHeight, cylRad1, cylRad2, cylFn, center) { - for (i=[0:3]) { - p = mountPoints[i]; - translate(v=[p[0], p[1], p[2]]) - cylinder(r1=cylRad1, r2=cylRad2, h=cylHeight, $fn=cylFn, center=center); - } -} - -module rockProScrewMounts() { - for (i=[0:3]) { - p = mountPoints[i]; - translate(v=[p[0], p[1], p[2]]) - screwRiser(5); - } -} - - -module rockProDualTray() { - - - trayBody(); - translate(v=[9,8,trayBottomThickness]) - rockProScrewMounts(); - - translate(v=[9 + pcbDimensions[0],8,trayBottomThickness]) - rockProScrewMounts(); - -} - -*difference() { - rockProDualTray(); - // file specific bottom holes - union() { - translate(v = [10, 15, 0]) - minkowski() { - cube(size = [69, 100, 5]); - cylinder(r = 1); - } - - translate(v=[88,15,0]) - minkowski() { - cube(size = [69, 100, 5]); - cylinder(r=1); - } - } -} \ No newline at end of file diff --git a/resource/sbc/rockpro/newcase.scad b/resource/sbc/rockpro/newcase.scad deleted file mode 100644 index 7b97281..0000000 --- a/resource/sbc/rockpro/newcase.scad +++ /dev/null @@ -1,201 +0,0 @@ - -include <./rockpro.scad>; - -include <../power/src/base.scad>; -$fn = 128; -outerD = 4.65; - -innerD = 2.93; - - - - - -module caseOuter() { - rotate(a=[90,0,0]) - minkowski() { - //translate(v=[-35, -15, -32.5]) - cube(size=[70,30,130], center=true); - cylinder(h=0.00000000001, r=15); - } -} - -module caseInner() { - translate(v=[0,0,0]) - rotate(a=[90,0,0]) - minkowski() { - cube(size=[70,30,130+0.01], center=true); - cylinder(h=0.00000000001, r=12); - } -} - -module hgill(i) { - minkowski() { - *sphere(r=2); - translate(v=[0,i*10,5]) - rotate(a=[30,0,0]) - cube(size=[200, 4, 30], center=true); - } - } - -module caseShell() { - - union() { - - - - difference() { - caseOuter(); - - union() { - caseInner(); - - // side perforations - for (i=[-7:7]) { - *hgill(i=i); - } - - // top perforations - for (i=[-2:2]) { - translate(v=[0,i*20,50]) - cube(size=[50,8,50], center=true); - } - - for (i=[-2:2]) { - translate(v=[0,i*20,-20]) - rotate(a=[0,0,25]) - cube(size=[50,3,50], center=true); - } - - } - } - } -} - -module caseWithMountHoles() { - difference() { - - union() { - caseShell(); - - translate(v=[-35, 59,-28]) - rotate(a=[0,0,-90]) - rockProMountPoints(5.0, 5.5, 2.5, 64, false); - faceMountSupports(); - } - - union() { - translate(v=[-35, 59,-29.5]) - rotate(a=[0,0,-90]) - rockProMountPoints(6.5, innerD/2, innerD/2, 64, false); - - faceMountDiffs(); - } - } -} - -module guideRail(x,y,z) { - // gross - cube(size=[y,z,x]); -} - - -module faceMountDiffs() { - - for (i = [-1,1]) { - for (j = [-1,1]) { - translate(v=[i*47,0,j*15]) { - - rotate(a=[90,0,0]) - translate(v=[0,0,93]) - *cylinder(r=innerD/2,h=12, center=true); - - rotate(a=[90,0,0]) - translate(v=[0,0,-93]) - *cylinder(r=innerD/2,h=12, center=true); - - - rotate(a=[90,0,0]) - translate(v=[0,0,90]) - cylinder(r=innerD/2,h=400, center=true); - } - - } - } -} - -module faceMountSupports() { - - intersection() { - caseOuter(); - for (i = [-1,1]) { - for (j = [-1,1]) { - translate(v=[i*47,0,j*15]) { - - - rotate(a=[90,0,0]) - translate(v=[0,0,90]) - cylinder(r=innerD,h=400, center=true); - - } - } - } - } -} - -module bottomTray() { -difference() { - -union() { - translate(v=[-48,0,-11]) - cube(size=[4,130,4], center=true); - - translate(v=[48,0,-11]) - cube(size=[4,130,4], center=true); -intersection() { - caseWithMountHoles(); - translate(v=[0,0,-110]) - cube(size=[500,500,200], center=true); -} - - - -translate(v=[-50,65,-10+3]) -rotate(a=[90,90,0]) -guideRail(130,2,2); - - -translate(v=[48, 65, -10+3]) -rotate(a=[90,90,0]) -guideRail(130,2,2); - - -} - -// bottom lugs - union() { - translate(v=[-35,-56.5,-30]) - *cube(size=[10.2,10.2,2.5], center=true); - - translate(v=[35,-56.5,-30]) - *cube(size=[10.2,10.2,2.5],center=true); - - translate(v=[35,56.5,-30]) - *cube(size=[10.2,10.2,2.5],center=true); - - translate(v=[-35,56.5,-30]) - *cube(size=[10.2,10.2,2.5],center=true); - } - - -} - -} - - - -bottomTray(); -*caseWithMountHoles(); - - -*caseShell(); diff --git a/resource/sbc/rockpro/rockpro.scad b/resource/sbc/rockpro/rockpro.scad deleted file mode 100644 index b9cea7c..0000000 --- a/resource/sbc/rockpro/rockpro.scad +++ /dev/null @@ -1,65 +0,0 @@ -include <../common.scad> - -// All coordinates are in [x,y], or [x,y,z] format - -pcbDimensions = [79.41, 127.06]; // [x,y] -pcbThickness = 1.22; - -// TODO move mount points -mountPoints = [[0,0,0], [0,118,0], [71.0,118, 0], [71.0,0,0]]; - -module mountPoints_N(cylHeight, cylRad1, cylRad2, cylFn, center) { - for (i=[0:3]) { - p = mountPoints[i]; - translate(v=[p[0], p[1], p[2]]) - cylinder(r1=cylRad1, r2=cylRad2, h=cylHeight, $fn=cylFn, center=center); - } - -} - -module pcb() { - cube(size=[pcbDimensions[0], pcbDimensions[1], pcbThickness]); -} - -// defined on x-z plane, start at top of pcb -module frontFaceIOCutouts_N() { - translate(v=[9,0,0]) - cube(size=[26.0,inf50,7.5]); - - translate(v=[35,0,0]) - cube(size=[35,inf50,17.9]); -} -module backFaceIOCutouts_N() { - translate(v=[9,0,0]) - cube(size=[61,inf50,14]); -} - - -module cutoutProfile_N() { - - color([1,0,1]) - union() { - mirror(v=[0,1,0]) - translate(v=[0,-1,pcbThickness]) - frontFaceIOCutouts_N(); - - translate(v=[0,pcbDimensions[1]-1, pcbThickness]) - backFaceIOCutouts_N(); - } - - color([0.3,0.8,0.1]) - difference() { - pcb(); - translate(v=[3.75, 3.75]) - mountPoints_N(10,2,2,10,true); - } -} - -//cutoutProfile_N(); - - -//mountPoints_N(10,2,2, true); - - - - diff --git a/resource/sbc/rpi/voronoi.scad b/resource/sbc/rpi/voronoi.scad deleted file mode 100644 index 66ae0e7..0000000 --- a/resource/sbc/rpi/voronoi.scad +++ /dev/null @@ -1,95 +0,0 @@ - -// (c)2013 Felipe Sanches -// licensed under the terms of the GNU GPL version 3 (or later) - -function normalize(v) = v / (sqrt(v[0] * v[0] + v[1] * v[1])); - -// -// The voronoi() function generates a 2D surface, which can be provided to -// a) linear_extrude() to produce a 3D object -// b) intersection() to restrict it to a a specified shape -- see voronoi_polygon.scad -// -// Parameters: -// points (required) ... nuclei coordinates (array of [x, y] pairs) -// L ... the radius of the "world" (the pattern is built within this circle) -// thickness ... the thickness of the lines between cells -// round ... the radius applied to corners (fillet in CAD terms) -// nuclei (bool) ... show nuclei sites -// -// These parameters need to be kept more or less in proportion to each other, and to the distance -// apart of points in the point_set. If one or the other parameter is increased or decreased too -// much, you'll get no output. -// -module voronoi(points, L = 200, thickness = 1, round = 6, nuclei = true) { - for (p = points) { - difference() { - minkowski() { - intersection_for(p1 = points){ - if (p != p1) { - angle = 90 + atan2(p[1] - p1[1], p[0] - p1[0]); - - translate((p + p1) / 2 - normalize(p1 - p) * (thickness + round)) - rotate([0, 0, angle]) - translate([-L, -L]) - square([2 * L, L]); - } - } - circle(r = round, $fn = 20); - } - if (nuclei) - translate(p) circle(r = 1, $fn = 20); - } - } -} - -// -// The random_voronoi() function is the helper wrapper over the voronoi() core. -// It generates random nuclei site coordinates into the square area, -// passing other arguments to voronoi() unchanged. -// -// Parameters: -// n ... number of nuclei sites to be generated -// nuclei (bool) ... show nuclei sites -// L ... the radius of the "world" (the pattern is built within this circle) -// thickness ... the thickness of the lines between cells -// round ... the radius applied to corners (fillet in CAD terms) -// min ... minimum x and y coordinate for nuclei generation -// max ... maximum x and y coordinate for nuclei generation -// seed ... seed for the random generator (random if undefined) -// center (bool) ... move resulting pattern to [0, 0] if true -// -module random_voronoi(n = 20, nuclei = true, L = 200, thickness = 1, round = 6, min = 0, max = 100, seed = undef, center = false) { - seed = seed == undef ? rands(0, 100, 1)[0] : seed; - echo("Seed", seed); - - // Generate points. - x = rands(min, max, n, seed); - y = rands(min, max, n, seed + 1); - points = [ for (i = [0 : n - 1]) [x[i], y[i]] ]; - - // Center Voronoi. - offset_x = center ? -(max(x) - min(x)) / 2 : 0; - offset_y = center ? -(max(y) - min(y)) / 2 : 0; - translate([offset_x, offset_y]) - - voronoi(points, L = L, thickness = thickness, round = round, nuclei = nuclei); -} - -// example with an explicit list of points: -point_set = [ - [0, 0], [30, 0], [20, 10], [50, 20], [15, 30], [85, 30], [35, 30], [12, 60], - [45, 50], [80, 80], [20, -40], [-20, 20], [-15, 10], [-15, 50] -]; -//voronoi(points = point_set, round = 4, nuclei = true); - -module voronoi3u_N(h) { - intersection() { - translate(v=[10,5,0]) - cube(size=[160, 10, h]); - translate(v=[20,-52,0]) - scale(v=[0.40,0.44,10]) - linear_extrude(height=10) - random_voronoi(n = 128, round = 2, min = 0, max = 350, seed = 40, thickness=3.5, nuclei=false); - } -} -