mirror of
https://github.com/Theaninova/Brick-Monorail.git
synced 2025-12-11 04:06:14 +00:00
feat: end cap
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.stl
|
||||
46
README.md
Normal file
46
README.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Parametric Monorail
|
||||
|
||||
## Design differences
|
||||
|
||||
Injection molding has vastly different requirements to 3d printing.
|
||||
Due to this the original rails print absolutely horribly due to the copious amounts of supports needed.
|
||||
Surfaces printed on supports just never look good.
|
||||
|
||||
Because of that, I decided to instead of having a support part on the bottom, I'd carve out space for
|
||||
two stacked 1x2 plates, as well as a special two-high printable brick you can use for compatibility with the
|
||||
old support mounts.
|
||||
|
||||
_These are 3d printing optimized, compatible rails, not replicas. Replicas print horribly due to support._
|
||||
|
||||
## Printing
|
||||
|
||||
To be compatible with standard bricks, the following print settings are recommended
|
||||
|
||||
- Nozzle: 0.4, this is equivalent to 1 LDU.
|
||||
- Layer height: 0.1, though 0.2 will also do. Refrain from using 0.15, since that does not cleanly divides the LDU.
|
||||
- Supports: Tree (normal supports may print faster, but lead to way worse results. But ymmv).
|
||||
|
||||
My prints were done on a modified SecKit SK-Go2 running Klipper, with 10k acceleration and 150mm/s print speed for a good
|
||||
balance of speed and quality. A short rail will take about an hour to print.
|
||||
|
||||
### Filament
|
||||
|
||||
| Color | RAL Color | Pantone | PLA | ABS |
|
||||
| ----------------- | ---------- | ------- | ----------------------------------------------------------------------------------------------------------- | --- | --- |
|
||||
| Light Bluish Gray | `RAL 7040` | | [dasfilament 20,56€/kg](https://www.dasfilament.de/filament-spulen/pla-1-75-mm/8/pla-filament-1-75-mm-grau) | |
|
||||
| Light Gray | `RAL 7005` | | | | |
|
||||
|
||||
- None of these colors will be an exact match, just the texture of 3d printing it can make a huge difference, but usually fall close enough in the range.
|
||||
- The original rails will be in _Light Gray_, not _Light Bluish Gray_, but since I barely own any pre- 2004 color change bricks I chose to match my other bricks instead.
|
||||
- Most bricks are injection molded from ABS, however I find PLA to be much more easy and safe to handle.
|
||||
- PLA starts to deform at 60°C, so don't leave it in the sun or in your car.
|
||||
- PLA is brittle. While ABS deforms with force applied to it, PLA will just snap.
|
||||
- ABS is harder to print, an enclosure is a must, and warping can be difficult to handle.
|
||||
|
||||
#### Printing Safety
|
||||
|
||||
In case you are new to 3D printing:
|
||||
|
||||
- Most filaments (including PLA) release toxic gases when _burned_
|
||||
- FDM printing can cause fine particle emission
|
||||
- ABS when heated to normal printing temperatures can release styrene fumes
|
||||
1
lib/BOSL
Submodule
1
lib/BOSL
Submodule
Submodule lib/BOSL added at 4ce427a8a3
112
track.scad
Normal file
112
track.scad
Normal file
@@ -0,0 +1,112 @@
|
||||
include <lib/BOSL/shapes.scad>;
|
||||
include <lib/BOSL/transforms.scad>;
|
||||
include <lib/BOSL/constants.scad>;
|
||||
|
||||
$LDU=0.4;
|
||||
|
||||
$stud=12 * $LDU;
|
||||
$studHeight=4 * $LDU;
|
||||
|
||||
$tile=20 * $LDU;
|
||||
$plate=8 * $LDU;
|
||||
$studBrim=$tile - $stud;
|
||||
$studSupport=8 * $LDU;
|
||||
|
||||
$fillet=$LDU / 2;
|
||||
$edgeTolerance=$LDU / 2;
|
||||
|
||||
$len = 20;
|
||||
|
||||
|
||||
//translate([28.75, -232, -5.75]) rotate([0, 0, 90]) import("straight.stl");
|
||||
|
||||
|
||||
$baseHeight = $tile;
|
||||
$baseWidth = 4 * $tile;
|
||||
|
||||
$teeth = 5;
|
||||
$teethTolerance = $LDU;
|
||||
$teethRailWidth = 10 * $LDU;
|
||||
$teethWidth = $tile / $teeth;
|
||||
$teethDepth = 3 * $LDU;
|
||||
|
||||
module tooth() {
|
||||
$height = $teethWidth - $teethTolerance;
|
||||
$rail = $teethRailWidth / 2;
|
||||
$topY = $height / 2;
|
||||
$midY = $teethTolerance / 2;
|
||||
$endX = $rail + $teethDepth;
|
||||
|
||||
translate([0, $teethWidth / 2, 0]) linear_extrude($plate) polygon(points=[
|
||||
[$rail, $topY],
|
||||
[$endX, $midY],
|
||||
[$endX, -$midY],
|
||||
[$rail, -$topY],
|
||||
[-$rail, -$topY],
|
||||
[-$endX, -$midY],
|
||||
[-$endX, $midY],
|
||||
[-$rail, $topY]
|
||||
]);
|
||||
}
|
||||
|
||||
module brickSlot(w=1, l=1, h=3) {
|
||||
cuboid([$tile * w, $tile * l, $plate * h], align=V_DOWN);
|
||||
mirror_copy([1, 0, 0])
|
||||
mirror_copy([0, 1, 0])
|
||||
translate([$tile / 2, $tile / 2, 0])
|
||||
cyl(d=$fillet, h=$plate * h, align=V_DOWN, $fn=12);
|
||||
difference () {
|
||||
cuboid([$stud+2*$LDU, $stud+2*$LDU, $studHeight], align=V_TOP);
|
||||
mirror_copy([1, -1, 0])
|
||||
mirror_copy([1, 0, 0])
|
||||
translate([$stud / 2, 0, 0])
|
||||
cyl(d=2*$LDU, h=$studHeight, align=V_TOP+V_RIGHT, $fn=12);
|
||||
}
|
||||
mirror_copy([1, 0, 0])
|
||||
mirror_copy([0, 1, 0])
|
||||
translate([$stud/2+$LDU, $stud/2+$LDU, 0])
|
||||
cyl(d=$fillet, h=$studHeight, align=V_TOP, $fn=12);
|
||||
}
|
||||
|
||||
module endCap() {
|
||||
$width = $baseWidth - $plate * 2;
|
||||
union() {
|
||||
difference() {
|
||||
union() {
|
||||
cuboid([$width, $tile * 2, $tile], edges=EDGE_BOT_FR+EDGE_BOT_RT+EDGE_BOT_LF);
|
||||
mirror_copy([0, 1, 0])
|
||||
translate([0, $tile / 2, 0])
|
||||
cyl(l=$width + $studHeight * 2, d=$stud, orient=ORIENT_X, $fn=24);
|
||||
|
||||
translate([$tile, -$tile, 0]) cuboid([8 * $LDU, $LDU, $tile], align=V_RIGHT+V_FRONT);
|
||||
}
|
||||
mirror_copy([1, 0, 0])
|
||||
mirror_copy([0, 1, 0])
|
||||
translate([$width / 2, $tile / 2, 0])
|
||||
torus(d2=$edgeTolerance, d=$stud, orient=ORIENT_X, $fn=24);
|
||||
|
||||
translate([$plate, $tile / 2, $tile - $LDU]) cube([$LDU, $tile, $LDU]);
|
||||
translate([$width + $plate - $LDU, $tile / 2, $tile - $LDU]) cube([$LDU, $tile, $LDU]);
|
||||
|
||||
mirror_copy([1, 0, 0])
|
||||
translate([$tile / 2, -$tile / 2, $tile / 2 - $plate])
|
||||
brickSlot();
|
||||
|
||||
|
||||
translate([-$tile, -$tile, 0]) cuboid([8 * $LDU, $LDU, $tile], align=V_LEFT+V_BACK);
|
||||
place_copies([[-$tile, -$tile + $LDU], [$tile + 8 * $LDU, -$tile, 0]])
|
||||
mirror_copy([1, 0, 0], cp=[-4 * $LDU, 0, 0])
|
||||
cyl(d=$fillet, h=$tile, $fn=12);
|
||||
}
|
||||
|
||||
translate([0, $teethTolerance / 2, $tile / 2]) cuboid([$teethRailWidth, $tile * 2 - $teethTolerance, $plate], align=V_TOP);
|
||||
translate([0, -$tile, $tile / 2]) group() {
|
||||
for (i = [0:(2 * $teeth - 1)]) {
|
||||
translate([0, i * $teethWidth, 0]) tooth();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
endCap();
|
||||
Reference in New Issue
Block a user