feat: revert some stuff
131
README.md
@@ -1,38 +1,121 @@
|
||||
# create-svelte
|
||||
# Brick Monorail
|
||||
|
||||
Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte).
|
||||
Parametric Lego-compatible monorail tracks, designed specifically for 3d printing.
|
||||
Two orders of magnitude cheaper than buying used.
|
||||
|
||||
## Creating a project
|
||||
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
|
||||
|
||||
If you're seeing this, you've probably already done this step. Congrats!
|
||||
As an overview, or why it's worth a try: They print rapidly on modern printers, and cost barely anything.
|
||||
|
||||
```bash
|
||||
# create a new project in the current directory
|
||||
npm create svelte@latest
|
||||
| Preset | Cost | Time | Image |
|
||||
| ----------------------------- | ----- | ---- | -------------------------------------------------------------------------------- |
|
||||
| C15 | ~10ct | 45m |  |
|
||||
| C7 | ~5ct | 15m |  |
|
||||
| S25 | ~12ct | 1h |  |
|
||||
| S10 | ~5ct | 15m |  |
|
||||
| S5 | ~5ct | 15m |  |
|
||||
| S4 | ~5ct | 15m |  |
|
||||
| Classic Full Curve (R28 90°) | ~25ct | 2h |  |
|
||||
| Classic Half Curve (R28 45°) | ~12ct | 1h |  |
|
||||
| Classic Full Straight (L32) | ~20ct | 1.5h |  |
|
||||
| Classic Half Straight (L16) | ~10ct | 45m |  |
|
||||
| Classic Quarter Straight (L8) | ~5ct | 15m |  |
|
||||
|
||||
# create a new project in my-app
|
||||
npm create svelte@latest my-app
|
||||
```
|
||||
You can also generate your own custom rails with any length, radius or angle.
|
||||
|
||||
## Developing
|
||||
Todo: ramps, switches, train assembly
|
||||
|
||||
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
||||
## Design differences
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
Injection molding has vastly different requirements to 3d printing.
|
||||
Due to this the original rails print absolutely horribly due to the copious amounts of supports needed.
|
||||
Surfaces printed on supports just never look good.
|
||||
|
||||
# or start the server and open the app in a new browser tab
|
||||
npm run dev -- --open
|
||||
```
|
||||
Because of that, I decided to instead of having a support part on the bottom, I'd carve out space for
|
||||
a 1x2 plate, which you can fit there for the same effect.
|
||||
|
||||
## Building
|
||||
The monorail tracks are also solid now, which is not something you can do in injection molding but leaves
|
||||
a really nice surface finish at the bottom of the rail for us.
|
||||
|
||||
To create a production version of your app:
|
||||
For now, I also use non-baseplate aligned joints for curves. While this means you can't just snap the rails
|
||||
on a baseplate, it enables you to use straight rails at non-90 degree angles which I think is an absolute
|
||||
win over the original design since the 45 degree curves are useless outside of joining them with switches.
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
_These are 3d printing optimized, compatible rails, not replicas. Replicas print horribly due to support._
|
||||
|
||||
You can preview the production build with `npm run preview`.
|
||||
### Optional Differences
|
||||
|
||||
> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
|
||||
#### Operating on r25 instead of r28
|
||||
|
||||
What difference do these three studs make?
|
||||
With this radius we can take advantage of the pythagorean triples `3/4/5` and `7/24/25` to stay on the stud
|
||||
grid with turntables.
|
||||
|
||||
- Curve C15
|
||||
- Curve C7
|
||||
- Straight S25
|
||||
- Straight S10
|
||||
- Straight S5
|
||||
- Straight S4
|
||||
|
||||
How it fits
|
||||
|
||||
- Two C15 and one C7 make exactly a 90 degree turn, where every part stays on the stud grid.
|
||||
- An s-curve with C15 moves over 20 studs, diagonals can be done with any length divisible by 5
|
||||
- An s-curve with C7 moves two studs, but diagonals require a full S25 to land cleanly again.
|
||||
|
||||

|
||||
|
||||
## Printing
|
||||
|
||||
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.2**, less than that is barely better and just causes more problems than it solves.
|
||||
If you want to go lower, it's advisable to use heights that satisfy `0.4 % h == 0` such as 0.1.
|
||||
- **Make sure your initial layer height is either 0.2 or 0.4!**
|
||||
- Supports: **yes**, normal, don't use tree supports.
|
||||
- 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.
|
||||
|
||||
### Inserts
|
||||
|
||||
_This is optional and increases difficulty and print time, but I highly recommened it._
|
||||
|
||||
Studs and anti-studs print rather inconsistently at the orientation of the rail.
|
||||
To combat that, I added the option to pre-print stud and anti-stud inserts at perfect orientation and insert them mid-print.
|
||||
Because the layer is immediately covered up, the plastic will adhere like it would if it was printed in one go.
|
||||
|
||||
This also allows you to pre-select the best inserts without having to print a full rail only to have one bad stud.
|
||||
|
||||
- In Cura, insert a "Pause at layer" at the last layer where the insert spots are not covered yet.
|
||||
- If you use Klipper, use "Search and replace" with `; LAYER:32` to `; LAYER:32\nPAUSE`.
|
||||
|
||||
### Filament
|
||||
|
||||
| Color | RAL | 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.
|
||||
|
||||
#### Printing Safety
|
||||
|
||||
In case you are new to 3D printing:
|
||||
|
||||
- Most filaments (including PLA) can release toxic gases when _burned_
|
||||
- FDM printing can cause fine particle emission
|
||||
- ABS when heated to normal printing temperatures can release styrene fumes
|
||||
|
||||
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 588 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 733 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 846 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 123 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 384 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 123 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 493 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 644 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 569 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 399 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 700 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 712 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 627 B |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 872 B |
16
track.scad
@@ -1,7 +1,7 @@
|
||||
include <BOSL2/std.scad>;
|
||||
|
||||
/* [Print Settings] */
|
||||
Tolerance = 0.2;
|
||||
Tolerance = 0.4;
|
||||
// Mid-print stud inserts allowing the studs to be printed facing up seperately
|
||||
StudInserts = true;
|
||||
// Mid-print slot inserts eliminating the need for supports
|
||||
@@ -69,10 +69,10 @@ module antiStudInsert(carve=true, depth=$studHeight * 2, supportHeight=$LDU * 4,
|
||||
difference() {
|
||||
union() {
|
||||
cube([$tile * 2, $tile, depth + supportHeight], anchor=FRONT+BOTTOM);
|
||||
translate([0, $tile + supportWidth + (carve ? 0 : $LDU / 2), 0])
|
||||
translate([0, $tile + supportWidth + (carve ? 0 : Tolerance), 0])
|
||||
cube([
|
||||
$tile * 2 + supportWidth + (carve ? 0 : $LDU),
|
||||
supportWidth + $tile * 0.6 + (carve ? 0 : $LDU),
|
||||
$tile * 2 + supportWidth + (carve ? 0 : Tolerance * 2),
|
||||
supportWidth + $tile * 0.6 + (carve ? 0 : Tolerance * 2),
|
||||
depth + supportHeight
|
||||
], anchor=BACK+BOTTOM);
|
||||
}
|
||||
@@ -97,9 +97,9 @@ module studInsert(carve=true, supportThickness = $LDU * 4) {
|
||||
cube([supportThickness, $tile + $stud, $stud], anchor=RIGHT);
|
||||
translate([-supportThickness, 0, $stud / 2])
|
||||
cube([
|
||||
supportThickness + (carve ? 0 : $LDU),
|
||||
$tile + $stud + $LDU + (carve ? 0 : $LDU),
|
||||
$stud + $LDU * 1.5 + (carve ? 0 : $LDU)
|
||||
supportThickness + (carve ? 0 : Tolerance * 2),
|
||||
$tile + $stud + $LDU + (carve ? 0 : Tolerance * 2),
|
||||
$stud + $LDU * 1.5 + (carve ? 0 : Tolerance * 2)
|
||||
], anchor=RIGHT+TOP);
|
||||
}
|
||||
|
||||
@@ -341,6 +341,7 @@ module monorailSwitch() {
|
||||
}
|
||||
}
|
||||
|
||||
union() {
|
||||
if (Type == "rail") {
|
||||
if (Angle == 0)
|
||||
monorailStraight();
|
||||
@@ -357,6 +358,7 @@ if (Type == "rail") {
|
||||
translate([0, 55, 0]) cube([100, 60, 100], FRONT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// endCapStraight();
|
||||
|
||||