mirror of
https://github.com/Theaninova/Brick-Monorail.git
synced 2025-12-11 04:06:14 +00:00
feat: updates
This commit is contained in:
59
README.md
59
README.md
@@ -5,20 +5,22 @@ Parametric Lego-compatible monorail tracks, designed specifically for 3d printin
|
|||||||
Since the parts are made parametric, you can have any length or curve radius you want,
|
Since the parts are made parametric, you can have any length or curve radius you want,
|
||||||
but these are the original tracks you can replicate
|
but these are the original tracks you can replicate
|
||||||
|
|
||||||
| Common Name | Supported | Material Cost | Print Time |
|
As an overview, or why it's worth a try: They print rapidly on modern printers, and cost barely anything.
|
||||||
| ------------------- | --------- | ------------- | ---------- |
|
|
||||||
| Straight Long/Full | ✓ | | |
|
| Name | Material Cost | Print Time |
|
||||||
| Straight Short/Half | ✓ | | |
|
| --------------------- | ------------- | ---------- |
|
||||||
| Straight Quarter | ✓ | | |
|
| C15 | ~10ct | 45m |
|
||||||
| Straight 4-studs | ✓ | ~10ct | 15m |
|
| C7 | ~5ct | 15m |
|
||||||
| Curve Long | ✓ | | |
|
| S21 | ~12ct | 1h |
|
||||||
| Curve Short Left | ⚠️ | | |
|
| S7 | ~5ct | 15m |
|
||||||
| Curve Short Right | ⚠️ | | |
|
| S6 | ~5ct | 15m |
|
||||||
| Ramp Upper Part | ❌ | | |
|
| Classic R28 90° Curve | ~25ct | 2h |
|
||||||
| Ramp Lower Part | ❌ | | |
|
| Classic R28 45° Curve | ~12ct | 1h |
|
||||||
| Monoswitch | ❌ | | |
|
| Classic L32 Straight | ~20ct | 1.5h |
|
||||||
| Point Right | ❌ | | |
|
| Classic L16 Straight | ~10ct | 45m |
|
||||||
| Point Left | ❌ | | |
|
| Classic L8 Straight | ~5ct | 15m |
|
||||||
|
|
||||||
|
Todo: ramps, switches, train assembly
|
||||||
|
|
||||||
## Design differences
|
## Design differences
|
||||||
|
|
||||||
@@ -64,32 +66,33 @@ with S6 or 28 studs with S21 straights.
|
|||||||
|
|
||||||
To be compatible with standard bricks, the following print settings are strongly advised
|
To be compatible with standard bricks, the following print settings are strongly advised
|
||||||
|
|
||||||
- Nozzle: 0.4, this is equivalent to 1 LDU.
|
- Nozzle: **0.4**, this is equivalent to 1 LDU.
|
||||||
- Layer height: Ideally 0.1, though 0.2 will also do. Refrain from using 0.15, since that does not cleanly divides the LDU.
|
- Layer height: **0.2** will also do. Refrain from using 0.15, since that does not cleanly divides the LDU.
|
||||||
- Make sure your initial layer height is either 0.2 or 0.4!
|
- Make sure your initial layer height is either 0.2 or 0.4!
|
||||||
- Enable Bridge Settings in Cura
|
- Supports: **yes**, normal, don't use tree supports.
|
||||||
- Supports: **none**. These parts are designed to be printed without any supports, though some of the bridging is not exactly
|
|
||||||
what you would call easy for the printer, so be on the lookout.
|
what you would call easy for the printer, so be on the lookout.
|
||||||
- Make sure you set your "Initial Layer Horizontal Expansion" to a value that works for you, for example -0.2mm to
|
- Set your "Initial Layer Horizontal Expansion" to a value that works for you, for example -0.2mm to compensate for elephant's foot.
|
||||||
compensate for elephant's foot. Better overcompensate here, if you don't do this you might not be able to fit
|
Alternatively, you can trim the extra plastic off by hand.
|
||||||
bricks in the slot!
|
|
||||||
|
|
||||||
My prints were done on a modified SecKit SK-Go2 running Klipper, with 10k acceleration and 150mm/s print speed for a good
|
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.
|
balance of speed and quality. A short rail will take about an hour to print.
|
||||||
|
|
||||||
### Filament
|
### Filament
|
||||||
|
|
||||||
| Color | RAL Color | Pantone | PLA | ABS |
|
| Color | RAL Color | Pantone | PLA Supplier | ABS Supplier |
|
||||||
| ----------------- | ---------- | ------- | ----------------------------------------------------------------------------------------------------------- | --- | --- |
|
| ----------------- | ---------- | ------- | ------------ | ------------ |
|
||||||
| 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 Bluish Gray | `RAL 7040` | | dasfilament | |
|
||||||
| Light Gray | `RAL 7005` | | | | |
|
| 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.
|
- 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.
|
- 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.
|
||||||
|
|
||||||
|
_Notes for newcomers:_
|
||||||
|
|
||||||
- Most bricks are injection molded from ABS, however I find PLA to be much more easy and safe to handle.
|
- 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 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.
|
- 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.
|
- ABS is harder to print, an enclosure is a must, and warping can be difficult to handle.
|
||||||
|
|
||||||
#### Printing Safety
|
#### Printing Safety
|
||||||
|
|
||||||
|
|||||||
39
track.scad
39
track.scad
@@ -7,17 +7,12 @@ LayerHeight = 0.2; // [0.1,0.13,0.2]
|
|||||||
// Enable built-in support for 3d printing
|
// Enable built-in support for 3d printing
|
||||||
Support = true;
|
Support = true;
|
||||||
/* [Model Settings] */
|
/* [Model Settings] */
|
||||||
// Only applies to straight tracks
|
|
||||||
Length = 8; // [4:1:56]
|
Length = 8; // [4:1:56]
|
||||||
// Only applies to curves
|
|
||||||
Radius = 28; // [4:1:36]
|
|
||||||
// TODO: Incline of the track
|
|
||||||
Incline = 0; // [-10:1:10]
|
|
||||||
AlignInclineToBaseplate = true;
|
|
||||||
// The angle the track takes
|
|
||||||
Angle = 0.0;
|
|
||||||
// Useful when working with Pythagorean Triples
|
// Useful when working with Pythagorean Triples
|
||||||
UseLengthForCurveAngle = true;
|
UseLengthForCurveAngle = true;
|
||||||
|
Radius = 28; // [4:1:36]
|
||||||
|
// The angle the track takes
|
||||||
|
Angle = 0.0;
|
||||||
|
|
||||||
module __CustomizerLimit__() {}
|
module __CustomizerLimit__() {}
|
||||||
|
|
||||||
@@ -31,7 +26,7 @@ $plate=8 * $LDU;
|
|||||||
$studBrim=$tile - $stud;
|
$studBrim=$tile - $stud;
|
||||||
$studSupport=8 * $LDU;
|
$studSupport=8 * $LDU;
|
||||||
|
|
||||||
$fillet=$LDU / 2;
|
$fillet=$LDU;
|
||||||
$edgeTolerance=$LDU / 2;
|
$edgeTolerance=$LDU / 2;
|
||||||
|
|
||||||
$len = 20;
|
$len = 20;
|
||||||
@@ -83,7 +78,8 @@ module endCapStraight(includeRail=true) {
|
|||||||
translate([0, $tile / 2, 0])
|
translate([0, $tile / 2, 0])
|
||||||
cyl(l=$width + $studHeight * 2 + $LDU / 2, d=$stud, orient=LEFT, $fn=24);
|
cyl(l=$width + $studHeight * 2 + $LDU / 2, d=$stud, orient=LEFT, $fn=24);
|
||||||
|
|
||||||
translate([$tile, -$tile, 0]) cube([8 * $LDU, $LDU, $tile], anchor=LEFT+BACK);
|
// End Slot
|
||||||
|
translate([$tile + $LDU, -$tile, 0]) cube([6 * $LDU, $LDU, $tile], anchor=LEFT+BACK);
|
||||||
|
|
||||||
if (Support) {
|
if (Support) {
|
||||||
mirror_copy([1, 0, 0]) difference() {
|
mirror_copy([1, 0, 0]) difference() {
|
||||||
@@ -98,9 +94,6 @@ module endCapStraight(includeRail=true) {
|
|||||||
mirror_copy([1, 0, 0])
|
mirror_copy([1, 0, 0])
|
||||||
translate([$tile / 2, -$tile / 2, $tile / 2 - $plate * 2])
|
translate([$tile / 2, -$tile / 2, $tile / 2 - $plate * 2])
|
||||||
brickSlot();
|
brickSlot();
|
||||||
// Bridging improvements
|
|
||||||
translate([0, 0, $tile / 2 - $plate * 2]) cube([$tile * 2, $tile - 4 * $LDU, $LDU], anchor=BACK);
|
|
||||||
translate([0, -4 * $LDU, $tile / 2 - $plate * 2]) cube([$tile * 2, $stud, $LDU * 2], anchor=BACK);
|
|
||||||
|
|
||||||
// Fingernail slot
|
// Fingernail slot
|
||||||
mirror_copy([1, 0, 0])
|
mirror_copy([1, 0, 0])
|
||||||
@@ -111,12 +104,22 @@ module endCapStraight(includeRail=true) {
|
|||||||
translate([$width + $plate - $LDU, $tile / 2, $tile - $LDU]) cube([$LDU, $tile, $LDU]);
|
translate([$width + $plate - $LDU, $tile / 2, $tile - $LDU]) cube([$LDU, $tile, $LDU]);
|
||||||
|
|
||||||
// End Slots
|
// End Slots
|
||||||
translate([-$tile, -$tile, 0]) cube([8 * $LDU, $LDU, $tile], anchor=RIGHT+FRONT);
|
translate([-$tile, -$tile, 0]) cube([8 * $LDU, $LDU * 2, $tile], anchor=RIGHT+FRONT);
|
||||||
move_copies([[-$tile, -$tile + $LDU], [$tile + 8 * $LDU, -$tile, 0]])
|
translate([$tile + 7 * $LDU, -$tile, 0])
|
||||||
|
mirror_copy([1, 0, 0], cp=[-3 * $LDU, 0, 0])
|
||||||
|
cyl(d=$fillet, h=$tile, $fn=12);
|
||||||
|
translate([-$tile, -$tile + $LDU * 2])
|
||||||
mirror_copy([1, 0, 0], cp=[-4 * $LDU, 0, 0])
|
mirror_copy([1, 0, 0], cp=[-4 * $LDU, 0, 0])
|
||||||
cyl(d=$fillet, h=$tile, $fn=12);
|
cyl(d=$fillet, h=$tile, $fn=12);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Support) {
|
||||||
|
translate([0, -$tile, -$tile / 2])
|
||||||
|
rect_tube(size=[$tile * 2 - $LDU * 2, $tile - $LDU * 2], h=$LDU * 4 - LayerHeight, wall=$LDU * 2, anchor=FRONT+BOTTOM);
|
||||||
|
translate([0, -$tile, -$tile / 2])
|
||||||
|
cube([$LDU * 2, $tile - $LDU * 2, $LDU * 4 - LayerHeight], anchor=FRONT+BOTTOM);
|
||||||
|
}
|
||||||
|
|
||||||
if (includeRail) {
|
if (includeRail) {
|
||||||
// Rail
|
// Rail
|
||||||
translate([0, $teethTolerance / 2, $tile / 2]) cuboid([$teethRailWidth, $tile * 2 - $teethTolerance, $plate], anchor=BOTTOM);
|
translate([0, $teethTolerance / 2, $tile / 2]) cuboid([$teethRailWidth, $tile * 2 - $teethTolerance, $plate], anchor=BOTTOM);
|
||||||
@@ -130,7 +133,7 @@ module endCapStraight(includeRail=true) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module monorailCurve(r=28, sa, ea, p1) {
|
module monorailCurve(r=28, sa, ea, p1) {
|
||||||
$n_teeth = round((PI * r * $tile) / (360 / abs(-sa - ea)));
|
$n_teeth = round((PI * r * $tile) / (295 / abs(-sa - ea)));
|
||||||
angle = [180 - ea, 180 + sa];
|
angle = [180 - ea, 180 + sa];
|
||||||
points = arc($n_teeth, r=(r * $tile), angle=angle);
|
points = arc($n_teeth, r=(r * $tile), angle=angle);
|
||||||
|
|
||||||
@@ -150,8 +153,10 @@ module monorailCurve(r=28, sa, ea, p1) {
|
|||||||
], points);
|
], points);
|
||||||
translate(points[0]) rot(-ea) cube([$tile * 6, $tile * 4, $tile], anchor=CENTER);
|
translate(points[0]) rot(-ea) cube([$tile * 6, $tile * 4, $tile], anchor=CENTER);
|
||||||
translate(points[len(points) - 1]) rot(sa) cube([$tile * 6, $tile * 4, $tile], anchor=CENTER);
|
translate(points[len(points) - 1]) rot(sa) cube([$tile * 6, $tile * 4, $tile], anchor=CENTER);
|
||||||
|
translate(points[0]) rot(-ea) translate([0, -$teethWidth/2, 0]) cube([$tile * 6, $tile * 4, $tile], anchor=BOTTOM+FRONT);
|
||||||
|
translate(points[len(points) - 1]) rot(sa) translate([0, $teethWidth/2, 0]) cube([$tile * 6, $tile * 4, $tile], anchor=BOTTOM+BACK);
|
||||||
}
|
}
|
||||||
translate([0, 0, $tile / 2]) arc_copies($n_teeth, r=(r * $tile), sa=angle[0], ea=angle[1]) tooth();
|
translate([0, 0, $tile / 2]) arc_copies($n_teeth + 1, r=(r * $tile), sa=angle[0], ea=angle[1] - (180 * ($teethWidth / (PI * r * $tile)))) tooth();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user