finish new assembly instructions, and update readme

This commit is contained in:
zhao
2023-08-12 11:44:52 -04:00
parent 4283e63139
commit 41c33ce46f
60 changed files with 106 additions and 478 deletions

View File

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

View File

@ -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:
![insert heatset inserts](./insertHeatsetInserts.gif)
Slide in M3 hex nuts into the Y-bars - 4 times. Each corner should have 3 hex nuts:
![insert heatset inserts](./gifs/slideHexNutsIntoYBar.gif)
Glue magnets into magnet side-modules - 4 times:
![glue magnets to magnet modules](./magnetToMagnetModule.gif)
![glue magnets to magnet modules](./gifs/addMagnetsToMagnetModules.gif)
Glue top and bottom magnets into side walls - 2 times:
![glue magnets to side walls](./magnetToSideWall.gif)
![glue magnets to side walls](./gifs/addMagnetsToSideWall.gif)
Insert top and bottom dowel rods into side walls - 2 times:
![insert dowels into side walls](./insertDowels.gif)
![insert dowels into side walls](./gifs/insertDowelsIntoSideWall.gif)
Slide Y-bars into X-bars - 2 times:
![slide y-bar into x-bar](./slideYBarIntoXBar.gif)
![slide y-bar into x-bar](./gifs/attachXBarWithYBar.gif)
Screw together Y-bars and X-bars using 4 B-type screws (one screw per corner) - 2 times:
![attach x-bar with y-bar](./screwYBarXBar.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)
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:
![attach side connector modules to y bars](./screwYBarSideModules.gif)
Screw in the main rails with A-type screws:
![connect xy-tray with main rails](./screwYBarMainRail.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)
Screw in the main rails with M3x16 FHCS screws.
![connect xy-tray with main rails](./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](./slideInSideWall.gif)
![prop up side walls](./gifs/propUpBottomXYTraywithSideWalls.gif)
Slide in the other (top) tray. Make sure the magnets and dowels align. Screw in the main rails with A-type screws:
![attach xy-trays](./connectXYTrays.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)
Attach the top and bottom plates with 4 M3x8 screws each:
![slideHexNutsIntoYBarXYPlate](./gifs/slideHexNutsIntoYBarXYPlate.gif)
![attachXYPlates.gif](gifs%2FattachXYPlates.gif)
Slide in hex nuts into feet - 2 times:
![slide hex nuts into feet](./slideHexNutToFeet.gif)
![slide hex nuts into feet](./gifs/slideHexNutToFeet.gif)
Insert feet into the bottom of the rack:
![insert feet](./slideFeetIntoYBar.gif)
![insert feet](./gifs/insertFeet.gif)
Screw in feet using 4 B-type screws:
![screw feet](./screwFeetIntoYBar.gif)
Screw in feet using 4 M3x12 FHCS screws:
![screw feet](./gifs/screwFeet.gif)
Finally, attach the top and bottom plates with 4 A-type screws each:
![attach xy-plates](./screwXYPlates.gif)
**FIN**

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 KiB

After

Width:  |  Height:  |  Size: 325 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 134 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: 53 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

View File

@ -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();

View File

@ -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;

View File

@ -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();
}
}

View File

@ -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) {

View File

@ -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])

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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) {

View File

@ -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();

View File

@ -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();

View File

@ -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
View File

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

View File

@ -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),

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.