Compare commits
36 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
e4f6227e9a | ||
|
4c4a40c30e | ||
|
aedccd35b3 | ||
|
98b82873bf | ||
|
aca921d737 | ||
|
018f70ae3c | ||
|
89c4b96525 | ||
|
4e443fc742 | ||
|
f032bb76db | ||
|
c23c3619e4 | ||
|
c16f0bd472 | ||
|
9756845c59 | ||
|
00eeb1b52d | ||
|
80b17a012d | ||
|
9327c7c134 | ||
|
55f7537ba6 | ||
|
bfaa48dc7c | ||
|
a785ae1050 | ||
|
20ee4026f8 | ||
|
80eb5ebc43 | ||
|
d15cf6cf35 | ||
|
2769c3714c | ||
|
185bb8d6a9 | ||
|
eddebc65a2 | ||
|
915ceea296 | ||
|
5a14c55ca5 | ||
|
ca9cc97b2a | ||
|
652c5d1a26 | ||
|
3830836519 | ||
|
9c5014b73d | ||
|
5c289bb7f5 | ||
|
3211fe1f19 | ||
|
c8f1b808cf | ||
|
917f404c59 | ||
|
99ff256847 | ||
|
3d370ccf72 |
61
CHANGELOG.md
@@ -3,6 +3,65 @@
|
||||
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
|
||||
|
||||
|
||||
### [v21.41.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.41.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.40.0...v21.41.0 "diff with v21.40.0")
|
||||
* 2025-07-29 [`aedccd3`](https://github.com/nophead/NopSCADlib/commit/aedccd35b32591932d73cb8b429a1ca57152f781 "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
|
||||
|
||||
* 2025-07-29 [`98b8287`](https://github.com/nophead/NopSCADlib/commit/98b82873bff27e592cb13be72c923cac42ab7842 "show commit") [C.P.](# "Chris Palmer") Fixed undef extrusion type in BOM
|
||||
|
||||
* 2025-07-29 [`aca921d`](https://github.com/nophead/NopSCADlib/commit/aca921d737c0a9e89a318385ac2945b7ed932114 "show commit") [C.P.](# "Chris Palmer") Fixed some indentation.
|
||||
|
||||
* 2025-07-19 [`018f70a`](https://github.com/nophead/NopSCADlib/commit/018f70ae3c51cda911471ec1922cd1dcb5c73cb0 "show commit") [A.V.](# "Alex Verschoot") moved the `corner_3d_connector` over to the extrusion brackets
|
||||
|
||||
* 2025-07-19 [`89c4b96`](https://github.com/nophead/NopSCADlib/commit/89c4b96525c0bdd1cd73756fd7a12f2c8144a6fd "show commit") [A.V.](# "Alex Verschoot") replaced the nut diameter with the actual nut from the vitamin list
|
||||
|
||||
* 2025-07-18 [`4e443fc`](https://github.com/nophead/NopSCADlib/commit/4e443fc742bbce2efc5777fb0ab0395ac199bcfb "show commit") [A.V.](# "Alex Verschoot") used the `show_threads` variable instead of parameter
|
||||
|
||||
* 2025-07-18 [`f032bb7`](https://github.com/nophead/NopSCADlib/commit/f032bb76db516a0265817e7c6d2233e2e847d51f "show commit") [A.V.](# "Alex Verschoot") added convexity to the linear extrude
|
||||
|
||||
* 2025-07-18 [`c23c361`](https://github.com/nophead/NopSCADlib/commit/c23c3619e4090db59a1c4120375a54b5f4333817 "show commit") [A.V.](# "Alex Verschoot") fixed length typo
|
||||
|
||||
* 2025-07-17 [`c16f0bd`](https://github.com/nophead/NopSCADlib/commit/c16f0bd47290d7215b5c66fff08b9e3f6bd34485 "show commit") [A.V.](# "Alex Verschoot") more formatting
|
||||
|
||||
* 2025-07-17 [`9756845`](https://github.com/nophead/NopSCADlib/commit/9756845c59a85499c6f5c5efe029783735fc4e73 "show commit") [A.V.](# "Alex Verschoot") formatting + extra comments
|
||||
|
||||
* 2025-07-15 [`00eeb1b`](https://github.com/nophead/NopSCADlib/commit/00eeb1b52de100200dd73b60ac605224033b0351 "show commit") [A.V.](# "Alex Verschoot") Added a testfile for the corner3d connector
|
||||
|
||||
* 2025-07-15 [`80b17a0`](https://github.com/nophead/NopSCADlib/commit/80b17a012db0b2fa21b77205a1faafc5d9475abe "show commit") [A.V.](# "Alex Verschoot") renamed variables + corrected horizontal directions
|
||||
|
||||
* 2025-07-12 [`9327c7c`](https://github.com/nophead/NopSCADlib/commit/9327c7c134a73c044e0fdba95f58e00ceaaaee05 "show commit") [A.V.](# "Alex Verschoot") added option for grub screws
|
||||
|
||||
* 2025-07-12 [`55f7537`](https://github.com/nophead/NopSCADlib/commit/55f7537ba62242c5ed89f48fb05cb426e382132c "show commit") [A.V.](# "Alex Verschoot") made threads a toggle
|
||||
|
||||
* 2025-07-12 [`bfaa48d`](https://github.com/nophead/NopSCADlib/commit/bfaa48dc7c0303d359b52a4a122ea14b74b535e2 "show commit") [A.V.](# "Alex Verschoot") Added the implementation
|
||||
|
||||
* 2025-07-12 [`a785ae1`](https://github.com/nophead/NopSCADlib/commit/a785ae105006c88dc7fb705e5c615d68131daf50 "show commit") [A.V.](# "Alex Verschoot") added a `corner_3d_connectors` page
|
||||
|
||||
### [v21.40.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.40.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.39.0...v21.40.0 "diff with v21.39.0")
|
||||
* 2025-07-01 [`d15cf6c`](https://github.com/nophead/NopSCADlib/commit/d15cf6cf35cbbd790525341c461e168eda9f3964 "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
|
||||
|
||||
* 2025-06-28 [`ca9cc97`](https://github.com/nophead/NopSCADlib/commit/ca9cc97b2a26324bef2b4683bef82eaceee1ffe9 "show commit") [E.F.](# "Elliot Foster") Makerbeam work in progress
|
||||
|
||||
### [v21.39.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.39.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.38.1...v21.39.0 "diff with v21.38.1")
|
||||
* 2025-07-01 [`915ceea`](https://github.com/nophead/NopSCADlib/commit/915ceea296aa54e8432c98ac01d527d214740953 "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
|
||||
|
||||
* 2025-06-28 [`5a14c55`](https://github.com/nophead/NopSCADlib/commit/5a14c55ca5fc064c0ca04f1f4058bac25f2a65be "show commit") [E.F.](# "Elliot Foster") Add the Mellow Fly D5 PCB
|
||||
|
||||
#### [v21.38.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.38.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.38.0...v21.38.1 "diff with v21.38.0")
|
||||
* 2025-05-16 [`9c5014b`](https://github.com/nophead/NopSCADlib/commit/9c5014b73d51d5071259fb7df814b8a62016d214 "show commit") [C.P.](# "Chris Palmer") Updated examples.
|
||||
|
||||
* 2025-05-11 [`5c289bb`](https://github.com/nophead/NopSCADlib/commit/5c289bb7f566f3eebd8ad061645abb6dddb6ef97 "show commit") [P.](# "pcremades") `[Fix]` Fix route to svgs
|
||||
|
||||
* 2025-05-09 [`3211fe1`](https://github.com/nophead/NopSCADlib/commit/3211fe1f19f8d2a9ea090c8232f65ddad379cd26 "show commit") [P.](# "pcremades") `[Feature]` Add link to `DXFs/SVGs` files in documentation
|
||||
|
||||
* 2025-04-15 [`99ff256`](https://github.com/nophead/NopSCADlib/commit/99ff25684756ccf1ec86fd8538a03172e6ce62e9 "show commit") [C.P.](# "Chris Palmer") Fixed example link.
|
||||
|
||||
### [v21.38.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.38.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.37.1...v21.38.0 "diff with v21.37.1")
|
||||
* 2025-04-15 [`bd94182`](https://github.com/nophead/NopSCADlib/commit/bd94182ff1ca85df7b667fc6985defb779846252 "show commit") [C.P.](# "Chris Palmer") Added simple Gridfinity generator and examples.
|
||||
|
||||
* 2025-04-15 [`86df9a3`](https://github.com/nophead/NopSCADlib/commit/86df9a34d641511a84026eaf0b3191437e4692be "show commit") [C.P.](# "Chris Palmer") Added chamfer test file.
|
||||
|
||||
* 2025-04-15 [`9758112`](https://github.com/nophead/NopSCADlib/commit/9758112e05d02c9cf156828ecd47b7770b602628 "show commit") [C.P.](# "Chris Palmer") Added `chamfer_hole()` utility module.
|
||||
|
||||
#### [v21.37.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.37.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.37.0...v21.37.1 "diff with v21.37.0")
|
||||
* 2025-04-14 [`7546203`](https://github.com/nophead/NopSCADlib/commit/7546203b0377930a75a45e2943af296dc1758dca "show commit") [R.S.](# "Robert Schiele") positional parameters should not follow named parameters
|
||||
|
||||
@@ -15,6 +74,8 @@ named parameters after the first named one was used.
|
||||
Moved `I2C_LCD_Backpack` from `tiny_pcbs` to pcbs to prevent connector clash.
|
||||
Updated images and readme.
|
||||
|
||||
* 2025-04-22 [`917f404`](https://github.com/nophead/NopSCADlib/commit/917f404c591350d8b1821e9cc6422c9bdbf24b22 "show commit") [P.](# "pcremades") `[Feature]` Add link to STL files in documentation
|
||||
|
||||
* 2025-04-11 [`a9b501a`](https://github.com/nophead/NopSCADlib/commit/a9b501a2d2ce242c181c2cd5f5d1f86ba7150eec "show commit") [P.](# "pcremades") Added a 1602 LCD with I2C module
|
||||
|
||||
* 2025-04-11 [`126343d`](https://github.com/nophead/NopSCADlib/commit/126343d5af75a2aa458db112305a62b953e23694 "show commit") [P.](# "pcremades") Added a I2C TWI SPI Serial Interface for 1602 LCD
|
||||
|
Before Width: | Height: | Size: 265 KiB After Width: | Height: | Size: 264 KiB |
Before Width: | Height: | Size: 326 KiB After Width: | Height: | Size: 324 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 336 KiB After Width: | Height: | Size: 334 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 125 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 129 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 201 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 249 KiB After Width: | Height: | Size: 248 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 124 KiB |
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 185 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 234 KiB After Width: | Height: | Size: 234 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 236 KiB After Width: | Height: | Size: 235 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 217 KiB |
@@ -17,11 +17,13 @@
|
||||
"printed": {
|
||||
"fan_duct.stl": {
|
||||
"count": 1,
|
||||
"colour": "darkorange"
|
||||
"colour": "darkorange",
|
||||
"camera": "0,0,0,70,0,315,500"
|
||||
},
|
||||
"enviro_plus_case_base.stl": {
|
||||
"count": 1,
|
||||
"colour": "grey"
|
||||
"colour": "grey",
|
||||
"camera": "0,0,0,70,0,315,500"
|
||||
}
|
||||
},
|
||||
"routed": {}
|
||||
@@ -67,10 +69,10 @@
|
||||
"smd_resistor(RES0805, 3K3): SMD resistor 0805 3K3 0.125W": {
|
||||
"count": 1
|
||||
},
|
||||
"smd_capacitor(CAP1206): SMD capacitor 1206 10uF": {
|
||||
"smd_capacitor(CAP1206, value = \"10uF\"): SMD capacitor 1206 10uF": {
|
||||
"count": 1
|
||||
},
|
||||
"smd_sot(SOT223): SOT223 package FZT851": {
|
||||
"smd_sot(SOT223, \"FZT851\"): SOT223 package FZT851": {
|
||||
"count": 1
|
||||
}
|
||||
},
|
||||
@@ -115,15 +117,18 @@
|
||||
"printed": {
|
||||
"enviro_plus_case.stl": {
|
||||
"count": 1,
|
||||
"colour": "grey"
|
||||
"colour": "grey",
|
||||
"camera": "0,0,0,70,0,315,500"
|
||||
},
|
||||
"bulkhead.stl": {
|
||||
"count": 1,
|
||||
"colour": "[0.862745, 0.0784314, 0.235294]"
|
||||
"colour": "[0.862745, 0.0784314, 0.235294]",
|
||||
"camera": "0,0,0,70,0,315,500"
|
||||
},
|
||||
"foot.stl": {
|
||||
"count": 3,
|
||||
"colour": "darkorange"
|
||||
"colour": "darkorange",
|
||||
"camera": "0,0,0,70,0,315,500"
|
||||
}
|
||||
},
|
||||
"routed": {}
|
||||
|
@@ -72,7 +72,7 @@ Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
|
||||
|
||||
### 3D Printed parts
|
||||
|
||||
| 1 x enviro_plus_case_base.stl | 1 x fan_duct.stl |
|
||||
| 1 x [enviro_plus_case_base.stl](stls/enviro_plus_case_base.stl) | 1 x [fan_duct.stl](stls/fan_duct.stl) |
|
||||
|---|---|
|
||||
|  | 
|
||||
|
||||
@@ -190,7 +190,7 @@ It converts the PWM signal on GPI4 to a stead DC voltage so that the fan doesn't
|
||||
|
||||
### 3D Printed parts
|
||||
|
||||
| 1 x bulkhead.stl | 1 x enviro_plus_case.stl | 3 x foot.stl |
|
||||
| 1 x [bulkhead.stl](stls/bulkhead.stl) | 1 x [enviro_plus_case.stl](stls/enviro_plus_case.stl) | 3 x [foot.stl](stls/foot.stl) |
|
||||
|---|---|---|
|
||||
|  |  | 
|
||||
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@@ -37,17 +37,17 @@ Gridfinity examples
|
||||
## Main Assembly
|
||||
### 3D Printed parts
|
||||
|
||||
| 1 x 123_block_stand.stl | 1 x 1x1_bin.stl | 1 x MT2_stand.stl |
|
||||
| 1 x [123_block_stand.stl](stls/123_block_stand.stl) | 1 x [1x1_bin.stl](stls/1x1_bin.stl) | 1 x [MT2_stand.stl](stls/MT2_stand.stl) |
|
||||
|---|---|---|
|
||||
|  |  | 
|
||||
|
||||
|
||||
| 1 x chuck_jaw_bin.stl | 1 x chuck_stand.stl | 1 x faceplate_stand.stl |
|
||||
| 1 x [chuck_jaw_bin.stl](stls/chuck_jaw_bin.stl) | 1 x [chuck_stand.stl](stls/chuck_stand.stl) | 1 x [faceplate_stand.stl](stls/faceplate_stand.stl) |
|
||||
|---|---|---|
|
||||
|  |  | 
|
||||
|
||||
|
||||
| 1 x lathe_tool_stand.stl |
|
||||
| 1 x [lathe_tool_stand.stl](stls/lathe_tool_stand.stl) |
|
||||
|---|
|
||||
| 
|
||||
|
||||
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 200 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 122 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 134 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
@@ -14,7 +14,8 @@
|
||||
"printed": {
|
||||
"socket_box.stl": {
|
||||
"count": 1,
|
||||
"colour": "dimgrey"
|
||||
"colour": "dimgrey",
|
||||
"camera": "0,0,0,70,0,315,500"
|
||||
}
|
||||
},
|
||||
"routed": {}
|
||||
@@ -42,7 +43,8 @@
|
||||
"printed": {
|
||||
"foot.stl": {
|
||||
"count": 4,
|
||||
"colour": "darkorange"
|
||||
"colour": "darkorange",
|
||||
"camera": "0,0,0,70,0,315,500"
|
||||
}
|
||||
},
|
||||
"routed": {}
|
||||
|
@@ -70,7 +70,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
|
||||
|
||||
### 3D Printed parts
|
||||
|
||||
| 1 x socket_box.stl |
|
||||
| 1 x [socket_box.stl](stls/socket_box.stl) |
|
||||
|---|
|
||||
| 
|
||||
|
||||
@@ -100,7 +100,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
|
||||
|
||||
### 3D Printed parts
|
||||
|
||||
| 4 x foot.stl |
|
||||
| 4 x [foot.stl](stls/foot.stl) |
|
||||
|---|
|
||||
| 
|
||||
|
||||
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.7 KiB |
BIN
libtest.png
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
@@ -473,7 +473,7 @@ translate([x3 + 10, hot_ends_y])
|
||||
translate([x2, panel_meters_y])
|
||||
panel_meters();
|
||||
|
||||
translate([x2, extrusions_y])
|
||||
translate([x2 - 15, extrusions_y])
|
||||
extrusions();
|
||||
|
||||
translate([x2, box_sections_y])
|
||||
|
@@ -22,7 +22,7 @@
|
||||
//!
|
||||
//! Based on <https://gridfinity.xyz/specification>
|
||||
//!
|
||||
//! More examples [here](examples/gridfinity).
|
||||
//! More examples [here](examples/Gridfinity).
|
||||
//
|
||||
include <../core.scad>
|
||||
use <../utils/rounded_cylinder.scad>
|
||||
|
73
readme.md
@@ -1128,6 +1128,19 @@ Brackets for joining extrusions at a corner.
|
||||
### Properties
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| `extrusion_corner_bracket_3D_inner_height(type)` | The depth offset of the dip in the cuboid |
|
||||
| `extrusion_corner_bracket_3D_inner_side_length(type)` | The length of the dip in the cuboid sides |
|
||||
| `extrusion_corner_bracket_3D_nut_dia(type)` | The width of bottom part of the nut |
|
||||
| `extrusion_corner_bracket_3D_nut_nyloc_thickness(type)` | The total thickness of the nut |
|
||||
| `extrusion_corner_bracket_3D_nut_screw(type)` | The screw (most likely Mx_grub_screw from <NopSCADlib/vitamins/screws.scad>) |
|
||||
| `extrusion_corner_bracket_3D_nut_screws_hor(type)` | The positions of the screw holes on the horizontal arms, expressed in %/100 of the nut arm |
|
||||
| `extrusion_corner_bracket_3D_nut_screws_ver(type)` | The positions of the screw holes on the vertical arms, expressed in %/100 of the nut arm |
|
||||
| `extrusion_corner_bracket_3D_nut_sx(type)` | The length of the nuts |
|
||||
| `extrusion_corner_bracket_3D_nut_thickness(type)` | The thickness of the top part of the nut |
|
||||
| `extrusion_corner_bracket_3D_nut_ty1(type)` | The total width of the nut |
|
||||
| `extrusion_corner_bracket_3D_nut_ty2(type)` | The width of the top edge of the nut |
|
||||
| `extrusion_corner_bracket_3D_outer_height(type)` | The height of the cuboid |
|
||||
| `extrusion_corner_bracket_3D_outer_side_length(type)` | The length of the base cuboid sides |
|
||||
| `extrusion_corner_bracket_base_thickness(type)` | Thickness of base of bracket |
|
||||
| `extrusion_corner_bracket_extrusion(type)` | Default extrusion this bracket is for |
|
||||
| `extrusion_corner_bracket_hole_offset(type)` | Hole offset from corner |
|
||||
@@ -1139,12 +1152,20 @@ Brackets for joining extrusions at a corner.
|
||||
| `extrusion_inner_corner_bracket_size(type)` | Size of inner bracket |
|
||||
| `extrusion_inner_corner_bracket_tnut(type)` | The sliding t-nut it is based on |
|
||||
|
||||
### Functions
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| `extrusion_corner_bracket_3D_get_x_offset(type)` | helper function to position the x beam |
|
||||
| `extrusion_corner_bracket_3D_get_x_rot(type)` | helper function to rotate the y beam |
|
||||
| `extrusion_corner_bracket_3D_get_y_offset(type)` | helper function to position the y beam |
|
||||
| `extrusion_corner_bracket_3D_get_y_rot(type)` | helper function to rotate the y beam |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| `extrusion_corner_bracket(type)` | Corner bracket for extrusion |
|
||||
| `extrusion_corner_bracket_3D(type, grub_screws = true)` | draw the specified extrusion_corner_bracket_3D |
|
||||
| `extrusion_corner_bracket_assembly(type, part_thickness = undef, screw_type = undef, nut_type = undef, max_screw_depth = undef, extrusion = undef)` | Assembly with fasteners in place |
|
||||
| `extrusion_corner_bracket_hole_positions(type)` | Place children at hole positions |
|
||||
| `extrusion_inner_corner_bracket(type, grub_screws = true, backwards = false, extrusion = undef)` | Inner corner bracket for extrusion |
|
||||
|
||||

|
||||
@@ -1152,21 +1173,30 @@ Brackets for joining extrusions at a corner.
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 3 | `extrusion(E2020, 40, cornerHole = true)` | Extrusion E2020 x 40mm |
|
||||
| 2 | `extrusion(E2020t, 20.5)` | Extrusion E2020t x 20.5mm |
|
||||
| 1 | `extrusion(E2020t, 28)` | Extrusion E2020t x 28mm |
|
||||
| 2 | `extrusion(E2020t, 39.5)` | Extrusion E2020t x 39.5mm |
|
||||
| 1 | `extrusion(E2020t, 48)` | Extrusion E2020t x 48mm |
|
||||
| 3 | `extrusion(E3030, 40, cornerHole = true)` | Extrusion E3030 x 40mm |
|
||||
| 3 | `extrusion(E4040, 40, cornerHole = true)` | Extrusion E4040 x 40mm |
|
||||
| 1 | `extrusion(E4040t, 27.4, cornerHole = true)` | Extrusion E4040t x 27.4mm |
|
||||
| 1 | `extrusion(E4040t, 40, cornerHole = true)` | Extrusion E4040t x 40mm |
|
||||
| 1 | `extrusion(E4040t, 60.4, cornerHole = true)` | Extrusion E4040t x 60.4mm |
|
||||
| 1 | `extrusion(E4040t, 80, cornerHole = true)` | Extrusion E4040t x 80mm |
|
||||
| 2 | `extrusion_corner_bracket(E20_corner_bracket)` | Extrusion corner bracket 20mm for E2020t |
|
||||
| 2 | `extrusion_corner_bracket(E40_corner_bracket)` | Extrusion corner bracket 35mm for E4040t |
|
||||
| 2 | `extrusion_corner_bracket_3D(extrusion_corner_bracket_3D_2020)` | Extrusion corner bracket 3D mm for E2020 |
|
||||
| 2 | `extrusion_corner_bracket_3D(extrusion_corner_bracket_3D_3030)` | Extrusion corner bracket 3D mm for E3030 |
|
||||
| 2 | `extrusion_corner_bracket_3D(extrusion_corner_bracket_3D_4040)` | Extrusion corner bracket 3D mm for E4040 |
|
||||
| 4 | `extrusion_inner_corner_bracket(E20_inner_corner_bracket)` | Extrusion inner corner bracket for E2020t |
|
||||
| 2 | `extrusion_inner_corner_bracket(E40_inner_corner_bracket)` | Extrusion inner corner bracket for E4040t |
|
||||
| 4 | `sliding_t_nut(M4_sliding_t_nut)` | Nut M4 sliding T |
|
||||
| 4 | `sliding_t_nut(M8_sliding_ball_t_nut)` | Nut M8 sliding T with spring loaded ball |
|
||||
| 4 | `screw(M4_cap_screw, 8)` | Screw M4 cap x 8mm |
|
||||
| 12 | `screw(M4_grub_screw, 5)` | Screw M4 grub x 5mm |
|
||||
| 20 | `screw(M6_grub_screw, 6.2)` | Screw M6 grub x 6.2mm |
|
||||
| 20 | `screw(M6_grub_screw, 9.5)` | Screw M6 grub x 9.5mm |
|
||||
| 4 | `screw(M8_cap_screw, 12)` | Screw M8 cap x 12mm |
|
||||
| 4 | `washer(M4_washer)` | Washer M4 x 9mm x 0.8mm |
|
||||
| 4 | `washer(M8_washer)` | Washer M8 x 17mm x 1.6mm |
|
||||
@@ -1210,24 +1240,26 @@ Aluminium extrusion.
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| `extrusion(type, length, center = true, cornerHole = false)` | Draw the specified extrusion |
|
||||
| `extrusion(type, length, center = true, cornerHole = true)` | Draw the specified extrusion |
|
||||
|
||||

|
||||
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 1 | `extrusion(E1515, 80)` | Extrusion E1515 x 80mm |
|
||||
| 1 | `extrusion(E2020, 80)` | Extrusion E2020 x 80mm |
|
||||
| 1 | `extrusion(E2020t, 80)` | Extrusion E2020t x 80mm |
|
||||
| 1 | `extrusion(E2040, 80)` | Extrusion E2040 x 80mm |
|
||||
| 1 | `extrusion(E2060, 80)` | Extrusion E2060 x 80mm |
|
||||
| 1 | `extrusion(E2080, 80)` | Extrusion E2080 x 80mm |
|
||||
| 1 | `extrusion(E1515, 80, cornerHole = true)` | Extrusion E1515 x 80mm |
|
||||
| 1 | `extrusion(E2020, 80, cornerHole = true)` | Extrusion E2020 x 80mm |
|
||||
| 1 | `extrusion(E2020t, 80, cornerHole = true)` | Extrusion E2020t x 80mm |
|
||||
| 1 | `extrusion(E2040, 80, cornerHole = true)` | Extrusion E2040 x 80mm |
|
||||
| 1 | `extrusion(E2060, 80, cornerHole = true)` | Extrusion E2060 x 80mm |
|
||||
| 1 | `extrusion(E2080, 80, cornerHole = true)` | Extrusion E2080 x 80mm |
|
||||
| 1 | `extrusion(E3030, 80, cornerHole = true)` | Extrusion E3030 x 80mm |
|
||||
| 1 | `extrusion(E3060, 80, cornerHole = true)` | Extrusion E3060 x 80mm |
|
||||
| 1 | `extrusion(E4040, 80, cornerHole = true)` | Extrusion E4040 x 80mm |
|
||||
| 1 | `extrusion(E4040t, 80, cornerHole = true)` | Extrusion E4040t x 80mm |
|
||||
| 1 | `extrusion(E4080, 80, cornerHole = true)` | Extrusion E4080 x 80mm |
|
||||
| 1 | `extrusion(Makerbeam, 80, cornerHole = true)` | Extrusion Makerbeam x 80mm |
|
||||
| 1 | `extrusion(MakerbeamXL, 80, cornerHole = true)` | Extrusion MakerbeamXL x 80mm |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
@@ -3007,6 +3039,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | `pcb(LIPO_fuel_gauge)` | LIPO fuel gauge |
|
||||
| 1 | `pcb(MP1584EN)` | MP1584EN 3A buck converter |
|
||||
| 1 | `pcb(MT3608)` | MT3608 boost converter module |
|
||||
| 1 | `pcb(MELLOW_FLY_D5)` | Mellow FLY D5 |
|
||||
| 1 | `pcb(Melzi)` | Melzi electronics - not shown |
|
||||
| 6 | | Micro SD card |
|
||||
| 1 | | Micro SD card - not shown |
|
||||
@@ -3015,7 +3048,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | `molex_254(3)` | Molex KK header 3 way - not shown |
|
||||
| 20 | `nut(M2_nut, nyloc = true)` | Nut M2 x 1.6mm nyloc |
|
||||
| 38 | `nut(M2p5_nut, nyloc = true)` | Nut M2.5 x 2.2mm nyloc |
|
||||
| 48 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
|
||||
| 52 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
|
||||
| 8 | `nut(M4_nut, nyloc = true)` | Nut M4 x 3.2mm nyloc |
|
||||
| 1 | `pcb(OPZ2)` | Orange Pi Zero 2 |
|
||||
| 1 | `pcb(PI_IO)` | PI_IO V2 - not shown |
|
||||
@@ -3045,12 +3078,11 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 4 | `screw(M2p5_pan_screw, 20)` | Screw M2.5 pan x 20mm |
|
||||
| 4 | `screw(M2p5_pan_screw, 30)` | Screw M2.5 pan x 30mm |
|
||||
| 4 | `screw(M2p5_pan_screw, 35)` | Screw M2.5 pan x 35mm |
|
||||
| 19 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
|
||||
| 13 | `screw(M3_cap_screw, 20)` | Screw M3 cap x 20mm |
|
||||
| 18 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
|
||||
| 18 | `screw(M3_cap_screw, 20)` | Screw M3 cap x 20mm |
|
||||
| 5 | `screw(M3_cap_screw, 25)` | Screw M3 cap x 25mm |
|
||||
| 11 | `screw(M3_cap_screw, 35)` | Screw M3 cap x 35mm |
|
||||
| 4 | `screw(M4_cap_screw, 20)` | Screw M4 cap x 20mm |
|
||||
| 4 | `screw(M4_cap_screw, 25)` | Screw M4 cap x 25mm |
|
||||
| 8 | `screw(M4_cap_screw, 25)` | Screw M4 cap x 25mm |
|
||||
| 1 | `pcb(XIAO)` | Seeeduino XIAO |
|
||||
| 1 | `pcb(9DOF_stick)` | Sparkfun 9 degrees of freedom IMU |
|
||||
| 1 | `pcb(TP4056)` | TP4056 Li-lon Battery charger module |
|
||||
@@ -3061,7 +3093,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | `pcb(WD2002SJ)` | WD2002SJ Buck Boost DC-DC converter |
|
||||
| 20 | `washer(M2_washer)` | Washer M2 x 5mm x 0.3mm |
|
||||
| 38 | `washer(M2p5_washer)` | Washer M2.5 x 5.9mm x 0.5mm |
|
||||
| 48 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
|
||||
| 52 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
|
||||
| 8 | `washer(M4_washer)` | Washer M4 x 9mm x 0.8mm |
|
||||
| 1 | `pcb(ZC_A0591)` | ZC-A0591 ULN2003 driver PCB |
|
||||
|
||||
@@ -3089,11 +3121,12 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 4 | pcb_spacer30240.stl |
|
||||
| 3 | pcb_spacer30250.stl |
|
||||
| 10 | pcb_spacer3050.stl |
|
||||
| 9 | pcb_spacer3060.stl |
|
||||
| 8 | pcb_spacer3060.stl |
|
||||
| 9 | pcb_spacer3070.stl |
|
||||
| 4 | pcb_spacer3080.stl |
|
||||
| 5 | pcb_spacer3080.stl |
|
||||
| 4 | pcb_spacer3090.stl |
|
||||
| 4 | pcb_spacer40100.stl |
|
||||
| 4 | pcb_spacer4090.stl |
|
||||
| 4 | pcb_spacer40110.stl |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
@@ -4302,8 +4335,8 @@ SK shaft support brackets
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 2 | `extrusion(E2020, 20)` | Extrusion E2020 x 20mm |
|
||||
| 2 | `extrusion(E3030, 20)` | Extrusion E3030 x 20mm |
|
||||
| 2 | `extrusion(E2020, 20, cornerHole = true)` | Extrusion E2020 x 20mm |
|
||||
| 2 | `extrusion(E3030, 20, cornerHole = true)` | Extrusion E3030 x 20mm |
|
||||
| 2 | `sliding_t_nut(M4_hammer_nut)` | Nut M4 hammer |
|
||||
| 2 | `sliding_t_nut(M4_sliding_t_nut)` | Nut M4 sliding T |
|
||||
| 2 | `sliding_t_nut(M5_sliding_t_nut)` | Nut M5 sliding T |
|
||||
@@ -6291,7 +6324,7 @@ Generate storage bins compatible with Zack Freedman's Gridfinity design, see <ht
|
||||
|
||||
Based on <https://gridfinity.xyz/specification>
|
||||
|
||||
More examples [here](examples/gridfinity).
|
||||
More examples [here](examples/Gridfinity).
|
||||
|
||||
[printed/gridfinity.scad](printed/gridfinity.scad) Implementation.
|
||||
|
||||
|
@@ -353,7 +353,7 @@ def views(target, do_assemblies = None):
|
||||
print('### 3D Printed parts', file = doc_file)
|
||||
keys = sorted(list(printed.keys()))
|
||||
for i, p in enumerate(keys):
|
||||
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', printed[p]["count"], p), file = doc_file, end = '')
|
||||
print('%s %d x [%s](stls/%s) |' % ('\n|' if not (i % 3) else '', printed[p]["count"], p, p), file = doc_file, end = '')
|
||||
if (i % 3) == 2 or i == len(printed) - 1:
|
||||
n = (i % 3) + 1
|
||||
print('\n|%s' % ('---|' * n), file = doc_file)
|
||||
@@ -368,7 +368,10 @@ def views(target, do_assemblies = None):
|
||||
print("### CNC Routed parts", file = doc_file)
|
||||
keys = sorted(list(routed.keys()))
|
||||
for i, r in enumerate(keys):
|
||||
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', routed[r]["count"], r), file = doc_file, end = '')
|
||||
if(r.endswith('dxf')):
|
||||
print('%s %d x [%s](dxfs/%s) |' % ('\n|' if not (i % 3) else '', routed[r]["count"], r, r), file = doc_file, end = '')
|
||||
elif(r.endswith('svg')):
|
||||
print('%s %d x [%s](svgs/%s) |' % ('\n|' if not (i % 3) else '', routed[r]["count"], r, r), file = doc_file, end = '')
|
||||
if (i % 3) == 2 or i == len(routed) - 1:
|
||||
n = (i % 3) + 1
|
||||
print('\n|%s' % ('---|' * n), file = doc_file)
|
||||
@@ -379,7 +382,7 @@ def views(target, do_assemblies = None):
|
||||
elif (part[-4:] == ".svg"):
|
||||
print('|  %s' % (part, part.replace('.svg','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file)
|
||||
else:
|
||||
print("Unkown file type ", part[-4:], " for file ", part)
|
||||
print("Unknown file type ", part[-4:], " for file ", part)
|
||||
print('\n', file = doc_file)
|
||||
print('\n', file = doc_file)
|
||||
|
||||
|
@@ -24,76 +24,109 @@ include <../vitamins/washers.scad>
|
||||
include <../vitamins/nuts.scad>
|
||||
|
||||
module inner_bracket_test(bracket, backwards = false)
|
||||
rotate([90, 0, 180]) {
|
||||
extrusion = extrusion_inner_corner_bracket_extrusion(bracket);
|
||||
eWidth = extrusion_width(extrusion);
|
||||
size = extrusion_inner_corner_bracket_size(bracket);
|
||||
tnut = extrusion_inner_corner_bracket_tnut(bracket);
|
||||
rotate([90, 0, 180]) {
|
||||
extrusion = extrusion_inner_corner_bracket_extrusion(bracket);
|
||||
eWidth = extrusion_width(extrusion);
|
||||
size = extrusion_inner_corner_bracket_size(bracket);
|
||||
tnut = extrusion_inner_corner_bracket_tnut(bracket);
|
||||
|
||||
translate([backwards ? -eWidth : 0, 0])
|
||||
extrusion_inner_corner_bracket(bracket, backwards = backwards);
|
||||
translate([backwards ? -eWidth : 0, 0])
|
||||
extrusion_inner_corner_bracket(bracket, backwards=backwards);
|
||||
|
||||
translate([-eWidth / 2, 0])
|
||||
rotate([-90, 0, 0])
|
||||
extrusion(extrusion, size.x - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false, cornerHole = eWidth > 20);
|
||||
translate([-eWidth / 2, 0])
|
||||
rotate([-90, 0, 0])
|
||||
extrusion(extrusion, size.x - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false, cornerHole=eWidth > 20);
|
||||
|
||||
translate([-eWidth, -eWidth / 2])
|
||||
rotate([0, 90, 0])
|
||||
extrusion(extrusion, eWidth + size.y - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false, cornerHole = eWidth > 20);
|
||||
}
|
||||
translate([-eWidth, -eWidth / 2])
|
||||
rotate([0, 90, 0])
|
||||
extrusion(extrusion, eWidth + size.y - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false, cornerHole=eWidth > 20);
|
||||
}
|
||||
|
||||
|
||||
module bracket_test(bracket)
|
||||
rotate([90, 0, 180]) {
|
||||
extrusion = extrusion_corner_bracket_extrusion(bracket);
|
||||
eWidth = extrusion_width(extrusion);
|
||||
size = extrusion_corner_bracket_size(bracket);
|
||||
|
||||
extrusion_corner_bracket_assembly(bracket);
|
||||
|
||||
translate([-eWidth / 2, 0])
|
||||
rotate([-90, 0, 0])
|
||||
extrusion(extrusion, size.y, false, cornerHole = eWidth > 20);
|
||||
|
||||
translate([-eWidth, -eWidth / 2])
|
||||
rotate([0, 90, 0])
|
||||
extrusion(extrusion, eWidth + size.x, false, cornerHole = eWidth > 20);
|
||||
}
|
||||
|
||||
|
||||
module extrusion_brackets(examples = false) {
|
||||
extrusion_inner_corner_bracket(E20_inner_corner_bracket);
|
||||
|
||||
translate([30, 0])
|
||||
extrusion_inner_corner_bracket(E20_inner_corner_bracket, grub_screws = false);
|
||||
|
||||
translate([60, 0])
|
||||
extrusion_corner_bracket_assembly(E20_corner_bracket);
|
||||
|
||||
translate([110, 0])
|
||||
extrusion_inner_corner_bracket(E40_inner_corner_bracket);
|
||||
|
||||
translate([140, 0])
|
||||
extrusion_corner_bracket_assembly(E40_corner_bracket);
|
||||
|
||||
if(examples) {
|
||||
translate([20, 50, 10])
|
||||
inner_bracket_test(E20_inner_corner_bracket, true);
|
||||
|
||||
translate([20, 80, 10])
|
||||
inner_bracket_test(E20_inner_corner_bracket);
|
||||
|
||||
translate([20, 120, 10])
|
||||
bracket_test(E20_corner_bracket);
|
||||
|
||||
translate([100, 70, 10])
|
||||
inner_bracket_test(E40_inner_corner_bracket);
|
||||
|
||||
translate([100, 130, 10])
|
||||
bracket_test(E40_corner_bracket);
|
||||
}
|
||||
module corner_3d_connector(with_profiles = false, corner_connector_type, extrusion_type) {
|
||||
extrusion_length = 40;
|
||||
extrusion_corner_bracket_3D(corner_connector_type, grub_screws=true);
|
||||
if (with_profiles) {
|
||||
translate([0, 0, extrusion_length / 2])
|
||||
extrusion(extrusion_type, extrusion_length);
|
||||
translate(extrusion_corner_bracket_3D_get_y_offset(corner_connector_type))
|
||||
rotate(extrusion_corner_bracket_3D_get_y_rot(corner_connector_type))
|
||||
translate([0, 0, extrusion_length / 2])
|
||||
extrusion(extrusion_type, extrusion_length);
|
||||
translate(extrusion_corner_bracket_3D_get_x_offset(corner_connector_type))
|
||||
rotate(extrusion_corner_bracket_3D_get_x_rot(corner_connector_type))
|
||||
translate([0, 0, extrusion_length / 2])
|
||||
extrusion(extrusion_type, extrusion_length);
|
||||
}
|
||||
}
|
||||
|
||||
if($preview)
|
||||
let($show_threads = true)
|
||||
extrusion_brackets(true);
|
||||
module corner_3d_connectors(with_profiles = false) {
|
||||
corner_3d_connector(with_profiles, extrusion_corner_bracket_3D_2020, E2020);
|
||||
|
||||
translate([80, 0, 0])
|
||||
corner_3d_connector(with_profiles, extrusion_corner_bracket_3D_3030, E3030);
|
||||
|
||||
translate([180, 0, 0])
|
||||
corner_3d_connector(with_profiles, extrusion_corner_bracket_3D_4040, E4040);
|
||||
}
|
||||
|
||||
module bracket_test(bracket)
|
||||
rotate([90, 0, 180]) {
|
||||
extrusion = extrusion_corner_bracket_extrusion(bracket);
|
||||
eWidth = extrusion_width(extrusion);
|
||||
size = extrusion_corner_bracket_size(bracket);
|
||||
|
||||
extrusion_corner_bracket_assembly(bracket);
|
||||
|
||||
translate([-eWidth / 2, 0])
|
||||
rotate([-90, 0, 0])
|
||||
extrusion(extrusion, size.y, false, cornerHole=eWidth > 20);
|
||||
|
||||
translate([-eWidth, -eWidth / 2])
|
||||
rotate([0, 90, 0])
|
||||
extrusion(extrusion, eWidth + size.x, false, cornerHole=eWidth > 20);
|
||||
}
|
||||
|
||||
module extrusion_brackets(examples = false) {
|
||||
extrusion_inner_corner_bracket(E20_inner_corner_bracket);
|
||||
|
||||
translate([30, 0])
|
||||
extrusion_inner_corner_bracket(E20_inner_corner_bracket, grub_screws=false);
|
||||
|
||||
translate([60, 0])
|
||||
extrusion_corner_bracket_assembly(E20_corner_bracket);
|
||||
|
||||
translate([110, 0])
|
||||
extrusion_inner_corner_bracket(E40_inner_corner_bracket);
|
||||
|
||||
translate([140, 0])
|
||||
extrusion_corner_bracket_assembly(E40_corner_bracket);
|
||||
|
||||
if (examples) {
|
||||
translate([20, 50, 10])
|
||||
inner_bracket_test(E20_inner_corner_bracket, true);
|
||||
|
||||
translate([20, 80, 10])
|
||||
inner_bracket_test(E20_inner_corner_bracket);
|
||||
|
||||
translate([20, 120, 10])
|
||||
bracket_test(E20_corner_bracket);
|
||||
|
||||
translate([100, 70, 10])
|
||||
inner_bracket_test(E40_inner_corner_bracket);
|
||||
|
||||
translate([100, 130, 10])
|
||||
bracket_test(E40_corner_bracket);
|
||||
}
|
||||
|
||||
//the 3d connectors
|
||||
translate([0, -30, 0])
|
||||
corner_3d_connectors();
|
||||
if (examples) {
|
||||
translate([0, -110, 0])
|
||||
corner_3d_connectors(true);
|
||||
}
|
||||
}
|
||||
|
||||
if ($preview)
|
||||
let ($show_threads = true)
|
||||
extrusion_brackets(true);
|
||||
|
@@ -35,10 +35,10 @@ module extrusions()
|
||||
rotate(90)
|
||||
layout(heights, gap)
|
||||
rotate(-90)
|
||||
extrusion(list[$i], 80, cornerHole = extrusion_width(list[$i]) > 20);
|
||||
extrusion(list[$i], 80);
|
||||
}
|
||||
else
|
||||
extrusion(e, 80, cornerHole = extrusion_width(e) > 20);
|
||||
extrusion(e, 80);
|
||||
|
||||
if ($preview)
|
||||
extrusions();
|
||||
|
@@ -20,7 +20,7 @@ include <../core.scad>
|
||||
|
||||
include <../printed/gridfinity.scad>
|
||||
|
||||
use <NopSCADlib/utils/chamfer.scad>
|
||||
use <../utils/chamfer.scad>
|
||||
|
||||
box = gridfinity_bin("chuck_stand", 2, 2, 5);
|
||||
|
||||
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 234 KiB After Width: | Height: | Size: 241 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 49 KiB |
@@ -37,7 +37,7 @@ function extrusion_center_hole(type) = abs(extrusion_center_hole_wd(t
|
||||
function extrusion_corner_hole(type) = abs(extrusion_corner_hole_wd(type)); //! Diameter of corner hole or side if square
|
||||
function extrusion_center_square(type) = abs(extrusion_center_square_wd(type)); //! Size of center square or tube
|
||||
|
||||
module extrusion_cross_section(type, cornerHole) {
|
||||
module extrusion_cross_section(type, cornerHole=true) {
|
||||
width = extrusion_width(type);
|
||||
height = extrusion_height(type);
|
||||
centerSquare = extrusion_center_square(type);
|
||||
@@ -54,7 +54,7 @@ module extrusion_cross_section(type, cornerHole) {
|
||||
if(d < 0)
|
||||
circle(d = -d);
|
||||
|
||||
module extrusion_corner(type, cornerHole) {
|
||||
module extrusion_corner(type) {
|
||||
fillet = extrusion_fillet(type);
|
||||
cornerSize = (width - channelWidth) / 2;
|
||||
cornerHoleDiameter = abs(extrusion_corner_hole(type));
|
||||
@@ -74,7 +74,7 @@ module extrusion_cross_section(type, cornerHole) {
|
||||
translate([fillet, fillet])
|
||||
square([cornerSquare - fillet, cornerSquare - fillet]);
|
||||
}
|
||||
if(cornerHole)
|
||||
if(cornerHole && cornerHoleDiameter)
|
||||
translate([cornerSquare / 2, cornerSquare / 2])
|
||||
squircle(extrusion_corner_hole_wd(type));
|
||||
}
|
||||
@@ -117,7 +117,7 @@ module extrusion_cross_section(type, cornerHole) {
|
||||
translate([0, side * (width - height) / 2])
|
||||
for(angle = [0, 90])
|
||||
rotate(angle + (side < 0 ? 180 : 0))
|
||||
extrusion_corner(type, cornerHole);
|
||||
extrusion_corner(type);
|
||||
|
||||
if(count >= 1)
|
||||
for(i = [1 : count])
|
||||
@@ -133,7 +133,7 @@ module extrusion_cross_section(type, cornerHole) {
|
||||
}
|
||||
}
|
||||
|
||||
module extrusion(type, length, center = true, cornerHole = false) { //! Draw the specified extrusion
|
||||
module extrusion(type, length, center = true, cornerHole = true) { //! Draw the specified extrusion
|
||||
|
||||
vitamin(str("extrusion(", type[0], ", ", length, arg(cornerHole, false, "cornerHole"), "): Extrusion ", type[0], " x ", length, "mm"));
|
||||
|
||||
|
@@ -20,151 +20,301 @@
|
||||
//! Brackets for joining extrusions at a corner.
|
||||
|
||||
include <../core.scad>
|
||||
include <../utils/thread.scad>
|
||||
|
||||
use <extrusion.scad>
|
||||
|
||||
function extrusion_inner_corner_bracket_size(type) = type[1]; //! Size of inner bracket
|
||||
function extrusion_inner_corner_bracket_tnut(type) = type[2]; //! The sliding t-nut it is based on
|
||||
function extrusion_inner_corner_bracket_extrusion(type) = type[3]; //! Default extrusion this bracket is for
|
||||
function extrusion_inner_corner_bracket_screw_offsets(type) = type[4]; //! Screw offsets from the ends
|
||||
function extrusion_inner_corner_bracket_size(type) = type[1]; //! Size of inner bracket
|
||||
function extrusion_inner_corner_bracket_tnut(type) = type[2]; //! The sliding t-nut it is based on
|
||||
function extrusion_inner_corner_bracket_extrusion(type) = type[3]; //! Default extrusion this bracket is for
|
||||
function extrusion_inner_corner_bracket_screw_offsets(type) = type[4]; //! Screw offsets from the ends
|
||||
|
||||
module extrusion_inner_corner_bracket(type, grub_screws = true, backwards = false, extrusion = undef) { //! Inner corner bracket for extrusion
|
||||
extrusion = is_undef(extrusion) ? extrusion_inner_corner_bracket_extrusion(type) : extrusion;
|
||||
vitamin(str("extrusion_inner_corner_bracket(", type[0], "): Extrusion inner corner bracket for ", extrusion[0]));
|
||||
module extrusion_inner_corner_bracket(type, grub_screws = true, backwards = false, extrusion = undef) { //! Inner corner bracket for extrusion
|
||||
extrusion = is_undef(extrusion) ? extrusion_inner_corner_bracket_extrusion(type) : extrusion;
|
||||
vitamin(str("extrusion_inner_corner_bracket(", type[0], "): Extrusion inner corner bracket for ", extrusion[0]));
|
||||
|
||||
size = extrusion_inner_corner_bracket_size(type);
|
||||
tnut = extrusion_inner_corner_bracket_tnut(type);
|
||||
screw_offsets = extrusion_inner_corner_bracket_screw_offsets(type);
|
||||
bottomTabOffset = 4;
|
||||
topTabOffset = 10;
|
||||
sizeBottom = [size.y - bottomTabOffset, nut_square_width(tnut), size.z];
|
||||
sizeTop = [size.x - topTabOffset, nut_square_width(tnut), size.z];
|
||||
tab = t_nut_tab(tnut);
|
||||
tabSizeZ = nut_thickness(tnut);
|
||||
screw = find_screw(hs_grub, nut_size(tnut));
|
||||
holeRadius = screw_pilot_hole(screw);
|
||||
depth = (extrusion_width(extrusion) - extrusion_center_square(extrusion)) / 2;
|
||||
size = extrusion_inner_corner_bracket_size(type);
|
||||
tnut = extrusion_inner_corner_bracket_tnut(type);
|
||||
screw_offsets = extrusion_inner_corner_bracket_screw_offsets(type);
|
||||
bottomTabOffset = 4;
|
||||
topTabOffset = 10;
|
||||
sizeBottom = [size.y - bottomTabOffset, nut_square_width(tnut), size.z];
|
||||
sizeTop = [size.x - topTabOffset, nut_square_width(tnut), size.z];
|
||||
tab = t_nut_tab(tnut);
|
||||
tabSizeZ = nut_thickness(tnut);
|
||||
screw = find_screw(hs_grub, nut_size(tnut));
|
||||
holeRadius = screw_pilot_hole(screw);
|
||||
depth = (extrusion_width(extrusion) - extrusion_center_square(extrusion)) / 2;
|
||||
|
||||
offset = extrusion_tab_thickness(extrusion) + tabSizeZ;
|
||||
offset2 = extrusion_tab_thickness(extrusion) - nut_thickness(tnut, true) + nut_thickness(tnut);
|
||||
translate([backwards ? offset2 : -offset, -offset])
|
||||
rotate([-90, 0, 0]) {
|
||||
color("silver") {
|
||||
translate([(size.y + bottomTabOffset) / 2, 0, tabSizeZ])
|
||||
rotate([0, 180, 0])
|
||||
extrusionSlidingNut(sizeBottom, tab[0], tab[1], tabSizeZ, holeRadius, (bottomTabOffset - size.y) / 2 + screw_offsets.y);
|
||||
offset = extrusion_tab_thickness(extrusion) + tabSizeZ;
|
||||
offset2 = extrusion_tab_thickness(extrusion) - nut_thickness(tnut, true) + nut_thickness(tnut);
|
||||
translate([backwards ? offset2 : -offset, -offset])
|
||||
rotate([-90, 0, 0]) {
|
||||
color("silver") {
|
||||
translate([(size.y + bottomTabOffset) / 2, 0, tabSizeZ])
|
||||
rotate([0, 180, 0])
|
||||
extrusionSlidingNut(sizeBottom, tab[0], tab[1], tabSizeZ, holeRadius, (bottomTabOffset - size.y) / 2 + screw_offsets.y);
|
||||
|
||||
translate([tabSizeZ, 0, (size.x + topTabOffset) / 2])
|
||||
rotate([0, -90, 0])
|
||||
extrusionSlidingNut(sizeTop, tab[0], tab[0], tabSizeZ, holeRadius, -(topTabOffset - size.x) / 2 - screw_offsets.x);
|
||||
translate([tabSizeZ, 0, (size.x + topTabOffset) / 2])
|
||||
rotate([0, -90, 0])
|
||||
extrusionSlidingNut(sizeTop, tab[0], tab[0], tabSizeZ, holeRadius, -(topTabOffset - size.x) / 2 - screw_offsets.x);
|
||||
|
||||
translate([0, -tab[1] / 2]) {
|
||||
cube([bottomTabOffset, tab[1], size.z]);
|
||||
cube([size.z, tab[1], topTabOffset]);
|
||||
}
|
||||
}
|
||||
if(grub_screws)
|
||||
not_on_bom() no_explode() {
|
||||
screw_len = screw_shorter_than(depth);
|
||||
gap = depth - screw_len;
|
||||
screw_z = offset - gap;
|
||||
|
||||
rotate([0, -90, 180])
|
||||
if(backwards)
|
||||
translate([size.x - screw_offsets.x, 0, -offset2 + gap])
|
||||
vflip()
|
||||
screw(screw, screw_len);
|
||||
else
|
||||
translate([size.x - screw_offsets.x, 0, screw_z])
|
||||
screw(screw, screw_len);
|
||||
|
||||
translate([size.y - screw_offsets.y, 0, screw_z])
|
||||
screw(screw, screw_len);
|
||||
}
|
||||
translate([0, -tab[1] / 2]) {
|
||||
cube([bottomTabOffset, tab[1], size.z]);
|
||||
cube([size.z, tab[1], topTabOffset]);
|
||||
}
|
||||
}
|
||||
if (grub_screws)
|
||||
not_on_bom() no_explode() {
|
||||
screw_len = screw_shorter_than(depth);
|
||||
gap = depth - screw_len;
|
||||
screw_z = offset - gap;
|
||||
|
||||
rotate([0, -90, 180]) if (backwards)
|
||||
translate([size.x - screw_offsets.x, 0, -offset2 + gap])
|
||||
vflip()
|
||||
screw(screw, screw_len);
|
||||
else
|
||||
translate([size.x - screw_offsets.x, 0, screw_z])
|
||||
screw(screw, screw_len);
|
||||
|
||||
translate([size.y - screw_offsets.y, 0, screw_z])
|
||||
screw(screw, screw_len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function extrusion_corner_bracket_size(type) = type[1]; //! Size of bracket
|
||||
function extrusion_corner_bracket_base_thickness(type) = type[2]; //! Thickness of base of bracket
|
||||
function extrusion_corner_bracket_side_thickness(type) = type[3]; //! Thickness of side of bracket
|
||||
function extrusion_corner_bracket_hole_offset(type) = type[4]; //! Hole offset from corner
|
||||
function extrusion_corner_bracket_tnut(type) = type[5]; //! The sliding t-nut to use in the assembly
|
||||
function extrusion_corner_bracket_extrusion(type) = type[6]; //! Default extrusion this bracket is for
|
||||
function extrusion_corner_bracket_size(type) = type[1]; //! Size of bracket
|
||||
function extrusion_corner_bracket_base_thickness(type) = type[2]; //! Thickness of base of bracket
|
||||
function extrusion_corner_bracket_side_thickness(type) = type[3]; //! Thickness of side of bracket
|
||||
function extrusion_corner_bracket_hole_offset(type) = type[4]; //! Hole offset from corner
|
||||
function extrusion_corner_bracket_tnut(type) = type[5]; //! The sliding t-nut to use in the assembly
|
||||
function extrusion_corner_bracket_extrusion(type) = type[6]; //! Default extrusion this bracket is for
|
||||
|
||||
module extrusion_corner_bracket(type) { //! Corner bracket for extrusion
|
||||
vitamin(str("extrusion_corner_bracket(", type[0], "): Extrusion corner bracket ", type[1].z, "mm for ", extrusion_corner_bracket_extrusion(type)[0]));
|
||||
module extrusion_corner_bracket(type) { //! Corner bracket for extrusion
|
||||
vitamin(str("extrusion_corner_bracket(", type[0], "): Extrusion corner bracket ", type[1].z, "mm for ", extrusion_corner_bracket_extrusion(type)[0]));
|
||||
|
||||
eSize = extrusion_corner_bracket_size(type).z;
|
||||
cbSize = extrusion_corner_bracket_size(type).x;
|
||||
baseThickness = extrusion_corner_bracket_base_thickness(type);
|
||||
hole_r = screw_clearance_radius(find_screw(hs_cap, nut_size(extrusion_corner_bracket_tnut(type))));
|
||||
eSize = extrusion_corner_bracket_size(type).z;
|
||||
cbSize = extrusion_corner_bracket_size(type).x;
|
||||
baseThickness = extrusion_corner_bracket_base_thickness(type);
|
||||
hole_r = screw_clearance_radius(find_screw(hs_cap, nut_size(extrusion_corner_bracket_tnut(type))));
|
||||
|
||||
module base() {
|
||||
linear_extrude(baseThickness)
|
||||
difference() {
|
||||
translate([0, -eSize / 2])
|
||||
square([cbSize, eSize]);
|
||||
module base() {
|
||||
linear_extrude(baseThickness)
|
||||
difference() {
|
||||
translate([0, -eSize / 2])
|
||||
square([cbSize, eSize]);
|
||||
|
||||
hull() {
|
||||
translate([extrusion_corner_bracket_hole_offset(type) + 1.5, 0])
|
||||
circle(hole_r);
|
||||
hull() {
|
||||
translate([extrusion_corner_bracket_hole_offset(type) + 1.5, 0])
|
||||
circle(hole_r);
|
||||
|
||||
translate([extrusion_corner_bracket_hole_offset(type) - 1.5, 0])
|
||||
circle(hole_r);
|
||||
}
|
||||
}
|
||||
translate([extrusion_corner_bracket_hole_offset(type) - 1.5, 0])
|
||||
circle(hole_r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
color("silver") {
|
||||
rotate([90, 0, 90])
|
||||
base();
|
||||
|
||||
translate([0, baseThickness])
|
||||
rotate([90, 0, 0])
|
||||
base();
|
||||
|
||||
sideThickness = extrusion_corner_bracket_side_thickness(type);
|
||||
for (z = [-eSize / 2, eSize / 2 - sideThickness]) {
|
||||
translate_z(z) {
|
||||
right_triangle(cbSize, cbSize, sideThickness, center=false);
|
||||
cube([5, cbSize, sideThickness]);
|
||||
cube([cbSize, 5, sideThickness]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
color("silver") {
|
||||
rotate([90, 0, 90])
|
||||
base();
|
||||
module extrusion_corner_bracket_hole_positions(type) {
|
||||
//! Place children at hole positions
|
||||
for (angle = [[0, 90, 0], [-90, -90, 0]])
|
||||
rotate(angle)
|
||||
translate([0, extrusion_corner_bracket_hole_offset(type), extrusion_corner_bracket_base_thickness(type)])
|
||||
children();
|
||||
}
|
||||
|
||||
translate([0, baseThickness])
|
||||
rotate([90, 0, 0])
|
||||
base();
|
||||
module extrusion_corner_bracket_assembly(type, part_thickness = undef, screw_type = undef, nut_type = undef, max_screw_depth = undef, extrusion = undef) { //! Assembly with fasteners in place
|
||||
extrusion_corner_bracket(type);
|
||||
extrusion = is_undef(extrusion) ? extrusion_corner_bracket_extrusion(type) : extrusion;
|
||||
|
||||
sideThickness = extrusion_corner_bracket_side_thickness(type);
|
||||
for(z = [-eSize / 2, eSize / 2 - sideThickness]) {
|
||||
translate_z(z) {
|
||||
right_triangle(cbSize, cbSize, sideThickness, center = false);
|
||||
cube([5, cbSize, sideThickness]);
|
||||
cube([cbSize, 5, sideThickness]);
|
||||
nut = is_undef(nut_type) ? extrusion_corner_bracket_tnut(type) : nut_type;
|
||||
screw = is_undef(screw_type) ? find_screw(hs_cap, nut_size(nut)) : screw_type;
|
||||
thickness = is_undef(part_thickness) ? extrusion_tab_thickness(extrusion) : part_thickness;
|
||||
depth = is_undef(max_screw_depth) ? (extrusion_width(extrusion) - extrusion_center_square(extrusion)) / 2 - eps : max_screw_depth;
|
||||
|
||||
screw_washer_thickness = washer_thickness(screw_washer(screw));
|
||||
nut_washer_type = nut_washer(nut);
|
||||
nut_washer_thickness = nut_washer_type ? washer_thickness(nut_washer_type) : 0;
|
||||
|
||||
nut_offset = extrusion_corner_bracket_base_thickness(type) + thickness;
|
||||
screw_length =
|
||||
depth ? screw_shorter_than(extrusion_corner_bracket_base_thickness(type) + screw_washer_thickness + depth)
|
||||
: screw_longer_than(nut_offset + screw_washer_thickness + nut_washer_thickness + nut_thickness(nut));
|
||||
|
||||
extrusion_corner_bracket_hole_positions(type) {
|
||||
screw_and_washer(screw, screw_length);
|
||||
translate_z(-nut_offset)
|
||||
vflip() if (nut_washer_type)
|
||||
nut_and_washer(nut);
|
||||
else
|
||||
rotate(90)
|
||||
sliding_t_nut(nut);
|
||||
}
|
||||
}
|
||||
|
||||
function extrusion_corner_bracket_3D_outer_side_length(type) = type[1]; //! The length of the base cuboid sides
|
||||
function extrusion_corner_bracket_3D_outer_height(type) = type[2]; //! The height of the cuboid
|
||||
function extrusion_corner_bracket_3D_inner_side_length(type) = type[3]; //! The length of the dip in the cuboid sides
|
||||
function extrusion_corner_bracket_3D_inner_height(type) = type[4]; //! The depth offset of the dip in the cuboid
|
||||
|
||||
function extrusion_corner_bracket_3D_nut_screw(type) = type[5]; //! The screw (most likely Mx_grub_screw from <NopSCADlib/vitamins/screws.scad>)
|
||||
function extrusion_corner_bracket_3D_nut_dia(type) = type[6]; //! The width of bottom part of the nut
|
||||
function extrusion_corner_bracket_3D_nut_thickness(type) = type[7]; //! The thickness of the top part of the nut
|
||||
function extrusion_corner_bracket_3D_nut_nyloc_thickness(type) = type[8]; //! The total thickness of the nut
|
||||
function extrusion_corner_bracket_3D_nut_sx(type) = type[9]; //! The length of the nuts
|
||||
function extrusion_corner_bracket_3D_nut_ty1(type) = type[10]; //! The total width of the nut
|
||||
function extrusion_corner_bracket_3D_nut_ty2(type) = type[11]; //! The width of the top edge of the nut
|
||||
function extrusion_corner_bracket_3D_nut_screws_hor(type) = type[12]; //! The positions of the screw holes on the horizontal arms, expressed in %/100 of the nut arm
|
||||
function extrusion_corner_bracket_3D_nut_screws_ver(type) = type[13]; //! The positions of the screw holes on the vertical arms, expressed in %/100 of the nut arm
|
||||
|
||||
function extrusion_corner_bracket_3D_get_y_offset(type) = [0, -extrusion_corner_bracket_3D_outer_side_length(type) / 2, extrusion_corner_bracket_3D_nut_nyloc_thickness(type)]; //! helper function to position the y beam
|
||||
function extrusion_corner_bracket_3D_get_y_rot(type) = [90, 0, 0]; //! helper function to rotate the y beam
|
||||
function extrusion_corner_bracket_3D_get_x_offset(type) = [extrusion_corner_bracket_3D_outer_side_length(type) / 2, 0, extrusion_corner_bracket_3D_nut_nyloc_thickness(type)]; //! helper function to position the x beam
|
||||
function extrusion_corner_bracket_3D_get_x_rot(type) = [0, 90, 0]; //! helper function to rotate the y beam
|
||||
|
||||
module extrusion_corner_bracket_3D(type, grub_screws = true) { //! draw the specified extrusion_corner_bracket_3D
|
||||
vitamin(str("extrusion_corner_bracket_3D(", type[0], "): Extrusion corner bracket 3D mm for E", slice(type[0], -4)));
|
||||
|
||||
|
||||
nut_screw_dia = screw_radius(extrusion_corner_bracket_3D_nut_screw(type) * 2);
|
||||
nut_dia = extrusion_corner_bracket_3D_nut_dia(type);
|
||||
nut_thickness = extrusion_corner_bracket_3D_nut_thickness(type);
|
||||
nut_nyloc_thickness = extrusion_corner_bracket_3D_nut_nyloc_thickness(type);
|
||||
nut_sx = extrusion_corner_bracket_3D_nut_sx(type);
|
||||
nut_ty1 = extrusion_corner_bracket_3D_nut_ty1(type);
|
||||
nut_ty2 = extrusion_corner_bracket_3D_nut_ty2(type);
|
||||
|
||||
nut_profile = [
|
||||
[0, nut_dia / 2],
|
||||
[nut_nyloc_thickness - nut_thickness, nut_dia / 2],
|
||||
[nut_nyloc_thickness - nut_thickness, nut_ty1 / 2],
|
||||
[nut_nyloc_thickness - nut_thickness + (nut_ty1 - nut_ty2) / 2, nut_ty1 / 2],
|
||||
[nut_nyloc_thickness, nut_ty2 / 2],
|
||||
[nut_nyloc_thickness, -nut_ty2 / 2],
|
||||
[nut_nyloc_thickness - nut_thickness + (nut_ty1 - nut_ty2) / 2, -nut_ty1 / 2],
|
||||
[nut_nyloc_thickness - nut_thickness, -nut_ty1 / 2],
|
||||
[nut_nyloc_thickness - nut_thickness, -nut_dia / 2],
|
||||
[0, -nut_dia / 2],
|
||||
];
|
||||
|
||||
grub_screw = extrusion_corner_bracket_3D_nut_screw(type);
|
||||
|
||||
outer_side_length = extrusion_corner_bracket_3D_outer_side_length(type);
|
||||
outer_height = extrusion_corner_bracket_3D_outer_height(type);
|
||||
inner_side_length = extrusion_corner_bracket_3D_inner_side_length(type);
|
||||
inner_height = extrusion_corner_bracket_3D_inner_height(type);
|
||||
inner_offset_z = outer_height - inner_height + 0.01;
|
||||
|
||||
//position the nuts on the base
|
||||
positions_horizontal = [
|
||||
[outer_side_length / 2, 0.001, 0, 0, 270, 90],
|
||||
[outer_side_length - 0.001, outer_side_length / 2, 0, 0, 270, 180],
|
||||
];
|
||||
positions_vertical = [
|
||||
[0, outer_side_length / 2, inner_offset_z, 0, 0, 0],
|
||||
[outer_side_length / 2, outer_side_length, inner_offset_z, 0, 0, 270],
|
||||
];
|
||||
|
||||
//the radius of the base corners
|
||||
r = 1;
|
||||
|
||||
//offset so everything is centered for easy attachment to extrusion
|
||||
translate([-outer_side_length / 2, -outer_side_length / 2, -outer_height]) {
|
||||
|
||||
color("silver")
|
||||
union() {
|
||||
//create the base
|
||||
difference() {
|
||||
rounded_cube_xy([outer_side_length, outer_side_length, outer_height], r=r);
|
||||
translate([(outer_side_length - inner_side_length) / 2, (outer_side_length - inner_side_length) / 2, inner_offset_z])
|
||||
rounded_cube_xy([inner_side_length, inner_side_length, inner_height], r=r);
|
||||
}
|
||||
|
||||
for (pos = positions_horizontal) {
|
||||
translate([pos[0], pos[1], pos[2]])
|
||||
rotate([pos[3], pos[4], pos[5]])
|
||||
difference() {
|
||||
linear_extrude(nut_sx, convexity=3)
|
||||
polygon(nut_profile);
|
||||
//create the screw holes
|
||||
for (dist = extrusion_corner_bracket_3D_nut_screws_hor(type)) {
|
||||
translate([-0.01, 0, nut_sx * dist])
|
||||
rotate([0, 90, 0])
|
||||
difference() {
|
||||
cylinder(h=nut_nyloc_thickness + 0.02, d=nut_screw_dia, center=false);
|
||||
if (show_threads) {
|
||||
female_metric_thread(nut_screw_dia, metric_coarse_pitch(nut_screw_dia), nut_nyloc_thickness, center=false);
|
||||
}
|
||||
}
|
||||
if (grub_screws) {
|
||||
screw(grub_screw, nut_nyloc_thickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (pos = positions_vertical) {
|
||||
translate([pos[0], pos[1], pos[2]])
|
||||
rotate([pos[3], pos[4], pos[5]]) {
|
||||
difference() {
|
||||
linear_extrude(nut_sx, convexity=3)
|
||||
polygon(nut_profile);
|
||||
//create the screw holes
|
||||
for (dist = extrusion_corner_bracket_3D_nut_screws_ver(type)) {
|
||||
translate([-0.01, 0, nut_sx * dist])
|
||||
rotate([0, 90, 0])
|
||||
difference() {
|
||||
cylinder(h=nut_nyloc_thickness + 0.02, d=nut_screw_dia, center=false);
|
||||
if (show_threads) {
|
||||
female_metric_thread(nut_screw_dia, metric_coarse_pitch(nut_screw_dia), nut_nyloc_thickness, center=false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (grub_screws) {
|
||||
for (pos = positions_horizontal) {
|
||||
translate([pos[0], pos[1], pos[2]])
|
||||
rotate([pos[3], pos[4], pos[5]]) {
|
||||
for (dist = extrusion_corner_bracket_3D_nut_screws_hor(type)) {
|
||||
translate([-0.01, 0, nut_sx * dist])
|
||||
rotate([180, 90, 0])
|
||||
|
||||
screw(grub_screw, nut_nyloc_thickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (pos = positions_vertical) {
|
||||
translate([pos[0], pos[1], pos[2]])
|
||||
rotate([pos[3], pos[4], pos[5]]) {
|
||||
for (dist = extrusion_corner_bracket_3D_nut_screws_ver(type)) {
|
||||
translate([-0.01, 0, nut_sx * dist])
|
||||
rotate([180, 90, 0])
|
||||
screw(grub_screw, nut_nyloc_thickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module extrusion_corner_bracket_hole_positions(type) { //! Place children at hole positions
|
||||
for(angle = [ [0, 90, 0], [-90, -90, 0] ])
|
||||
rotate(angle)
|
||||
translate([0, extrusion_corner_bracket_hole_offset(type), extrusion_corner_bracket_base_thickness(type)])
|
||||
children();
|
||||
}
|
||||
|
||||
module extrusion_corner_bracket_assembly(type, part_thickness = undef, screw_type = undef, nut_type = undef, max_screw_depth = undef, extrusion = undef) { //! Assembly with fasteners in place
|
||||
extrusion_corner_bracket(type);
|
||||
extrusion = is_undef(extrusion) ? extrusion_corner_bracket_extrusion(type) : extrusion;
|
||||
|
||||
nut = is_undef(nut_type) ? extrusion_corner_bracket_tnut(type) : nut_type;
|
||||
screw = is_undef(screw_type) ? find_screw(hs_cap, nut_size(nut)) : screw_type;
|
||||
thickness = is_undef(part_thickness) ? extrusion_tab_thickness(extrusion) : part_thickness;
|
||||
depth = is_undef(max_screw_depth) ? (extrusion_width(extrusion) - extrusion_center_square(extrusion)) / 2 - eps : max_screw_depth;
|
||||
|
||||
screw_washer_thickness = washer_thickness(screw_washer(screw));
|
||||
nut_washer_type = nut_washer(nut);
|
||||
nut_washer_thickness = nut_washer_type ? washer_thickness(nut_washer_type) : 0;
|
||||
|
||||
nut_offset = extrusion_corner_bracket_base_thickness(type) + thickness;
|
||||
screw_length = depth ? screw_shorter_than(extrusion_corner_bracket_base_thickness(type) + screw_washer_thickness + depth)
|
||||
: screw_longer_than(nut_offset + screw_washer_thickness + nut_washer_thickness + nut_thickness(nut));
|
||||
|
||||
extrusion_corner_bracket_hole_positions(type) {
|
||||
screw_and_washer(screw, screw_length);
|
||||
translate_z(-nut_offset)
|
||||
vflip()
|
||||
if(nut_washer_type)
|
||||
nut_and_washer(nut);
|
||||
else
|
||||
rotate(90)
|
||||
sliding_t_nut(nut);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -19,12 +19,22 @@
|
||||
//
|
||||
// Extrusion brackets
|
||||
//
|
||||
include <../core.scad>
|
||||
include <screws.scad>
|
||||
|
||||
E20_inner_corner_bracket = [ "E20_inner_corner_bracket", [26, 25, 4.7], M4_sliding_t_nut, E2020t, [7, 6]];
|
||||
E40_inner_corner_bracket = [ "E40_inner_corner_bracket", [38, 31, 8.5], M6_sliding_t_nut, E4040t, [13, 10]];
|
||||
E20_inner_corner_bracket = ["E20_inner_corner_bracket", [26, 25, 4.7], M4_sliding_t_nut, E2020t, [7, 6]];
|
||||
E40_inner_corner_bracket = ["E40_inner_corner_bracket", [38, 31, 8.5], M6_sliding_t_nut, E4040t, [13, 10]];
|
||||
|
||||
E20_corner_bracket = [ "E20_corner_bracket", [28, 28, 20], 2, 3, 19.5, M4_sliding_t_nut, E2020t];
|
||||
E40_corner_bracket = [ "E40_corner_bracket", [40, 40, 35], 2, 3, 19.5, M8_sliding_ball_t_nut, E4040t];
|
||||
E20_corner_bracket = ["E20_corner_bracket", [28, 28, 20], 2, 3, 19.5, M4_sliding_t_nut, E2020t];
|
||||
E40_corner_bracket = ["E40_corner_bracket", [40, 40, 35], 2, 3, 19.5, M8_sliding_ball_t_nut, E4040t];
|
||||
|
||||
//sh is horizontal positions of the screw holes, expressed in %/100 of the nut arm
|
||||
//sv is vertical positions of the screw holes, expressed in %/100 of the nut arm
|
||||
// screw nd nt nnt nsx nty1 nty2 sh sv
|
||||
extrusion_corner_bracket_3D_2020 = ["extrusion_corner_bracket_3D_2020", 20, 5, 13, 2.5, M4_grub_screw, 6, 3.5, 5, 15.5, 10, 6, [0.5], [0.5]];
|
||||
extrusion_corner_bracket_3D_3030 = ["extrusion_corner_bracket_3D_3030", 29.6, 6.2, 22, 2.5, M6_grub_screw, 8, 4.2, 6.2, 24.9, 16, 11, [0.25, 0.75], [0.65]];
|
||||
extrusion_corner_bracket_3D_4040 = ["extrusion_corner_bracket_3D_4040", 40, 9.5, 25, 2.5, M6_grub_screw, 8, 5, 9.5, 34.0, 19.5, 14, [0.25, 0.75], [0.65]];
|
||||
|
||||
extrusion_corner_bracket_3Ds = [extrusion_corner_bracket_3D_2020, extrusion_corner_bracket_3D_3030, extrusion_corner_bracket_3D_4040];
|
||||
|
||||
use <extrusion_bracket.scad>
|
||||
|
@@ -19,19 +19,21 @@
|
||||
//
|
||||
// Extrusion
|
||||
//
|
||||
// W H d1 d2 sq cw cwi t st f recess
|
||||
E1515 = [ "E1515", 15, 15, -3.3, 0, 5.5, 6.2, 9.5, 1.0, 0.9, 0.5, false ];
|
||||
E2020 = [ "E2020", 20, 20, -4.2, -3, 8, 6, 12.0, 2, 2, 1, false ];
|
||||
E2020t = [ "E2020t",20, 20, -5.0, -3, 7.8, 6.2, 11.0, 1.8, 1.5, 1.5, [7.2, 0.5] ];
|
||||
E2040 = [ "E2040", 20, 40, -4.2, -3, 8, 6, 12.0, 2, 2, 1, false ];
|
||||
E2060 = [ "E2060", 20, 60, -4.2, -3, 8, 6, 12.0, 2, 2, 1, false ];
|
||||
E2080 = [ "E2080", 20, 80, -4.2, -3, 8, 6, 12.0, 2, 2, 1, false ];
|
||||
E3030 = [ "E3030", 30, 30, -6.8, -4.2, 12, 8, 16.5, 2, 2, 1, false ];
|
||||
E3060 = [ "E3060", 30, 60, -6.8, -4.2, 12, 8, 16.5, 2, 2, 1, false ];
|
||||
E4040 = [ "E4040", 40, 40, -10.5, -6.0, 15, 10, 20.0, 5.5, 3, 1, false ];
|
||||
E4040t = [ "E4040t",40, 40, -10, 6.8, -16, 10, 20.0, 4.0, 2.4, 1.5, [12, 1] ];
|
||||
E4080 = [ "E4080", 40, 80, -10.5, -6.0, 15, 10, 20.0, 5.5, 3, 1, false ];
|
||||
// W H d1 d2 sq cw cwi t st f recess
|
||||
Makerbeam = [ "Makerbeam", 10, 10, -2.5, 0, 4, 3, 6.5, 1, 1, 0.25, false ];
|
||||
MakerbeamXL = [ "MakerbeamXL", 15, 15, -2.55, -2.55, 5, 3, 5.7, 1.1, 2, 0.25, false ];
|
||||
E1515 = [ "E1515", 15, 15, -3.3, 0, 5.5, 6.2, 9.5, 1.0, 0.9, 0.5, false ];
|
||||
E2020 = [ "E2020", 20, 20, -4.2, 0, 8, 6, 12.0, 2, 2, 1, false ];
|
||||
E2020t = [ "E2020t", 20, 20, -5.0, 0, 7.8, 6.2, 11.0, 1.8, 1.5, 1.5, [7.2, 0.5] ];
|
||||
E2040 = [ "E2040", 20, 40, -4.2, 0, 8, 6, 12.0, 2, 2, 1, false ];
|
||||
E2060 = [ "E2060", 20, 60, -4.2, 0, 8, 6, 12.0, 2, 2, 1, false ];
|
||||
E2080 = [ "E2080", 20, 80, -4.2, 0, 8, 6, 12.0, 2, 2, 1, false ];
|
||||
E3030 = [ "E3030", 30, 30, -6.8, -4.2, 12, 8, 16.5, 2, 2, 1, false ];
|
||||
E3060 = [ "E3060", 30, 60, -6.8, -4.2, 12, 8, 16.5, 2, 2, 1, false ];
|
||||
E4040 = [ "E4040", 40, 40, -10.5, -6.0, 15, 10, 20.0, 5.5, 3, 1, false ];
|
||||
E4040t = [ "E4040t", 40, 40, -10, 6.8, -16, 10, 20.0, 4.0, 2.4, 1.5, [12, 1] ];
|
||||
E4080 = [ "E4080", 40, 80, -10.5, -6.0, 15, 10, 20.0, 5.5, 3, 1, false ];
|
||||
|
||||
extrusions = [E1515, [E2020t, E2020], E2040, E2060, E2080, E3030, E3060, [E4040t, E4040], E4080];
|
||||
extrusions = [Makerbeam, [E1515, MakerbeamXL], [E2020t, E2020], E2040, E2060, E2080, E3030, E3060, [E4040t, E4040], E4080];
|
||||
|
||||
use <extrusion.scad>
|
||||
|
@@ -535,6 +535,95 @@ BTT_SKR_V1_4_TURBO = [
|
||||
[] // accessories
|
||||
];
|
||||
|
||||
MELLOW_FLY_D5 = [
|
||||
"MELLOW_FLY_D5", "Mellow FLY D5",
|
||||
89.37, 63.75, 1.6, // size
|
||||
1, // corner radius
|
||||
3, // mounting hole diameter
|
||||
5, // pad around mounting hole
|
||||
grey(30), // color
|
||||
false, // true if parts should be separate BOM items
|
||||
[ // hole positions
|
||||
[3.185,3.375],
|
||||
[-3.185,3.375],
|
||||
[3.185,-3.375],
|
||||
[-3.185,-3.375],
|
||||
],
|
||||
[ // components
|
||||
// motor connections, stepper sockets
|
||||
[ 0*15.8+7+12.5/2, 7/2, 180, "jst_xh", 4, false, grey(20) ],
|
||||
[ 0*15.8+18+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef, "RoyalBlue" ],
|
||||
[ 0*15.8+12.5+5.4/2, 5.8+2.6/2, 0, "2p54socket", 2, 1],
|
||||
[ 0*15.8+5.5+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef],
|
||||
[ 0*15.8+5.1+2.5/2+6.5, 5.8+21/2, 90, "pcb", 11, TMC2130],
|
||||
|
||||
[ 1*15.8+7+12.5/2, 7/2, 180, "jst_xh", 4, false, grey(20) ],
|
||||
[ 1*15.8+18+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef, "RoyalBlue" ],
|
||||
[ 1*15.8+12.5+5.4/2, 5.8+2.6/2, 0, "2p54socket", 2, 1],
|
||||
[ 1*15.8+5.5+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef],
|
||||
[ 1*15.8+5.1+2.5/2+6.5, 5.8+21/2, 90, "pcb", 11, TMC2130],
|
||||
|
||||
[ 2*15.8+7+12.5/2, 7/2, 180, "jst_xh", 4, false, grey(20) ],
|
||||
[ 2*15.8+18+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef, "RoyalBlue" ],
|
||||
[ 2*15.8+12.5+5.4/2, 5.8+2.6/2, 0, "2p54socket", 2, 1],
|
||||
[ 2*15.8+5.5+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef],
|
||||
[ 2*15.8+5.1+2.5/2+6.5, 5.8+21/2, 90, "pcb", 11, TMC2130],
|
||||
|
||||
[ 3*15.8+7+12.5/2, 7/2, 180, "jst_xh", 4, false, grey(20) ],
|
||||
[ 3*15.8+18+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef, "RoyalBlue" ],
|
||||
[ 3*15.8+12.5+5.4/2, 5.8+2.6/2, 0, "2p54socket", 2, 1],
|
||||
[ 3*15.8+5.5+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef],
|
||||
[ 3*15.8+5.1+2.5/2+6.5, 5.8+21/2, 90, "pcb", 11, TMC2130],
|
||||
|
||||
[ 4*15.8+7+12.5/2, 7/2, 180, "jst_xh", 4, false, grey(20) ],
|
||||
[ 4*15.8+18+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef, "RoyalBlue" ],
|
||||
[ 4*15.8+12.5+5.4/2, 5.8+2.6/2, 0, "2p54socket", 2, 1],
|
||||
[ 4*15.8+5.5+2.5/2, 5.8+21/2, 90, "2p54socket", 8, 1, undef, undef, undef],
|
||||
|
||||
// thermistors
|
||||
[ 0*8+7.8+7.4/2, -(0*6+5.7/2), 180, "jst_xh", 2, false, grey(20) ],
|
||||
[ 1*8+7.8+7.4/2, -(0*6+5.7/2), 180, "jst_xh", 2, false, grey(20) ],
|
||||
|
||||
// fans
|
||||
[ 2*8+7.8+7.4/2, -(0*6+5.7/2), 180, "jst_xh", 2, false, grey(20) ],
|
||||
[ 3*8+7.8+7.4/2, -(0*6+5.7/2), 180, "jst_xh", 2, false, grey(20) ],
|
||||
[ 4*8+7.8+7.4/2, -(0*6+5.7/2), 180, "jst_xh", 2, false, grey(20) ],
|
||||
[ 2*8+7.8+7.4/2, -(1*6+5.7/2), 180, "jst_xh", 2, false, grey(20) ],
|
||||
[ 3*8+7.8+7.4/2, -(1*6+5.7/2), 180, "jst_xh", 2, false, grey(20) ],
|
||||
[ 4*8+7.8+7.4/2, -(1*6+5.7/2), 180, "jst_xh", 2, false, grey(20) ],
|
||||
|
||||
// endstops
|
||||
[ 0*10.5+5*8+7.8+10/2, -(0*6+5.7/2), 180, "jst_xh", 3, false, grey(20) ],
|
||||
[ 1*10.5+5*8+7.8+10/2, -(0*6+5.7/2), 180, "jst_xh", 3, false, grey(20) ],
|
||||
[ 2*10.5+5*8+7.8+10/2, -(0*6+5.7/2), 180, "jst_xh", 3, false, grey(20) ],
|
||||
|
||||
// bltouch/probe
|
||||
[ 5*8+7.8+15/2, -(1*6+5.7/2), 180, "jst_xh", 5, false, grey(20) ],
|
||||
|
||||
// uart/screen
|
||||
[ 5*8+7.8+15.5+12.5/2, -(1*6+5.7/2), 180, "jst_xh", 4, false, grey(20) ],
|
||||
|
||||
// terminals
|
||||
[ 5.25, -(7+30/2), 180, "gterm", gt_5x17, 6, undef, grey(20) ],
|
||||
|
||||
// cpu
|
||||
[ -26-10/2, -20-10/2, 0, "chip", 10, 10, 1, grey(15) ],
|
||||
|
||||
// EXP1 & EXP2
|
||||
[ -20/2, -17-9/2, 180, "2p54boxhdr", 5, 2 ],
|
||||
[ -20/2, -26-9/2, 180, "2p54boxhdr", 5, 2 ],
|
||||
|
||||
// USB connection
|
||||
[-3, -7-9/2, 0, "usb_C"],
|
||||
|
||||
// boot button
|
||||
//[-36, -16, 0, "button_4p5mm"], // button is super tiny, not like button_4p5mm
|
||||
// reset button
|
||||
//[-38, -16, 0, "button_4p5mm"], // button is super tiny, not like button_4p5mm
|
||||
],
|
||||
[] // accessories
|
||||
];
|
||||
|
||||
Melzi = ["Melzi", "Melzi electronics", 203.2, 49.53, 1.6, 3.81, 3.1, 6, "green", false, [[3.81, 3.81], [-3.81, 3.81], [-3.81, -3.81], [3.81, -3.81]],
|
||||
[],
|
||||
[": USB A to Mini B lead", ": Micro SD card"]];
|
||||
@@ -1315,7 +1404,7 @@ I2C_LCD_Backpack = let(size=[42, 19, 1.2])
|
||||
|
||||
tiny_pcbs = [ESP_201, ESP_01M, XIAO, ESP_12F, MP1584EN, ESP_01,tiny_buck, LIPO_fuel_gauge, 9DOF_stick];
|
||||
|
||||
big_pcbs = [BTT_RELAY_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO, BTT_SKR_V1_4_TURBO, DuetE, Duex5];
|
||||
big_pcbs = [BTT_RELAY_V1_2, MELLOW_FLY_D5, BTT_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO, BTT_SKR_V1_4_TURBO, DuetE, Duex5];
|
||||
|
||||
pcbs = [KY_040, TP4056, L9110S, ZC_A0591, RCWL0516, MT3608,RAMPSEndstop, ArduinoNano, I2C_LCD_Backpack, HW803_1WAY_RELAY, Feather405, RPI_Pico,
|
||||
ESP32_DOIT_V1, BlackPill, RPI0, EnviroPlus, ArduinoUno3, ArduinoLeonardo, WD2002SJ, OPZ2, PanelDue_v3, RPI3A, RPI3, RPI4];
|
||||
|