feat: updates

This commit is contained in:
2024-02-25 20:49:21 +01:00
parent 513243ccdb
commit b722621107
2 changed files with 53 additions and 45 deletions

View File

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

View File

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