fix ventilation for sidewalls

This commit is contained in:
zhao
2023-08-13 12:51:21 -04:00
parent 07dee71795
commit 7b0ea16b04
21 changed files with 94 additions and 104 deletions

View File

@ -2,7 +2,7 @@
![display](media/renders/rackDisplayRounded.png)
### A parametric 3d-printable mini rack system
### A modular 3d-printable mini rack system
- ***Mount Anything:*** Perfect for organizing SBCs, mini PCs, small switches, power hubs, etc.
- ***Fully customizable:*** Fully written in OpenSCAD. Everything, from the dimensions of the rack, to the roundness of the corners, can be modified with a simple code change.
- ***Printable from home:*** Designed to be printed with conventional FDM printers. Requires minimal supports when printing, and final assembly needs only a few easy-to-source parts.
@ -11,12 +11,12 @@
## Assembly
Pre-generated STLs for roughly 200mm^3 (mini), 180mm^3 (micro), and 100mm^3 (nano) rack frames can be found in [stl](stl).
Pre-generated STLs for roughly 200mm^3 (mini), 180mm^3 (micro), and 100mm^3 (nano) rack frames can be found in the [stl](stl) dir.
These STLs are generated from the files in [rack/print](rack/print), and [rack-mount/print](rack-mount/print) - further information about printing these parts
(supports, orientation) can be found in these files.
### Assembly Instructions
Please see [the assembly README here](./assembly-guide)
Please see [the assembly guide](./assembly-guide).
### Required Tools:
- 3d FDM Printer - build size requirements depend on configured rack profile
@ -48,7 +48,7 @@ Please see [the assembly README here](./assembly-guide)
| [Left Side Wall](./rack/print/sideWallLeft_P.scad) | 1 |
| [Right Side Wall](./rack/print/sideWallRight_P.scad) | 1 |
| [XY-Plate](./rack/print/xyPlate_P.scad) | 2 |
| [Feet](./rack/print/feet_P.scad) (optional) | 2 |
| [Feet](./rack/print/rackFeet_P.scad) (optional) | 2 |
#### Notes:
@ -56,7 +56,7 @@ Please see [the assembly README here](./assembly-guide)
- Please also adjust [this file](./config/slicer.scad) to match your slicer settings.
- Omitted actual plastic for printing. Any conventional 3d printing plastic should do (PLA, PETG, ABS),
but beware of PLA's thermal limits. Higher infill is recommended for all parts.
- For joining two racks, you will need to print 4 [stackConnectorDuals](./rack/print/stackConnectorDual_P.scad), as well as 8 M3 hex nuts, and 8 M3x12 FHCS.
- For joining two racks, you will need to print 4 [rackJoiners](./rack/print/rackJoiner_P.scad), as well as 8 M3 hex nuts, and 8 M3x12 FHCS.
- Main front rails use M4 hex nuts and screws.
- Side rails are mounted using M3 hex nuts and screws.
@ -74,6 +74,7 @@ Generate all project files for the `micro` profile:
`python3 rbuild.py -b all -c micro`
This will build all the parts defined in [rack/print](./rack/print), and put the STLs in [stl/micro](./stl/micro).
You can also provide a `-dz {n}` parameter to adjust the height of the generated rack.
For generating a specific part:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 KiB

After

Width:  |  Height:  |  Size: 339 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 KiB

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 86 KiB

View File

@ -1,9 +1,15 @@
// Manually set this variable to toggle rack profile
profileName = "micro";
_profileConfigs = [
// You can introduce a custom profile like:
/*
["custom", [
["maxUnitWidth", 180],
["maxUnitDepth", 120],
["numRailScrews", 10]
]],
*/
["default", [
["maxUnitWidth", 180],
["maxUnitDepth", 180],
@ -27,7 +33,7 @@ _profileConfigs = [
["mini", [
["maxUnitWidth", 205],
["maxUnitDepth", 205],
["numRailScrews", 20]
["numRailScrews", 16]
]]
];

View File

@ -26,6 +26,6 @@ module slideHexNutToFeet(at=0) {
slideNut();
if (!plasticMask) {
stackConnectorFeet();
rackFeet();
}
}

View File

@ -1,4 +1,4 @@
use <../stackEnds.scad>
stackConnectorFeet();
rackFeet();

View File

@ -2,4 +2,4 @@ include <../stackEnds.scad>
// Oriented for 3d printing. No supports required, but it's reccommended to print this with a brim.
// Adding a brim will require some post-processing in the form of trimming the bottom.
stackConnectorDual();
rackJoiner();

View File

@ -131,11 +131,46 @@ module sideWallBase() {
}
}
module sideWallVerticalRibs(numRibs, ribZ, ribYDiff, ribExtrusion=1) {
module applySideWallDefaultVentilation(numVents) {
r = 2; // vent roundness
ventLength = sideWallY - 2*sideWallDefaultVentilationToZEdge;
ventZDiff = (sideWallZ - 2*sideWallDefaultVentilationToYEdge)/(numVents-1);
apply_n() {
for (i = [0:numVents-1]) {
translate(v = [0, sideWallDefaultVentilationToZEdge, i * ventZDiff + sideWallDefaultVentilationToYEdge])
vent();
}
children(0);
}
module vent() {
translate(v=[-inf/2,r,-sideWallDefaultVentilationWidth/2])
minkowski() {
rotate(a=[0,90,0])
cylinder(r=r,h=inf);
cube(size = [inf, max(eps, ventLength-2*r), max(eps,sideWallDefaultVentilationWidth-2*r)]);
}
}
}
module applySideWallBracing(numRibs) {
apply_p() {
// TODO add horizontal bracing
sideWallVerticalBracing(numRibs = numRibs);
children(0);
}
module sideWallVerticalBracing(numRibs, ribZ, ribExtrusion=1) {
ribRampLength = 5;
ribWidth = 2;
ribZ = sideWallZ;
ribYDiff = sideWallY - 2*sideWallDefaultVerticalBracingToZEdge;
translate(v=[0,sideWallDefaultVerticalBracingToZEdge,0])
intersection() {
for (i = [0:numRibs-1]) {
@ -147,11 +182,10 @@ module sideWallVerticalRibs(numRibs, ribZ, ribYDiff, ribExtrusion=1) {
halfspace(vpos=[1,0,0], p=[0,0,0]);
}
module verticalRib(ribExtend, ribWidth) {
roundness = 0.5;
translate(v=[0,-ribWidth/2,0])
minkowski() {
hull() {
translate(v=[0,0,roundness])
@ -166,6 +200,7 @@ module sideWallVerticalRibs(numRibs, ribZ, ribYDiff, ribExtrusion=1) {
sphere(r=roundness);
}
}
}
}
}
}

View File

@ -4,37 +4,9 @@ include <./sideWallBase.scad>
module sideWallLeft() {
applySideWallVerticalRibs()
applyEpicVentilation()
numVentsCustom = ceil((sideWallZ - 2*sideWallDefaultVentilationToYEdge)/10);
applySideWallBracing(numRibs=2)
applySideWallDefaultVentilation(numVents=numVentsCustom)
sideWallBase();
module applyEpicVentilation() {
apply_n() {
for (i = [1:8]) {
translate(v = [0, 41, i * 12 + 10])
vent();
}
children(0);
}
module vent() {
minkowski() {
rotate(a=[0,90,0])
cylinder(r=2,h=1);
cube(size = [10, 100, 1]);
}
}
}
module applySideWallVerticalRibs() {
echo("sideWallZ", sideWallZ);
apply_p() {
translate(v = [0, 30, 0])
sideWallVerticalRibs(numRibs = 2, ribZ = sideWallZ, ribYDiff = 120, ribExtrusion = 1.5);
children(0);
}
}
}

View File

@ -4,40 +4,11 @@ include <./sideWallBase.scad>
module sideWallRight() {
applyEpicVentilation()
numVentsCustom = ceil((sideWallZ - 2*sideWallDefaultVentilationToYEdge)/10);
mirror(v=[1,0,0])
applySideWallVerticalRibs()
applySideWallBracing(numRibs=2)
applySideWallDefaultVentilation(numVents=numVentsCustom)
sideWallBase();
module applyEpicVentilation() {
apply_n() {
translate(v=[-10,0,0])
for (i = [1:8]) {
translate(v = [0, 41, i * 12 + 10])
vent();
}
children(0);
}
module vent() {
minkowski() {
rotate(a=[0,90,0])
cylinder(r=2,h=1);
cube(size = [10, 100, 1]);
}
}
}
module applySideWallVerticalRibs() {
apply_p() {
translate(v = [0, 30, 0])
sideWallVerticalRibs(numRibs = 2, ribZ = sideWallZ, ribYDiff = 120, ribExtrusion = 1.5);
children(0);
}
}
}

View File

@ -32,3 +32,8 @@ sideWallX = (yBarWidth-(railTotalWidth+railSlotToInnerYEdge)) - sideWallXGapClea
hingePoleDx = sideWallSlotToOuterYEdge + sideWallConnW/2.0;
hingePoleDy = sideWallY - (sideWallSlotToOuterXEdge + (hingePoleR+radiusXYSlack));
sideWallDefaultVerticalBracingToZEdge = 30;
sideWallDefaultVentilationToZEdge = 40;
sideWallDefaultVentilationToYEdge = 25;
sideWallDefaultVentilationWidth = 6;

View File

@ -7,7 +7,7 @@ stackConnectorDx = rackTotalWidth - 2*(connectorXEdgeToYBarXEdge + connectorRect
stackConnectorDy = rackTotalDepth - 2*(connectorYEdgeToYBarYEdge + connectorRectDepth/2);
stackConnectorDualSpacing = 0.5;
module stackConnectorDual() {
module rackJoiner() {
translate(v=[0,0,stackConnectorDualSpacing/2])
stackConnectorPlug();
@ -19,7 +19,7 @@ module stackConnectorDual() {
cube(size=[connectorRectWidth+connectorRectPlugSlack, connectorRectDepth+connectorRectPlugSlack, stackConnectorDualSpacing]);
}
module stackConnectorFeet() {
module rackFeet() {
bandThickness = 2;
height = 18;