1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-09-05 21:02:51 +02:00

Compare commits

..

145 Commits

Author SHA1 Message Date
Chris Palmer
cae9cdd778 Updated changelog. 2025-08-11 16:09:26 +01:00
Chris Palmer
e4f6227e9a Fixed include path in gridfinity test file. 2025-08-11 16:05:36 +01:00
Chris Palmer
4c4a40c30e Updated changelog. 2025-07-29 21:04:39 +01:00
Chris Palmer
aedccd35b3 Updated images and readme. 2025-07-29 20:51:04 +01:00
Chris Palmer
98b82873bf Fixed undef extrusion type in BOM 2025-07-29 20:48:41 +01:00
Chris Palmer
aca921d737 Fixed some indentation. 2025-07-29 20:48:13 +01:00
Alex Verschoot
018f70ae3c moved the corner_3d_connector over to the extrusion brackets 2025-07-19 15:57:09 +02:00
Alex Verschoot
89c4b96525 replaced the nut diameter with the actual nut from the vitamin list 2025-07-19 00:50:43 +02:00
Alex Verschoot
4e443fc742 used the show_threads variable instead of parameter 2025-07-18 21:00:26 +02:00
Alex Verschoot
f032bb76db added convexity to the linear extrude 2025-07-18 19:52:45 +02:00
Alex Verschoot
c23c3619e4 fixed length typo 2025-07-18 19:48:32 +02:00
Alex Verschoot
c16f0bd472 more formatting 2025-07-17 22:45:04 +02:00
Alex Verschoot
9756845c59 formatting + extra comments 2025-07-17 22:42:02 +02:00
Alex Verschoot
00eeb1b52d Added a testfile for the corner3d connector 2025-07-15 23:31:00 +02:00
Alex Verschoot
80b17a012d renamed variables + corrected horizontal directions 2025-07-15 23:13:09 +02:00
Alex Verschoot
9327c7c134 added option for grub screws 2025-07-12 22:45:13 +02:00
Alex Verschoot
55f7537ba6 made threads a toggle 2025-07-12 21:35:41 +02:00
Alex Verschoot
bfaa48dc7c Added the implementation 2025-07-12 15:04:03 +02:00
Alex Verschoot
a785ae1050 added a corner_3d_connectors page 2025-07-12 12:52:34 +02:00
Chris Palmer
20ee4026f8 Updated changelog. 2025-07-01 15:06:55 +01:00
Chris Palmer
80eb5ebc43 Merge branch 'elliotf-makerbeam-extrusions' 2025-07-01 15:03:35 +01:00
Chris Palmer
d15cf6cf35 Updated images and readme. 2025-07-01 15:03:08 +01:00
Chris Palmer
2769c3714c Merge branch 'makerbeam-extrusions' of https://github.com/elliotf/NopSCADlib into elliotf-makerbeam-extrusions 2025-07-01 14:32:07 +01:00
Chris Palmer
185bb8d6a9 Updated changelog. 2025-07-01 14:13:07 +01:00
Chris Palmer
eddebc65a2 Merge branch 'elliotf-mellow-fly-d5' 2025-07-01 14:01:49 +01:00
Chris Palmer
915ceea296 Updated images and readme. 2025-07-01 14:01:14 +01:00
Elliot Foster
5a14c55ca5 Add the Mellow Fly D5 PCB 2025-06-28 13:39:16 -05:00
Elliot Foster
ca9cc97b2a Makerbeam work in progress 2025-06-28 13:17:56 -05:00
Chris Palmer
652c5d1a26 Updated changelog. 2025-05-16 19:30:03 +01:00
Chris Palmer
3830836519 Merge branch 'pcremades-master'
Added links in the project readme to STL, DXF and SVG files.
2025-05-16 19:22:15 +01:00
Chris Palmer
9c5014b73d Updated examples. 2025-05-16 19:22:02 +01:00
pcremades
5c289bb7f5 [Fix] Fix route to svgs 2025-05-11 12:33:43 -03:00
pcremades
3211fe1f19 [Feature] Add link to DXFs/SVGs files in documentation 2025-05-09 15:02:38 -03:00
Pablo Cremades
c8f1b808cf Merge branch 'nophead:master' into master 2025-04-22 18:29:42 -03:00
pcremades
917f404c59 [Feature] Add link to STL files in documentation 2025-04-22 18:28:14 -03:00
Chris Palmer
99ff256847 Fixed example link. 2025-04-15 13:12:00 +01:00
Chris Palmer
3d370ccf72 Updated changelog. 2025-04-15 13:09:16 +01:00
Chris Palmer
bd94182ff1 Added simple Gridfinity generator and examples. 2025-04-15 13:05:59 +01:00
Chris Palmer
86df9a34d6 Added chamfer test file. 2025-04-15 12:01:45 +01:00
Chris Palmer
9758112e05 Added chamfer_hole() utility module. 2025-04-15 11:59:20 +01:00
Chris Palmer
b46f49a5ce Updated changelog. 2025-04-15 11:42:43 +01:00
Chris Palmer
330c09f4d4 Merge branch 'schiele-corexy_fix' 2025-04-15 11:41:21 +01:00
Chris Palmer
c2a56367eb Merge branch 'corexy_fix' of https://github.com/schiele/NopSCADlib into schiele-corexy_fix 2025-04-15 11:35:27 +01:00
Chris Palmer
f16dc84792 Updated changelog. 2025-04-15 11:34:43 +01:00
Chris Palmer
c065855b90 Merge branch 'pcremades-master' 2025-04-15 11:32:22 +01:00
Chris Palmer
edc7e17437 Included pcbs.scad in displays.scad.
Moved I2C_LCD_Backpack from tiny_pcbs to pcbs to prevent connector clash.
Updated images and readme.
2025-04-15 11:31:46 +01:00
Robert Schiele
7546203b03 positional parameters should not follow named parameters
Some versions of OpenSCAD (like the latest official release 2021.01 get
confused if positional parameters follow named parameters. So let's use
named parameters after the first named one was used.
2025-04-15 07:00:19 +02:00
pcremades
a9b501a2d2 Added a 1602 LCD with I2C module 2025-04-11 11:54:48 -03:00
pcremades
126343d5af Added a I2C TWI SPI Serial Interface for 1602 LCD 2025-04-11 11:39:59 -03:00
pcremades
1692fcc811 Added 1/4" square trimpot to pcb.scad 2025-04-11 11:27:14 -03:00
Chris Palmer
5c4fe8bfb9 Updated changelog. 2025-04-09 23:31:10 +01:00
Chris Palmer
33ac3820b0 Added pose_stl() module because pose() only works for assembly views. 2025-04-09 23:29:00 +01:00
Chris Palmer
6a58d37f77 Updated changelog. 2025-04-01 09:57:15 +01:00
Chris Palmer
029abc0cf8 Merge branch 'trnila-barrel_jack_cutout' 2025-04-01 09:45:06 +01:00
Chris Palmer
4b018eb9ad Merge branch 'barrel_jack_cutout' of https://github.com/trnila/NopSCADlib into trnila-barrel_jack_cutout 2025-04-01 09:33:43 +01:00
Chris Palmer
3715585002 Made pose() work on STL renders to match the documentation. 2025-04-01 09:32:00 +01:00
Daniel Trnka
5d0eda87e4 barrel_jack: added cutout 2025-03-30 23:19:42 +02:00
Chris Palmer
ad963afb8d Updated changelog. 2025-03-27 12:25:55 +00:00
Chris Palmer
dbf8e6c7ae Merge branch 'jeroenrnl-VariableNamesWithDigitsDeprecated' 2025-03-27 12:24:15 +00:00
Chris Palmer
7d281cbcdd Merge branch 'VariableNamesWithDigitsDeprecated' of https://github.com/jeroenrnl/NopSCADlib into jeroenrnl-VariableNamesWithDigitsDeprecated 2025-03-27 12:01:05 +00:00
Chris Palmer
f1a651a2d2 Updated changelog. 2025-03-27 02:00:24 +00:00
Chris Palmer
9f9aa6723e Third attempt to fix dimension image. 2025-03-27 01:59:05 +00:00
Chris Palmer
83d2d511e3 Updated changelog. 2025-03-27 01:57:19 +00:00
Chris Palmer
6b6704b823 Second attempt to fix dimension image. 2025-03-27 01:56:05 +00:00
Chris Palmer
946a3bea1c Updated changelog. 2025-03-27 01:39:25 +00:00
Chris Palmer
117fb626e7 Fixed dimension example image address. 2025-03-27 01:38:09 +00:00
Chris Palmer
0382bad566 Updated changelog. 2025-03-27 01:27:09 +00:00
Chris Palmer
b572325a8f Merge branch 'AlexVerschoot-dimensions' 2025-03-27 00:50:47 +00:00
Chris Palmer
6dc82045ff Shortened the module comments by factoring out the parameter discriptions.
Added the nut example picture.
Fixed nut picture placement.
Updated images and readme.
2025-03-27 00:50:21 +00:00
Jeroen Roos
fdbe0c7a9e Change variable names that start with a digit
Change names of variables from `2a` and `2c` to `ax2` (a times 2) and
`cx2`, because variable names starting with a digit are deprecated in
OpenSCAD.
2025-03-23 10:45:33 +01:00
Chris Palmer
9c7e8a99c7 Merge branch 'dimensions' of https://github.com/AlexVerschoot/NopSCADlib into AlexVerschoot-dimensions 2025-03-22 23:07:20 +00:00
Alex Verschoot
c50f95a203 added some documentation to the nut 2025-03-22 21:43:54 +01:00
Alex Verschoot
49bd6e0a04 added negative offsets to test 2025-03-22 15:00:20 +01:00
Alex Verschoot
921843cc09 made negative offset work as expected (go to the opposite side, and use min instead of max on ccordinates) 2025-03-22 14:58:12 +01:00
Alex Verschoot
c17cc1321b Changed the module comments style 2025-03-19 21:42:34 +01:00
Alex Verschoot
9862b3c3a3 typos 2025-03-16 18:50:51 +01:00
Alex Verschoot
e87e19aa18 removed center from experiment 2025-03-16 18:43:26 +01:00
Alex Verschoot
4f68935b5b some cleanup 2025-03-16 18:23:15 +01:00
Alex Verschoot
8992cce7a6 added argument for text size, and improve auto size 2025-03-15 22:19:12 +01:00
Alex Verschoot
106666ec49 simplified the math to use rotates instead, added examples, and allowed the user to choose witch plane the x,y and z dimensions are in 2025-03-15 21:28:33 +01:00
Alex Verschoot
f731f0fe98 added a function to rotate around the dim axis 2025-03-13 22:53:21 +01:00
Alex Verschoot
3a62198183 replaced the new math functions with rotate and transform 2025-03-13 22:37:53 +01:00
Alex Verschoot
0123885711 Improved text alligment 2025-03-07 22:07:53 +01:00
Alex Verschoot
b166ec47dd Remove old commented code from dimension.scad 2025-03-02 23:07:17 +01:00
Alex Verschoot
6467de5fac Update maths.scad 2025-03-02 23:01:20 +01:00
Alex Verschoot
dc683ed701 added dimensions 2025-03-02 20:18:17 +01:00
Chris Palmer
99d6c2f891 Updated changelog. 2025-02-22 12:20:23 +00:00
Chris Palmer
fc49e8068e Merge branch 'AlexVerschoot-master' 2025-02-22 12:18:10 +00:00
Chris Palmer
862357279a Updated images and readme. 2025-02-22 12:17:07 +00:00
Alex Verschoot
0b8ad93dc5 made the test cases work with the motor in the back 2025-02-16 12:23:20 +01:00
Alex Verschoot
38890400ac added new test cases for motor in the back 2025-02-16 12:22:47 +01:00
Alex Verschoot
9974c03fc9 improved the comments 2025-02-15 16:29:23 +01:00
Alex Verschoot
0208965684 added an option to emplace the motor in the back 2025-02-15 16:25:19 +01:00
Chris Palmer
11e0cfcb43 Updated changelog. 2025-01-22 01:34:04 +00:00
Chris Palmer
6c4d5de350 Merge branch 'loekwous-feature/add-blackpill-pcb' 2025-01-22 01:28:57 +00:00
Chris Palmer
8458e432fc Updated images and readme. 2025-01-22 01:28:39 +00:00
Chris Palmer
7503e8c2cf Merge branch 'feature/add-blackpill-pcb' of https://github.com/loekwous/NopSCADlib into loekwous-feature/add-blackpill-pcb 2025-01-22 00:11:47 +00:00
Chris Palmer
0154b2a32c Added Sparkfun 9DOF_stick PCB. 2025-01-21 14:45:22 +00:00
Chris Palmer
0b802187bb Corrected the chip number on ZC_A0591 pcb. 2025-01-21 14:31:22 +00:00
Chris Palmer
923c3b5c57 Avoid makeing empty folders for dxfs, stls or png if there are no parts of that type. 2025-01-21 14:22:50 +00:00
loekwous
e11bb72814 Added Black pill pcb 2025-01-01 19:29:08 +01:00
Chris Palmer
70fd7fbe14 Updated changelog. 2024-10-20 12:21:16 +01:00
Chris Palmer
45e7962721 Merge branch 'mmuman-micro-rocker' 2024-10-20 12:19:19 +01:00
Chris Palmer
4d8911718c Updated images and readme. 2024-10-20 12:18:52 +01:00
François Revol
cb57b25b0b Add 10x15 micro rocker switches
Spades are not exact but close enough.
2024-10-20 01:03:09 +02:00
Chris Palmer
6deaa5da9c Updated changelog. 2024-10-17 16:24:27 +01:00
Chris Palmer
9820d3eb10 Merge branch 'mmuman-rect-leds' 2024-10-17 16:22:01 +01:00
Chris Palmer
066242af58 Updated images and readme. 2024-10-17 16:19:29 +01:00
Chris Palmer
4b3468f78d Fixed LED bezels to cope with square LEDs. 2024-10-17 16:17:47 +01:00
Chris Palmer
001ea2a174 Fixed LED bezel test. 2024-10-17 16:17:17 +01:00
Chris Palmer
8e9d2dd367 Fixed LED test. 2024-10-17 16:16:47 +01:00
François Revol
f4a7065e1f Add rectangular LEDs
As per https://www.futurlec.com/LED/Red_2x5mm_LED.shtml
2024-10-17 13:36:18 +02:00
Chris Palmer
5ec0c6132d Updated changelog. 2024-10-10 00:33:29 +01:00
Chris Palmer
cef7560947 Merge branch 'nerdyjan-master' 2024-10-10 00:30:47 +01:00
Chris Palmer
7ffff8b7b7 Updated images and readme. 2024-10-10 00:29:58 +01:00
Chris Palmer
e001cc46a3 Restored Lumintop colour to white and made text black on white batteries. 2024-10-10 00:14:58 +01:00
Jan Giebels
7b421570b4 corrected c&p error 2024-10-08 18:47:59 +02:00
Jan Giebels
49ba60f159 added L4680, L32700, L16340 Li-Ion/LiFePo4 batteries 2024-10-08 18:40:54 +02:00
Chris Palmer
0989a02d95 Updated changelog. 2024-10-07 17:51:27 +01:00
Chris Palmer
9e45dbad04 Fixed incorrect parameters passed to tube() in ht_pipe().
Fixed lib.scad to include ht_pipes.scad instead of using it.
2024-10-07 17:50:20 +01:00
Chris Palmer
8cdc04b87b Updated changelog. 2024-10-07 09:05:28 +01:00
Chris Palmer
f65fe59831 Restored 30mm tube section on the bottom of the pipe fitting. 2024-10-07 09:04:01 +01:00
Chris Palmer
5761368e56 Updated changelog. 2024-10-06 23:01:41 +01:00
Chris Palmer
e949ef4ecb Merge branch 'nerdyjan-master' 2024-10-06 22:59:43 +01:00
Chris Palmer
932c68a2c0 Updated images and readme.
Pipes are now made with tube instead of differencing cylinders.
HTpipeFitting() now uses rotate_extrude and corrected internal shape.
The seal ring is now tube diameter + 13.
2024-10-06 22:59:03 +01:00
Jan Giebels
78e3360900 changed naming of ht_pipes test script 2024-10-06 14:50:10 +02:00
Jan Giebels
178f67f815 added more pipes and some cleanup 2024-10-06 14:46:40 +02:00
Jan Giebels
af1b057f59 added info and description 2024-10-06 02:20:30 +02:00
Jan Giebels
195917a879 added HT pipes to lib 2024-10-06 02:10:08 +02:00
Jan Giebels
9ed6aab6c8 added test script and some more HT pipes 2024-10-06 02:08:22 +02:00
Jan Giebels
c61386caf9 added HT waterpipes 2024-10-05 18:21:18 +02:00
Chris
a90eb42933 Merge pull request #285 from GregoryLand/master
Relative paths for vitamin rod_end includes
2024-10-02 13:15:37 +01:00
Greg Land
549dbc9380 Relative paths for vitamin rod_end includes 2024-10-02 06:56:25 -04:00
Chris Palmer
a483494da9 Updated changelog. 2024-10-02 08:44:05 +01:00
Chris Palmer
afc50ffe5d Removed trailing comma in let() for compatibility with last release. 2024-10-02 08:41:41 +01:00
Chris Palmer
8951b8b60e Merge branch 'jijamik-patch-1' 2024-09-30 12:42:03 +01:00
Chris Palmer
c33d954db6 Updated changelog. 2024-09-30 12:41:14 +01:00
Chris Palmer
8fb7ec0213 Updated images. 2024-09-30 12:39:45 +01:00
Chris Palmer
402fb83690 Merge branch 'patch-1' of https://github.com/jijamik/NopSCADlib into jijamik-patch-1 2024-09-30 02:21:16 +01:00
Chris Palmer
eb0ba21622 Updated changelog. 2024-09-30 01:59:54 +01:00
Chris Palmer
e4b1b686ff Added rd_cm_choke(), rd_coil() and spiral_wrap().
Added 10mm ceramic disc capacitors.
2024-09-30 01:58:04 +01:00
jijamik
f6a371769d Corrected HGH20CA carriage_pitch_x value. 2024-09-25 17:17:24 +02:00
Chris Palmer
6eba75a41d Updated changelog. 2024-09-13 18:25:16 +01:00
Chris Palmer
c484ac2e8d Updated libtest image with new D-connector. 2024-09-13 18:23:45 +01:00
Chris Palmer
f12ac7b569 Updated changelog. 2024-09-13 17:03:40 +01:00
146 changed files with 245866 additions and 59614 deletions

1
.gitignore vendored
View File

@@ -12,3 +12,4 @@ times.txt
*_diff.png
*.echo
cmd_times.txt
*.gco

View File

@@ -3,6 +3,248 @@
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
#### [v21.41.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.41.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.41.0...v21.41.1 "diff with v21.41.0")
* 2025-08-11 [`e4f6227`](https://github.com/nophead/NopSCADlib/commit/e4f6227e9acb7b76a560d1d92a90b3cb91113083 "show commit") [C.P.](# "Chris Palmer") Fixed include path in gridfinity test file.
### [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
* Some versions of OpenSCAD (like the latest official release `2021.01` get
confused if positional parameters follow named parameters. So let's use
named parameters after the first named one was used.
### [v21.37.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.37.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.36.0...v21.37.0 "diff with v21.36.0")
* 2025-04-15 [`edc7e17`](https://github.com/nophead/NopSCADlib/commit/edc7e174370ac8dcd6d4a78b31640347ab266f60 "show commit") [C.P.](# "Chris Palmer") Included `pcbs.scad` in `displays.scad`.
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
* 2025-04-11 [`1692fcc`](https://github.com/nophead/NopSCADlib/commit/1692fcc8116c9a0926231a95d0207a0085c814c5 "show commit") [P.](# "pcremades") Added `1/4"` square trimpot to `pcb.scad`
### [v21.36.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.36.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.35.6...v21.36.0 "diff with v21.35.6")
* 2025-04-09 [`33ac382`](https://github.com/nophead/NopSCADlib/commit/33ac3820b0df87df05d7c2dbb3d553e2aafa6828 "show commit") [C.P.](# "Chris Palmer") Added `pose_stl()` module because `pose()` only works for assembly views.
#### [v21.35.6](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.6 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.5...v21.35.6 "diff with v21.35.5")
* 2025-03-30 [`5d0eda8`](https://github.com/nophead/NopSCADlib/commit/5d0eda87e44a70fdbed51407a43555a637e064f9 "show commit") [D.T.](# "Daniel Trnka") `barrel_jack:` added cutout
#### [v21.35.5](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.5 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.4...v21.35.5 "diff with v21.35.4")
* 2025-04-01 [`3715585`](https://github.com/nophead/NopSCADlib/commit/3715585002ba56681103103faddd043b1553d095 "show commit") [C.P.](# "Chris Palmer") Made `pose()` work on STL renders to match the documentation.
#### [v21.35.4](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.4 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.3...v21.35.4 "diff with v21.35.3")
* 2025-03-23 [`fdbe0c7`](https://github.com/nophead/NopSCADlib/commit/fdbe0c7a9eba96823683b8e1161bc160bd63231e "show commit") [J.R.](# "Jeroen Roos") Change variable names that start with a digit
* Change names of variables from `2a` and `2c` to `ax2` (a times 2) and
`cx2`, because variable names starting with a digit are deprecated in
OpenSCAD.
#### [v21.35.3](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.3 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.2...v21.35.3 "diff with v21.35.2")
* 2025-03-27 [`9f9aa67`](https://github.com/nophead/NopSCADlib/commit/9f9aa6723eff9b7439e17758406e9f8e409828ee "show commit") [C.P.](# "Chris Palmer") Third attempt to fix dimension image.
#### [v21.35.2](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.2 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.1...v21.35.2 "diff with v21.35.1")
* 2025-03-27 [`6b6704b`](https://github.com/nophead/NopSCADlib/commit/6b6704b823291119697bf4993eddb3f2e6873875 "show commit") [C.P.](# "Chris Palmer") Second attempt to fix dimension image.
#### [v21.35.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.0...v21.35.1 "diff with v21.35.0")
* 2025-03-27 [`117fb62`](https://github.com/nophead/NopSCADlib/commit/117fb626e7023ca92339947a0f84a8aee5c6429e "show commit") [C.P.](# "Chris Palmer") Fixed dimension example image address.
### [v21.35.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.34.0...v21.35.0 "diff with v21.34.0")
* 2025-03-27 [`6dc8204`](https://github.com/nophead/NopSCADlib/commit/6dc82045fffeca383381724abb6d70d7025b2ae5 "show commit") [C.P.](# "Chris Palmer") Shortened the module comments by factoring out the parameter descriptions.
Added the nut example picture.
Fixed nut picture placement.
Updated images and readme.
* 2025-03-22 [`c50f95a`](https://github.com/nophead/NopSCADlib/commit/c50f95a203ead9070407fbae7d1247a00938b255 "show commit") [A.V.](# "Alex Verschoot") added some documentation to the nut
* 2025-03-22 [`49bd6e0`](https://github.com/nophead/NopSCADlib/commit/49bd6e0a04885cf5cad7655aee038e16dc0a7e15 "show commit") [A.V.](# "Alex Verschoot") added negative offsets to test
* 2025-03-22 [`921843c`](https://github.com/nophead/NopSCADlib/commit/921843cc09e7ae2953090c30e7d5b9c644e3b966 "show commit") [A.V.](# "Alex Verschoot") made negative offset work as expected (go to the opposite side, and use min instead of max on coordinates)
* 2025-03-19 [`c17cc13`](https://github.com/nophead/NopSCADlib/commit/c17cc1321bcd06af439519435734f6e0eb8f5d43 "show commit") [A.V.](# "Alex Verschoot") Changed the module comments style
* 2025-03-16 [`9862b3c`](https://github.com/nophead/NopSCADlib/commit/9862b3c3a347fac5bb355b1d62a02bdc0970221b "show commit") [A.V.](# "Alex Verschoot") typos
* 2025-03-16 [`e87e19a`](https://github.com/nophead/NopSCADlib/commit/e87e19aa182acee64e3d47c282c81b7ef495bf81 "show commit") [A.V.](# "Alex Verschoot") removed `center` from experiment
* 2025-03-16 [`4f68935`](https://github.com/nophead/NopSCADlib/commit/4f68935b5b56b7405eb6c1e0fae5845e8f800489 "show commit") [A.V.](# "Alex Verschoot") some cleanup
* 2025-03-15 [`8992cce`](https://github.com/nophead/NopSCADlib/commit/8992cce7a62d2fec956aae64236ba19dc340603f "show commit") [A.V.](# "Alex Verschoot") added argument for text size, and improve auto size
* 2025-03-15 [`106666e`](https://github.com/nophead/NopSCADlib/commit/106666ec493f6b088ee398b276e8734d0790a451 "show commit") [A.V.](# "Alex Verschoot") simplified the math to use rotates instead, added examples, and allowed the user to choose witch plane the x,y and z dimensions are in
* 2025-03-13 [`f731f0f`](https://github.com/nophead/NopSCADlib/commit/f731f0fe98a3a3d975c34cd85ac4f618c2f1bf6b "show commit") [A.V.](# "Alex Verschoot") added a function to rotate around the dim axis
* 2025-03-13 [`3a62198`](https://github.com/nophead/NopSCADlib/commit/3a62198183b6a1dce74479ae44e00b4d5e690431 "show commit") [A.V.](# "Alex Verschoot") replaced the new math functions with rotate and transform
* 2025-03-07 [`0123885`](https://github.com/nophead/NopSCADlib/commit/012388571185c674293ba17de39e0db59a775ff4 "show commit") [A.V.](# "Alex Verschoot") Improved text alligment
* 2025-03-02 [`b166ec4`](https://github.com/nophead/NopSCADlib/commit/b166ec47dd7e34e6798c1287d0ce8612a84e9be1 "show commit") [A.V.](# "Alex Verschoot") Remove old commented code from `dimension.scad`
* 2025-03-02 [`6467de5`](https://github.com/nophead/NopSCADlib/commit/6467de5facdc2a5b6ccdbdbe32f703ba3faa70f4 "show commit") [A.V.](# "Alex Verschoot") Update `maths.scad`
* 2025-03-02 [`dc683ed`](https://github.com/nophead/NopSCADlib/commit/dc683ed701b016a1c79800db2ed41aed9cf8cac6 "show commit") [A.V.](# "Alex Verschoot") added dimensions
### [v21.34.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.34.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.33.0...v21.34.0 "diff with v21.33.0")
* 2025-02-22 [`8623572`](https://github.com/nophead/NopSCADlib/commit/862357279a98c9511e2db166585065c660eb331d "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
* 2025-02-16 [`0b8ad93`](https://github.com/nophead/NopSCADlib/commit/0b8ad93dc5c1ed89c6525e846c02f756bfbe9b2b "show commit") [A.V.](# "Alex Verschoot") made the test cases work with the motor in the back
* 2025-02-16 [`3889040`](https://github.com/nophead/NopSCADlib/commit/38890400ac03c64635674412e621236ab28f0314 "show commit") [A.V.](# "Alex Verschoot") added new test cases for motor in the back
* 2025-02-15 [`9974c03`](https://github.com/nophead/NopSCADlib/commit/9974c03fc9c1ca0f67ce27fa5ea5f69c94d416ba "show commit") [A.V.](# "Alex Verschoot") improved the comments
* 2025-02-15 [`0208965`](https://github.com/nophead/NopSCADlib/commit/0208965684441bb2022fe2b513aa8ee28ce22f41 "show commit") [A.V.](# "Alex Verschoot") added an option to emplace the motor in the back
### [v21.33.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.33.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.32.1...v21.33.0 "diff with v21.32.1")
* 2025-01-22 [`8458e43`](https://github.com/nophead/NopSCADlib/commit/8458e432fcb472c0b2f7c880f9c06ea7d4f7511f "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
* 2025-01-01 [`e11bb72`](https://github.com/nophead/NopSCADlib/commit/e11bb72814010692e22f0cbe891c77fac0bcebfe "show commit") [L.](# "loekwous") Added Black pill pcb
* 2025-01-21 [`0154b2a`](https://github.com/nophead/NopSCADlib/commit/0154b2a32ce6cd9fd0a5e8cd69e1b26f0358f816 "show commit") [C.P.](# "Chris Palmer") Added Sparkfun `9DOF_stick` PCB.
#### [v21.32.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.32.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.32.0...v21.32.1 "diff with v21.32.0")
* 2025-01-21 [`0b80218`](https://github.com/nophead/NopSCADlib/commit/0b802187bb56726e84128df9ccb46c9a830e7dbc "show commit") [C.P.](# "Chris Palmer") Corrected the chip number on `ZC_A0591` pcb.
* 2025-01-21 [`923c3b5`](https://github.com/nophead/NopSCADlib/commit/923c3b5c573cde6f9bc4611e6bf0e5cc2922443e "show commit") [C.P.](# "Chris Palmer") Avoid making empty folders for dxfs, stls or png if there are no parts of that type.
### [v21.32.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.32.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.31.0...v21.32.0 "diff with v21.31.0")
* 2024-10-20 [`4d89117`](https://github.com/nophead/NopSCADlib/commit/4d8911718c54fdee5054d934c4aeeee34386d7f9 "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
* 2024-10-17 [`cb57b25`](https://github.com/nophead/NopSCADlib/commit/cb57b25b0bbe23b5f5a7f5c910dbdd3cf53530dd "show commit") [F.R.](# "Fran<61>ois Revol") Add 10x15 micro rocker switches
* Spades are not exact but close enough.
### [v21.31.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.31.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.30.0...v21.31.0 "diff with v21.30.0")
* 2024-10-17 [`066242a`](https://github.com/nophead/NopSCADlib/commit/066242af588446037fc69606388ccc65d9884ad6 "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
* 2024-10-17 [`4b3468f`](https://github.com/nophead/NopSCADlib/commit/4b3468f78d998fbd2e849d10bdc63dd3aeadc72a "show commit") [C.P.](# "Chris Palmer") Fixed LED bezels to cope with square LEDs.
* 2024-10-17 [`001ea2a`](https://github.com/nophead/NopSCADlib/commit/001ea2a174dbc4395636fb325628a53874e59943 "show commit") [C.P.](# "Chris Palmer") Fixed LED bezel test.
* 2024-10-17 [`8e9d2dd`](https://github.com/nophead/NopSCADlib/commit/8e9d2dd367015403aa542b16fa384d08856e8401 "show commit") [C.P.](# "Chris Palmer") Fixed LED test.
* 2024-10-17 [`f4a7065`](https://github.com/nophead/NopSCADlib/commit/f4a7065e1f1198add4e50754343fd0d97954e239 "show commit") [F.R.](# "Fran<61>ois Revol") Add rectangular LEDs
* As per `https://www.futurlec.com/LED/Red_2x5mm_LED.shtml`
### [v21.30.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.30.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.29.2...v21.30.0 "diff with v21.29.2")
* 2024-10-10 [`7ffff8b`](https://github.com/nophead/NopSCADlib/commit/7ffff8b7b7e111400dd7e3cb8e96bc95471a8ffa "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
* 2024-10-10 [`e001cc4`](https://github.com/nophead/NopSCADlib/commit/e001cc46a34206801c7e1a474634b9b1f83dfc9a "show commit") [C.P.](# "Chris Palmer") Restored Lumintop colour to white and made text black on white batteries.
* 2024-10-08 [`7b42157`](https://github.com/nophead/NopSCADlib/commit/7b421570b46136de925963321ef44cb570e868b6 "show commit") [J.G.](# "Jan Giebels") corrected c&p error
* 2024-10-08 [`49ba60f`](https://github.com/nophead/NopSCADlib/commit/49ba60f159b2c3685696fff3f1dca5a9184d2553 "show commit") [J.G.](# "Jan Giebels") added L4680, L32700, L16340 `Li-Ion/LiFePo4` batteries
#### [v21.29.2](https://github.com/nophead/NopSCADlib/releases/tag/v21.29.2 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.29.1...v21.29.2 "diff with v21.29.1")
* 2024-10-07 [`9e45dba`](https://github.com/nophead/NopSCADlib/commit/9e45dbad04bb4752b9b3aceaa88ee71bb975d749 "show commit") [C.P.](# "Chris Palmer") Fixed incorrect parameters passed to `tube()` in `ht_pipe()`.
Fixed `lib.scad` to include `ht_pipes.scad` instead of using it.
#### [v21.29.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.29.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.29.0...v21.29.1 "diff with v21.29.0")
* 2024-10-07 [`f65fe59`](https://github.com/nophead/NopSCADlib/commit/f65fe598318d349a5a8764e2dbbe80acfdc0be2e "show commit") [C.P.](# "Chris Palmer") Restored 30mm tube section on the bottom of the pipe fitting.
### [v21.29.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.29.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.28.2...v21.29.0 "diff with v21.28.2")
* 2024-10-06 [`932c68a`](https://github.com/nophead/NopSCADlib/commit/932c68a2c01307fd22946b17f9419894f2de2e9f "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
Pipes are now made with tube instead of differencing cylinders.
`HTpipeFitting()` now uses `rotate_extrude` and corrected internal shape.
The seal ring is now tube diameter + 13.
* 2024-10-06 [`78e3360`](https://github.com/nophead/NopSCADlib/commit/78e3360900f61f30d5df7d53084a7e752ecd836a "show commit") [J.G.](# "Jan Giebels") changed naming of `ht_pipes` test script
* 2024-10-06 [`178f67f`](https://github.com/nophead/NopSCADlib/commit/178f67f815dca6edc65651c0b9cfb9d670c349ae "show commit") [J.G.](# "Jan Giebels") added more pipes and some cleanup
* 2024-10-06 [`af1b057`](https://github.com/nophead/NopSCADlib/commit/af1b057f597f75532b17f042e7711337731aa0c3 "show commit") [J.G.](# "Jan Giebels") added info and description
* 2024-10-06 [`195917a`](https://github.com/nophead/NopSCADlib/commit/195917a8790926515a6fffb2a02d7154855de568 "show commit") [J.G.](# "Jan Giebels") added HT pipes to lib
* 2024-10-06 [`9ed6aab`](https://github.com/nophead/NopSCADlib/commit/9ed6aab6c8cfd1a647f5eae2eac8d74832328065 "show commit") [J.G.](# "Jan Giebels") added test script and some more HT pipes
* 2024-10-05 [`c61386c`](https://github.com/nophead/NopSCADlib/commit/c61386caf937840e9a07e348b3ad96af71820dd2 "show commit") [J.G.](# "Jan Giebels") added HT waterpipes
* 2024-10-02 [`549dbc9`](https://github.com/nophead/NopSCADlib/commit/549dbc9380f39f8521554963f2051c3f05f5495f "show commit") [G.L.](# "Greg Land") Relative paths for vitamin `rod_end` includes
#### [v21.28.2](https://github.com/nophead/NopSCADlib/releases/tag/v21.28.2 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.28.1...v21.28.2 "diff with v21.28.1")
* 2024-10-02 [`afc50ff`](https://github.com/nophead/NopSCADlib/commit/afc50ffe5d01ee586b55630e0d34e44720f6b68a "show commit") [C.P.](# "Chris Palmer") Removed trailing comma in `let()` for compatibility with last release.
#### [v21.28.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.28.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.28.0...v21.28.1 "diff with v21.28.0")
* 2024-09-30 [`8fb7ec0`](https://github.com/nophead/NopSCADlib/commit/8fb7ec02138f30c5f4b2a72c723ea01d753aeb61 "show commit") [C.P.](# "Chris Palmer") Updated images.
* 2024-09-25 [`f6a3717`](https://github.com/nophead/NopSCADlib/commit/f6a371769d2850037dc15c94366d14c126efe4ba "show commit") [J.](# "jijamik") Corrected HGH20CA `carriage_pitch_x` value.
### [v21.28.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.28.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.27.1...v21.28.0 "diff with v21.27.1")
* 2024-09-30 [`e4b1b68`](https://github.com/nophead/NopSCADlib/commit/e4b1b686ff12a415c6109f311c6c36104d8a7b0c "show commit") [C.P.](# "Chris Palmer") Added `rd_cm_choke(),` `rd_coil()` and `spiral_wrap()`.
Added 10mm ceramic disc capacitors.
#### [v21.27.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.27.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.27.0...v21.27.1 "diff with v21.27.0")
* 2024-09-13 [`c484ac2`](https://github.com/nophead/NopSCADlib/commit/c484ac2e8dbc8e9f9cb5051ce963250839a2705d "show commit") [C.P.](# "Chris Palmer") Updated libtest image with new D-connector.
### [v21.27.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.27.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.26.0...v21.27.0 "diff with v21.26.0")
* 2024-09-13 [`6da8452`](https://github.com/nophead/NopSCADlib/commit/6da845215bd2a4c3b7dc8a022579947cef27b8b8 "show commit") [C.P.](# "Chris Palmer") Updated readme.
* 2024-09-10 [`7fe5aaa`](https://github.com/nophead/NopSCADlib/commit/7fe5aaac22283c453b2c2e5a2239b65ddd4320c1 "show commit") [D.T.](# "Daniel Trnka") Added DCONN37 connector
### [v21.26.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.26.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.25.0...v21.26.0 "diff with v21.25.0")
* 2024-09-02 [`4f073f9`](https://github.com/nophead/NopSCADlib/commit/4f073f97e815e5c0b469a07d20526f7e2b88d79d "show commit") [C.P.](# "Chris Palmer") Added `rod_ends.scad` to `lib.scad` and `lib_test.scad`.
Fixed `rod_end` colours.

BIN
docs/sliding_t_nut.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 KiB

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 KiB

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 KiB

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 217 KiB

View File

@@ -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": {}

View File

@@ -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) |
|---|---|
| ![enviro_plus_case_base.stl](stls/enviro_plus_case_base.png) | ![fan_duct.stl](stls/fan_duct.png)
@@ -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) |
|---|---|---|
| ![bulkhead.stl](stls/bulkhead.png) | ![enviro_plus_case.stl](stls/enviro_plus_case.png) | ![foot.stl](stls/foot.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

View File

@@ -0,0 +1,49 @@
[
{
"name": "main_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {},
"vitamins": {},
"printed": {
"lathe_tool_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"MT2_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"chuck_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"chuck_jaw_bin.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"1x1_bin.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"123_block_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"faceplate_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
}
},
"routed": {}
}
]

View File

@@ -0,0 +1,15 @@
M
a
i
n
Printed:
1| 1 123_block_stand.stl
1| 1 1x1_bin.stl
1| 1 MT2_stand.stl
1| 1 chuck_jaw_bin.stl
1| 1 chuck_stand.stl
1| 1 faceplate_stand.stl
1| 1 lathe_tool_stand.stl
Assemblies:
1 main_assembly

View File

@@ -0,0 +1,9 @@
main_assembly:
Printed:
1 123_block_stand.stl
1 1x1_bin.stl
1 MT2_stand.stl
1 chuck_jaw_bin.stl
1 chuck_stand.stl
1 faceplate_stand.stl
1 lathe_tool_stand.stl

View File

@@ -0,0 +1,64 @@
<a name="TOP"></a>
# Gridfinity
Gridfinity examples
![Main Assembly](assemblies/main_assembled.png)
<span></span>
---
## Table of Contents
1. [Parts list](#Parts_list)
1. [Main Assembly](#main_assembly)
<span></span>
[Top](#TOP)
---
<a name="Parts_list"></a>
## Parts list
| <span style="writing-mode: vertical-rl; text-orientation: mixed;">Main</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">TOTALS</span> | |
|---:|---:|:---|
| | | **3D printed parts** |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;123_block_stand.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1x1_bin.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;MT2_stand.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;chuck_jaw_bin.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;chuck_stand.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;faceplate_stand.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;lathe_tool_stand.stl |
| &nbsp;&nbsp;7&nbsp; | &nbsp;&nbsp;7&nbsp; | &nbsp;&nbsp;Total 3D printed parts count |
<span></span>
[Top](#TOP)
---
<a name="main_assembly"></a>
## Main Assembly
### 3D Printed parts
| 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) |
|---|---|---|
| ![123_block_stand.stl](stls/123_block_stand.png) | ![1x1_bin.stl](stls/1x1_bin.png) | ![MT2_stand.stl](stls/MT2_stand.png)
| 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) |
|---|---|---|
| ![chuck_jaw_bin.stl](stls/chuck_jaw_bin.png) | ![chuck_stand.stl](stls/chuck_stand.png) | ![faceplate_stand.stl](stls/faceplate_stand.png)
| 1 x [lathe_tool_stand.stl](stls/lathe_tool_stand.stl) |
|---|
| ![lathe_tool_stand.stl](stls/lathe_tool_stand.png)
### Assembly instructions
![main_assembly](assemblies/main_assembly.png)
Show all the Gridfinity parts
![main_assembled](assemblies/main_assembled.png)
<span></span>
[Top](#TOP)

View File

@@ -0,0 +1,58 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
use <NopSCADlib/utils/maths.scad>
use <NopSCADlib/utils/chamfer.scad>
tool_size = 8;
box = gridfinity_bin("123_block_stand", 2, 2, 5);
123_block = inch([3, 1, 2]);
102040_block = [20, 10, 40];
blocks = [123_block, 123_block, 102040_block];
box_mm = gridfinity_bin_size_mm(box);
wall = 1.75;
bwall = 1;
clearance = 0.5;
gap = (box_mm.y - sumv([for(b = blocks) b.y])) / (len(blocks) + 1);
module holes() {
let($b = blocks[0])
translate([0, box_mm.y / 2 - gap - $b.y / 2])
children();
let($b = blocks[1])
translate([0, box_mm.y / 2 - gap - blocks[0].y - gap - $b.y / 2])
children();
for(side = [-1, 1])
let($b = blocks[2])
translate([side * (blocks[2].x + 2 * gap) / 2,
box_mm.y / 2 - gap - blocks[0].y - gap - blocks[1].y - gap - blocks[2].y / 2 ])
children();
}
module 123_block_stand_stl()
gridfinity_bin(box) union() {
holes() {
translate_z(gridfinity_base_z() + bwall + $b.z / 2 + eps)
cube([$b.x + clearance, $b.y + clearance, $b.z + 2 * eps], true);
chamfer = 1;
translate_z(box_mm.z)
chamfer_hole(chamfer)
square([$b.x + clearance, $b.y + clearance], true);
}
translate_z(gridfinity_base_z() + bwall)
difference() {
rounded_rectangle([box_mm.x - 2 * wall, box_mm.y - 2 * wall, box_mm.z - gridfinity_base_z() - bwall - wall], gridfinity_corner_r() - wall);
holes()
rounded_rectangle([$b.x + clearance + 2 * wall, $b.y + clearance + 2 * wall, 100], wall, center = true);
}
}

View File

@@ -0,0 +1,9 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
box = gridfinity_bin("1x1_bin", 1, 1, 5);
module 1x1_bin_stl()
gridfinity_bin(box)
gridfinity_partition(box, 1, 1);

View File

@@ -0,0 +1,80 @@
//
// Stand for MT2 taper lathe tools
//
include <NopSCADlib/core.scad>
use <NopSCADlib/utils/maths.scad>
use <NopSCADlib/utils/chamfer.scad>
use <NopSCADlib/printed/gridfinity.scad>
box = gridfinity_bin("MT2_stand", 4, 2, 8);
box_mm = gridfinity_bin_size_mm(box);
wall = 1.75;
bwall = 1;
diameters1 = [43, 47, 64];
d2 = 20;
clearance = 1;
clearance2 = 4;
MT2_base = 5; // smaller diameters
MT2_D1 = 15; // diameter at the bottom of the taper at base height
MT2_half_angle = 1.4302777777777778;
hole_depth = box_mm.z - gridfinity_base_z() - bwall;
MT2_r1 = MT2_D1 / 2;
MT2_r2 = MT2_r1 + (hole_depth - MT2_base) * tan(MT2_half_angle);
gap = (box_mm.x - sumv(diameters1) - 2 * clearance) / (len(diameters1) - 1);
gap2 = 18;
module MT2_socket() {
clearance = 0.3;
translate_z(-hole_depth) {
poly_cylinder(MT2_r1 + clearance / 2, MT2_base + eps);
translate_z(MT2_base)
hull() {
poly_cylinder(MT2_r1 + clearance / 2, eps);
translate_z(hole_depth - MT2_base)
poly_cylinder(MT2_r2 + clearance / 2, eps);
}
}
chamfer_hole(1)
poly_circle(MT2_r2 + clearance / 2);
}
function pos(i) = [clearance + sumv(slice(diameters1, 0, i)) + i * gap + diameters1[i] / 2 - box_mm.x / 2, box_mm.y / 2 - clearance - diameters1[i] / 2, box_mm.z];
function pos2(i) = [clearance2 + i * gap2 + (i + 0.5) * d2 - box_mm.x / 2, -box_mm.y / 2 + clearance2 + d2 / 2, box_mm.z];
module holes()
for(i = [0 : len(diameters1) - 1]) {
translate(pos(i))
children();
translate(pos2(i))
children();
}
module MT2_stand_stl()
gridfinity_bin(box) union() {
holes()
MT2_socket();
translate_z(gridfinity_base_z() + bwall)
difference() {
rounded_rectangle([box_mm.x - 2 * wall, box_mm.y - 2 * wall, box_mm.z - gridfinity_base_z() - bwall - wall], gridfinity_corner_r() - wall);
holes()
cylinder(r = MT2_r2 + wall, h = 200, center = true);
for(x = [-box_mm.x / 2 : 20 : box_mm.x /2])
translate([x, 0])
cube([squeezed_wall, 200, 200], center = true);
}
}

View File

@@ -0,0 +1,36 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/utils/chamfer.scad>
use <NopSCADlib/printed/gridfinity.scad>
box = gridfinity_bin("chuck_jaw_bin", 1, 1, 5);
box_mm = gridfinity_bin_size_mm(box);
bwall = 1;
length = 37;
width = 34;
z_bot = gridfinity_base_z() + bwall;
depth = box_mm.z - z_bot;
module chuck_jaw_bin_stl()
gridfinity_bin(box)
translate_z(box_mm.z) {
cube([length, width, depth * 2], true);
chamfer = 1;
chamfer_hole(chamfer)
square([length, width], true);
*hull() {
rounded_rectangle([length + 2 * chamfer, width + 2 * chamfer, eps], chamfer);
translate_z(-chamfer + eps / 2)
cube([length, width, eps], true);
}
}

View File

@@ -0,0 +1,52 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
use <NopSCADlib/utils/chamfer.scad>
box = gridfinity_bin("chuck_stand", 2, 2, 5);
box_mm = gridfinity_bin_size_mm(box);
bwall = 1;
chuck_d = 80;
ring_od = 50;
ring_id = 40;
ring_h = 4;
hole_pitch = (60 + 72.5) / 2;
hole_d = (72.5 - 60) / 2;
hole_depth = 15;
clearance = 0.5;
chamfer = 1;
z_bot = gridfinity_base_z() + bwall;
module chuck_stand_stl()
gridfinity_bin(box) union() {
translate_z(z_bot) {
for(a = [0 : 30 : 330])
rotate(a)
translate([0, hole_pitch / 2]) {
poly_cylinder(hole_d / 2 + clearance / 2, h = 100);
translate_z(hole_depth)
chamfer_hole(chamfer)
poly_circle(hole_d / 2 + clearance / 2);
}
translate_z(hole_depth) {
poly_cylinder(r = chuck_d / 2 + clearance / 2, h = 100);
poly_tube(or = ring_od / 2 + clearance, ir = ring_id / 2 - clearance, h = 2 * ring_h, center = true);
chamfer_hole(chamfer)
poly_circle(ring_od / 2 + clearance);
}
}
translate_z(box_mm.z)
chamfer_hole(chamfer)
poly_circle(r = chuck_d / 2 + clearance / 2);
}

View File

@@ -0,0 +1,56 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
use <NopSCADlib/utils/maths.scad>
use <NopSCADlib/utils/chamfer.scad>
tool_size = 8;
box = gridfinity_bin("faceplate_stand", 3, 1, 5);
faceplate = [112, 16, 17];
sanding_disc = [69, 6.7, 14.5];
discs = [faceplate, sanding_disc];
box_mm = gridfinity_bin_size_mm(box);
wall = 1.8;
bwall = 1;
clearance = 0.5;
gap = (box_mm.y - sumv([for(b = discs) b.z])) / (len(discs) + 1);
module holes() {
for(i = [0 : len(discs) - 1]) let($d = discs[i])
translate([0, box_mm.y / 2 - gap - (i ? discs[0].z + gap : 0) - $d.z / 2])
children();
}
module faceplate_stand_stl()
gridfinity_bin(box) union() {
holes() {
$fa = 1;
r = $d.x / 2 + clearance / 2;
z = gridfinity_base_z() + bwall + r;
translate_z(z)
rotate([90, 0, 0])
teardrop_plus(r = r, h = $d.y + clearance, center = true);
chamfer = 1;
h = z - box_mm.z + wall;
translate_z(box_mm.z)
chamfer_hole(chamfer)
square([2 * sqrt(sqr(r) - sqr(h)), $d.y + clearance], true);
}
difference() {
translate_z(gridfinity_base_z() + bwall)
rounded_rectangle([box_mm.x - 2 * wall, box_mm.y - 2 * wall, box_mm.z - gridfinity_base_z() - bwall - wall], gridfinity_corner_r() - wall);
holes() {
r = $d.x / 2 + clearance / 2;
translate_z(gridfinity_base_z() + bwall + r)
rotate([90, 0, 0])
teardrop_plus(r = r + wall, h = $d.y + clearance + 2 * wall);
}
}
}

View File

@@ -0,0 +1,45 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
use <NopSCADlib/utils/chamfer.scad>
tool_size = 8;
rows = 2;
cols = 5;
spacing = 8;
hole = tool_size + 0.2;
tool_pitch = hole + spacing;
box = gridfinity_bin("lathe_tool_stand", 2, 1, 5);
module holes()
for(x = [0 : cols - 1], y = [0 : rows - 1])
translate([x - (cols -1) / 2, y - (rows - 1) / 2] * tool_pitch)
children();
box_mm = gridfinity_bin_size_mm(box);
wall = 1.75;
bwall = 1;
module lathe_tool_stand_stl()
gridfinity_bin(box) union() {
translate_z(box_mm.z)
holes() {
cube([hole, hole, 2 * (box_mm.z - gridfinity_base_z() - bwall)], true);
chamfer = 1;
chamfer_hole(chamfer)
square([hole, hole], true);
}
translate_z(gridfinity_base_z() + bwall)
difference() {
rounded_rectangle([box_mm.x - 2 * wall, box_mm.y - 2 * wall, box_mm.z - gridfinity_base_z() - bwall - wall], gridfinity_corner_r() - wall);
holes()
rounded_rectangle([hole + 2 * wall, hole + 2 * wall, 100], wall, center = true);
}
}

View File

@@ -0,0 +1,42 @@
//
//! Gridfinity examples
//
include <NopSCADlib/core.scad>
use <lathe_tool_stand.scad>
use <MT2_stand.scad>
use <chuck_stand.scad>
use <chuck_jaw_bin.scad>
use <1x1_bin.scad>
use <123_block_stand.scad>
use <faceplate_stand.scad>
//! Show all the Gridfinity parts
module main_assembly()
assembly("main") {
$manifold = true;
lathe_tool_stand_stl();
translate([42, 63])
MT2_stand_stl();
translate([42 * 2, -42 / 2])
chuck_stand_stl();
translate([-21, -42])
chuck_jaw_bin_stl();
translate([21, -42])
1x1_bin_stl();
translate([42 * 4, -42 / 2])
123_block_stand_stl();
translate([42 * 6.5, 0])
faceplate_stand_stl();
}
main_assembly();

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -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": {}

View File

@@ -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) |
|---|
| ![socket_box.stl](stls/socket_box.png)
@@ -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) |
|---|
| ![foot.stl](stls/foot.png)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -23,7 +23,7 @@
include <core.scad>
include <vitamins/psus.scad>
include <vitamins/pcbs.scad>
include <vitamins/displays.scad> // Includes pcbs.scad
include <vitamins/antennas.scad>
include <vitamins/batteries.scad>
@@ -34,13 +34,13 @@ include <vitamins/box_sections.scad>
include <vitamins/bulldogs.scad>
include <vitamins/cameras.scad>
include <vitamins/components.scad>
include <vitamins/displays.scad>
include <vitamins/extrusions.scad>
include <vitamins/extrusion_brackets.scad>
include <vitamins/fastons.scad>
include <vitamins/gear_motors.scad>
include <vitamins/geared_steppers.scad>
include <vitamins/hot_ends.scad>
include <vitamins/ht_pipes.scad>
include <vitamins/inserts.scad>
include <vitamins/ldrs.scad>
include <vitamins/leadnuts.scad>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1007 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@@ -25,7 +25,7 @@
//! STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly
//! instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md).
//!
//! A simple example project can be found [here](examples/MainsBreakOutBox/readme.md).
//! A simple example project can be found [here](examples/MainsBreakOutBox/readme.md) and more complex examples [here](examples).
//!
//! For more examples of what it can make see the [gallery](gallery/readme.md).
//!
@@ -68,6 +68,7 @@ use <tests/fastons.scad>
use <tests/fuseholder.scad>
use <tests/gear_motors.scad>
use <tests/geared_steppers.scad>
use <tests/gridfinity.scad>
use <tests/hot_ends.scad>
use <tests/IECs.scad>
use <tests/inserts.scad>
@@ -157,7 +158,7 @@ cable_grommets_y = 0;
translate([x5, cable_grommets_y])
cable_grommets();
translate([x5, cable_grommets_y + 30])
translate([x5, cable_grommets_y + 45])
led_bezels();
translate([x5 + 50, cable_grommets_y])
@@ -204,7 +205,11 @@ pocket_y = handle_y + 70;
translate([x5 + 65, pocket_y])
pocket_handles();
hinge_y = pocket_y + 100;
gridfinity_y = pocket_y + 100;
translate([950, gridfinity_y])
gridfinity_test();
hinge_y = gridfinity_y + 100;
translate([x5, hinge_y]) {
door_hinges()
door_latches();
@@ -221,7 +226,6 @@ box_y = pbox_y + 150;
translate([950, box_y])
box_test();
inserts_y = 0;
nuts_y = inserts_y + 20;
washers_y = nuts_y + 160;
@@ -366,9 +370,12 @@ components_y = toggles_y + 40;
translate([x2, leds_y])
leds();
translate([x2 + 35, leds_y])
translate([x2 + 55, leds_y])
ldrs();
translate([x2 + 87, leds_y])
fuseholders();
translate([x2 + 8, carriers_y])
carriers();
@@ -378,9 +385,6 @@ translate([x2, magnets_y])
translate([x2 + 20, carriers_y])
led_meters();
translate([x2 + 70, leds_y])
fuseholders();
translate([x2, spades_y])
spades();
@@ -406,15 +410,17 @@ translate([x2, components_y])
components();
veroboard_y = 0;
d_connectors_y = veroboard_y + 110;
iecs_y = d_connectors_y + 80;
d_connectors_y = veroboard_y + 120;
iecs_y = d_connectors_y + 70;
modules_y = iecs_y + 60;
ssrs_y = modules_y + 80;
blowers_y = ssrs_y + 60;
hot_ends_y = blowers_y + 100;
batteries_y = hot_ends_y + 55;
hot_ends_y = blowers_y + 90;
batteries_y = hot_ends_y + 65;
panel_meters_y = batteries_y + 70;
extrusions_y = panel_meters_y + 130;
box_sections_y = extrusions_y + 70;
translate([x3, veroboard_y])
veroboard_test();
@@ -425,10 +431,10 @@ translate([x3 + 50, veroboard_y + 20])
translate([x3 + 160, ssrs_y])
pcb_mounts();
translate([x3 + 145, veroboard_y + 16])
translate([x3 + 145, veroboard_y])
cameras();
translate([x3 + 145, d_connectors_y - 10])
translate([x3 + 145, veroboard_y + 45])
camera_housings();
translate([x3, d_connectors_y])
@@ -458,7 +464,7 @@ translate([x3, ssrs_y]) {
translate([x3, blowers_y])
blowers();
translate([x3, batteries_y])
translate([x2, batteries_y])
batteries();
translate([x3 + 10, hot_ends_y])
@@ -467,9 +473,12 @@ 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])
box_sections();
translate([370, transformers_y])
transformers();
@@ -486,7 +495,6 @@ extrusion_brackets_y = rails_y + 250;
sk_brackets_y = extrusion_brackets_y + 80;
kp_pillow_blocks_y = sk_brackets_y + 60;
bearing_blocks_y = kp_pillow_blocks_y + 60;
box_sections_y = batteries_y;
BLDC_y = bearing_blocks_y + 180;
pot_y = bearing_blocks_y;
cable_strip_y = sheets_y + 30;
@@ -538,8 +546,5 @@ translate([x4, BLDC_y])
translate([x4, pot_y])
potentiometers();
translate([x2, box_sections_y])
box_sections();
translate([x6, 125])
light_strips();

104
printed/gridfinity.scad Normal file
View File

@@ -0,0 +1,104 @@
//
// NopSCADlib Copyright Chris Palmer 2024
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
//
//! Generate storage bins compatible with Zack Freedman's Gridfinity design, see <https://www.youtube.com/watch?v=ra_9zU-mnl8&t=37s>
//!
//! Based on <https://gridfinity.xyz/specification>
//!
//! More examples [here](examples/Gridfinity).
//
include <../core.scad>
use <../utils/rounded_cylinder.scad>
pitch = 42;
z_step = 7;
width = 41.5;
foot_w = 37.2;
foot_h = 1.8;
lower_chamfer = 0.8;
upper_chamfer = 2.15;
corner_r = 7.5 / 2;
foot_r = 3.2 / 2;
chamfer_r = 1.6 / 2;
function gridfinity_bin(name, grid_x, grid_y, grid_z) = [name, [grid_x, grid_y, grid_z], lower_chamfer]; //! Constructor
function gridfinity_bin_name(type) = type[0]; //! Name for the STL file
function gridfinity_bin_size(type) = type[1]; //! Size in grid units
function gridfinity_base_z() = foot_h + lower_chamfer + upper_chamfer; //! height of base
function gridfinity_corner_r() = corner_r; //! Outside corner radius
function gridfinity_bin_size_mm(type) = //! Overall size of the bin
let(s = gridfinity_bin_size(type))
[(s.x - 1) * pitch + width, (s.y - 1) * pitch + width, s.z * z_step];
module gridfinity_bin(type) { //! Create a gridfinity bin, bits to cut out are passed as a child
size = gridfinity_bin_size(type);
w1 = width - 2 * (lower_chamfer + upper_chamfer);
w2 = width - 2 * upper_chamfer;
stl(gridfinity_bin_name(type)) {
translate([-(size.x - 1) / 2 * pitch, -(size.y - 1) / 2 * pitch])
for(x = [0 : size.x - 1], y = [0 : size.y - 1])
translate([x * pitch, y * pitch]) {
hull() {
rounded_rectangle([w1, w1, eps], chamfer_r);
translate_z(lower_chamfer)
rounded_rectangle([w2, w2, foot_h + eps], foot_r);
}
hull() {
translate_z(lower_chamfer + foot_h)
rounded_rectangle([w2, w2, foot_h + eps], foot_r);
translate_z(lower_chamfer + foot_h + upper_chamfer)
rounded_rectangle([width, width, eps], corner_r);
}
}
difference() {
base_z = gridfinity_base_z();
translate_z(base_z)
rounded_rectangle([(size.x - 1) * pitch + width, (size.y - 1) * pitch + width, size.z * z_step - base_z], corner_r);
if($children)
children(0);
}
}
}
module gridfinity_partition(type, cols = 1, rows = 1, wall = 1.6, iwall = squeezed_wall, bwall = 1, corner_r = 4) { //! Passed as child to hollow out specified partitions
size = gridfinity_bin_size_mm(type);
wx = (size.x - 2 * wall - (cols - 1) * iwall) / cols;
wy = (size.y - 2 * wall - (rows - 1) * iwall) / rows;
h = size.z - gridfinity_base_z() - bwall;
for(x = [0 : cols - 1], y = [0 : rows - 1])
translate([-size.x / 2 + wall + x * (wx + iwall) + wx / 2,
-size.y / 2 + wall + y * (wy + iwall) + wy / 2,
size.z + eps])
vflip()
rounded_top_rectangle([wx, wy, h + eps], corner_r, corner_r);
}

View File

@@ -40,32 +40,72 @@ function led_bezel_hole_r(type) = //! Panel hole radius
module led_bezel(type) { //! Makes the STL for the bezel
led = led_bezel_led(type);
stl(str(led[0],"_bezel")) {
rl = led_diameter(led) / 2;
rr = led_rim_dia(led) / 2;
wall = led_bezel_wall(type);
poly_tube(or = rr + wall + led_bezel_flange(type), ir = rl, h = led_bezel_flange_t(type)); // Flange
poly_tube(or = rl + wall, ir = rl, h = led_height(led) - rl - led_rim_t(led)); // Tube up to LED flange
poly_tube(or = corrected_radius(rr) + wall, ir = rr, h = led_bezel_height(type)); // Tube beyond the flange
if(is_num(led_diameter(led))) {
rl = led_diameter(led) / 2;
rr = led_rim_dia(led) / 2;
poly_tube(or = rr + wall + led_bezel_flange(type), ir = rl, h = led_bezel_flange_t(type)); // Flange
poly_tube(or = rl + wall, ir = rl, h = led_height(led) - rl - led_rim_t(led)); // Tube up to LED flange
poly_tube(or = corrected_radius(rr) + wall, ir = rr, h = led_bezel_height(type)); // Tube beyond the flange
}
else {
linear_extrude(led_bezel_flange_t(type)) // Flange
difference() {
offset(wall + led_bezel_flange(type))
square(led_rim_dia(led), true);
square(led_diameter(led), true);
}
linear_extrude(led_height(led) - led_rim_t(led)) // Tube up to the LED flange
difference() {
offset(wall)
square(led_diameter(led), true);
square(led_diameter(led), true);
}
linear_extrude(led_bezel_height(type)) // Tube beyond the LED flange
difference() {
offset(wall)
square(led_rim_dia(led), true);
square(led_rim_dia(led), true);
}
}
}
}
module led_bezel_retainer(type) { //! Makes the STL for the retaining ring
led = led_bezel_led(type);
stl(str(led[0],"_bezel_retainer")) {
ir = led_bezel_r(type);
poly_tube(or = ir + led_bezel_wall(type), ir = ir, h = 4);
wall = led_bezel_wall(type);
if(is_num(led_diameter(led))) {
ir = led_bezel_r(type);
poly_tube(or = ir + wall, ir = ir, h = 4);
}
else
linear_extrude(4)
difference() {
offset(2 * wall)
square(led_rim_dia(led), true);
offset(wall)
square(led_rim_dia(led), true);
}
}
}
module led_bezel_assembly(type, colour = "red") {//! Led bezel with LED
led = led_bezel_led(type);
d = led_diameter(led);
assembly(str(led[0], "_", colour, "_bezel")) {
translate_z(led_bezel_flange_t(type)) {
vflip()
stl_colour(pp1_colour)
led_bezel(type);
translate_z(-led_height(led) + led_diameter(led) / 2)
translate_z(-led_height(led) + (is_num(d) ? d / 2 : 0))
explode(-20)
led(led, colour);
}

409
readme.md
View File

@@ -6,7 +6,7 @@ There are also Python scripts to generate Bills of Materials (BOMs),
STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly
instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md).
A simple example project can be found [here](examples/MainsBreakOutBox/readme.md).
A simple example project can be found [here](examples/MainsBreakOutBox/readme.md) and more complex examples [here](examples).
For more examples of what it can make see the [gallery](gallery/readme.md).
@@ -24,33 +24,33 @@ A list of changes classified as breaking, additions or fixes is maintained in [C
<tr><td> <a href = "#7_segments">7_segments</a> </td><td> <a href = "#iecs">IECs</a> </td><td> <a href = "#radials">Radials</a> </td><td> <a href = "#box">Box</a> </td><td> <a href = "#annotation">Annotation</a> </td><td> <a href = "#bom">BOM</a> </td></tr>
<tr><td> <a href = "#antennas">Antennas</a> </td><td> <a href = "#inserts">Inserts</a> </td><td> <a href = "#rails">Rails</a> </td><td> <a href = "#butt_box">Butt_box</a> </td><td> <a href = "#bezier">Bezier</a> </td><td> <a href = "#clip">Clip</a> </td></tr>
<tr><td> <a href = "#axials">Axials</a> </td><td> <a href = "#jack">Jack</a> </td><td> <a href = "#ring_terminals">Ring_terminals</a> </td><td> <a href = "#cable_clip">Cable_clip</a> </td><td> <a href = "#catenary">Catenary</a> </td><td> <a href = "#global">Global</a> </td></tr>
<tr><td> <a href = "#bldc_motors">BLDC_motors</a> </td><td> <a href = "#ldrs">LDRs</a> </td><td> <a href = "#rockers">Rockers</a> </td><td> <a href = "#cable_grommets">Cable_grommets</a> </td><td> <a href = "#core_xy">Core_xy</a> </td><td> <a href = "#polyholes">Polyholes</a> </td></tr>
<tr><td> <a href = "#ball_bearings">Ball_bearings</a> </td><td> <a href = "#led_meters">LED_meters</a> </td><td> <a href = "#rod">Rod</a> </td><td> <a href = "#camera_housing">Camera_housing</a> </td><td> <a href = "#dogbones">Dogbones</a> </td><td> <a href = "#rounded_rectangle">Rounded_rectangle</a> </td></tr>
<tr><td> <a href = "#batteries">Batteries</a> </td><td> <a href = "#leds">LEDs</a> </td><td> <a href = "#rod_ends">Rod_ends</a> </td><td> <a href = "#carriers">Carriers</a> </td><td> <a href = "#fillet">Fillet</a> </td><td> <a href = "#sphere">Sphere</a> </td></tr>
<tr><td> <a href = "#bearing_blocks">Bearing_blocks</a> </td><td> <a href = "#leadnuts">Leadnuts</a> </td><td> <a href = "#sbr_rails">SBR_rails</a> </td><td> <a href = "#corner_block">Corner_block</a> </td><td> <a href = "#gears">Gears</a> </td><td> <a href = "#teardrops">Teardrops</a> </td></tr>
<tr><td> <a href = "#belts">Belts</a> </td><td> <a href = "#light_strips">Light_strips</a> </td><td> <a href = "#sk_brackets">SK_brackets</a> </td><td> <a href = "#door_hinge">Door_hinge</a> </td><td> <a href = "#hanging_hole">Hanging_hole</a> </td><td></td></tr>
<tr><td> <a href = "#blowers">Blowers</a> </td><td> <a href = "#linear_bearings">Linear_bearings</a> </td><td> <a href = "#smds">SMDs</a> </td><td> <a href = "#door_latch">Door_latch</a> </td><td> <a href = "#horiholes">Horiholes</a> </td><td></td></tr>
<tr><td> <a href = "#box_sections">Box_sections</a> </td><td> <a href = "#magnets">Magnets</a> </td><td> <a href = "#ssrs">SSRs</a> </td><td> <a href = "#drag_chain">Drag_chain</a> </td><td> <a href = "#layout">Layout</a> </td><td></td></tr>
<tr><td> <a href = "#bulldogs">Bulldogs</a> </td><td> <a href = "#mains_sockets">Mains_sockets</a> </td><td> <a href = "#screws">Screws</a> </td><td> <a href = "#fan_guard">Fan_guard</a> </td><td> <a href = "#maths">Maths</a> </td><td></td></tr>
<tr><td> <a href = "#buttons">Buttons</a> </td><td> <a href = "#microswitches">Microswitches</a> </td><td> <a href = "#sealing_strip">Sealing_strip</a> </td><td> <a href = "#fixing_block">Fixing_block</a> </td><td> <a href = "#offset">Offset</a> </td><td></td></tr>
<tr><td> <a href = "#cable_strips">Cable_strips</a> </td><td> <a href = "#microview">Microview</a> </td><td> <a href = "#servo_motors">Servo_motors</a> </td><td> <a href = "#flat_hinge">Flat_hinge</a> </td><td> <a href = "#pcb_utils">PCB_utils</a> </td><td></td></tr>
<tr><td> <a href = "#cameras">Cameras</a> </td><td> <a href = "#modules">Modules</a> </td><td> <a href = "#shaft_couplings">Shaft_couplings</a> </td><td> <a href = "#foot">Foot</a> </td><td> <a href = "#quadrant">Quadrant</a> </td><td></td></tr>
<tr><td> <a href = "#circlips">Circlips</a> </td><td> <a href = "#nuts">Nuts</a> </td><td> <a href = "#sheets">Sheets</a> </td><td> <a href = "#handle">Handle</a> </td><td> <a href = "#round">Round</a> </td><td></td></tr>
<tr><td> <a href = "#components">Components</a> </td><td> <a href = "#o_ring">O_ring</a> </td><td> <a href = "#spades">Spades</a> </td><td> <a href = "#knob">Knob</a> </td><td> <a href = "#rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
<tr><td> <a href = "#dip">DIP</a> </td><td> <a href = "#opengrab">Opengrab</a> </td><td> <a href = "#spools">Spools</a> </td><td> <a href = "#led_bezel">LED_bezel</a> </td><td> <a href = "#rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
<tr><td> <a href = "#d_connectors">D_connectors</a> </td><td> <a href = "#pcb">PCB</a> </td><td> <a href = "#springs">Springs</a> </td><td> <a href = "#pcb_mount">PCB_mount</a> </td><td> <a href = "#rounded_triangle">Rounded_triangle</a> </td><td></td></tr>
<tr><td> <a href = "#displays">Displays</a> </td><td> <a href = "#pcbs">PCBs</a> </td><td> <a href = "#stepper_motors">Stepper_motors</a> </td><td> <a href = "#psu_shroud">PSU_shroud</a> </td><td> <a href = "#sector">Sector</a> </td><td></td></tr>
<tr><td> <a href = "#extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#psus">PSUs</a> </td><td> <a href = "#swiss_clips">Swiss_clips</a> </td><td> <a href = "#pocket_handle">Pocket_handle</a> </td><td> <a href = "#splines">Splines</a> </td><td></td></tr>
<tr><td> <a href = "#extrusions">Extrusions</a> </td><td> <a href = "#panel_meters">Panel_meters</a> </td><td> <a href = "#terminals">Terminals</a> </td><td> <a href = "#press_fit">Press_fit</a> </td><td> <a href = "#sweep">Sweep</a> </td><td></td></tr>
<tr><td> <a href = "#fans">Fans</a> </td><td> <a href = "#photo_interrupters">Photo_interrupters</a> </td><td> <a href = "#toggles">Toggles</a> </td><td> <a href = "#printed_box">Printed_box</a> </td><td> <a href = "#thread">Thread</a> </td><td></td></tr>
<tr><td> <a href = "#fastons">Fastons</a> </td><td> <a href = "#pillars">Pillars</a> </td><td> <a href = "#transformers">Transformers</a> </td><td> <a href = "#printed_pulleys">Printed_pulleys</a> </td><td> <a href = "#tube">Tube</a> </td><td></td></tr>
<tr><td> <a href = "#fuseholder">Fuseholder</a> </td><td> <a href = "#pillow_blocks">Pillow_blocks</a> </td><td> <a href = "#ttracks">Ttracks</a> </td><td> <a href = "#ribbon_clamp">Ribbon_clamp</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#gear_motors">Gear_motors</a> </td><td> <a href = "#pin_headers">Pin_headers</a> </td><td> <a href = "#tubings">Tubings</a> </td><td> <a href = "#ssr_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#geared_steppers">Geared_steppers</a> </td><td> <a href = "#potentiometers">Potentiometers</a> </td><td> <a href = "#variacs">Variacs</a> </td><td> <a href = "#screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#green_terminals">Green_terminals</a> </td><td> <a href = "#pulleys">Pulleys</a> </td><td> <a href = "#veroboard">Veroboard</a> </td><td> <a href = "#socket_box">Socket_box</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#hot_ends">Hot_ends</a> </td><td></td><td> <a href = "#washers">Washers</a> </td><td> <a href = "#strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#hygrometer">Hygrometer</a> </td><td></td><td> <a href = "#wire">Wire</a> </td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td> <a href = "#zipties">Zipties</a> </td><td></td><td></td><td></td></tr>
<tr><td> <a href = "#bldc_motors">BLDC_motors</a> </td><td> <a href = "#ldrs">LDRs</a> </td><td> <a href = "#rockers">Rockers</a> </td><td> <a href = "#cable_grommets">Cable_grommets</a> </td><td> <a href = "#chamfer">Chamfer</a> </td><td> <a href = "#polyholes">Polyholes</a> </td></tr>
<tr><td> <a href = "#ball_bearings">Ball_bearings</a> </td><td> <a href = "#led_meters">LED_meters</a> </td><td> <a href = "#rod">Rod</a> </td><td> <a href = "#camera_housing">Camera_housing</a> </td><td> <a href = "#core_xy">Core_xy</a> </td><td> <a href = "#rounded_rectangle">Rounded_rectangle</a> </td></tr>
<tr><td> <a href = "#batteries">Batteries</a> </td><td> <a href = "#leds">LEDs</a> </td><td> <a href = "#rod_ends">Rod_ends</a> </td><td> <a href = "#carriers">Carriers</a> </td><td> <a href = "#dimension">Dimension</a> </td><td> <a href = "#sphere">Sphere</a> </td></tr>
<tr><td> <a href = "#bearing_blocks">Bearing_blocks</a> </td><td> <a href = "#leadnuts">Leadnuts</a> </td><td> <a href = "#sbr_rails">SBR_rails</a> </td><td> <a href = "#corner_block">Corner_block</a> </td><td> <a href = "#dogbones">Dogbones</a> </td><td> <a href = "#teardrops">Teardrops</a> </td></tr>
<tr><td> <a href = "#belts">Belts</a> </td><td> <a href = "#light_strips">Light_strips</a> </td><td> <a href = "#sk_brackets">SK_brackets</a> </td><td> <a href = "#door_hinge">Door_hinge</a> </td><td> <a href = "#fillet">Fillet</a> </td><td></td></tr>
<tr><td> <a href = "#blowers">Blowers</a> </td><td> <a href = "#linear_bearings">Linear_bearings</a> </td><td> <a href = "#smds">SMDs</a> </td><td> <a href = "#door_latch">Door_latch</a> </td><td> <a href = "#gears">Gears</a> </td><td></td></tr>
<tr><td> <a href = "#box_sections">Box_sections</a> </td><td> <a href = "#magnets">Magnets</a> </td><td> <a href = "#ssrs">SSRs</a> </td><td> <a href = "#drag_chain">Drag_chain</a> </td><td> <a href = "#hanging_hole">Hanging_hole</a> </td><td></td></tr>
<tr><td> <a href = "#bulldogs">Bulldogs</a> </td><td> <a href = "#mains_sockets">Mains_sockets</a> </td><td> <a href = "#screws">Screws</a> </td><td> <a href = "#fan_guard">Fan_guard</a> </td><td> <a href = "#horiholes">Horiholes</a> </td><td></td></tr>
<tr><td> <a href = "#buttons">Buttons</a> </td><td> <a href = "#microswitches">Microswitches</a> </td><td> <a href = "#sealing_strip">Sealing_strip</a> </td><td> <a href = "#fixing_block">Fixing_block</a> </td><td> <a href = "#layout">Layout</a> </td><td></td></tr>
<tr><td> <a href = "#cable_strips">Cable_strips</a> </td><td> <a href = "#microview">Microview</a> </td><td> <a href = "#servo_motors">Servo_motors</a> </td><td> <a href = "#flat_hinge">Flat_hinge</a> </td><td> <a href = "#maths">Maths</a> </td><td></td></tr>
<tr><td> <a href = "#cameras">Cameras</a> </td><td> <a href = "#modules">Modules</a> </td><td> <a href = "#shaft_couplings">Shaft_couplings</a> </td><td> <a href = "#foot">Foot</a> </td><td> <a href = "#offset">Offset</a> </td><td></td></tr>
<tr><td> <a href = "#circlips">Circlips</a> </td><td> <a href = "#nuts">Nuts</a> </td><td> <a href = "#sheets">Sheets</a> </td><td> <a href = "#gridfinity">Gridfinity</a> </td><td> <a href = "#pcb_utils">PCB_utils</a> </td><td></td></tr>
<tr><td> <a href = "#components">Components</a> </td><td> <a href = "#o_ring">O_ring</a> </td><td> <a href = "#spades">Spades</a> </td><td> <a href = "#handle">Handle</a> </td><td> <a href = "#quadrant">Quadrant</a> </td><td></td></tr>
<tr><td> <a href = "#dip">DIP</a> </td><td> <a href = "#opengrab">Opengrab</a> </td><td> <a href = "#spools">Spools</a> </td><td> <a href = "#knob">Knob</a> </td><td> <a href = "#round">Round</a> </td><td></td></tr>
<tr><td> <a href = "#d_connectors">D_connectors</a> </td><td> <a href = "#pcb">PCB</a> </td><td> <a href = "#springs">Springs</a> </td><td> <a href = "#led_bezel">LED_bezel</a> </td><td> <a href = "#rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
<tr><td> <a href = "#displays">Displays</a> </td><td> <a href = "#pcbs">PCBs</a> </td><td> <a href = "#stepper_motors">Stepper_motors</a> </td><td> <a href = "#pcb_mount">PCB_mount</a> </td><td> <a href = "#rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
<tr><td> <a href = "#extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#psus">PSUs</a> </td><td> <a href = "#swiss_clips">Swiss_clips</a> </td><td> <a href = "#psu_shroud">PSU_shroud</a> </td><td> <a href = "#rounded_triangle">Rounded_triangle</a> </td><td></td></tr>
<tr><td> <a href = "#extrusions">Extrusions</a> </td><td> <a href = "#panel_meters">Panel_meters</a> </td><td> <a href = "#terminals">Terminals</a> </td><td> <a href = "#pocket_handle">Pocket_handle</a> </td><td> <a href = "#sector">Sector</a> </td><td></td></tr>
<tr><td> <a href = "#fans">Fans</a> </td><td> <a href = "#photo_interrupters">Photo_interrupters</a> </td><td> <a href = "#toggles">Toggles</a> </td><td> <a href = "#press_fit">Press_fit</a> </td><td> <a href = "#splines">Splines</a> </td><td></td></tr>
<tr><td> <a href = "#fastons">Fastons</a> </td><td> <a href = "#pillars">Pillars</a> </td><td> <a href = "#transformers">Transformers</a> </td><td> <a href = "#printed_box">Printed_box</a> </td><td> <a href = "#sweep">Sweep</a> </td><td></td></tr>
<tr><td> <a href = "#fuseholder">Fuseholder</a> </td><td> <a href = "#pillow_blocks">Pillow_blocks</a> </td><td> <a href = "#ttracks">Ttracks</a> </td><td> <a href = "#printed_pulleys">Printed_pulleys</a> </td><td> <a href = "#thread">Thread</a> </td><td></td></tr>
<tr><td> <a href = "#gear_motors">Gear_motors</a> </td><td> <a href = "#pin_headers">Pin_headers</a> </td><td> <a href = "#tubings">Tubings</a> </td><td> <a href = "#ribbon_clamp">Ribbon_clamp</a> </td><td> <a href = "#tube">Tube</a> </td><td></td></tr>
<tr><td> <a href = "#geared_steppers">Geared_steppers</a> </td><td> <a href = "#potentiometers">Potentiometers</a> </td><td> <a href = "#variacs">Variacs</a> </td><td> <a href = "#ssr_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#green_terminals">Green_terminals</a> </td><td> <a href = "#pulleys">Pulleys</a> </td><td> <a href = "#veroboard">Veroboard</a> </td><td> <a href = "#screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#ht_pipes">HT_pipes</a> </td><td></td><td> <a href = "#washers">Washers</a> </td><td> <a href = "#socket_box">Socket_box</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#hot_ends">Hot_ends</a> </td><td></td><td> <a href = "#wire">Wire</a> </td><td> <a href = "#strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#hygrometer">Hygrometer</a> </td><td></td><td> <a href = "#zipties">Zipties</a> </td><td></td><td></td><td></td></tr>
</table>
---
@@ -275,6 +275,7 @@ exposing enough information to make a battery box.
| `battery_neg_dia(type)` | Negative terminal diameter |
| `battery_pos_dia(type)` | Positive terminal diameter |
| `battery_pos_height(type)` | Positive terminal height above the casing |
| `battery_type(type)` | Battery type |
| `battery_usb_offset(type)` | USB connector offset from the top |
| `contact_height(type)` | Height of the flat part |
| `contact_neg(type)` | Negative spring height above the plate when compressed and the spring type |
@@ -296,8 +297,8 @@ exposing enough information to make a battery box.
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 7 | `battery_contact(bcontact, false)` | Battery negative contact |
| 7 | `battery_contact(bcontact, true)` | Battery positive contact |
| 10 | `battery_contact(bcontact, false)` | Battery negative contact |
| 10 | `battery_contact(bcontact, true)` | Battery positive contact |
| 1 | `battery(A23CELL)` | Cell A23 12v |
| 1 | `battery(AACELL)` | Cell AA |
| 1 | `battery(AAACELL)` | Cell AAA |
@@ -305,6 +306,9 @@ exposing enough information to make a battery box.
| 1 | `battery(DCELL)` | Cell D |
| 1 | `battery(LUMINTOP)` | Cell LUMINTOP 18650 LION with charger |
| 1 | `battery(S25R18650)` | Cell Samsung 25R 18650 LION |
| 1 | `battery(L16340)` | Li-Ion/LiFePo4 16340 3.2v |
| 1 | `battery(L32700)` | Li-Ion/LiFePo4 32700 3.2v |
| 1 | `battery(L4680)` | Li-Ion/LiFePo4 4680 3.2v |
<a href="#top">Top</a>
@@ -1102,7 +1106,7 @@ LCD displays.
| 1 | `display(BigTreeTech_TFT35v3_0)` | BigTreeTech TFT35 v3.0 |
| 1 | `display(HDMI5)` | HDMI display 5" |
| 1 | `display(TFT128x160)` | LCD TFT ST7735 display 128x160 |
| 1 | `display(LCD1602A)` | LCD display 1602A |
| 2 | `display(LCD1602A)` | LCD display 1602A |
| 1 | `display(LCD2004A)` | LCD display 2004A |
| 1 | `display(LCDS7282B)` | LCD display S-7282B |
| 1 | `display(SSD1963_4p3)` | LCD display SSD1963 4.3" |
@@ -1124,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 |
@@ -1135,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 |
![extrusion_brackets](tests/png/extrusion_brackets.png)
@@ -1148,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 |
@@ -1206,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 |
![extrusions](tests/png/extrusions.png)
### 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>
@@ -1591,6 +1627,99 @@ Needs updating as mostly obsolete versions.
| 4 | `ziptie(small_ziptie)` | Ziptie 2.5mm x 100mm min length |
<a href="#top">Top</a>
---
<a name="ht_pipes"></a>
## HT_pipes
Parametric PVC HT water pipes commonly found in hardware stores around germany. Great for building weather proof cases for IoT things.
[vitamins/ht_pipes.scad](vitamins/ht_pipes.scad) Object definitions.
[vitamins/ht_pipe.scad](vitamins/ht_pipe.scad) Implementation.
[tests/HT_pipes.scad](tests/HT_pipes.scad) Code for this example.
### Properties
| Function | Description |
|:--- |:--- |
| `pipe_length(type)` | Pipe length |
| `pipe_od(type)` | Outside diameter |
| `pipe_td(type)` | T-Pipe diameter |
| `pipe_wall(type)` | Wall thickness |
### Modules
| Module | Description |
|:--- |:--- |
| `ht_cap(type)` | Draw specified cap |
| `ht_pipe(type)` | Draw specified pipe |
| `ht_tpipe(type)` | Draw specified T-pipe |
![ht_pipes](tests/png/ht_pipes.png)
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 1 | `ht_cap(HT_110_cap)` | PVC Waterpipe - HT 110 cap |
| 1 | `ht_pipe(HT_110_pipe_1000)` | PVC Waterpipe - HT 110 pipe 1000 mm |
| 1 | `ht_pipe(HT_110_pipe_150)` | PVC Waterpipe - HT 110 pipe 150 mm |
| 1 | `ht_pipe(HT_110_pipe_1500)` | PVC Waterpipe - HT 110 pipe 1500 mm |
| 1 | `ht_pipe(HT_110_pipe_2000)` | PVC Waterpipe - HT 110 pipe 2000 mm |
| 1 | `ht_pipe(HT_110_pipe_250)` | PVC Waterpipe - HT 110 pipe 250 mm |
| 1 | `ht_pipe(HT_110_pipe_500)` | PVC Waterpipe - HT 110 pipe 500 mm |
| 1 | `ht_cap(HT_125_cap)` | PVC Waterpipe - HT 125 cap |
| 1 | `ht_pipe(HT_125_pipe_1000)` | PVC Waterpipe - HT 125 pipe 1000 mm |
| 1 | `ht_pipe(HT_125_pipe_150)` | PVC Waterpipe - HT 125 pipe 150 mm |
| 1 | `ht_pipe(HT_125_pipe_1500)` | PVC Waterpipe - HT 125 pipe 1500 mm |
| 1 | `ht_pipe(HT_125_pipe_2000)` | PVC Waterpipe - HT 125 pipe 2000 mm |
| 1 | `ht_pipe(HT_125_pipe_250)` | PVC Waterpipe - HT 125 pipe 250 mm |
| 1 | `ht_pipe(HT_125_pipe_500)` | PVC Waterpipe - HT 125 pipe 500 mm |
| 1 | `ht_cap(HT_160_cap)` | PVC Waterpipe - HT 160 cap |
| 1 | `ht_pipe(HT_160_pipe_1000)` | PVC Waterpipe - HT 160 pipe 1000 mm |
| 1 | `ht_pipe(HT_160_pipe_150)` | PVC Waterpipe - HT 160 pipe 150 mm |
| 1 | `ht_pipe(HT_160_pipe_1500)` | PVC Waterpipe - HT 160 pipe 1500 mm |
| 1 | `ht_pipe(HT_160_pipe_2000)` | PVC Waterpipe - HT 160 pipe 2000 mm |
| 1 | `ht_pipe(HT_160_pipe_250)` | PVC Waterpipe - HT 160 pipe 250 mm |
| 1 | `ht_pipe(HT_160_pipe_500)` | PVC Waterpipe - HT 160 pipe 500 mm |
| 1 | `ht_cap(HT_32_cap)` | PVC Waterpipe - HT 32 cap |
| 1 | `ht_pipe(HT_32_pipe_1000)` | PVC Waterpipe - HT 32 pipe 1000 mm |
| 1 | `ht_pipe(HT_32_pipe_150)` | PVC Waterpipe - HT 32 pipe 150 mm |
| 1 | `ht_pipe(HT_32_pipe_1500)` | PVC Waterpipe - HT 32 pipe 1500 mm |
| 1 | `ht_pipe(HT_32_pipe_2000)` | PVC Waterpipe - HT 32 pipe 2000 mm |
| 1 | `ht_pipe(HT_32_pipe_250)` | PVC Waterpipe - HT 32 pipe 250 mm |
| 1 | `ht_pipe(HT_32_pipe_500)` | PVC Waterpipe - HT 32 pipe 500 mm |
| 1 | `ht_cap(HT_40_cap)` | PVC Waterpipe - HT 40 cap |
| 1 | `ht_pipe(HT_40_pipe_1000)` | PVC Waterpipe - HT 40 pipe 1000 mm |
| 1 | `ht_pipe(HT_40_pipe_150)` | PVC Waterpipe - HT 40 pipe 150 mm |
| 1 | `ht_pipe(HT_40_pipe_1500)` | PVC Waterpipe - HT 40 pipe 1500 mm |
| 1 | `ht_pipe(HT_40_pipe_2000)` | PVC Waterpipe - HT 40 pipe 2000 mm |
| 1 | `ht_pipe(HT_40_pipe_250)` | PVC Waterpipe - HT 40 pipe 250 mm |
| 1 | `ht_pipe(HT_40_pipe_500)` | PVC Waterpipe - HT 40 pipe 500 mm |
| 1 | `ht_tpipe(HT_50_tpipe)` | PVC Waterpipe - HT 50 T pipe |
| 1 | `ht_cap(HT_50_cap)` | PVC Waterpipe - HT 50 cap |
| 1 | `ht_pipe(HT_50_pipe_1000)` | PVC Waterpipe - HT 50 pipe 1000 mm |
| 1 | `ht_pipe(HT_50_pipe_150)` | PVC Waterpipe - HT 50 pipe 150 mm |
| 1 | `ht_pipe(HT_50_pipe_1500)` | PVC Waterpipe - HT 50 pipe 1500 mm |
| 1 | `ht_pipe(HT_50_pipe_2000)` | PVC Waterpipe - HT 50 pipe 2000 mm |
| 1 | `ht_pipe(HT_50_pipe_250)` | PVC Waterpipe - HT 50 pipe 250 mm |
| 1 | `ht_pipe(HT_50_pipe_500)` | PVC Waterpipe - HT 50 pipe 500 mm |
| 1 | `ht_tpipe(HT_50_40_tpipe)` | PVC Waterpipe - HT 50/40 T pipe |
| 1 | `ht_cap(HT_75_cap)` | PVC Waterpipe - HT 75 cap |
| 1 | `ht_pipe(HT_75_pipe_1000)` | PVC Waterpipe - HT 75 pipe 1000 mm |
| 1 | `ht_pipe(HT_75_pipe_150)` | PVC Waterpipe - HT 75 pipe 150 mm |
| 1 | `ht_pipe(HT_75_pipe_1500)` | PVC Waterpipe - HT 75 pipe 1500 mm |
| 1 | `ht_pipe(HT_75_pipe_2000)` | PVC Waterpipe - HT 75 pipe 2000 mm |
| 1 | `ht_pipe(HT_75_pipe_250)` | PVC Waterpipe - HT 75 pipe 250 mm |
| 1 | `ht_pipe(HT_75_pipe_500)` | PVC Waterpipe - HT 75 pipe 500 mm |
| 1 | `ht_cap(HT_90_cap)` | PVC Waterpipe - HT 90 cap |
| 1 | `ht_pipe(HT_90_pipe_1000)` | PVC Waterpipe - HT 90 pipe 1000 mm |
| 1 | `ht_pipe(HT_90_pipe_150)` | PVC Waterpipe - HT 90 pipe 150 mm |
| 1 | `ht_pipe(HT_90_pipe_1500)` | PVC Waterpipe - HT 90 pipe 1500 mm |
| 1 | `ht_pipe(HT_90_pipe_2000)` | PVC Waterpipe - HT 90 pipe 2000 mm |
| 1 | `ht_pipe(HT_90_pipe_250)` | PVC Waterpipe - HT 90 pipe 250 mm |
| 1 | `ht_pipe(HT_90_pipe_500)` | PVC Waterpipe - HT 90 pipe 500 mm |
<a href="#top">Top</a>
---
@@ -2015,6 +2144,7 @@ Standard domed through hole LEDs. Can specify colour and lead length.
| 1 | `led(LED3mm, "green")` | LED 3 mm green |
| 1 | `led(LED5mm, "blue")` | LED 5 mm blue |
| 1 | `led(LED8mm)` | LED 8 mm red |
| 1 | `led(LED5x2mm, "green")` | LED [5, 2] mm green |
<a href="#top">Top</a>
@@ -2362,6 +2492,10 @@ Default is steel but can be drawn as brass or nylon. A utility for making nut tr
If a nut is given a child then it gets placed on its top surface.
The following diagram shows you the parameters for drawing a sliding_t_nut:
![](docs/sliding_t_nut.png)
[vitamins/nuts.scad](vitamins/nuts.scad) Object definitions.
[vitamins/nut.scad](vitamins/nut.scad) Implementation.
@@ -2680,7 +2814,9 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `potentiometer(BTT_encoder)` | BTT_encoder |
| 1 | `box_header(2p54header, 4, 2)` | Box header 4 x 2 |
| 1 | `box_header(2p54header, 4, 2, right_angle = true)` | Box header 4 x 2 right angle |
| 1 | `rd_disc(10mm_disc, "1nF Y2")` | Ceramic capacitor, 10mm_disc 1nF Y2 |
| 1 | `rd_disc(6p4mm_disc, "100n")` | Ceramic capacitor, 6p4mm_disc 100n |
| 1 | `rd_cm_choke(ATX_CM_CHOKE ,"3.5mH")` | Common mode choke 3.5mH |
| 1 | `rd_xtal(ACT1100, "40MHz")` | Crystal ACT1100 40MHz |
| 1 | `rd_xtal(ACT1700, "80MHz")` | Crystal ACT1700 80MHz |
| 1 | `rd_xtal(C_002RX, "60KHz")` | Crystal C_002RX 60KHz |
@@ -2716,6 +2852,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pin_socket(2p54header, 4, 1)` | Pin socket 4 x 1 |
| 1 | `pin_socket(2p54header, 6, 1)` | Pin socket 6 x 1 |
| 2 | `pin_socket(2p54header, 8, 1)` | Pin socket 8 x 1 |
| 1 | `rd_coil(IND16x10 ,"4.7uH")` | Radial inductor 16x10 4.7uH |
| 1 | `rd_transistor(TO92, "78L05")` | Regulator TO92 78L05 |
| 1 | `rd_module(HF33F, "012-HSL-3F")` | Relay HF33F / 012-HSL-3F |
| 1 | `ax_res(res1_2, 10, tol = 10)` | Resistor 10 Ohms 10% 0.5W |
@@ -2881,6 +3018,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pcb(BTT_SKR_E3_TURBO)` | BigTreeTech SKR E3 Turbo |
| 1 | `pcb(BTT_SKR_MINI_E3_V2_0)` | BigTreeTech SKR Mini E3 v2.0 |
| 1 | `pcb(BTT_SKR_V1_4_TURBO)` | BigTreeTech SKR v1.4 Turbo |
| 1 | `pcb(BlackPill)` | Black Pill |
| 1 | | Cat 5 patch cable 300mm |
| 1 | `d_plug(DCONN15, pcb = true)` | D-type 15 way PCB mount plug - not shown |
| 1 | `pcb(DuetE)` | Duet 2 Ethernet electronics |
@@ -2894,12 +3032,14 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pcb(EnviroPlus)` | Enviro+ |
| 1 | `pcb(ExtruderPCB)` | Extruder connection PCB - not shown |
| 1 | `pcb(HW803_1WAY_RELAY)` | HW-803 5V 1 way relay module |
| 1 | `pcb(I2C_LCD_Backpack)` | I2C / SPI character LCD backpack |
| 1 | `pcb(KY_040)` | KY-040 rotart encoder breakout |
| 1 | `pcb(Keyes5p1)` | Keyes5.1 Arduino Uno expansion board - not shown |
| 1 | `pcb(L9110S)` | L9110S 2-Channel motor driver module |
| 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 |
@@ -2908,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 |
| 47 | `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 |
@@ -2932,17 +3072,19 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 4 | `screw(M2_cap_screw, 25)` | Screw M2 cap x 25mm |
| 2 | `screw(M2p5_cap_screw, 20)` | Screw M2.5 cap x 20mm |
| 8 | `screw(M2p5_cap_screw, 30)` | Screw M2.5 cap x 30mm |
| 12 | `screw(M2p5_cap_screw, 35)` | Screw M2.5 cap x 35mm |
| 4 | `screw(M2p5_cap_screw, 35)` | Screw M2.5 cap x 35mm |
| 8 | `screw(M2p5_cap_screw, 40)` | Screw M2.5 cap x 40mm |
| 4 | `screw(M2p5_dome_screw, 25)` | Screw M2.5 dome x 25mm |
| 4 | `screw(M2p5_pan_screw, 20)` | Screw M2.5 pan x 20mm |
| 8 | `screw(M2p5_pan_screw, 30)` | Screw M2.5 pan x 30mm |
| 19 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
| 13 | `screw(M3_cap_screw, 20)` | Screw M3 cap x 20mm |
| 4 | `screw(M3_cap_screw, 25)` | Screw M3 cap x 25mm |
| 4 | `screw(M2p5_pan_screw, 30)` | Screw M2.5 pan x 30mm |
| 4 | `screw(M2p5_pan_screw, 35)` | Screw M2.5 pan x 35mm |
| 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 |
| 3 | `terminal_35(2)` | Terminal block 2 way 3.5mm - not shown |
| 2 | `green_terminal(gt_2p54, 4)` | Terminal block 4 way 0.1" - not shown |
@@ -2951,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 |
| 47 | `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 |
@@ -2959,30 +3101,32 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| Qty | Filename |
| ---:|:--- |
| 4 | pcb_spacer20100.stl |
| 4 | pcb_spacer20150.stl |
| 4 | pcb_spacer20160.stl |
| 4 | pcb_spacer2070.stl |
| 4 | pcb_spacer2080.stl |
| 4 | pcb_spacer2090.stl |
| 2 | pcb_spacer25110.stl |
| 4 | pcb_spacer25140.stl |
| 4 | pcb_spacer25170.stl |
| 4 | pcb_spacer25180.stl |
| 4 | pcb_spacer25190_2.stl |
| 4 | pcb_spacer25200_2.stl |
| 4 | pcb_spacer25240.stl |
| 4 | pcb_spacer25250.stl |
| 4 | pcb_spacer25150.stl |
| 4 | pcb_spacer25190.stl |
| 4 | pcb_spacer25200.stl |
| 4 | pcb_spacer25210_2.stl |
| 4 | pcb_spacer25220_2.stl |
| 4 | pcb_spacer25260.stl |
| 4 | pcb_spacer25270.stl |
| 4 | pcb_spacer25280.stl |
| 4 | pcb_spacer2580.stl |
| 4 | pcb_spacer30130.stl |
| 4 | pcb_spacer30210.stl |
| 4 | pcb_spacer30220.stl |
| 3 | pcb_spacer30230.stl |
| 1 | pcb_spacer30130.stl |
| 4 | pcb_spacer30140.stl |
| 4 | pcb_spacer30230.stl |
| 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>
@@ -3429,6 +3573,15 @@ Radial components for PCBs.
| `rd_boxc_size(type)` | Overall size and corner radius |
| `rd_boxc_skirt(type)` | Skirt slot, thickness, height |
| `rd_boxc_z(type)` | Height of inner base above PCB. |
| `rd_cm_choke_core(type)` | Core OD, ID, width, corner radius |
| `rd_cm_choke_csep(type)` | Central separator thickness in slot, total thickness, height |
| `rd_cm_choke_seam(type)` | Overlapping semicircular seams to join the two halves of the core width and thickness |
| `rd_cm_choke_slot(type)` | Slot to hold central separator width, height, thickness |
| `rd_cm_choke_wire(type)` | Wire positions, length and diameter |
| `rd_coil_colour(type)` | Core colour |
| `rd_coil_size(type)` | OD, ID, height, coil height |
| `rd_coil_turns(type)` | Number of turns |
| `rd_coil_wire(type)` | Wire pitch, diameter and length |
| `rd_disc_colours(type)` | Colours of body and text |
| `rd_disc_kind(type)` | Capacitor, etc |
| `rd_disc_lead_d(type)` | Lead diameter and sleeve diameter |
@@ -3459,6 +3612,8 @@ Radial components for PCBs.
| Module | Description |
|:--- |:--- |
| `rd_box_cap(type, kind, value)` | Draw radial boxed film capacitor |
| `rd_cm_choke(type, value)` | Draw specified common mode choke. |
| `rd_coil(type, value, pitch = undef)` | Draw the specified vertical coil |
| `rd_disc(type, value, pitch = undef, z = 0, tail = 3)` | Draw a radial disc component |
| `rd_electrolytic(type, value, pitch = undef, z = 0, tail = 3)` | Draw a radial electrolytic capcacitor |
| `rd_module(type, value)` | Draw a PCB mounted potted module, e.g. PSU or relay |
@@ -3470,7 +3625,9 @@ Radial components for PCBs.
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 1 | `rd_disc(10mm_disc, "1nF Y2")` | Ceramic capacitor, 10mm_disc 1nF Y2 |
| 1 | `rd_disc(6p4mm_disc, "10nF")` | Ceramic capacitor, 6p4mm_disc 10nF |
| 1 | `rd_cm_choke(ATX_CM_CHOKE ,"3.5mH")` | Common mode choke 3.5mH |
| 1 | `rd_xtal(ACT1100, "ACT1100")` | Crystal ACT1100 ACT1100 |
| 1 | `rd_xtal(ACT1700, "ACT1700")` | Crystal ACT1700 ACT1700 |
| 1 | `rd_xtal(C_002RX, "C_002RX")` | Crystal C_002RX C_002RX |
@@ -3480,6 +3637,7 @@ Radial components for PCBs.
| 1 | `rd_module(LDE10_20B, "12V 900ma")` | PSU LDE10_20B / 12V 900ma |
| 1 | `rd_module(VCE03, "12V 250ma")` | PSU VCE03 / 12V 250ma |
| 2 | `pcb(PERF70x50)` | Perfboard 70 x 50mm |
| 1 | `rd_coil(IND16x10 ,"4.7uH")` | Radial inductor 16x10 4.7uH |
| 1 | `rd_module(HF33F, "012-HSL3F")` | Relay HF33F / 012-HSL3F |
| 1 | `rd_transistor(E_LINE, "ZTX853")` | Transistor E_LINE ZTX853 |
| 1 | `rd_transistor(TO92, "BC337")` | Transistor TO92 BC337 |
@@ -3690,6 +3848,7 @@ Rocker switch. Also used for neon indicator in the same form factor.
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 2 | `rocker(neon_indicator)` | Neon Indicator H8630FBNAL |
| 2 | `rocker(micro_rocker)` | Rocker Switch 10x15 |
| 2 | `rocker(small_rocker)` | Rocker Switch PRASA1-16F-BB0BW |
@@ -4176,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 |
@@ -6156,6 +6315,49 @@ inserts don't grip well in rubber.
| 1 | insert_foot_assembly |
<a href="#top">Top</a>
---
<a name="gridfinity"></a>
## Gridfinity
Generate storage bins compatible with Zack Freedman's Gridfinity design, see <https://www.youtube.com/watch?v=ra_9zU-mnl8&t=37s>
Based on <https://gridfinity.xyz/specification>
More examples [here](examples/Gridfinity).
[printed/gridfinity.scad](printed/gridfinity.scad) Implementation.
[tests/gridfinity.scad](tests/gridfinity.scad) Code for this example.
### Properties
| Function | Description |
|:--- |:--- |
| `gridfinity_bin_name(type)` | Name for the STL file |
| `gridfinity_bin_size(type)` | Size in grid units |
### Functions
| Function | Description |
|:--- |:--- |
| `gridfinity_base_z()` | height of base |
| `gridfinity_bin(name, grid_x, grid_y, grid_z)` | Constructor |
| `gridfinity_bin_size_mm(type)` | Overall size of the bin |
| `gridfinity_corner_r()` | Outside corner radius |
### Modules
| Module | Description |
|:--- |:--- |
| `gridfinity_bin(type)` | Create a gridfinity bin, bits to cut out are passed as a child |
| `gridfinity_partition(type, cols = 1, rows = 1, wall = 1.6, iwall = squeezed_wall, bwall = 1, corner_r = 4)` | Passed as child to hollow out specified partitions |
![gridfinity](tests/png/gridfinity.png)
### Printed
| Qty | Filename |
| ---:|:--- |
| 1 | chuck_stand.stl |
<a href="#top">Top</a>
---
@@ -6318,6 +6520,7 @@ Printed LED bezels for panel mounting
| 1 | `led(LED3mm, "yellow")` | LED 3 mm yellow |
| 1 | `led(LED5mm, "blue")` | LED 5 mm blue |
| 1 | `led(LED8mm)` | LED 8 mm red |
| 1 | `led(LED5x2mm, "yellow")` | LED [5, 2] mm yellow |
### Printed
| Qty | Filename |
@@ -6328,6 +6531,8 @@ Printed LED bezels for panel mounting
| 1 | LED3mm_bezel_retainer.stl |
| 1 | LED5mm_bezel.stl |
| 1 | LED5mm_bezel_retainer.stl |
| 1 | LED5x2mm_bezel.stl |
| 1 | LED5x2mm_bezel_retainer.stl |
| 1 | LED8mm_bezel.stl |
| 1 | LED8mm_bezel_retainer.stl |
@@ -6337,6 +6542,7 @@ Printed LED bezels for panel mounting
| 1 | LED10mm_orange_bezel_assembly |
| 1 | LED3mm_yellow_bezel_assembly |
| 1 | LED5mm_blue_bezel_assembly |
| 1 | LED5x2mm_yellow_bezel_assembly |
| 1 | LED8mm_red_bezel_assembly |
@@ -7052,6 +7258,27 @@ The coordinates of the lowest point on the curve can be retrieved by calling `ca
![catenary](tests/png/catenary.png)
<a href="#top">Top</a>
---
<a name="chamfer"></a>
## Chamfer
45 degree chamfer the entrance to holes.
If the hole shape is concave then it must be described as a list of 2D convex children.
[utils/chamfer.scad](utils/chamfer.scad) Implementation.
[tests/chamfer.scad](tests/chamfer.scad) Code for this example.
### Modules
| Module | Description |
|:--- |:--- |
| `chamfer_hole(depth = 1)` | Chamfer a hole given a 2D outline as a child |
![chamfer](tests/png/chamfer.png)
<a href="#top">Top</a>
---
@@ -7097,9 +7324,9 @@ allows flexible positioning of the motors.
### Modules
| Module | Description |
|:--- |:--- |
| `coreXY(type, size, pos, separation, x_gap = 0, plain_idler_offset = [0, 0], upper_drive_pulley_offset = [0, 0], lower_drive_pulley_offset = [0, 0], show_pulleys = false, left_lower = false)` | Wrapper module to draw both belts of a coreXY setup |
| `coreXY(type, size, pos, separation, x_gap = 0, plain_idler_offset = [0, 0], upper_drive_pulley_offset = [0, 0], lower_drive_pulley_offset = [0, 0], show_pulleys = false, left_lower = false, motor_back = false)` | Wrapper module to draw both belts of a coreXY setup |
| `coreXY_belts(type, carriagePosition, coreXYPosBL, coreXYPosTR, separation, x_gap = 0, plain_idler_offset = [0, 0], upper_drive_pulley_offset = [0, 0], lower_drive_pulley_offset = [0, 0], show_pulleys = false, left_lower = false)` | Draw the coreXY belts |
| `coreXY_half(type, size, pos, separation_y = 0, x_gap = 0, plain_idler_offset = [0, 0], drive_pulley_offset = [0, 0], show_pulleys = false, lower_belt = false, hflip = false)` | Draw one belt of a coreXY setup |
| `coreXY_half(type, size, pos, separation_y = 0, x_gap = 0, plain_idler_offset = [0, 0], drive_pulley_offset = [0, 0], show_pulleys = false, lower_belt = false, hflip = false, motor_back = false)` | Draw one belt of a coreXY setup |
![core_xy](tests/png/core_xy.png)
@@ -7108,12 +7335,44 @@ allows flexible positioning of the motors.
| ---:|:--- |:---|
| 1 | `belt(GT2x6, [ ... ])` | Belt GT2 x 6mm x 728mm |
| 1 | `belt(GT2x6, [ ... ])` | Belt GT2 x 6mm x 790mm |
| 7 | `pulley(GT2x16_toothed_idler)` | Pulley GT2 idler 16 teeth |
| 3 | `pulley(GT2x16_plain_idler)` | Pulley GT2 idler smooth 9.63mm |
| 2 | `pulley(GT2x20ob_pulley)` | Pulley GT2OB 20 teeth |
| 1 | `belt(GT2x6, [ ... ])` | Belt GT2 x 6mm x 826mm |
| 1 | `belt(GT2x6, [ ... ])` | Belt GT2 x 6mm x 826mm |
| 2 | `belt(GT2x6, [ ... ])` | Belt GT2 x 6mm x 836mm |
| 15 | `pulley(GT2x16_toothed_idler)` | Pulley GT2 idler 16 teeth |
| 15 | `pulley(GT2x16_plain_idler)` | Pulley GT2 idler smooth 9.63mm |
| 6 | `pulley(GT2x20ob_pulley)` | Pulley GT2OB 20 teeth |
| 8 | `screw(M3_cap_screw, 20)` | Screw M3 cap x 20mm |
| 4 | `screw(M3_grub_screw, 6)` | Screw M3 grub x 6mm |
| 2 | `NEMA(NEMA17_40)` | Stepper motor NEMA17 x 40mm (5x20 shaft) |
| 12 | `screw(M3_grub_screw, 6)` | Screw M3 grub x 6mm |
| 6 | `NEMA(NEMA17_40)` | Stepper motor NEMA17 x 40mm (5x20 shaft) |
<a href="#top">Top</a>
---
<a name="dimension"></a>
## Dimension
Modules for adding dimensions to assembly views.
![](docs/sliding_t_nut_small.png)
* If `text` is empty, will display the measured distance.
* `offset` will determine how much space is between the measured point and the dimension.
* `thickness` is the thickness of the lines, and size of the arrows, if 0, will use 0.5% of the length of the dim.
* `text_size` will determine the size of the text, if 0, will use percentage of the length of the dim.
[utils/dimension.scad](utils/dimension.scad) Implementation.
[tests/dimension.scad](tests/dimension.scad) Code for this example.
### Modules
| Module | Description |
|:--- |:--- |
| `dimension(startpoint, endpoint, text = "", thickness = 0, text_size = 0 , rot_around_dim = 0)` | Creates a 3D dimension between two points. |
| `dimension_x(startpoint, endpoint, offset = 1, text = "", thickness = 0, text_size = 0 , plane = "xy")` | Creates a dimension in the x direction. Plane options : xy, xz |
| `dimension_y(startpoint, endpoint, offset = 1, text = "", thickness = 0, text_size = 0 , plane = "xy")` | Creates a dimension in the y direction. Plane options : xy, yz |
| `dimension_z(startpoint, endpoint, offset = 1, text = "", thickness = 0, text_size = 0 , plane = "xz")` | Creates a dimension in the z direction. Plane options : xz, yz |
![dimension](tests/png/dimension.png)
<a href="#top">Top</a>
@@ -7580,6 +7839,7 @@ Each vertex, apart from the first and the last, has an associated radius and the
| `segmented_path(path, min_segment)` | Add points to a path to enforce a minimum segment length |
| `skin_faces(points, npoints, facets, loop, offset = 0)` | Create the mesh for the swept volume without end caps |
| `spiral_paths(path, n, r, twists, start_angle)` | Create a new paths which spiral around the given path. Use for making twisted cables |
| `spiral_wrap(path, profile, pitch, turns)` | Create a path that spirals around the specified profile with the given pitch. |
| `sweep(path, profile, loop = false, twist = 0)` | Generate the point list and face list of the swept volume |
### Modules
@@ -7687,6 +7947,8 @@ The `pose()` module allows assembly views in the readme to be posed differently
* To get the parameter values make the GUI window square, pose the view with the mouse and then copy the viewport parameters from the Edit menu and paste them into the pose invocation.
* Two `pose()` modules can be chained to allow different poses for exploded and assembled views.
The `pose_stl()` module allows an STL child to be posed for its rendered image used in the readme for the project.
[utils/core/bom.scad](utils/core/bom.scad) Implementation.
[tests/BOM.scad](tests/BOM.scad) Code for this example.
@@ -7710,8 +7972,9 @@ The `pose()` module allows assembly views in the readme to be posed differently
| `no_explode()` | Prevent children being exploded |
| `no_pose()` | Force children not to be posed even if parent is |
| `not_on_bom(on = false)` | Specify the following child parts are not on the BOM, for example when they are on a PCB that comes assembled |
| `pose(a = [55, 0, 25], t = [0, 0, 0], exploded = undef, d = undef)` | Pose an STL or assembly for rendering to png by specifying rotation `a`, translation `t` and optionally `d`, `exploded = true for` just the exploded view or `false` for unexploded only. |
| `pose(a = [55, 0, 25], t = [0, 0, 0], exploded = undef, d = undef)` | Pose an assembly for rendering to png by specifying rotation `a`, translation `t` and optionally `d`, `exploded = true for` just the exploded view or `false` for unexploded only. |
| `pose_hflip(exploded = undef)` | Pose an STL or assembly for rendering to png by flipping around the Y axis, `exploded = true for` just the exploded view or `false` for unexploded only. |
| `pose_stl(a = [70, 0, 315], t = [0, 0, 0], d = 500)` | Pose an STL for its render, `a`, `t`, & `d` are camera parameters. |
| `pose_vflip(exploded = undef)` | Pose an STL or assembly for rendering to png by flipping around the X axis, `exploded = true for` just the exploded view or `false` for unexploded only. |
| `stl(name)` | Name an stl that will appear on the BOM, there needs to a module named `<name>_stl` to make it |
| `stl_colour(colour = pp1_colour, alpha = 1)` | Colour an stl where it is placed in an assembly. `alpha` can be used to make it appear transparent. |

View File

@@ -69,7 +69,10 @@ class Part:
self.count = 1
for arg in args:
arg = arg.replace('true', 'True').replace('false', 'False').replace('undef', 'None')
exec('self.' + arg)
try:
exec('self.' + arg)
except:
print(arg)
def data(self):
return self.__dict__
@@ -107,7 +110,7 @@ class BOM:
match = re.match(r'^(.*?\.stl|.*?\.dxf|.*?\.svg)\((.*)\)$', s) #look for name.stl(...), name.dxf(...) or name.svg(...)
if match:
s = match.group(1)
args = [match.group(2)]
args = match.group(2).split('|')
if s[-4:] == ".stl":
parts = self.printed
else:

View File

@@ -66,9 +66,16 @@ def make_parts(target, part_type, parts = None):
top_dir = set_config(target, lambda: usage(part_type))
target_dir = top_dir + part_type + 's'
deps_dir = target_dir + "/deps"
bom_dir = top_dir + "bom"
tmp_dir = mktmpdir(top_dir)
#
# Check we have some of this type
#
bom_dir = top_dir + "bom"
all_parts = bom_to_parts(bom_dir, part_type)
if not all_parts:
return
tmp_dir = mktmpdir(top_dir)
if not os.path.isdir(target_dir):
os.makedirs(target_dir)
@@ -83,7 +90,6 @@ def make_parts(target, part_type, parts = None):
#
# Decide which files to make
#
all_parts = bom_to_parts(bom_dir, part_type)
if parts:
targets = list(parts) #copy the list so we dont modify the list passed in
else:

View File

@@ -37,19 +37,21 @@ def usage():
sys.exit(1)
def render(target, type):
#
# Make the target directory
#
top_dir = set_config(target, usage)
tmp_dir = mktmpdir(top_dir)
target_dir = top_dir + type + 's'
bom_dir = top_dir + 'bom'
if not os.path.isdir(target_dir):
os.makedirs(target_dir)
#
# Find all the parts
#
parts = bom_to_parts(bom_dir, type)
if not parts:
return
#
# Make the target directory
#
tmp_dir = mktmpdir(top_dir)
target_dir = top_dir + type + 's'
if not os.path.isdir(target_dir):
os.makedirs(target_dir)
#
# Read the json bom to get the colours
#
@@ -59,11 +61,14 @@ def render(target, type):
things = { 'stl' : 'printed', 'dxf' : 'routed', 'svg' : 'routed' }[type]
colours = {}
cameras = {}
for ass in flat_bom:
for part in ass[things]:
obj = ass[things][part]
if "colour" in obj:
colours[part] = obj["colour"]
if "camera" in obj:
cameras[part] = obj["camera"]
#
# Remove unused png files
#
@@ -85,13 +90,16 @@ def render(target, type):
png_maker_name = tmp_dir + "/png.scad"
pp1 = [0, 146/255, 0]
colour = pp1
camera = "0,0,0,70,0,315,500"
if part in cameras:
camera = cameras[part]
if part in colours:
colour = colours[part]
if not '[' in colour:
colour = '"' + colour + '"'
with open(png_maker_name, "w") as f:
f.write('color(%s) import("%s");\n' % (colour, reltmp(part_file, target)))
cam = "--camera=0,0,0,70,0,315,500" if type == 'stl' else "--camera=0,0,0,0,0,0,500"
cam = "--camera=" + camera if type == 'stl' else "--camera=0,0,0,0,0,0,500"
render = "--preview" if type == 'stl' or colour != pp1 else "--render"
tmp_name = tmp_dir + '/' + part[:-4] + '.png'
dummy_deps_name = tmp_dir + '/tmp.deps' # work around for OpenSCAD issue #3879

View File

@@ -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](svgs/%s) %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)

37
tests/HT_pipes.scad Normal file
View File

@@ -0,0 +1,37 @@
//
// NopSCADlib Copyright Jan Giebels 2024
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../utils/core/core.scad>
use <../utils/layout.scad>
include <../vitamins/ht_pipes.scad>
module ht_pipes()
color("grey")
layout([for(p = ht_pipes) 40 + pipe_od(p)]) let(p = ht_pipes[$i], len = pipe_length(p)) {
if(len <= 34)
translate_z(len)
ht_cap(p);
if(len >= 101)
ht_pipe(p);
if(len == 100)
ht_tpipe(p);
}
if($preview)
ht_pipes();

View File

@@ -23,7 +23,7 @@ include <../vitamins/leds.scad>
use <../printed/led_bezel.scad>
module led_bezels()
layout([for(l = LEDs) led_diameter(l)], 6) let(l = LEDs[$i], b = led_bezel(l))
layout([for(l = LEDs) max(led_diameter(l))], 6) let(l = LEDs[$i], b = led_bezel(l))
if($preview)
led_bezel_fastened_assembly(b, 3, ["yellow", "blue", "red", "orange"][$i % 4]);
else {

View File

@@ -22,7 +22,7 @@ use <../utils/layout.scad>
include <../vitamins/leds.scad>
module leds()
layout([for(l = LEDs) led_diameter(l)], 5)
layout([for(l = LEDs) max(led_diameter(l))], 5)
led(LEDs[$i], ["green", "blue", "red", "orange"][$i % 4]);
if($preview)

View File

@@ -134,6 +134,7 @@ test_pcb = ["test_pcb", "Test PCB",
[ 25, 190, 0, "rd_electrolytic", ECAP8x11, "220uF35V"],
[ 25, 180, 90, "rd_disc", ERZV07D471, "471"],
[ 25, 170, 90, "rd_disc", 6p4mm_disc, "100n"],
[ 30, 170, 90, "rd_disc", 10mm_disc, "1nF Y2"],
[ 90, 135, -90, "rd_module", HF33F, "012-HSL-3F"],
[ 35, 3, 0, "link", 0, 5], // Vertical wire
@@ -189,7 +190,7 @@ test_pcb = ["test_pcb", "Test PCB",
[ 52, 200, 0, "pcb", 11, TMC2130 ],
[ 76, 210, 0, "pdip", 24, "27C32", true, inch(0.6) ],
[ 80, 180, 0, "pdip", 8, "NE555" ],
[ 71, 180, 0, "smd_inductor", IND2525, "4R7"],
[ 71, 180, 0, "smd_inductor", IND2525, "4R7"],
[ 87, 166, -90, "smd_soic", SOIC18, "PIC18F88"],
[ 78, 166, -90, "smd_soic", SOIC14, "74HC00"],
@@ -197,14 +198,16 @@ test_pcb = ["test_pcb", "Test PCB",
[ 64, 166, -90, "smd_soic", SOIC8, "M34063"],
[ 70, 150, 0, "chip", 10, 5, 1, grey(20)],
[90, 140, -90, "relay", HF33F, "012-HSL-3F"],
[ 90, 140, -90, "relay", HF33F, "012-HSL-3F"],
[ 52, 206, 0, "2p54socket", 8, 1 ],
[ 52, 194, 0, "2p54socket", 8, 1, false, 0, false, "red" ],
[ 50, 220, 0, "standoff", 5, 4.5, 12.5, 2.54],
[ 50, 240, 0, "potentiometer"],
[ 55, 220, 0, "standoff", 5, 4.5, 12.5, 2.54],
[ 60, 240, 0, "potentiometer"],
[ 75, 240, 0, "potentiometer", KY_040_encoder, 8],
[ 40, 235, -90, "rd_cm_choke", ATX_CM_CHOKE, "3.5mH"],
[ 40, 217, 0, "rd_coil", IND16x10, "4.7uH"],
[ 30, 85, -90, "7seg", WT5011BSR, 2],
[ 30, 55, -90, "D_plug", DCONN9],
],

View File

@@ -26,7 +26,7 @@ include <../vitamins/cameras.scad>
use <../vitamins/pcb.scad>
module camera_housings()
layout([for(c = cameras) pcb_length(camera_pcb(c))], 10, false) let(c = cameras[$i])
layout([for(c = cameras) pcb_length(camera_pcb(c))], 15, false) let(c = cameras[$i])
if(pcb_screw(camera_pcb(c)))
camera_fastened_assembly(c, 3);

37
tests/chamfer.scad Normal file
View File

@@ -0,0 +1,37 @@
//
// NopSCADlib Copyright Chris Palmer 2025
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
use <../utils/chamfer.scad>
module chamfer() {
difference() {
h = 1;
rounded_rectangle([20, 20, h], 2);
translate_z(h)
chamfer_hole(h + eps) {
circle(2);
translate([-1, 0])
square([2, 5]);
}
}
}
chamfer();

View File

@@ -132,5 +132,57 @@ module coreXY_belts_test() {
}
}
if ($preview)
module coreXY_motor_in_back_test1() {
size = [200,200];
pos = [100,100];
separation = [20,5,10];
coreXY(coreXY_GT2_20_16, size, pos, separation, x_gap = 0, plain_idler_offset = [0, 0], upper_drive_pulley_offset = [0, 0], lower_drive_pulley_offset = [0, 0], show_pulleys = true, left_lower = false, motor_back = true);
rotate([180,0,0])
translate (
[ separation.x/2
, 0
, -separation.z/2 -15 ])
NEMA(NEMA17_40);
translate (
[ size.x - separation.x/2
, 0
, -separation.z/2 - 15 ])
NEMA(NEMA17_40);
}
module coreXY_motor_in_back_test2() {
size = [200,200];
pos = [100,100];
separation = [0,5,10];
upper_drive_pulley_offset = [20, 5];
lower_drive_pulley_offset = [20, 5];
coreXY(coreXY_GT2_20_16, size, pos, separation, x_gap = 0, plain_idler_offset = [20, 0], upper_drive_pulley_offset = upper_drive_pulley_offset, lower_drive_pulley_offset = lower_drive_pulley_offset, show_pulleys = true, left_lower = false, motor_back = true);
translate (
[ size.x - separation.x/2 - lower_drive_pulley_offset.x
, lower_drive_pulley_offset.y
, -separation.z/2 - 15 ])
NEMA(NEMA17_40);
translate (
[ separation.x/2 + upper_drive_pulley_offset.x
, upper_drive_pulley_offset.y
, separation.z/2 - 25 ])
NEMA(NEMA17_40);
}
if ($preview) {
coreXY_belts_test();
translate ([-250, 0,0])
coreXY_motor_in_back_test1();
translate ([-250, -250,0])
coreXY_motor_in_back_test2();
}

79
tests/dimension.scad Normal file
View File

@@ -0,0 +1,79 @@
//
// NopSCADlib Copyright Chris Palmer 2025
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../utils/core/core.scad>
use <../utils/dimension.scad>
module dimensions_3d_xy() {
dimension([0,0,0], [10,10,0], "", 0.2);
dimension([0,0,0], [10,-10,0], "", 0.2);
dimension([0,0,0], [-10,10,0], "");
dimension([0,0,0], [-10,-10,0], "");
dimension([0,0,0], [0,10,0], "");
dimension([0,0,0], [0,-10,0], "");
dimension([0,0,0], [10,0,0], "",rot_around_dim=0);
dimension([0,0,0], [-10,0,0], "", rot_around_dim=90);
}
module dimensions_3d_xyz() {
dimension([0,0,0], [10,10,10], "");
dimension([0,0,0], [10,-10,10], "");
dimension([0,0,0], [-10,10,10], "");
dimension([0,0,0], [-10,-10,10], "");
dimension([0,0,0], [10,10,-10], "");
dimension([0,0,0], [10,-10,-10], "");
dimension([0,0,0], [-10,10,-10], "");
dimension([0,0,0], [-10,-10,-10], "", rot_around_dim=45);
dimension([0,0,0], [-3,0,10], "");
dimension([0,0,0], [0,0,-10], "");
dimension([0,0,0], [0,2,10], "");
dimension([0,0,0], [0,2,-10], "");
}
module dimension_1d_x() {
dimension_x([12,0,0], [18,0,0]);
dimension_x([12,5,0], [18,10,0], offset = -1);
dimension_x([12,0,-5], [18,0,0], plane= "xz");
dimension_x([12,5,0], [18,10,5]);
}
module dimension_1d_y() {
dimension_y([12,0,0], [12,-5,0]);
dimension_y([12,-8,0], [18,-10,0]);
dimension_y([12,-5,0], [18,-10,5], offset = -1, plane= "yz");
}
module dimension_1d_z() {
dimension_z([20,0,5], [20,0,0]);
dimension_z([20,0,10], [20,0,0]);
dimension_z([20,0,0], [20,10,10],plane= "yz");
}
if($preview)
dimensions_3d_xy();
dimensions_3d_xyz();
dimension_1d_x();
dimension_1d_y();
dimension_1d_z();

View 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);

View File

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

76
tests/gridfinity.scad Normal file
View File

@@ -0,0 +1,76 @@
//
// NopSCADlib Copyright Chris Palmer 2025
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../printed/gridfinity.scad>
use <../utils/chamfer.scad>
box = gridfinity_bin("chuck_stand", 2, 2, 5);
box_mm = gridfinity_bin_size_mm(box);
bwall = 1;
chuck_d = 80;
ring_od = 50;
ring_id = 40;
ring_h = 4;
hole_pitch = (60 + 72.5) / 2;
hole_d = (72.5 - 60) / 2;
hole_depth = 15;
clearance = 0.5;
chamfer = 1;
z_bot = gridfinity_base_z() + bwall;
module chuck_stand_stl()
gridfinity_bin(box) union() {
translate_z(z_bot) {
for(a = [0 : 30 : 330])
rotate(a)
translate([0, hole_pitch / 2]) {
poly_cylinder(hole_d / 2 + clearance / 2, h = 100);
translate_z(hole_depth)
chamfer_hole(chamfer)
poly_circle(hole_d / 2 + clearance / 2);
}
translate_z(hole_depth) {
poly_cylinder(r = chuck_d / 2 + clearance / 2, h = 100);
poly_tube(or = ring_od / 2 + clearance, ir = ring_id / 2 - clearance, h = 2 * ring_h, center = true);
chamfer_hole(chamfer)
poly_circle(ring_od / 2 + clearance);
}
}
translate_z(box_mm.z)
chamfer_hole(chamfer)
poly_circle(r = chuck_d / 2 + clearance / 2);
}
module gridfinity_test()
stl_colour(pp1_colour) chuck_stand_stl();
gridfinity_test();

Some files were not shown because too many files have changed in this diff Show More