From 416c3a93aa840c706233b684d1ed80d96de81179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Sat, 24 Feb 2024 21:11:09 +0100 Subject: [PATCH] feat: endcap improvements --- README.md | 14 ++++++++++---- track.scad | 56 +++++++++++++++++++++++++++++++++--------------------- 2 files changed, 44 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index ed35590..7aec7a0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Parametric Monorail +# Brick Monorail ## Design differences @@ -14,11 +14,17 @@ _These are 3d printing optimized, compatible rails, not replicas. Replicas print ## Printing -To be compatible with standard bricks, the following print settings are recommended +To be compatible with standard bricks, the following print settings are strongly advised - 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). +- Layer height: Ideally 0.1, though 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 + 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! 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. diff --git a/track.scad b/track.scad index c3912b8..df832fb 100644 --- a/track.scad +++ b/track.scad @@ -1,6 +1,7 @@ include ; include ; include ; +include ; $LDU=0.4; @@ -55,50 +56,51 @@ module brickSlot(w=1, l=1, h=3) { 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); + cuboid([$stud, $stud, $studHeight * 2], align=V_TOP); } -module endCap() { +module endCapStraight() { $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); + difference() { + mirror_copy([0, 1, 0]) + translate([0, $tile / 2, 0]) + cyl(l=$width + $studHeight * 2, d=$stud, orient=ORIENT_X, $fn=24); + mirror_copy([1, 0, 0]) + translate([$tile * 2, 0, -$stud / 2]) + rotate([0, -14, 0]) + cuboid([$studHeight * 10, $tile * 4, $LDU * 2], align=V_TOP+V_LEFT); + } translate([$tile, -$tile, 0]) cuboid([8 * $LDU, $LDU, $tile], align=V_RIGHT+V_FRONT); } + // Fingernail slot 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([$width / 2, 0, $tile / 2]) + cuboid([$LDU, $tile, $LDU]) translate([$plate, $tile / 2, $tile - $LDU]) cube([$LDU, $tile, $LDU]); translate([$width + $plate - $LDU, $tile / 2, $tile - $LDU]) cube([$LDU, $tile, $LDU]); - + + // Brick slots mirror_copy([1, 0, 0]) - translate([$tile / 2, -$tile / 2, $tile / 2 - $plate]) + translate([$tile / 2, -$tile / 2, $tile / 2 - $plate * 2]) brickSlot(); + // Bridging improvements + translate([0, 0, $tile / 2 - $plate * 2]) cuboid([$tile * 2, $tile - 4 * $LDU, $LDU], align=V_FRONT); + translate([0, -4 * $LDU, $tile / 2 - $plate * 2]) cuboid([$tile * 2, $stud, $LDU * 2], align=V_FRONT); - + // End Slots 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); } + // Rail 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)]) { @@ -108,5 +110,15 @@ module endCap() { } } +module curve90(r=12) { + translate([r * $tile, $tile, 0]) endCapStraight(); + translate([$tile, r * $tile, 0]) rotate(-90) endCapStraight(); + //ir = ($r + path = [[2 * $tile, r * $tile, 0], [r * $tile / 2, r * $tile, 0], [r * $tile, r * $tile / 2, 0], [r * $tile, 2 * $tile, 0]]; + extrude_2d_shapes_along_bezier(path) { + circle(r=10); + } +} -endCap(); +//curve90(); +endCapStraight();