update rack-mount items
This commit is contained in:
1
TODO.md
1
TODO.md
@ -7,6 +7,7 @@
|
|||||||
- Start working on actual cases
|
- Start working on actual cases
|
||||||
- Figure out why sidewall build is so slow
|
- Figure out why sidewall build is so slow
|
||||||
- Tidy up imports
|
- Tidy up imports
|
||||||
|
- Standardize meaning of `U`
|
||||||
|
|
||||||
### Ideas
|
### Ideas
|
||||||
- Clean up `sharedVariables.scad`!!!
|
- Clean up `sharedVariables.scad`!!!
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
|
|
||||||
|
include <../config/slack.scad>
|
||||||
|
|
||||||
// rj45 slot-to-slot keystone jack model and negative
|
// rj45 slot-to-slot keystone jack model and negative
|
||||||
keystoneMainBodyWidth = 15.0;
|
keystoneMainBodyWidth = 15.0;
|
||||||
keystoneMainBodyHeight = 16.90;
|
keystoneMainBodyHeight = 16.90;
|
||||||
@ -17,28 +19,29 @@ frontToSideLugFront = 10.63;
|
|||||||
|
|
||||||
module rj45Keystone() {
|
module rj45Keystone() {
|
||||||
// main keystone body (no hooks or lugs)
|
// main keystone body (no hooks or lugs)
|
||||||
cube(size=[keystoneMainBodyWidth, keystoneMainBodyDepth, keystoneMainBodyHeight]);
|
cube(size=[keystoneMainBodyWidth + xySlack, keystoneMainBodyDepth + xySlack, keystoneMainBodyHeight]);
|
||||||
|
|
||||||
// slot for top hook
|
// slot for top hook
|
||||||
translate(v=[0,frontToHookCatch,0])
|
translate(v=[0,frontToHookCatch,0])
|
||||||
cube(size=[keystoneMainBodyWidth, keystoneMainBodyDepth -frontToHookCatch, heightWithHookBody]);
|
cube(size=[keystoneMainBodyWidth + xySlack, keystoneMainBodyDepth-frontToHookCatch + xySlack, heightWithHookBody]);
|
||||||
cube(size=[keystoneMainBodyWidth, frontToHookCatch, heightWithHookCatch]);
|
|
||||||
|
cube(size=[keystoneMainBodyWidth + xySlack, frontToHookCatch + xySlack, heightWithHookCatch]);
|
||||||
|
|
||||||
// slots for side lugs
|
// slots for side lugs
|
||||||
translate(v=[-sideLugWidth, frontToSideLugFront,0])
|
translate(v=[-sideLugWidth, frontToSideLugFront,0])
|
||||||
cube(size=[widthWithSideLugs, keystoneMainBodyDepth-frontToSideLugFront, keystoneMainBodyHeight]);
|
cube(size=[widthWithSideLugs + xySlack, keystoneMainBodyDepth-frontToSideLugFront + xySlack, keystoneMainBodyHeight]);
|
||||||
|
|
||||||
// slots for bottom lugs
|
// slots for bottom lugs
|
||||||
translate(v=[0,0,-(heightWithBottomLug-keystoneMainBodyHeight)])
|
translate(v=[0,0,-(heightWithBottomLug-keystoneMainBodyHeight)])
|
||||||
cube(size=[keystoneMainBodyWidth, frontToBottomLugBack, keystoneMainBodyHeight]);
|
cube(size=[keystoneMainBodyWidth + xySlack, frontToBottomLugBack + xySlack, keystoneMainBodyHeight]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module rj45KeystoneJack_N() {
|
module rj45KeystoneJack_N() {
|
||||||
translate(v=[0,-4,0.5]) // why?
|
translate(v=[0,-4,0.5]) // why?
|
||||||
intersection() {
|
intersection() {
|
||||||
translate(v=[-2.5,4,-4])
|
translate(v=[-2.5,4,-4])
|
||||||
cube(size=[20,6,28]);
|
cube(size=[20,6,28]);
|
||||||
rj45Keystone();
|
rj45Keystone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
// Some misc math-y utils
|
// Some misc math-y utils
|
||||||
|
|
||||||
$fn=64;
|
$fn=64;
|
||||||
eps=0.0001;
|
eps=0.001;
|
||||||
inf10 = 10;
|
inf10 = 10;
|
||||||
inf50 = 50;
|
inf50 = 50;
|
||||||
inf1000 = 1000;
|
inf1000 = 1000;
|
||||||
|
|||||||
10
rack-mount/frontBoxHolder.scad
Normal file
10
rack-mount/frontBoxHolder.scad
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// To be used with closed sideRails to fully encapsulate a box
|
||||||
|
|
||||||
|
include <../config/common.scad>
|
||||||
|
include <../helper/common.scad>
|
||||||
|
use <./plateBase.scad>
|
||||||
|
|
||||||
|
module frontBoxHolder(plateThickness=3, plate) {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
include <../config/common.scad>
|
||||||
|
include <../helper/common.scad>
|
||||||
|
include <../rack/sharedVariables.scad>
|
||||||
|
use <./plateBase.scad>
|
||||||
|
|
||||||
|
|
||||||
|
patchPanel(slots=2);
|
||||||
|
|
||||||
|
module patchPanel (slots=8) {
|
||||||
|
difference() {
|
||||||
|
plateThickness = 3;
|
||||||
|
keystoneSpacing = 19;
|
||||||
|
supportPlateThickness = 5.9;
|
||||||
|
supportPlateHeight = 29;
|
||||||
|
supportPlateEdgeSpacing = 3;
|
||||||
|
supportPlateWidth = slots * keystoneSpacing + supportPlateEdgeSpacing;
|
||||||
|
|
||||||
|
leftRailScrewToSupportDx = railScrewHoleToInnerEdge+4;
|
||||||
|
railScrewToEdge = 4.5;
|
||||||
|
|
||||||
|
union() {
|
||||||
|
plateBase(U = 2, plateThickness = plateThickness, screwType = mainRailScrewType, screwToXEdge=railScrewToEdge, screwToYEdge=railScrewToEdge, filletR = 2);
|
||||||
|
translate(v = [leftRailScrewToSupportDx, - railScrewToEdge, - supportPlateThickness])
|
||||||
|
cube(size = [supportPlateWidth, supportPlateHeight, supportPlateThickness]);
|
||||||
|
}
|
||||||
|
|
||||||
|
union() {
|
||||||
|
for (i = [0:slots-1]) {
|
||||||
|
translate(v = [leftRailScrewToSupportDx+supportPlateEdgeSpacing + i*keystoneSpacing, 0, eps])
|
||||||
|
rotate(a = [-90, 0, 0])
|
||||||
|
rj45KeystoneJack_N();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,7 +3,7 @@ include <./common.scad>
|
|||||||
|
|
||||||
plateBase(U=2, plateThickness=3, screwType="m4", filletR=2);
|
plateBase(U=2, plateThickness=3, screwType="m4", filletR=2);
|
||||||
|
|
||||||
module plateBase(U, plateThickness, screwType, screwToXEdge=4, screwToYEdge=4, filletR=2) {
|
module plateBase(U, plateThickness, screwType, screwToXEdge=4.5, screwToYEdge=4.5, filletR=2) {
|
||||||
|
|
||||||
assert(floor(U) == U && U > 0)
|
assert(floor(U) == U && U > 0)
|
||||||
assert(plateThickness > 0);
|
assert(plateThickness > 0);
|
||||||
@ -14,11 +14,12 @@ module plateBase(U, plateThickness, screwType, screwToXEdge=4, screwToYEdge=4, f
|
|||||||
plateLength = screwDx + 2*screwToXEdge;
|
plateLength = screwDx + 2*screwToXEdge;
|
||||||
plateHeight = screwDy + 2*screwToYEdge;
|
plateHeight = screwDy + 2*screwToYEdge;
|
||||||
|
|
||||||
translate(v=[0,0,-plateThickness]) // easier to work with
|
translate(v=[-screwToXEdge,-screwToYEdge,-plateThickness]) // easier to work with
|
||||||
difference() {
|
difference() {
|
||||||
base();
|
base();
|
||||||
|
|
||||||
mirror4XY(p=[screwToXEdge, screwToYEdge], dx=screwDx, dy=screwDy)
|
mirror4XY(p=[screwToXEdge, screwToYEdge], dx=screwDx, dy=screwDy)
|
||||||
|
translate(v=[0,0,plateThickness])
|
||||||
cylinder(r=screwRadiusSlacked(screwType), h=plateThickness*2, center=true);
|
cylinder(r=screwRadiusSlacked(screwType), h=plateThickness*2, center=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,7 +27,6 @@ module plateBase(U, plateThickness, screwType, screwToXEdge=4, screwToYEdge=4, f
|
|||||||
minkowski() {
|
minkowski() {
|
||||||
translate(v=[filletR, filletR, 0])
|
translate(v=[filletR, filletR, 0])
|
||||||
cube(size = [plateLength-2*filletR, plateHeight-2*filletR, plateThickness]);
|
cube(size = [plateLength-2*filletR, plateHeight-2*filletR, plateThickness]);
|
||||||
|
|
||||||
cylinder(r=filletR, h=eps);
|
cylinder(r=filletR, h=eps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
3
rack-mount/print/patchPanel_P.scad
Normal file
3
rack-mount/print/patchPanel_P.scad
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
use <../patchPanel.scad>
|
||||||
|
|
||||||
|
patchPanel(slots=8);
|
||||||
@ -8,7 +8,7 @@ sideSupportRailBase(u=2, double=true, top=true, baseThickness=1.5, sideThickness
|
|||||||
// distance between front and back main rail screw mounts
|
// distance between front and back main rail screw mounts
|
||||||
sideRailScrewMountDist = yBarDepth - 2*(frontScrewSpacing + railFrontThickness + railSlotToXZ);
|
sideRailScrewMountDist = yBarDepth - 2*(frontScrewSpacing + railFrontThickness + railSlotToXZ);
|
||||||
|
|
||||||
module sideSupportRailBase(u=2, double=true, top=true, baseThickness=2, sideThickness=2, backThickness=2, supportedZ=26.5, supportedY=101.5, supportedX=159) {
|
module sideSupportRailBase(u=2, double=true, top=true, baseThickness=2, sideThickness=2, backThickness=2, supportedZ=27.5, supportedY=101.5, supportedX=159) {
|
||||||
|
|
||||||
mountBlockHeight = 10;
|
mountBlockHeight = 10;
|
||||||
mountBlockDepth = 10;
|
mountBlockDepth = 10;
|
||||||
|
|||||||
27
rbuild.py
27
rbuild.py
@ -3,8 +3,9 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import subprocess
|
import subprocess
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
|
|
||||||
|
PATH_TO_OPENSCAD = '/Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD'
|
||||||
|
PATH_TO_OPENSCAD_NIGHTLY = 'path/to/nightly/build'
|
||||||
|
|
||||||
# For actual dimensions, please see profiles.scad.
|
# For actual dimensions, please see profiles.scad.
|
||||||
class BuildSizeConfig:
|
class BuildSizeConfig:
|
||||||
@ -23,9 +24,9 @@ RACK_MOUNT_BUILD_TARGET_SUB_DIR = 'rack-mount'
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if not assert_os():
|
|
||||||
print("Linux Required for OpenSCAD CLI")
|
if not assertOpenscadExists():
|
||||||
return
|
print("Could not find OpenSCAD binary. Please make sure it's configured in rbuild.py. Currently only Darwin and Linux have been tested to work.")
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
prog='rbuild',
|
prog='rbuild',
|
||||||
@ -75,6 +76,10 @@ def main():
|
|||||||
def run_build(args):
|
def run_build(args):
|
||||||
|
|
||||||
build_var = args.b
|
build_var = args.b
|
||||||
|
|
||||||
|
if build_var is None:
|
||||||
|
print("Please provide the build (-b) variable") # TODO redundant
|
||||||
|
|
||||||
config_var = args.c
|
config_var = args.c
|
||||||
target_var = args.t
|
target_var = args.t
|
||||||
dz = args.dz
|
dz = args.dz
|
||||||
@ -166,9 +171,9 @@ def find_scad_file(directory, filename):
|
|||||||
def run_openscad(options, nightly):
|
def run_openscad(options, nightly):
|
||||||
|
|
||||||
if nightly:
|
if nightly:
|
||||||
command = ['openscad-nightly', '--enable', 'all']
|
command = [PATH_TO_OPENSCAD_NIGHTLY, '--enable', 'all']
|
||||||
else:
|
else:
|
||||||
command = ['openscad']
|
command = [PATH_TO_OPENSCAD]
|
||||||
|
|
||||||
command += ['--export-format', 'binstl'] + options
|
command += ['--export-format', 'binstl'] + options
|
||||||
try:
|
try:
|
||||||
@ -178,14 +183,8 @@ def run_openscad(options, nightly):
|
|||||||
print('OpenSCAD command not found! '
|
print('OpenSCAD command not found! '
|
||||||
'Please make sure that you have OpenSCAD installed and can run OpenSCAD CLI commands. '
|
'Please make sure that you have OpenSCAD installed and can run OpenSCAD CLI commands. '
|
||||||
'(Currently needs Linux for this)')
|
'(Currently needs Linux for this)')
|
||||||
|
def assertOpenscadExists():
|
||||||
|
return os.path.exists(PATH_TO_OPENSCAD)
|
||||||
def assert_os():
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|||||||
BIN
stl/micro/rack-mount/patchPanel_P.stl
Normal file
BIN
stl/micro/rack-mount/patchPanel_P.stl
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user