diff --git a/README.md b/README.md index 48356ce..c83d220 100644 --- a/README.md +++ b/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 diff --git a/track.scad b/track.scad index ca90706..e886ae5 100644 --- a/track.scad +++ b/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(); } }