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,
|
||||
but these are the original tracks you can replicate
|
||||
|
||||
| Common Name | Supported | Material Cost | Print Time |
|
||||
| ------------------- | --------- | ------------- | ---------- |
|
||||
| Straight Long/Full | ✓ | | |
|
||||
| Straight Short/Half | ✓ | | |
|
||||
| Straight Quarter | ✓ | | |
|
||||
| Straight 4-studs | ✓ | ~10ct | 15m |
|
||||
| Curve Long | ✓ | | |
|
||||
| Curve Short Left | ⚠️ | | |
|
||||
| Curve Short Right | ⚠️ | | |
|
||||
| Ramp Upper Part | ❌ | | |
|
||||
| Ramp Lower Part | ❌ | | |
|
||||
| Monoswitch | ❌ | | |
|
||||
| Point Right | ❌ | | |
|
||||
| Point Left | ❌ | | |
|
||||
As an overview, or why it's worth a try: They print rapidly on modern printers, and cost barely anything.
|
||||
|
||||
| Name | Material Cost | Print Time |
|
||||
| --------------------- | ------------- | ---------- |
|
||||
| C15 | ~10ct | 45m |
|
||||
| C7 | ~5ct | 15m |
|
||||
| S21 | ~12ct | 1h |
|
||||
| S7 | ~5ct | 15m |
|
||||
| S6 | ~5ct | 15m |
|
||||
| Classic R28 90° Curve | ~25ct | 2h |
|
||||
| Classic R28 45° Curve | ~12ct | 1h |
|
||||
| Classic L32 Straight | ~20ct | 1.5h |
|
||||
| Classic L16 Straight | ~10ct | 45m |
|
||||
| Classic L8 Straight | ~5ct | 15m |
|
||||
|
||||
Todo: ramps, switches, train assembly
|
||||
|
||||
## 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
|
||||
|
||||
- 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.
|
||||
- Nozzle: **0.4**, this is equivalent to 1 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!
|
||||
- Enable Bridge Settings in Cura
|
||||
- Supports: **none**. These parts are designed to be printed without any supports, though some of the bridging is not exactly
|
||||
- Supports: **yes**, normal, don't use tree supports.
|
||||
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
|
||||
compensate for elephant's foot. Better overcompensate here, if you don't do this you might not be able to fit
|
||||
bricks in the slot!
|
||||
- Set your "Initial Layer Horizontal Expansion" to a value that works for you, for example -0.2mm to compensate for elephant's foot.
|
||||
Alternatively, you can trim the extra plastic off by hand.
|
||||
|
||||
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` | | | | |
|
||||
| Color | RAL Color | Pantone | PLA Supplier | ABS Supplier |
|
||||
| ----------------- | ---------- | ------- | ------------ | ------------ |
|
||||
| Light Bluish Gray | `RAL 7040` | | dasfilament | |
|
||||
| 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.
|
||||
|
||||
_Notes for newcomers:_
|
||||
|
||||
- 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.
|
||||
- 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
|
||||
|
||||
|
||||
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
|
||||
Support = true;
|
||||
/* [Model Settings] */
|
||||
// Only applies to straight tracks
|
||||
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
|
||||
UseLengthForCurveAngle = true;
|
||||
Radius = 28; // [4:1:36]
|
||||
// The angle the track takes
|
||||
Angle = 0.0;
|
||||
|
||||
module __CustomizerLimit__() {}
|
||||
|
||||
@@ -31,7 +26,7 @@ $plate=8 * $LDU;
|
||||
$studBrim=$tile - $stud;
|
||||
$studSupport=8 * $LDU;
|
||||
|
||||
$fillet=$LDU / 2;
|
||||
$fillet=$LDU;
|
||||
$edgeTolerance=$LDU / 2;
|
||||
|
||||
$len = 20;
|
||||
@@ -83,7 +78,8 @@ module endCapStraight(includeRail=true) {
|
||||
translate([0, $tile / 2, 0])
|
||||
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) {
|
||||
mirror_copy([1, 0, 0]) difference() {
|
||||
@@ -98,9 +94,6 @@ module endCapStraight(includeRail=true) {
|
||||
mirror_copy([1, 0, 0])
|
||||
translate([$tile / 2, -$tile / 2, $tile / 2 - $plate * 2])
|
||||
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
|
||||
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]);
|
||||
|
||||
// End Slots
|
||||
translate([-$tile, -$tile, 0]) cube([8 * $LDU, $LDU, $tile], anchor=RIGHT+FRONT);
|
||||
move_copies([[-$tile, -$tile + $LDU], [$tile + 8 * $LDU, -$tile, 0]])
|
||||
translate([-$tile, -$tile, 0]) cube([8 * $LDU, $LDU * 2, $tile], anchor=RIGHT+FRONT);
|
||||
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])
|
||||
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) {
|
||||
// Rail
|
||||
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) {
|
||||
$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];
|
||||
points = arc($n_teeth, r=(r * $tile), angle=angle);
|
||||
|
||||
@@ -150,8 +153,10 @@ module monorailCurve(r=28, sa, ea, p1) {
|
||||
], points);
|
||||
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[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