finish new assembly instructions, and update readme
31
README.md
@ -9,9 +9,6 @@
|
||||
- ***No cage nuts!*** Sliding hex nut design for the front rails allows one to easily mount items without dealing with cage nuts.
|
||||
- ***Stackable:*** Individual racks can be easily stacked and fastened together. Mix and match different color and design combinations!
|
||||
|
||||
### Renders
|
||||
See the [renders for difference parametric profiles here](media/renders)
|
||||
|
||||
## Assembly
|
||||
|
||||
Pre-generated STLs for roughly 200mm^3 (mini), 180mm^3 (micro), and 100mm^3 (nano) rack frames can be found in [stl](stl).
|
||||
@ -30,27 +27,45 @@ Please see [the assembly README here](./assembly-guide)
|
||||
|
||||
| Item | Name | Quantity | Comment |
|
||||
|---------------------------------------------------------------|---------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------|
|
||||
| <img src="media/bom/fhcs_medium.gif" height="60" width="72"> | M3x12 FHCS | 20 | Extras are useful and inexpensive. If you plan on eventually stacking multiple racks together, don't hesitate to get a lot more. |
|
||||
| <img src="media/bom/fhcs_short.gif" height="60" width="72"> | M3x8 FHCS | 8 | Extras are useful and inexpensive. If you plan on eventually stacking multiple racks together, don't hesitate to get a lot more. |
|
||||
| <img src="media/bom/fhcs_medium.gif" height="60" width="72"> | M3x12 FHCS | 12 | ☝️ |
|
||||
| <img src="media/bom/fhcs_long.gif" height="60" width="72"> | M3x16 FHCS | 16 | ☝️ |
|
||||
| <img src="media/bom/hex_nut.gif" height="60" width="72"> | M3 hex nut | 36 | ☝️ |
|
||||
| <img src="media/bom/dowel.gif" height="60" width="72"> | 3x10 steel dowel pin | 4 | 3mm diameter, 10mm height |
|
||||
| <img src="media/bom/magnet.gif" height="60" width="72"> | 6x2 neodymium disc magnet | 8 | 6mm diameter, 2mm height |
|
||||
| <img src="media/bom/glue.gif" height="60" width="72"> | super glue | \>= 2ml | Used to glue magnets to plastic |
|
||||
|
||||
|
||||
|
||||
### Printing - Single Rack:
|
||||
| Part | Quantity |
|
||||
|--------------------------------------------------------------|----------|
|
||||
| [Y-Bar](./rack/print/yBar_P.scad) | 4 |
|
||||
| [X-Bar](./rack/print/xBar_P.scad) | 4 |
|
||||
| [Main Rail](./rack/print/mainRail_P.scad) | 4 |
|
||||
| [Left Magnet Module](./rack/print/magnetModuleLeft_P.scad) | 2 |
|
||||
| [Right Magnet Module](./rack/print/magnetModuleRight_P.scad) | 2 |
|
||||
| [Hinge Module](./rack/print/hingeModule.scad) | 4 |
|
||||
| [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 |
|
||||
|
||||
|
||||
|
||||
#### Notes:
|
||||
|
||||
- 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 8 M3 hex nuts, and 8 M3x12 FHCS.
|
||||
- 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.
|
||||
- Main front rails use M4 hex nuts and screws.
|
||||
- Side rails are mounted using M3 hex nuts and screws.
|
||||
|
||||
|
||||
## Configuring + Generating STLs
|
||||
A python script: `rbuild.py` is provided to generate different project stls.
|
||||
A python script: [rbuild.py](./rbuild.py) is provided to generate different project stls.
|
||||
|
||||
Requirements:
|
||||
- `openscad` cli (Currently only supported on Linux/Mac)
|
||||
- `openscad` cli (Currently only supported on Linux/Mac). Please configure the path to the OpenSCAD binary in [rbuild.py](./rbuild.py)
|
||||
- `python3`
|
||||
|
||||
### Examples:
|
||||
|
||||
@ -1,50 +1,52 @@
|
||||
# Rack Assembly Instructions
|
||||
|
||||
**Note**: This rack uses two different types of M3 flat heat screws: a 6mm length screw, referred to as type A; and a 10mm length screw, referred as type B.
|
||||
|
||||
|
||||
TODO: Add image reference for parts
|
||||
**Note**: Please see
|
||||
- [BOM](../README.md#bom---single-rack) for required materials, beyond the actual 3-d printed parts.
|
||||
- [Print BOM](../README.md#printing---single-rack) for all the required 3-d printed parts for a single rack.
|
||||
|
||||
## Instructions:
|
||||
Insert heatset inserts into Y-bars - 4 times:
|
||||

|
||||
Slide in M3 hex nuts into the Y-bars - 4 times. Each corner should have 3 hex nuts:
|
||||

|
||||
|
||||
Glue magnets into magnet side-modules - 4 times:
|
||||

|
||||

|
||||
|
||||
Glue top and bottom magnets into side walls - 2 times:
|
||||

|
||||

|
||||
|
||||
Insert top and bottom dowel rods into side walls - 2 times:
|
||||

|
||||

|
||||
|
||||
Slide Y-bars into X-bars - 2 times:
|
||||

|
||||

|
||||
|
||||
Screw together Y-bars and X-bars using 4 B-type screws (one screw per corner) - 2 times:
|
||||

|
||||
Screw together Y-bars and X-bars using 4 M3x12 FHCS screws (one screw per corner) - 2 times:
|
||||

|
||||
|
||||
Screw in the side-modules with A-type screws: two magnet side modules in front with the magnets facing outwards, and two dowel holder side modules in the back - 2 times:
|
||||

|
||||
|
||||
Screw in the main rails with A-type screws:
|
||||

|
||||
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):
|
||||

|
||||
|
||||
Screw in the main rails with M3x16 FHCS screws.
|
||||

|
||||
|
||||
Prop us the side wall using the side modules. Make sure the dowels are inserted properly, and the magnets align:
|
||||

|
||||

|
||||
|
||||
Slide in the other (top) tray. Make sure the magnets and dowels align. Screw in the main rails with A-type screws:
|
||||

|
||||
Slide in the other (top) tray. Make sure the magnets and dowels align. Screw in the main rails with M3x16 FHCS screws:
|
||||

|
||||
|
||||
Attach the top and bottom plates with 4 M3x8 screws each:
|
||||

|
||||

|
||||
|
||||
Slide in hex nuts into feet - 2 times:
|
||||

|
||||

|
||||
|
||||
Insert feet into the bottom of the rack:
|
||||

|
||||

|
||||
|
||||
Screw in feet using 4 B-type screws:
|
||||

|
||||
Screw in feet using 4 M3x12 FHCS screws:
|
||||

|
||||
|
||||
Finally, attach the top and bottom plates with 4 A-type screws each:
|
||||

|
||||
|
||||
**FIN**
|
||||
|
Before Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 499 KiB After Width: | Height: | Size: 325 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 190 KiB |
|
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 240 KiB After Width: | Height: | Size: 240 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 99 KiB |
@ -8,7 +8,7 @@ $vpf = 22.50;
|
||||
addMagnetsToMagnetModules(at=$t);
|
||||
|
||||
module addMagnetsToMagnetModules(at=0) {
|
||||
t = lerp(a=8,b=0,t=at);
|
||||
t = lerp(a=6,b=0,t=at);
|
||||
|
||||
if (!plasticMask) {
|
||||
magnetModule();
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
include <./common.scad>
|
||||
|
||||
$vpt = [40,44,70];
|
||||
$vpr = [77,0,40];
|
||||
$vpt = [23,105,70];
|
||||
$vpr = [84,0,133];
|
||||
$vpd = 370;
|
||||
$vpf = 22.50;
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@ module attachSideConnectorModulesToYBars(at=0) {
|
||||
addMagnetsToMagnetModules(at=1);
|
||||
|
||||
translate(v=[yBarScrewHoleToOuterYEdge,yBarScrewHoleToFrontXEdge,sideWallConnLugDepression + 2*elevation])
|
||||
caseScrewA();
|
||||
caseScrewShort();
|
||||
}
|
||||
|
||||
multmatrix(xBarSpaceToYBarSpace * xBarMirrorOtherCornerTrans * yBarSpaceToXBarSpace * sideModuleTrans(elevation))
|
||||
@ -33,7 +33,7 @@ module attachSideConnectorModulesToYBars(at=0) {
|
||||
addMagnetsToMagnetModules(at=1);
|
||||
|
||||
translate(v=[yBarScrewHoleToOuterYEdge,yBarScrewHoleToFrontXEdge,sideWallConnLugDepression + 2*elevation])
|
||||
caseScrewA();
|
||||
caseScrewShort();
|
||||
}
|
||||
|
||||
multmatrix(yBarMirrorOtherCornerTrans * sideModuleTrans(elevation))
|
||||
@ -44,7 +44,7 @@ module attachSideConnectorModulesToYBars(at=0) {
|
||||
}
|
||||
|
||||
translate(v=[yBarScrewHoleToOuterYEdge,yBarScrewHoleToFrontXEdge,sideWallConnLugDepression + 2*elevation])
|
||||
caseScrewA();
|
||||
caseScrewShort();
|
||||
}
|
||||
|
||||
multmatrix(xBarSpaceToYBarSpace * xBarMirrorOtherCornerTrans * yBarSpaceToXBarSpace * yBarMirrorOtherCornerTrans * sideModuleTrans(elevation))
|
||||
@ -54,6 +54,6 @@ module attachSideConnectorModulesToYBars(at=0) {
|
||||
}
|
||||
|
||||
translate(v=[yBarScrewHoleToOuterYEdge,yBarScrewHoleToFrontXEdge,sideWallConnLugDepression + 2*elevation])
|
||||
caseScrewA();
|
||||
caseScrewShort();
|
||||
}
|
||||
}
|
||||
@ -28,7 +28,7 @@ module attachXYPlates(at=0,r=0) {
|
||||
module screw(t=0) {
|
||||
translate(v=[0,0,-t])
|
||||
mirror(v=[0,0,1])
|
||||
caseScrewA();
|
||||
caseScrewMedium();
|
||||
}
|
||||
|
||||
if (!plasticMask) {
|
||||
|
||||
@ -2,9 +2,9 @@ include <./common.scad>
|
||||
use <./attachSideConnectorModulesToYBars.scad>
|
||||
use <./propUpBottomXYTraywithSideWalls.scad>
|
||||
|
||||
$vpt = [71,123,88];
|
||||
$vpr = [44,0,47];
|
||||
$vpd = 450;
|
||||
$vpt = [115,58,113];
|
||||
$vpr = [98,0,17];
|
||||
$vpd = 620;
|
||||
$vpf = 22.50;
|
||||
|
||||
attachXYTrays(at=$t);
|
||||
@ -17,8 +17,8 @@ module attachXYTrays(at=0,r=0) {
|
||||
module singleScrew() {
|
||||
translate(v = [mainRailSlideHexOnYBarDx, mainRailSlideHexOnYBarDy, -5])
|
||||
rotate(a=[-45,0,0])
|
||||
translate(v=[0,0,14 + t2]) // length of caseScrewB
|
||||
caseScrewA();
|
||||
translate(v=[0,0,14 + t2]) // length of caseScrewLong
|
||||
caseScrewMedium();
|
||||
}
|
||||
|
||||
translate(v=[0,0,t1])
|
||||
|
||||
@ -54,13 +54,12 @@ module mirrorAllTrayCornersFromYBarSpace() {
|
||||
|
||||
secondStackTrans = upperXYTrayTrans * mirror(v=[0,0,1]);
|
||||
|
||||
|
||||
module caseScrewA() {
|
||||
module caseScrewShort() {
|
||||
if (!screwMask) {
|
||||
color([1, 1, 1]) {
|
||||
difference() {
|
||||
scale(v = [0.9, 0.9, 0.9])
|
||||
counterSunkHead_N(rackFrameScrewType, screwExtension = 10, headExtension = 0.5);
|
||||
counterSunkHead_N(rackFrameScrewType, screwExtension = 8, headExtension = 0.5);
|
||||
|
||||
cylinder($fn = 6, r = 1.5);
|
||||
}
|
||||
@ -68,12 +67,25 @@ module caseScrewA() {
|
||||
}
|
||||
}
|
||||
|
||||
module caseScrewB() {
|
||||
module caseScrewMedium() {
|
||||
if (!screwMask) {
|
||||
color([1, 1, 1]) {
|
||||
difference() {
|
||||
scale(v = [0.9, 0.9, 0.9])
|
||||
counterSunkHead_N(rackFrameScrewType, screwExtension = 14, headExtension = 0.5);
|
||||
counterSunkHead_N(rackFrameScrewType, screwExtension = 12, headExtension = 0.5);
|
||||
|
||||
cylinder($fn = 6, r = 1.5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module caseScrewLong() {
|
||||
if (!screwMask) {
|
||||
color([1, 1, 1]) {
|
||||
difference() {
|
||||
scale(v = [0.9, 0.9, 0.9])
|
||||
counterSunkHead_N(rackFrameScrewType, screwExtension = 16, headExtension = 0.5);
|
||||
|
||||
cylinder($fn = 6, r = 1.5);
|
||||
}
|
||||
|
||||
@ -28,8 +28,8 @@ module connectXYTrayWithMainRails(at=0) {
|
||||
multmatrix(
|
||||
translate(v = [mainRailSlideHexOnYBarDx, mainRailSlideHexOnYBarDy, -5])*
|
||||
rotate(a = [-45, 0, 0]))
|
||||
translate(v = [0, 0, 14 + t2]) // length of caseScrewB
|
||||
caseScrewB();
|
||||
translate(v = [0, 0, 14 + t2]) // length of caseScrewLong
|
||||
caseScrewLong();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,39 +1,12 @@
|
||||
include <./common.scad>
|
||||
include <./screwFeet.scad>
|
||||
|
||||
$vpt = [23,22,20];
|
||||
$vpr = [57,0,46];
|
||||
$vpd = 60;
|
||||
|
||||
// TODO: this is completly broken. fix this and figure out a nice way to run this with cli commands
|
||||
assemblyInstructions(stepNum=0);
|
||||
|
||||
module assemblyInstructions (stepNum=1) {
|
||||
|
||||
screwMask = false;
|
||||
plasticMask = false;
|
||||
sideSupportRailMask = true;
|
||||
|
||||
module pickStep(stepNum) {
|
||||
children(stepNum);
|
||||
}
|
||||
|
||||
pickStep(stepNum=stepNum) {
|
||||
slideHexNutsIntoYBar(at = $t); // moved
|
||||
addMagnetsToMagnetModules(at = $t); // moved
|
||||
addMagnetsToSideWall(at = $t); // moved
|
||||
attachXBarWithYBar(at = $t); // moved
|
||||
screwXBarAndYBar(at=$t); // moved
|
||||
attachSideConnectorModulesToYBars(at=$t); // moved
|
||||
connectXYTrayWithMainRails(at=1); // moved
|
||||
insertDowelsIntoSideWall(at=$t); // moved
|
||||
propUpBottomXYTraywithSideWalls(at=$t); // moved
|
||||
attachXYTrays(at=$t); // moved
|
||||
slideHexNutToFeet(at=$t);
|
||||
insertFeet(at=$t); // moved
|
||||
screwFeet(at=$t); // moved
|
||||
attachXYPlates(at=$t); // moved
|
||||
}
|
||||
|
||||
// TODO fix this
|
||||
module finalBuilds () {
|
||||
|
||||
// Final builds:
|
||||
// render()
|
||||
@ -46,384 +19,6 @@ module assemblyInstructions (stepNum=1) {
|
||||
// stackable(at=$t); // recommended at least 32 frames for animation
|
||||
// sideSwivel(at=$t);
|
||||
|
||||
|
||||
module slideHexNutsIntoYBar(at=0) {
|
||||
|
||||
|
||||
t = lerp(a=10,b=0.35,t=at); // non zero b for exposing the heatset gears for diagramming
|
||||
|
||||
if (!plasticMask) {
|
||||
yBar();
|
||||
}
|
||||
|
||||
heatSetHeight = heatSetInsertSlotHeightSlacked(rackFrameScrewType) * 0.95;
|
||||
|
||||
function sideModuleHeatSetTrans(t=0) =
|
||||
translate(v=[yBarScrewHoleToOuterYEdge,yBarScrewHoleToFrontXEdge,t-(heatSetHeight+sideWallConnLugDepression)]) *
|
||||
yBarSideModuleConnectorTrans;
|
||||
|
||||
function mainRailHeatSetTrans(t=0) =
|
||||
translate(v=[mainRailSlideHexOnYBarDx,mainRailSlideHexOnYBarDy,t-heatSetHeight]) *
|
||||
yBarMainRailConnectorTrans;
|
||||
|
||||
function xBarHeatSetTrans(t=0) =
|
||||
translate(v=[t-heatSetHeight,27,6]) *
|
||||
yBarXBarConnectorTrans *
|
||||
rotate(a=[0,90,0]);
|
||||
|
||||
module heatSetInsertsOneCorner(t=0) {
|
||||
multmatrix(sideModuleHeatSetTrans(t = t))
|
||||
heatSetInsert(rackFrameScrewType);
|
||||
|
||||
multmatrix(mainRailHeatSetTrans(t = t))
|
||||
heatSetInsert(rackFrameScrewType);
|
||||
|
||||
multmatrix(xBarHeatSetTrans(t = t))
|
||||
heatSetInsert(rackFrameScrewType);
|
||||
}
|
||||
|
||||
if (!screwMask) {
|
||||
heatSetInsertsOneCorner(t = t);
|
||||
|
||||
multmatrix(yBarMirrorOtherCornerTrans)
|
||||
heatSetInsertsOneCorner(t = t);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module addMagnetsToMagnetModules(at=0) {
|
||||
t = lerp(a=8,b=0,t=at);
|
||||
|
||||
if (!plasticMask) {
|
||||
magnetModule();
|
||||
}
|
||||
|
||||
function insertMagnetTrans(t=0) =
|
||||
translate(v=[sideWallConnW-(magnetFaceToSideWallConnOuterYEdge+magnetHSlacked) + t,
|
||||
magnetModuleMagnetMountDy,
|
||||
magnetModuleMagnetMountDz]) *
|
||||
rotate(a=[0,90,0]);
|
||||
|
||||
multmatrix(insertMagnetTrans(t=t))
|
||||
magnet();
|
||||
}
|
||||
|
||||
module addMagnetsToSideWall(at=0) {
|
||||
t = lerp(a=8,b=0,t=at);
|
||||
|
||||
if (!plasticMask) {
|
||||
sideWallLeft();
|
||||
}
|
||||
|
||||
function insertMagnetTrans(t=0) =
|
||||
translate(v=[sideWallThickness+t, magnetMountToYBarFront, magnetMountToYBarTop-sideWallZHingeTotalClearance]) *
|
||||
rotate(a=[0,90,0]);
|
||||
|
||||
multmatrix(insertMagnetTrans(t=t))
|
||||
magnet();
|
||||
|
||||
multmatrix(translate(v=[0,0,sideWallZ - 2*(magnetMountToYBarTop- sideWallZHingeTotalClearance)]) * insertMagnetTrans(t=t))
|
||||
magnet();
|
||||
}
|
||||
|
||||
module attachXBarWithYBar(at=0) {
|
||||
|
||||
t = lerp(a=20, b=0, t=at);
|
||||
|
||||
// assemble x-y bar trays
|
||||
multmatrix(translate(v = [0, 0, t]))
|
||||
slideHexNutsIntoYBar(at=1);
|
||||
|
||||
multmatrix(translate(v = [0, 0, t])*xBarSpaceToYBarSpace*xBarMirrorOtherCornerTrans*yBarSpaceToXBarSpace)
|
||||
slideHexNutsIntoYBar(at=1);
|
||||
|
||||
if (!plasticMask) {
|
||||
multmatrix(xBarSpaceToYBarSpace)
|
||||
xBar();
|
||||
|
||||
multmatrix(yBarMirrorOtherCornerTrans*xBarSpaceToYBarSpace)
|
||||
xBar();
|
||||
}
|
||||
}
|
||||
|
||||
module screwXBarAndYBar(at=0) {
|
||||
screwExtension = lerp(a=15, b=0, t=at);
|
||||
|
||||
// in x bar space
|
||||
function xBarYBarScrewTrans(extension) =
|
||||
translate(v=[27,xBarSideThickness + extension,6]) * rotate(a=[270,0,0]);
|
||||
|
||||
// screw to connect x and y bars
|
||||
slideHexNutsIntoYBar(at=1);
|
||||
|
||||
multmatrix(xBarSpaceToYBarSpace*xBarMirrorOtherCornerTrans*yBarSpaceToXBarSpace)
|
||||
slideHexNutsIntoYBar(at=1);
|
||||
|
||||
multmatrix(xBarSpaceToYBarSpace)
|
||||
union() {
|
||||
|
||||
if (!plasticMask) { xBar(); }
|
||||
|
||||
multmatrix(xBarYBarScrewTrans(screwExtension))
|
||||
caseScrewB();
|
||||
|
||||
multmatrix(xBarMirrorOtherCornerTrans * xBarYBarScrewTrans(screwExtension))
|
||||
caseScrewB();
|
||||
}
|
||||
|
||||
multmatrix(yBarMirrorOtherCornerTrans*xBarSpaceToYBarSpace)
|
||||
union() {
|
||||
if (!plasticMask) { xBar(); }
|
||||
|
||||
multmatrix(xBarYBarScrewTrans(screwExtension))
|
||||
caseScrewB();
|
||||
|
||||
multmatrix(xBarMirrorOtherCornerTrans * xBarYBarScrewTrans(screwExtension))
|
||||
caseScrewB();
|
||||
}
|
||||
}
|
||||
|
||||
module attachSideConnectorModulesToYBars(at=0) {
|
||||
elevation = lerp(a=8, b=0, t=at);
|
||||
|
||||
// side module to front corner ybar
|
||||
function sideModuleTrans(t=0) =
|
||||
translate(v=[sideWallConnW,0,t-sideWallConnLugDepression])
|
||||
* yBarSideModuleConnectorTrans
|
||||
* mirror(v=[1,0,0]); // mirror for magnetModule
|
||||
|
||||
screwXBarAndYBar(at=1);
|
||||
|
||||
multmatrix(sideModuleTrans(elevation))
|
||||
union() {
|
||||
addMagnetsToMagnetModules(at=1);
|
||||
|
||||
translate(v=[yBarScrewHoleToOuterYEdge,yBarScrewHoleToFrontXEdge,sideWallConnLugDepression + 2*elevation])
|
||||
caseScrewA();
|
||||
}
|
||||
|
||||
multmatrix(xBarSpaceToYBarSpace * xBarMirrorOtherCornerTrans * yBarSpaceToXBarSpace * sideModuleTrans(elevation))
|
||||
union() {
|
||||
addMagnetsToMagnetModules(at=1);
|
||||
|
||||
translate(v=[yBarScrewHoleToOuterYEdge,yBarScrewHoleToFrontXEdge,sideWallConnLugDepression + 2*elevation])
|
||||
caseScrewA();
|
||||
}
|
||||
|
||||
multmatrix(yBarMirrorOtherCornerTrans * sideModuleTrans(elevation))
|
||||
union() {
|
||||
|
||||
if (!plasticMask) {
|
||||
hingeModule();
|
||||
}
|
||||
|
||||
translate(v=[yBarScrewHoleToOuterYEdge,yBarScrewHoleToFrontXEdge,sideWallConnLugDepression + 2*elevation])
|
||||
caseScrewA();
|
||||
}
|
||||
|
||||
multmatrix(xBarSpaceToYBarSpace * xBarMirrorOtherCornerTrans * yBarSpaceToXBarSpace * yBarMirrorOtherCornerTrans * sideModuleTrans(elevation))
|
||||
union() {
|
||||
if (!plasticMask) {
|
||||
hingeModule();
|
||||
}
|
||||
|
||||
translate(v=[yBarScrewHoleToOuterYEdge,yBarScrewHoleToFrontXEdge,sideWallConnLugDepression + 2*elevation])
|
||||
caseScrewA();
|
||||
}
|
||||
}
|
||||
|
||||
module connectXYTrayWithMainRails(at=0) {
|
||||
|
||||
elevation = lerp(a=5, b=0, t=at);
|
||||
|
||||
attachSideConnectorModulesToYBars(at=1);
|
||||
|
||||
function mainRailTrans(elevation) = translate(v=[0,0,elevation]) * yBarMainRailConnectorTrans;
|
||||
|
||||
module railAndScrew(elevation) {
|
||||
|
||||
if (!plasticMask) {
|
||||
mainRail();
|
||||
}
|
||||
|
||||
translate(v=[railSideMountThickness + 5, railFrontThickness + 4,railFootThickness + 2*elevation])
|
||||
caseScrewA();
|
||||
}
|
||||
|
||||
multmatrix(mainRailTrans(elevation=elevation))
|
||||
railAndScrew(elevation=elevation);
|
||||
|
||||
multmatrix(yBarMirrorOtherCornerTrans * mainRailTrans(elevation=elevation))
|
||||
railAndScrew(elevation=elevation);
|
||||
|
||||
multmatrix(xBarSpaceToYBarSpace * xBarMirrorOtherCornerTrans * yBarSpaceToXBarSpace * mainRailTrans(elevation=elevation))
|
||||
railAndScrew(elevation=elevation);
|
||||
|
||||
multmatrix(xBarSpaceToYBarSpace * xBarMirrorOtherCornerTrans * yBarSpaceToXBarSpace * yBarMirrorOtherCornerTrans * mainRailTrans(elevation=elevation))
|
||||
railAndScrew(elevation=elevation);
|
||||
}
|
||||
|
||||
module insertDowelsIntoSideWall(at=0) {
|
||||
|
||||
t = lerp(a=10, b=0, t=at);
|
||||
|
||||
hingeHoleH = hingePoleH-sideWallConnLugDepression;
|
||||
|
||||
addMagnetsToSideWall(at=1);
|
||||
|
||||
translate(v=[hingePoleDx,hingePoleDy, (sideWallZ-hingeHoleH) + t])
|
||||
hingeDowel();
|
||||
|
||||
translate(v=[hingePoleDx,hingePoleDy, (hingeHoleH-hingePoleH)-t])
|
||||
hingeDowel();
|
||||
|
||||
}
|
||||
|
||||
module propUpBottomXYTraywithSideWalls(at=0, r=0) {
|
||||
|
||||
t = lerp(a=10,b=0,t=at);
|
||||
|
||||
function sideWallToYBarTrans(t=0,r=0) =
|
||||
yBarMirrorOtherCornerTrans *
|
||||
yBarSideModuleConnectorTrans * // bring to y bar space
|
||||
mirror(v=[0,1,0]) *
|
||||
translate(v=[0,0,t]) *
|
||||
translate(v=[sideWallConnW/2.0, -hingePoleR, sideWallZHingeTotalClearance]) * // bring to side module space
|
||||
rotate(a=[0,0,-r]) *
|
||||
translate(v=[-hingePoleDx, -hingePoleDy, 0]);
|
||||
|
||||
connectXYTrayWithMainRails(at=1);
|
||||
|
||||
multmatrix(sideWallToYBarTrans(t=t, r=r))
|
||||
insertDowelsIntoSideWall(at=1);
|
||||
|
||||
multmatrix(xBarSpaceToYBarSpace * xBarMirrorOtherCornerTrans * yBarSpaceToXBarSpace * sideWallToYBarTrans(t=t,r=r))
|
||||
insertDowelsIntoSideWall(at=1);
|
||||
}
|
||||
|
||||
module attachXYTrays(at=0,r=0) {
|
||||
|
||||
t = lerp(a=10,b=0,t=at);
|
||||
|
||||
module singleScrew(t=0) {
|
||||
translate(v = [railSideMountThickness+5, railFrontThickness+4, railFootThickness + 2*t])
|
||||
caseScrewA();
|
||||
}
|
||||
|
||||
translate(v=[0,0,t])
|
||||
multmatrix(upperXYTrayTrans) {
|
||||
attachSideConnectorModulesToYBars(at=1);
|
||||
|
||||
mirrorAllTrayCornersFromYBarSpace()
|
||||
multmatrix(yBarMainRailConnectorTrans)
|
||||
singleScrew(t=t);
|
||||
}
|
||||
|
||||
propUpBottomXYTraywithSideWalls(at=1,r=r);
|
||||
}
|
||||
|
||||
module attachXYPlates(at=0,r=0) {
|
||||
|
||||
t = lerp(a=10,b=0,t=at);
|
||||
|
||||
// TODO fix xyPlate transformations
|
||||
function xyPlateToYBarTrans() = translate(v=[6,6,0]) * yBarBasePlateConnectorTrans;
|
||||
|
||||
attachXYTrays(at=1,r=r);
|
||||
|
||||
multmatrix(xyPlateToYBarTrans())
|
||||
xyPlateWithScrews(t=t);
|
||||
|
||||
multmatrix(upperXYTrayTrans * xyPlateToYBarTrans())
|
||||
xyPlateWithScrews(t=t);
|
||||
|
||||
module xyPlateWithScrews(t=0) {
|
||||
|
||||
module screw(t=0) {
|
||||
translate(v=[0,0,-t])
|
||||
mirror(v=[0,0,1])
|
||||
caseScrewA();
|
||||
}
|
||||
|
||||
if (!plasticMask) {
|
||||
translate(v = [0, 0, -t])
|
||||
xyPlate();
|
||||
}
|
||||
|
||||
screw(t=2*t);
|
||||
|
||||
translate(v=[xyPlateConnDx, 0,0])
|
||||
screw(t=2*t);
|
||||
|
||||
translate(v=[0, xyPlateConnDy,0])
|
||||
screw(t=2*t);
|
||||
|
||||
translate(v=[xyPlateConnDx, xyPlateConnDy,0])
|
||||
screw(t=2*t);
|
||||
}
|
||||
}
|
||||
|
||||
module slideHexNutToFeet(at=0) {
|
||||
|
||||
t = lerp(a=8, b=0, t=at);
|
||||
|
||||
module slideNut() {
|
||||
if (!screwMask) {
|
||||
rotate(a = [0, 0, 90])
|
||||
rotate(a = [90, 0, 0])
|
||||
hexNut(rackFrameScrewType);
|
||||
}
|
||||
}
|
||||
|
||||
translate(v=[0,t,connectorBottomToScrew + 0.5]) // where does this come from again? slack?
|
||||
slideNut();
|
||||
|
||||
translate(v=[stackConnectorDx,t,connectorBottomToScrew + 0.5]) // where does this come from again? slack?
|
||||
slideNut();
|
||||
|
||||
if (!plasticMask) {
|
||||
stackConnectorFeet();
|
||||
}
|
||||
}
|
||||
|
||||
module insertFeet(at=0,r=0) {
|
||||
|
||||
t = lerp(a=10,b=0,t=at);
|
||||
|
||||
attachXYPlates(at=1,r=r);
|
||||
|
||||
multmatrix(feetToYBarTrans(t=t))
|
||||
slideHexNutToFeet(at=1);
|
||||
|
||||
multmatrix(yBarMirrorOtherCornerTrans * feetToYBarTrans(t=t))
|
||||
slideHexNutToFeet(at=1);
|
||||
}
|
||||
|
||||
module screwFeet(at=0,r=0) {
|
||||
|
||||
t = lerp(a=20, b=0, t=at);
|
||||
|
||||
function screwTrans(t=0) = translate(v=[-t - 9,0,connectorBottomToScrew]) * rotate(a=[0,-90,0]);
|
||||
mirrorOtherFeetStackConnectorTrans = translate(v=[stackConnectorDx,0,0]) * mirror(v=[1,0,0]);
|
||||
|
||||
|
||||
module screwToFeetModule() {
|
||||
multmatrix(feetToYBarTrans(t = 0)*screwTrans(t = t))
|
||||
caseScrewB(); // we might want a longer screw?
|
||||
|
||||
multmatrix(feetToYBarTrans(t = 0)*mirrorOtherFeetStackConnectorTrans*screwTrans(t = t))
|
||||
caseScrewB();
|
||||
}
|
||||
|
||||
screwToFeetModule();
|
||||
|
||||
multmatrix(yBarMirrorOtherCornerTrans)
|
||||
screwToFeetModule();
|
||||
|
||||
insertFeet(at=1,r=r);
|
||||
}
|
||||
|
||||
|
||||
module finalSingle(r=0) {
|
||||
screwFeet(at=1,r=r);
|
||||
|
||||
@ -436,11 +31,11 @@ module assemblyInstructions (stepNum=1) {
|
||||
}
|
||||
|
||||
rotate(a = [0, -90, 0])
|
||||
caseScrewA();
|
||||
caseScrewMedium();
|
||||
|
||||
translate(v = [0, sideRailScrewMountDist, 0])
|
||||
rotate(a = [0, -90, 0])
|
||||
caseScrewA();
|
||||
caseScrewMedium();
|
||||
}
|
||||
}
|
||||
|
||||
@ -453,11 +48,11 @@ module assemblyInstructions (stepNum=1) {
|
||||
sideSupportRailBase("lBracket");
|
||||
}
|
||||
rotate(a=[0,-90,0])
|
||||
caseScrewA();
|
||||
caseScrewMedium();
|
||||
|
||||
translate(v=[0,sideRailScrewMountDist,0])
|
||||
rotate(a=[0,-90,0])
|
||||
caseScrewA();
|
||||
caseScrewMedium();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -522,7 +117,7 @@ module assemblyInstructions (stepNum=1) {
|
||||
|
||||
mirrorAllTrayCornersFromYBarSpace()
|
||||
multmatrix(screwTrans)
|
||||
caseScrewB();
|
||||
caseScrewLong();
|
||||
}
|
||||
|
||||
if (!plasticMask) {
|
||||
|
||||
@ -32,10 +32,10 @@ module screwFeet(at=0,r=0) {
|
||||
|
||||
module screwToFeetModule() {
|
||||
multmatrix(feetToYBarTrans(t = 0)*screwTrans(t = t))
|
||||
caseScrewB(); // we might want a longer screw?
|
||||
caseScrewLong(); // we might want a longer screw?
|
||||
|
||||
multmatrix(feetToYBarTrans(t = 0)*mirrorOtherFeetStackConnectorTrans*screwTrans(t = t))
|
||||
caseScrewB();
|
||||
caseScrewLong();
|
||||
}
|
||||
|
||||
screwToFeetModule();
|
||||
|
||||
@ -18,10 +18,10 @@ module screwFeet(at=0,r=0) {
|
||||
|
||||
module screwToFeetModule() {
|
||||
multmatrix(feetToYBarTrans(t = 0)*screwTrans(t = t))
|
||||
caseScrewA();
|
||||
caseScrewMedium();
|
||||
|
||||
multmatrix(feetToYBarTrans(t = 0)*mirrorOtherFeetStackConnectorTrans*screwTrans(t = t))
|
||||
caseScrewA();
|
||||
caseScrewMedium();
|
||||
}
|
||||
|
||||
screwToFeetModule();
|
||||
|
||||
@ -23,10 +23,10 @@ module screwXBarAndYBar(at=0) {
|
||||
if (!plasticMask) { xBar(); }
|
||||
|
||||
multmatrix(xBarYBarScrewTrans(screwExtension))
|
||||
caseScrewB();
|
||||
caseScrewLong();
|
||||
|
||||
multmatrix(xBarMirrorOtherCornerTrans * xBarYBarScrewTrans(screwExtension))
|
||||
caseScrewB();
|
||||
caseScrewLong();
|
||||
}
|
||||
|
||||
multmatrix(yBarMirrorOtherCornerTrans*xBarSpaceToYBarSpace)
|
||||
@ -34,9 +34,9 @@ module screwXBarAndYBar(at=0) {
|
||||
if (!plasticMask) { xBar(); }
|
||||
|
||||
multmatrix(xBarYBarScrewTrans(screwExtension))
|
||||
caseScrewB();
|
||||
caseScrewLong();
|
||||
|
||||
multmatrix(xBarMirrorOtherCornerTrans * xBarYBarScrewTrans(screwExtension))
|
||||
caseScrewB();
|
||||
caseScrewLong();
|
||||
}
|
||||
}
|
||||
4
rack/print/feet_P.scad
Normal file
@ -0,0 +1,4 @@
|
||||
use <../stackEnds.scad>
|
||||
|
||||
|
||||
stackConnectorFeet();
|
||||
@ -27,17 +27,17 @@ ASSEMBLY_GIF_TEMP_DIR = ASSEMBLY_GIF_BUILD_DIR + '/tmp'
|
||||
BUILD_GIF_FROM_PNG_SCRIPT = './misc/animate.sh'
|
||||
|
||||
ASSEMBLY_STEPS = [
|
||||
('slideHexNutsIntoYBar.scad', 16),
|
||||
('slideHexNutsIntoYBar.scad', 24),
|
||||
('addMagnetsToMagnetModules.scad', 16),
|
||||
('addMagnetsToSideWall.scad', 16),
|
||||
('attachXBarWithYBar.scad', 16),
|
||||
('screwXBarAndYBar.scad', 16),
|
||||
('attachSideConnectorModulesToYBars.scad', 16),
|
||||
('connectXYTrayWithMainRails.scad', 16),
|
||||
('connectXYTrayWithMainRails.scad', 24),
|
||||
('insertDowelsIntoSideWall.scad', 16),
|
||||
('propUpBottomXYTraywithSideWalls.scad', 16),
|
||||
('slideHexNutsIntoYBarXYPlate.scad', 16),
|
||||
('attachXYTrays.scad', 16),
|
||||
('attachXYTrays.scad', 24),
|
||||
('slideHexNutToFeet.scad', 16),
|
||||
('insertFeet.scad', 16),
|
||||
('screwFeet.scad', 16),
|
||||
|
||||