1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-09-03 20:32:35 +02:00

Compare commits

..

580 Commits

Author SHA1 Message Date
Chris Palmer
005c112ba9 Added values to the SMD capacitors on the example PCB. 2023-01-28 20:21:09 +00:00
Chris Palmer
dfbcbf84ab Changed OpenGrab link as nicadrone.com has gone. 2023-01-28 20:15:15 +00:00
Chris Palmer
b6e47ed9b7 Updated changelog. 2023-01-24 09:59:02 +00:00
Chris Palmer
6a529c91a7 Merge branch 'elliotf-add-raspberry-pi-3a' 2023-01-24 09:56:52 +00:00
Chris Palmer
e7e9313e71 Updated images and readme. 2023-01-24 09:56:19 +00:00
Chris Palmer
e19bb47273 Merge branch 'add-raspberry-pi-3a' of https://github.com/elliotf/NopSCADlib into elliotf-add-raspberry-pi-3a 2023-01-24 09:24:15 +00:00
Chris Palmer
494002aebe Added test to MP1584EN PCB. 2023-01-24 09:21:58 +00:00
Chris Palmer
77e948f43c Added can bus connectors to OpenGrab model.
Tweaked some PCB component positions.
2023-01-24 09:21:14 +00:00
Chris Palmer
543cdb4e01 Incresed the clearance of holes made for pin header. 2023-01-24 09:19:32 +00:00
Elliot Foster
dab06ce4ca Add Raspberry Pi 3 A+ to pcbs 2023-01-23 12:50:00 -06:00
Chris Palmer
2e25932d5c Updated changelog. 2023-01-12 23:02:31 +00:00
Chris Palmer
ebd50bae53 Added SMD diodes, inductors and potentiometers.
Complete set of components added to MP1584EN buck regulator.
2023-01-12 23:00:21 +00:00
Chris
8e47270607 Updated changelog. 2023-01-07 11:12:43 +00:00
Chris
ec3e752fc5 Added missing documentation for hinge_female() module. 2023-01-07 11:09:46 +00:00
Chris
de17726d20 Updated changelog. 2023-01-07 11:03:12 +00:00
Chris
8587d52d1b Added screw_keyhole() module. 2023-01-07 10:50:32 +00:00
Chris
cec8c3a107 Added printed LED bezels. 2023-01-07 10:49:45 +00:00
Chris
848dcb86b9 Added 8mm LED. 2023-01-07 10:08:05 +00:00
Chris
a31f6f100c Revised LED dimensions. 2023-01-07 09:24:04 +00:00
Chris
b3dd635889 Fixed duplicated dxf() calls in printed box and butt_box.
Client code now calls dxf() so that the generated files can be used to speed up assembly views.
2023-01-07 09:21:04 +00:00
Chris Palmer
3c9004f12d Updated changelog. 2022-12-06 17:14:54 +00:00
Chris Palmer
e256801206 Added comment to indicate the .py suffix may be needed on linux and OSX. 2022-12-06 17:07:40 +00:00
Chris
4080179a74 Merge pull request #246 from majekw/include-terminals
Include terminal.scad in lib.scad to allow use of terminal_block().
2022-12-05 20:42:44 +00:00
Marek Wodzinski
9dc8062bef Include terminal.scad in lib.scad to allow use of terminal_block(). 2022-12-05 13:34:16 +01:00
Chris
c2e85a5833 Merge pull request #245 from drf5n/patch-1
update nuts.scad table comment
2022-10-26 13:37:41 +01:00
drf5n
f2313a3f0c update nuts.scad table comment
Change comment about nut sizes from radius to diameter.
2022-10-20 10:57:06 -04:00
Chris
d95e1e64ed Udated changelog. 2022-09-29 12:00:53 +01:00
Chris
4eaaee6a4d Merge branch 'jeroenrnl-nuthousing' 2022-09-29 11:58:06 +01:00
Chris
f1737d257b Updated images and readme. 2022-09-29 11:57:49 +01:00
Jeroen Roos
ce258d6d4f Leadnuts: add nuthousing 2022-09-27 21:50:28 +02:00
Chris
272b7efd45 Updated changelog. 2022-09-27 01:12:59 +01:00
Chris
e84b5721d7 Merge branch 'jeroenrnl-SC_flex' 2022-09-27 01:10:40 +01:00
Chris
ec85cc5d4c Updated images and readme. 2022-09-27 01:10:23 +01:00
Chris
264e4366f6 Merge branch 'SC_flex' of https://github.com/jeroenrnl/NopSCADlib into jeroenrnl-SC_flex 2022-09-27 00:35:19 +01:00
Chris
233fba275d Updated changelog. 2022-09-27 00:18:08 +01:00
Chris
c9ac393c0c Printed corner blocks now have a short_insert option. 2022-09-27 00:09:49 +01:00
Chris
208334a585 Printed box now has a short insert option. 2022-09-27 00:09:15 +01:00
Chris
3a17b89d5c Added short inserts and M5 inserts.
screw_insert() now takes a short flag.
screw_length() can now be passed an insert object.
2022-09-27 00:07:23 +01:00
Chris
0f36c02b5e Added layer_height0 global variable and updated round_to_layer() to handle it.
Moved functions from global_defs.scad to global.scad so they get documented.
2022-09-25 18:22:29 +01:00
Jeroen Roos
fb6695471f Shaft coupling: Add flexible SC / 6x8 flexible SC
Added the possibility for shaft couplings to be flexible and added a 6x8
example of such a coupling.
2022-09-24 14:17:15 +02:00
Chris
87b794d4a2 Updated changelog. 2022-08-30 22:20:24 +01:00
Chris
75262efe3a Merge branch 'ChemicalXandco-l9110s' 2022-08-30 22:18:36 +01:00
Chris
c1e4625382 Replaced generic chips with SOIC8.
Updated images and readme.
2022-08-30 22:18:24 +01:00
ChemicalXandco
6059c5f556 add L9110S 2-Channel motor driver module 2022-08-29 11:17:21 +01:00
Chris
a5a55533e1 Updated changelog. 2022-08-03 07:52:37 +01:00
Chris
4ceb6bd863 Fixed a gap in printed hinges. 2022-08-03 07:50:05 +01:00
Chris
e0df0f31a5 Updated changelog. 2022-07-16 08:23:31 +01:00
Chris
664d04ad93 Now logs the time taken to run non OpenSCAD commands in cmd_times.txt 2022-07-16 08:21:17 +01:00
Chris
78b8c2031e Updated changelog. 2022-07-15 11:56:49 +01:00
Chris
2001de2408 Merge branch 'martinbudden-bldc_includes' 2022-07-15 11:55:01 +01:00
Chris
64fb562f58 Merge branch 'bldc_includes' of https://github.com/martinbudden/NopSCADlib into martinbudden-bldc_includes 2022-07-15 11:30:10 +01:00
Chris
bf163587fa Merge branch 'martinbudden-typos' 2022-07-15 11:29:37 +01:00
Chris
1238dba90a Updated readme. 2022-07-15 11:29:27 +01:00
Chris
f40a7d19a9 Merge branch 'typos' of https://github.com/martinbudden/NopSCADlib into martinbudden-typos 2022-07-15 09:13:36 +01:00
Chris
a054eb8216 Updated changelog. 2022-07-04 10:17:29 +01:00
Chris
05edd923b8 Merge branch 'MS3FGX-SOIC' 2022-07-04 10:16:04 +01:00
Chris
b58a59dab7 Updated images and readme. 2022-07-04 10:15:39 +01:00
Chris
6b6ffb2b74 Added SOICs to tests. 2022-07-04 10:15:01 +01:00
Chris
1e30ad24e8 Added smd_soic to pcb_component(). 2022-07-04 10:14:22 +01:00
Chris
dc715ff2b7 Tweaked SOIC text size. 2022-07-04 10:13:11 +01:00
MS3FGX
c57c202e31 Adjust lead sizing 2022-07-04 00:42:36 -04:00
MS3FGX
26bfe96614 Add SOIC SMD Package 2022-07-02 20:10:35 -04:00
Chris
fa49ae09fa Updated changelog. 2022-07-02 23:38:55 +01:00
Chris
974457eabd Merge branch 'MS3FGX-LED1206' 2022-07-02 23:37:01 +01:00
Chris
2cc3c6ec7c Updated images and readme. 2022-07-02 23:36:40 +01:00
Chris
633843d45e Added LED1206 example to PCB test. 2022-07-02 23:35:59 +01:00
MS3FGX
1a472c8ed5 Add 1206 SMD LED 2022-07-02 18:12:31 -04:00
Martin Budden
f44d9ae424 Made includes relative in bldc_motors. 2022-06-30 13:34:32 +01:00
Chris Palmer
4f0c443c8e Updated changelog. 2022-06-23 18:26:22 +01:00
Chris Palmer
ecd534b577 Added NEMA_connection_pos().
Changed motor wire colours and tweaked wire position and size,
2022-06-23 18:24:44 +01:00
Martin Budden
aec72118fa Fixed typos. 2022-06-22 06:02:36 +01:00
Chris Palmer
0d828f8f7f Updated changelog. 2022-06-21 12:35:00 +01:00
Chris Palmer
28c36a4e96 rounded_polygon() now copes with the degenrate case when tangents intersect to form a sharp corner with no arc.
Added an offset() function with some limitations.
2022-06-21 12:29:57 +01:00
Chris Palmer
1ddfb35bda Updated changelog. 2022-06-21 11:59:32 +01:00
Chris Palmer
235caa4101 Merge branch 'martinbudden-extrusion1515_dimensions' 2022-06-21 11:48:46 +01:00
Chris Palmer
6a9af0af8a Updates images 2022-06-21 11:48:15 +01:00
Chris Palmer
f066b1b8ae Merge branch 'extrusion1515_dimensions' of https://github.com/martinbudden/NopSCADlib into martinbudden-extrusion1515_dimensions 2022-06-21 11:39:31 +01:00
Chris Palmer
4be7b2f0ea Merge branch 'martinbudden-typos' 2022-06-21 11:14:45 +01:00
Chris Palmer
3cc3c52b54 Merge branch 'typos' of https://github.com/martinbudden/NopSCADlib into martinbudden-typos 2022-06-21 10:37:27 +01:00
Chris Palmer
7f1634ef06 Merge branch 'martinbudden-image_size' 2022-06-21 10:28:08 +01:00
Chris Palmer
34c8c31cae Merge branch 'image_size' of https://github.com/martinbudden/NopSCADlib into martinbudden-image_size 2022-06-21 10:26:03 +01:00
Martin Budden
a6a08088d9 Fixed dimensions of E1515 extrusion. 2022-06-21 08:32:13 +01:00
Martin Budden
06443a558b Standardised setting of imgsize in scripts. 2022-06-21 07:19:11 +01:00
Martin Budden
bcf9fb38df Fixed typos. 2022-06-21 06:54:08 +01:00
Chris Palmer
18f3d43780 Added convexity parameter to clip(). 2022-06-14 15:13:21 +01:00
Chris Palmer
eda88cc8d7 Fixed vero() constructor documentation.
Fixed missing space in veroboard vitamin decription.
2022-06-14 15:10:59 +01:00
Chris Palmer
630268d71a Changed screw_knob() facets to be suitable for 3D printing.
Fixed knob_height() so it can take a screw as a type.
2022-06-14 15:08:20 +01:00
Chris
66f793b00b Updated changelog. 2022-05-31 17:22:27 +01:00
Chris
cc5654d7d7 Added usb_miniA(). 2022-05-31 17:20:52 +01:00
Chris Palmer
9989f13edf Updated changelog. 2022-04-01 16:33:37 +01:00
Chris Palmer
d46913ce4f Printed screw_knob() is now fully customisable by passing a parameter
list, constructed by screw_knob(), in place of the screw.

Screws can still be passed for backwards compaibility.
2022-04-01 16:31:45 +01:00
Chris Palmer
b9f676a753 Documented insert_hole_length(). 2022-04-01 15:43:17 +01:00
Chris Palmer
1a649060bd Updated changelog. 2022-03-17 23:57:57 +00:00
Chris Palmer
68fd04f6d5 Merge branch 'MorrieG-master' 2022-03-17 23:56:03 +00:00
Chris Palmer
ddc4150ed7 Updated images and readme. 2022-03-17 23:55:41 +00:00
Chris Palmer
ed7e55808a Merge branch 'master' of https://github.com/MorrieG/NopSCADlib into MorrieG-master 2022-03-17 21:53:49 +00:00
Chris Palmer
3eff5fc2e0 Updated changelog. 2022-03-17 21:47:20 +00:00
Chris Palmer
744ebc2935 Added functions for generating twisted cable paths and calculating its radius.
Top row of cable bundles reversed to match a twisted cable.
2022-03-17 21:24:54 +00:00
Chris Palmer
99a5570e24 Fixed ziptie bug for small wires and corners made sharper. 2022-03-17 20:48:43 +00:00
Chris Palmer
b70911dc13 Image odd pixel changes due to move to summer computer. 2022-03-17 20:37:16 +00:00
Mozza
50d62b4170 Merge branch 'master' of https://github.com/MorrieG/NopSCADlib 2022-03-16 19:11:38 +11:00
Mozza
7e126c94ca Add A23 cell 2022-03-16 19:10:07 +11:00
Chris Palmer
2d20fb130a Removed dead code in spiral_paths(). 2022-03-01 08:12:30 +00:00
Chris Palmer
738c7914e2 Updated chnagelog. 2022-02-25 10:41:11 +00:00
Chris Palmer
7596bcacf4 Merge branch 'martinbudden-typos' 2022-02-25 10:38:21 +00:00
Chris Palmer
943deededf Updated the readme. 2022-02-25 10:37:33 +00:00
Chris Palmer
c8f16f4cdb Merge branch 'typos' of https://github.com/martinbudden/NopSCADlib into martinbudden-typos 2022-02-25 10:27:55 +00:00
Chris Palmer
a30aff9613 Fixed missing brackets for sheets with chamfered corners. 2022-02-25 10:27:23 +00:00
Martin Budden
c0d9067b74 Fixed typos. 2022-02-24 09:13:25 +00:00
Chris Palmer
7e8f03df2e Updated changelog. 2022-02-23 23:54:42 +00:00
Chris Palmer
f173284709 Can now inhibit exploded lines for issue #220. 2022-02-23 23:52:25 +00:00
Chris Palmer
6850953e71 Updated changelog. 2022-02-23 22:44:36 +00:00
Chris Palmer
2f60f568ff Merge branch 'martinbudden-washer_colour' 2022-02-23 22:42:49 +00:00
Chris Palmer
0206b2e868 Updated images. 2022-02-23 22:42:27 +00:00
Chris Palmer
38e2a22a11 Merge branch 'washer_colour' of https://github.com/martinbudden/NopSCADlib into martinbudden-washer_colour 2022-02-23 21:41:54 +00:00
Chris Palmer
4f68353f70 Updated changelog. 2022-02-23 21:13:13 +00:00
Chris Palmer
fbaae66d27 Merge branch 'martinbudden-nema_name' 2022-02-23 21:06:31 +00:00
Chris Palmer
f8d17c6f16 Updated readme. 2022-02-23 21:06:13 +00:00
Chris Palmer
97a6a65158 Merge branch 'nema_name' of https://github.com/martinbudden/NopSCADlib into martinbudden-nema_name 2022-02-23 20:16:43 +00:00
Chris Palmer
42fccc1afb Added bezier_join().
Moved path_length() from sweep.scad to maths.scad.
2022-02-23 11:53:02 +00:00
Martin Budden
662db2bd41 Improved stepper motor naming convention. 2022-02-22 10:14:51 +00:00
Chris Palmer
76aa613093 Updated changelog. 2022-02-15 22:20:46 +00:00
Chris Palmer
0e2778e13d Cables can now have a list of wire colours.
Added a constructor for cables.
2022-02-15 21:51:09 +00:00
Chris Palmer
50e23e5f81 Added silkscreen text to PCBs. 2022-02-15 21:49:25 +00:00
Chris Palmer
59eeb2c5d4 Trimmed the ribbon clamp tape. 2022-02-15 10:52:38 +00:00
Chris Palmer
7ea4dbe6cb Fixed double application of r2sides() in rounded_path().
Added check for radius too big for corner in rounded_path().
Spiral paths can now have 0 twists.
2022-02-15 10:44:13 +00:00
Chris Palmer
0d062c24fa Updated changelog. 2022-02-11 09:11:05 +00:00
Chris Palmer
95b6771811 Added printed cable clips. 2022-02-11 09:08:51 +00:00
Chris Palmer
ed46cbb147 Fixed cable_bundle() bugs and added test.
Added cable_bundle_positions().
Can now mark cables as ribbon to force a flat layout.
2022-02-11 09:07:34 +00:00
Chris Palmer
14ba135169 Updated changelog. 2022-02-09 22:05:58 +00:00
Chris Palmer
2a2b7d8bd6 Added a second example project. 2022-02-09 21:57:56 +00:00
Chris Palmer
055b4e7102 Added SOT23 and SOT223 SMD packages.
smd_capacitors can now have a value.
Wire links can now have zero length to create a vertical wire.
2022-02-09 21:50:10 +00:00
Chris Palmer
00d6efc315 Added veroboard constructor.
Documented solder_meniscus and made it parametric.
2022-02-09 21:42:20 +00:00
Chris Palmer
985b6c08d2 Updated changelog. 2022-02-08 19:19:17 +00:00
Chris Palmer
1f55097bdd Support for twisted cables.
Sweep now distbutes twists in proportion to segments lengths.
Added  spiral_paths(), segmented_path() and rounded_path_vertices() functions.
Added show_path(path) module.
2022-02-08 19:08:10 +00:00
Chris Palmer
136584d086 Updated changelog. 2022-02-06 23:46:41 +00:00
Chris Palmer
225ea9b451 Added rounded_path() function to sweep.scad. 2022-02-06 23:44:23 +00:00
Chris Palmer
d341ce499e Added render() to pocket_handle(). 2022-02-06 23:43:40 +00:00
Chris Palmer
e7376e28c4 Fixed corner block assembly names when overridden. 2022-02-06 23:42:54 +00:00
Chris Palmer
e238eaa473 Removed unused, undocumented function. 2022-02-06 23:40:19 +00:00
Martin Budden
1ac5a6f6cb Made hard washers slightly lighter.
This means they can be distinguished from bolts when viewed from directly
above.
2022-02-03 12:47:54 +00:00
Chris Palmer
28d8cba98c Updated changelog. 2022-02-01 23:30:05 +00:00
Chris Palmer
04e94a859a Added earth_rot parameter to NEMA_screws(). 2022-02-01 23:25:04 +00:00
Chris Palmer
e696dc4718 Fixed stupid bug in euler(). 2022-02-01 23:24:14 +00:00
Chris Palmer
30955eb350 Updated changelog. 2022-01-29 14:42:31 +00:00
Chris Palmer
d5abee4082 Merge branch 'martinbudden-flanged_bearings' 2022-01-29 14:35:39 +00:00
Chris Palmer
f33a0675f5 Updated images and readme. 2022-01-29 14:35:02 +00:00
Chris Palmer
5223415429 Ball bearing test now two rows. 2022-01-29 14:28:55 +00:00
Chris Palmer
89d2d2bb71 Merge branch 'flanged_bearings' of https://github.com/martinbudden/NopSCADlib into martinbudden-flanged_bearings 2022-01-29 14:01:20 +00:00
Chris Palmer
762ff9cb43 Updated changelog. 2022-01-29 13:59:15 +00:00
Chris Palmer
1ee80f4a90 Ribbon clamps can now be made to hold multiple ribbons. 2022-01-29 13:57:40 +00:00
Chris Palmer
43408843af Butt_box now has a thin_blocks property to make it use 2screw_blocks instead of fixing blocks along the edges. 2022-01-29 13:49:04 +00:00
Chris Palmer
c4ccc30b35 Added 2screw_blocks, a two screw version of corner blocks. 2022-01-29 11:15:51 +00:00
Chris Palmer
20db11f81e Box top bezels can now be modified by adding a child that gets subtracted. 2022-01-29 09:39:15 +00:00
Chris Palmer
d82db46ea1 Added missing description for terminals. 2022-01-29 09:34:17 +00:00
Martin Budden
f87f3f51ee Added support for flanged bearings.
Also added some new cartridge bearings.
2022-01-28 19:12:50 +00:00
Chris Palmer
ac58524b85 Butt_box star_washers() property renamed bbox_star_washers(). 2022-01-26 18:49:00 +00:00
Chris Palmer
ef06aa4387 Butt_box size and volume echo changed to show Butt_box. 2022-01-26 18:33:35 +00:00
Chris Palmer
68533f96d0 Updated changelog. 2022-01-25 20:13:13 +00:00
Chris Palmer
c826f10169 Merge branch 'martinbudden-psu_pcbs' 2022-01-25 20:10:36 +00:00
Chris Palmer
d775a16baa Updated images and readme. 2022-01-25 20:10:02 +00:00
Chris Palmer
682b8caf41 Removed CB- prefix from PSU descriptions. 2022-01-25 20:02:13 +00:00
Chris Palmer
c915dd8c5c Made butt_box example smaller to make room for more PSUs. 2022-01-25 20:01:29 +00:00
Chris Palmer
213ce7e25f Merge branch 'psu_pcbs' of https://github.com/martinbudden/NopSCADlib into martinbudden-psu_pcbs 2022-01-25 16:22:06 +00:00
Chris Palmer
e5a38b37b3 Updated changelog. 2022-01-25 16:21:07 +00:00
Chris Palmer
669e51605f Merge branch 'martinbudden-pcb_terminals' 2022-01-25 16:18:55 +00:00
Chris Palmer
127aab2e7a Added test for terminals to get documentation.
Updated images and readme.
Note BigTreeTech Relay Module v1.2 PCB added.
2022-01-25 16:18:36 +00:00
Martin Budden
680563808a Added ability to add PCB to PSU.
Also added two slimline LED PSUs with PCBs and terminals at both ends.
2022-01-23 23:21:10 +00:00
Martin Budden
df3da13d6b Added support for terminals on PCBs. 2022-01-23 19:47:06 +00:00
Chris Palmer
000a7fb0fb Updated changelog. 2022-01-23 09:17:31 +00:00
Chris Palmer
d4e8dd8311 Wire_hole_radius() now rounded up to half mm diameters to match metric drills.
mouse_grommet STL name is now based on the diameter instead of the radius.
Added mouse_grommet_length(r) and documented mouse_grommet_offset(r).
2022-01-23 09:14:09 +00:00
Chris Palmer
1928ec6fb1 Box can now be named to allow more than one in a project.
box_hole_inset(type) documented.
2022-01-23 09:08:27 +00:00
Chris Palmer
f4b9ab961c Fixed blower_exit_offset() for square blowers with 2 screws. 2022-01-23 09:04:46 +00:00
Chris Palmer
ac7c4403b9 Updated changelog. 2022-01-10 23:55:40 +00:00
Chris Palmer
b7b40ba6a4 Merge branch 'ggabbiani-fix-grid-origin-offsets' 2022-01-10 23:52:33 +00:00
Chris Palmer
317b485ee1 Updated the image. 2022-01-10 23:52:00 +00:00
Chris Palmer
6218287e2a Merge branch 'fix-grid-origin-offsets' of https://github.com/ggabbiani/NopSCADlib into ggabbiani-fix-grid-origin-offsets 2022-01-10 23:36:51 +00:00
Chris Palmer
d04f2bc8d1 Updated changelog. 2022-01-10 23:34:08 +00:00
Chris Palmer
49c26079fe Added M3x6_hex_pillar. 2022-01-10 23:32:01 +00:00
Chris Palmer
b5ee63bfc4 Added more documentation for microswitches. 2022-01-10 23:31:02 +00:00
Chris Palmer
a5bc80c0e8 Added D_plug_d() function. 2022-01-10 23:28:33 +00:00
Chris Palmer
bf8014fba0 Added tubing_ir() function. 2022-01-10 23:20:04 +00:00
Giampiero Gabbiani
ccf2b8e21b Reverted PERF74x51 2022-01-11 00:00:16 +01:00
Giampiero Gabbiani
99f277de8d Fixed offset calculations 2022-01-08 00:10:57 +01:00
Giampiero Gabbiani
fe1ab5d59a Fixed grid origin offsets 2022-01-07 13:47:00 +01:00
Chris Palmer
e06b485d3e Updated changelog. 2021-12-14 21:37:54 +00:00
Chris Palmer
72d9c398bc Merge branch 'martinbudden-teardrop_angle' 2021-12-14 21:35:37 +00:00
Chris Palmer
608f0b2db0 Simplified teardrop top length calculation. 2021-12-14 21:22:29 +00:00
Chris Palmer
7f8dfb9e73 Merge branch 'teardrop_angle' of https://github.com/martinbudden/NopSCADlib into martinbudden-teardrop_angle 2021-12-14 20:50:39 +00:00
Chris Palmer
c9de51fbbb Updated changelog. 2021-12-14 17:57:36 +00:00
Chris Palmer
30b7d966a1 Merge branch 'martinbudden-camera_fov' 2021-12-14 17:55:06 +00:00
Chris Palmer
abe1b1db01 Updated readme. 2021-12-14 17:53:10 +00:00
Chris Palmer
8835fa0b7d Merge branch 'camera_fov' of https://github.com/martinbudden/NopSCADlib into martinbudden-camera_fov 2021-12-14 17:49:08 +00:00
Martin Budden
71f935de8e Corrected FOV handling. 2021-12-14 12:11:03 +00:00
Chris Palmer
b0a6a873c0 Merge branch 'martinbudden-core_xy_improvements' 2021-12-12 23:21:27 +00:00
Chris Palmer
0771d4742c Updated changelog. 2021-12-12 23:18:28 +00:00
Chris Palmer
970c538496 Updated images and readme. 2021-12-12 23:16:09 +00:00
Chris Palmer
4d44eae16a Merge branch 'core_xy_improvements' of https://github.com/martinbudden/NopSCADlib into martinbudden-core_xy_improvements 2021-12-12 23:07:20 +00:00
Martin Budden
cec790ec09 Fixed y-carriage plain pulley and test. 2021-12-12 10:32:18 +00:00
Chris Palmer
3c9ec5455b Merge branch 'core_xy_improvements' of https://github.com/martinbudden/NopSCADlib into martinbudden-core_xy_improvements 2021-12-12 08:43:45 +00:00
Chris Palmer
5be85f5c25 Updated changelog. 2021-12-12 08:42:26 +00:00
Chris Palmer
e6254daaf1 Merge branch 'martinbudden-belt_gt2x9' 2021-12-12 08:40:51 +00:00
Chris Palmer
c31f58a4fd Udpated images and readme. 2021-12-12 08:40:34 +00:00
Chris Palmer
46fc574e7a Merge branch 'belt_gt2x9' of https://github.com/martinbudden/NopSCADlib into martinbudden-belt_gt2x9 2021-12-11 21:08:56 +00:00
Chris Palmer
6ee0fad2e1 Updated changelog. 2021-12-11 20:57:48 +00:00
Chris Palmer
6e76c2ce89 Merge branch 'martinbudden-drag_chain_links' 2021-12-11 20:54:08 +00:00
Chris Palmer
a2dfaef2b5 Updated readme. 2021-12-11 20:53:01 +00:00
Chris Palmer
2c197be193 Merge branch 'drag_chain_links' of https://github.com/martinbudden/NopSCADlib into martinbudden-drag_chain_links 2021-12-11 20:51:38 +00:00
Chris Palmer
05a67d1b2e Updated changelog 2021-12-11 20:50:37 +00:00
Chris Palmer
be4dc0c57a Merge branch 'martinbudden-drag_chain_no_support_v2' 2021-12-11 20:48:02 +00:00
Chris Palmer
c4895f84c7 Updated image and readme. 2021-12-11 18:34:38 +00:00
Chris Palmer
72700a0acb Merge branch 'drag_chain_no_support_v2' of https://github.com/martinbudden/NopSCADlib into martinbudden-drag_chain_no_support_v2 2021-12-11 13:10:07 +00:00
Chris Palmer
43c78fd1a3 Anual image changes due to change of computer. 2021-12-11 13:01:57 +00:00
Martin Budden
8682d0a470 Allow configuration of teardrop angle. 2021-12-11 09:34:49 +00:00
Martin Budden
e71db80093 Improvements to core_xy
1. Better default parameters
2. Changed plain_idler_offset to work in x and y, to facilitate larger idler pulleys
2021-11-27 15:07:36 +00:00
Martin Budden
a280e1fcbd Added GT2x9 belt. 2021-11-27 11:06:56 +00:00
Martin Budden
b1ad206ce4 Rotated conical horihole. 2021-11-20 09:51:19 +00:00
Martin Budden
da55f86536 Added variant of drag chain without supports.
Unsupported drag chain has conical pin and corresponding horihole and is printed with cutout facing upwards.

Also made clearance a property of the drag chain so it can be altered for printing chain assemblies
2021-11-20 07:21:09 +00:00
Martin Budden
9790bdda11 Added function returning number of links in drag chain. 2021-11-16 05:41:16 +00:00
Chris Palmer
59c3f984c5 Updated changelog. 2021-11-13 18:35:06 +00:00
Chris Palmer
9c2dd1c37b Merge branch 'martinbudden-screw_socket_visibility' 2021-11-13 18:32:35 +00:00
Chris Palmer
74e569896b Updated images. 2021-11-13 18:32:16 +00:00
Chris Palmer
3a87d7afde Merge branch 'screw_socket_visibility' of https://github.com/martinbudden/NopSCADlib into martinbudden-screw_socket_visibility 2021-11-13 18:11:05 +00:00
Martin Budden
ed6f8cf5c0 Added shading to base of screw sockets to increase visibility. 2021-11-01 10:18:28 +00:00
Chris Palmer
1c9945d978 Updated changelog. 2021-10-29 12:38:48 +01:00
Chris Palmer
9464ad5dbf Fixed knob for pots with split shaft.
Changed the order of knob_for_pot() parameters.
2021-10-29 12:37:12 +01:00
Chris Palmer
370ad8a2d1 Updated changelog. 2021-10-28 13:15:02 +01:00
Chris Palmer
b424bea622 Added printed knobs for pots. 2021-10-28 12:50:22 +01:00
Chris Palmer
c8d9bb7d09 Potentiometers now create a BOM entry and have a value specified. 2021-10-28 12:43:53 +01:00
Chris Palmer
c35c732324 Updated changlog. 2021-10-26 12:28:37 +01:00
Chris Palmer
f5528c5a9a Single 7_segment objects can now have multiple digits.
This is deduced from the digit size compared to the overall size.
The decimal point is now suppressed if there are not enough pins.
Added 02531A and 02352A 3 digit displays.
2021-10-26 12:27:22 +01:00
Chris Palmer
09bce09a85 Typo 2021-10-26 08:47:35 +01:00
Chris Palmer
389e2f9c2e Updated changelog. 2021-10-24 13:52:47 +01:00
Chris Palmer
c35e263113 Merge branch 'martinbudden-magnet_name' 2021-10-24 13:50:17 +01:00
Chris Palmer
bad33da95e Updated images and readme. 2021-10-24 13:49:21 +01:00
Chris Palmer
f727e1d27d Merge branch 'magnet_name' of https://github.com/martinbudden/NopSCADlib into martinbudden-magnet_name 2021-10-24 13:36:33 +01:00
Chris Palmer
5ddd9f6324 Updated changelog. 2021-10-24 13:35:39 +01:00
Chris Palmer
f5d0bfb6c8 Fixed drill center parameter in poly_drill(). 2021-10-24 13:33:51 +01:00
Chris Palmer
b2117fa99a atx_psu_cutout(type) now parametric and can be shown in the test.
ATX300 PSU now has a correct cutout and more accurate grill holes.
The four margins around grill holes can now be specified.
2021-10-24 13:32:46 +01:00
Chris Palmer
6687a4a7c6 Added jack_4mm_flange_radius(). 2021-10-24 13:24:25 +01:00
Chris Palmer
8524ddd34d Foot now lowered by squeeze distance so the washer is visible. 2021-10-24 13:23:45 +01:00
Martin Budden
427ef610de Allowed naming of magnets. Added radial encoder magnet. 2021-10-21 10:37:56 +01:00
Chris Palmer
c8869fc415 Updated changelog. 2021-10-20 20:38:12 +01:00
Chris Palmer
21c06667a3 Added ATX300 PSU model. 2021-10-20 20:35:45 +01:00
Chris Palmer
d19fad3f9f PSU grills can now have different holes sizes, spacing, round or heaxagonal and avoid a list of rectangular regions. 2021-10-20 20:33:52 +01:00
Chris Palmer
172bfb16d8 Added lugless pressfit IEC inlet. 2021-10-20 12:50:35 +01:00
Chris Palmer
491dbae13b screw_shorter_than() will return 4 or 3 for short grub screws. 2021-10-09 12:05:13 +01:00
Chris Palmer
99ebfffd2b Updated changelog. 2021-10-06 10:14:18 +01:00
Chris Palmer
f04486a040 Merge branch 'martinbudden-extrusion_convexity' 2021-10-06 10:12:54 +01:00
Chris Palmer
42a7d222b5 Merge branch 'extrusion_convexity' of https://github.com/martinbudden/NopSCADlib into martinbudden-extrusion_convexity 2021-10-06 10:08:08 +01:00
Chris Palmer
598a01295f Updated changelog. 2021-10-06 10:05:49 +01:00
Chris Palmer
5f72a12125 Nuts shown on jacks and fuseholders only shown threaded when exploded. 2021-10-06 07:32:50 +01:00
Chris Palmer
82502eb470 Added pot_nut() module to draw potentiometer nuts and washers. 2021-10-06 07:31:47 +01:00
Chris Palmer
b541298eae Printed foot assembly can now omit the top washer when space is at a premium.
Now correctly shows the screw in the squeezed position.
2021-10-05 12:33:55 +01:00
Chris Palmer
9884160ed5 Updated the gallery 2021-10-02 20:45:15 +01:00
Martin Budden
046c475e18 Set convexity to 8 for linear_extrude of extrusion. 2021-10-02 09:20:51 +01:00
Chris Palmer
7b111c016a Updated changelog. 2021-10-01 12:37:49 +01:00
Chris Palmer
38c973b316 FR4 veroboard made the correct colour.
veroboard track cuts made slightly bigger.
2021-10-01 12:34:49 +01:00
Chris Palmer
042d809ed0 Resistor and thermistor wires made more round. 2021-10-01 12:33:35 +01:00
Chris Palmer
3864839e52 Fixed encoder breakout descripion typo. 2021-10-01 12:32:47 +01:00
Chris Palmer
2ba2c2c115 Removed some unused dependencies. 2021-10-01 12:32:01 +01:00
Chris Palmer
e3716ce8f9 Updated changelog. 2021-09-29 11:36:36 +01:00
Chris Palmer
c4f24974ab Merge branch 'martinbudden-hotend_includes' 2021-09-29 11:33:33 +01:00
Chris Palmer
61dae9c7a4 Merge branch 'hotend_includes' of https://github.com/martinbudden/NopSCADlib into martinbudden-hotend_includes 2021-09-29 11:03:22 +01:00
Chris Palmer
41a26c453c Updated changelog. 2021-09-29 10:46:45 +01:00
Chris Palmer
bab4c8e8af TO247_size() now also returns lead height and the length of the wide bit.
TO247 leads fixed at 3.
Lead length removed from TO220 and TO247 vitamin string.
2021-09-29 10:42:37 +01:00
Martin Budden
a5c4bf05ad Added hot end style string literals following discussion. 2021-09-28 17:54:42 +01:00
Martin Budden
a65add65ac Removed hotend global enums. 2021-09-28 16:08:57 +01:00
Chris Palmer
c449dd0a24 Updated changelog. 2021-09-27 17:50:00 +01:00
Chris Palmer
f16f7ddb09 Images reverted to last OpenSCAD release versions.
Mainly text spacing changes.
2021-09-27 17:45:57 +01:00
Chris Palmer
9b5ec6af1a Fixed new rounded_polygon to work with last OpenSCAD release.
Trainling commas in let().
2021-09-27 17:16:36 +01:00
Chris Palmer
50958b064d Added $show_plugs to show crude reprentations of housings on pin_headers and Molex KK headers. 2021-09-27 16:36:47 +01:00
Chris Palmer
c37373c920 Added TO247() and TO247_size() to component.scad. 2021-09-27 16:21:37 +01:00
Chris Palmer
700f5a2205 fanguard() can now be made without screw holes to get just the grill. 2021-09-27 16:19:38 +01:00
Chris Palmer
4993c3e82d Module blurb parenthesis parsing is now greedy to handle args that default to function calls.
This means that library modules cannot be one liners.
2021-09-27 16:17:08 +01:00
Chris Palmer
c6b280f0e8 _box_assembly() fix for corners = 0. 2021-09-26 11:26:01 +01:00
Chris Palmer
6012787781 Added jack_4mm_plastic(). 2021-09-26 11:25:08 +01:00
Chris Palmer
30db66034c Rounded_polygons are now generated by a function returning a point list.
The module version simply passes this to polygon.
The arcs now sections of a circle4n() rather than a circle().
2021-09-26 10:54:01 +01:00
Chris Palmer
d6f344be3d Updated changelog. 2021-09-16 23:36:47 +01:00
Chris Palmer
f6aa3b3426 fuseholder_hole() now makes a poly_hole when cnc_bit+_r is 0. 2021-09-16 22:15:26 +01:00
Chris Palmer
91c8c7bf4d cnc_bit_r is now set to zero in stl(), so holes are suitable for 3D printing rather than routing. 2021-09-16 22:14:30 +01:00
Chris Palmer
dc93b8dcdf Added platters and extrusion overrides to the example project. 2021-09-16 22:11:57 +01:00
Chris Palmer
c9c094248e Updated changelog 2021-09-14 10:12:30 +01:00
Chris Palmer
119c2cb6f4 Can now make perfboards with screws holes only at one end.
I.e. for making models of chopped down boards.
2021-09-14 10:09:58 +01:00
Chris Palmer
24b391578b Fixed recently created bug trying to delete non-existent thumbnail diffs. 2021-09-14 10:08:13 +01:00
Chris Palmer
ec49ce1a6c Updated changelog. 2021-09-12 18:04:22 +01:00
Chris Palmer
f0c25d37b0 Workarounds for bugs in the OpenSCAD snapshots. 2021-09-12 18:02:43 +01:00
Chris Palmer
588a1edf62 Updated changelog. 2021-09-11 12:02:53 +01:00
Chris Palmer
3299aad5c8 Parametric potentiometers added, changes PCB "potentiometer" parameters.
The first one is now the type that defaults to the previous BigTreeTech version.
The second parameter is the shaft length overrride.

Added ESP32_DOIT_V1, ArduinoNano and KY_040 breakout PCBs.
2021-09-11 12:01:04 +01:00
Chris Palmer
74c52aac04 Can now make perfboard without screw holes.
Fixed missing items from last commit.
2021-09-11 11:54:26 +01:00
Chris Palmer
726d9ed2dc Can now draw right angle Molex KK connectors and can skip pins to allow high voltage. 2021-09-11 11:51:24 +01:00
Chris Palmer
8a838dd1ce Added pcb_grid_components() module for placing parts on a perfboard. 2021-09-11 11:46:25 +01:00
Chris Palmer
181c6ac624 Added vero_pin PCB component. 2021-09-11 11:44:36 +01:00
Chris Palmer
e952aa7840 PCB chip compoment can now be round if width is zero to fake round buttons. 2021-09-11 11:28:21 +01:00
Chris Palmer
466ee31e10 Added Jack_4mm_shielded_nut_radius(). 2021-09-11 11:21:58 +01:00
Chris Palmer
4c926c529b Fixed axial lead min pitch bug. 2021-09-11 11:20:37 +01:00
Chris Palmer
edb1eccbf1 TFT128x160 LCD display added. 2021-09-11 11:19:24 +01:00
Chris Palmer
061812cc8b PMMA1p25 sheet added. 2021-09-11 11:16:43 +01:00
Chris Palmer
ce0c97b45e 7_segment displays added as PCB component. 2021-09-11 11:15:39 +01:00
Chris Palmer
696b14699c Updated changelog. 2021-09-05 10:26:53 +01:00
Chris Palmer
2166a9be6a extrusion_corner_bracket_assembly() and extrusion_inner_corner_bracket() can now be passed the extrusion type.
E2020t and E4040t thinner extrusions added to work with the brackets.
Extrusions can now have recessed channels, round or square centre sections and holes.
Fixed the shape of extrusion centre section spars.
T-nuts now have 45 degree chamfers instead of a fixed 1mm minimum thickness.
2021-09-05 10:24:42 +01:00
Chris Palmer
511729008d Added missing documentation for sliding_t_nut(). 2021-09-03 15:47:15 +01:00
Chris Palmer
5111ec04bc E40_corner_bracket, E40_corner_bracket and M8_sliding_ball_t_nut added.
Inner corner brackets now show the long arm with chamfered ridges rather
than a normal T-nut and the grub screws are inserted to meet the extrusion.
2021-09-03 09:23:24 +01:00
Chris Palmer
cef3a620a6 Updated changelog 2021-08-31 23:41:34 +01:00
Chris Palmer
da5191e52c Merge branch 'martinbudden-M2p5_dome_screw' 2021-08-31 23:40:51 +01:00
Chris Palmer
d9af5b7f70 Updated images and readme. 2021-08-31 23:38:34 +01:00
Chris Palmer
c30d7f1ad9 Merge branch 'M2p5_dome_screw' of https://github.com/martinbudden/NopSCADlib into martinbudden-M2p5_dome_screw 2021-08-31 23:15:56 +01:00
Chris Palmer
a5382cbe04 Updated changelog. 2021-08-31 23:03:22 +01:00
Chris Palmer
00c5c90a5e Updated big picture 2021-08-31 23:00:58 +01:00
Chris Palmer
01c26d8a34 Added Lichuan servo motors contributed by Niclas Hedhman. 2021-08-31 22:51:24 +01:00
Chris Palmer
ef2102420b Added NEMA8 and NEMA8BH stepper motors.
Steppers can now have dual shafts, hollow shafts and black end caps.
2021-08-31 22:43:37 +01:00
Chris Palmer
540f841163 Added crude representation of JST ZH connectors. 2021-08-31 22:25:31 +01:00
Chris Palmer
1045502efb Added more aluminium sheet thickness 2021-08-31 22:12:30 +01:00
Chris Palmer
485184f092 Added HGH15CA and HGH20CA rails. 2021-08-31 22:04:12 +01:00
Chris Palmer
b893c9069a Added SFU1610 ballscrew nut 2021-08-31 21:56:20 +01:00
Chris Palmer
69f4ced29d Added M8_cs_cap_screw, M5_grub_screw and M6_grub_screw.
Fixed M6_cs_cap_screw and M4_grub_screw socket sizes.
2021-08-31 21:50:43 +01:00
Chris Palmer
5c1aa849fe New layout for big picture. 2021-08-31 21:34:28 +01:00
Martin Budden
9d65f69bf3 Added M2p5_dome_screw. 2021-08-31 20:05:47 +01:00
Chris Palmer
515b99fdc0 Merge branch 'martinbudden-rpi_pico' 2021-08-27 16:18:22 +01:00
Chris Palmer
631d052c68 Updated changelog 2021-08-27 16:18:04 +01:00
Chris Palmer
1247303cb9 Updated images and readme. 2021-08-27 16:15:42 +01:00
Chris Palmer
290be4beb6 Merge branch 'rpi_pico' of https://github.com/martinbudden/NopSCADlib into martinbudden-rpi_pico 2021-08-27 15:04:23 +01:00
Chris Palmer
24e941799d Udpated changelog. 2021-08-27 14:27:29 +01:00
Chris Palmer
6a556c5879 Merge branch 'martinbudden-bldc_propshaft_fix' 2021-08-27 14:20:14 +01:00
Martin Budden
14ab1bb8b6 Added Raspberry Pi Pico. 2021-08-13 10:05:27 +01:00
Martin Budden
be53547728 Fixed display of BLDC prop shaft when thread lengh = 0. 2021-08-09 15:17:30 +01:00
Martin Budden
4138ed438e Added ability to display camera field of view. 2021-08-09 15:10:59 +01:00
Chris Palmer
ba7d7d32ad Updated chnagelog. 2021-07-04 08:39:47 +01:00
Chris Palmer
d3049bc81b Merge branch 'martinbudden-pcb_plating_colour' 2021-07-04 08:38:20 +01:00
Martin Budden
df35e14fc7 Improved handling of pcb plating colour. 2021-07-01 22:49:35 +01:00
Chris Palmer
21c2aa5d62 Updated changelog. 2021-06-29 11:44:48 +01:00
Chris Palmer
c982876ebc Can now specify the screw used for PSU shrouds and get the wall thickness. 2021-06-29 11:42:20 +01:00
Chris Palmer
5ccda42e5b Updated changelog. 2021-06-17 16:17:09 +01:00
Chris Palmer
92d0444e5f Changelog now runs codespell to fix the spellings in the commit comments. 2021-06-17 16:15:46 +01:00
Chris Palmer
b239c1462e Updated changelog. 2021-06-17 16:01:31 +01:00
Chris Palmer
6413b7b2a0 Merge branch 'martinbudden-spelling_corrections' 2021-06-17 15:58:32 +01:00
Chris Palmer
0b0ce66c85 Updated changelog. 2021-06-17 15:56:09 +01:00
Chris Palmer
d38055c15c Updated readme. 2021-06-17 15:53:59 +01:00
Chris Palmer
cf99418a19 Merge branch 'spelling_corrections' of https://github.com/martinbudden/NopSCADlib into martinbudden-spelling_corrections 2021-06-17 15:15:37 +01:00
Chris Palmer
0cd0e72d92 Merge branch 'martinbudden-typos' 2021-06-17 15:15:04 +01:00
Chris Palmer
2c4a498a7a Merge branch 'typos' of https://github.com/martinbudden/NopSCADlib into martinbudden-typos 2021-06-17 15:12:31 +01:00
Chris Palmer
451101fcd6 Updated changelog. 2021-06-17 15:11:03 +01:00
Chris Palmer
c7a6d8164f Added molex_usb_Ax1() and now shows SMT caps in the PCB test. 2021-06-17 15:08:53 +01:00
Martin Budden
8d7c44b80d Spelling corrections. 2021-06-15 10:01:32 +01:00
Martin Budden
dcfe4262c5 Fixed typos. 2021-06-11 20:39:01 +01:00
Chris Palmer
fe3b84f672 Updated changelog 2021-06-08 08:17:37 +01:00
Chris Palmer
d1a17bd4ac Added LIPO fuel gauge PCB. 2021-06-08 08:09:08 +01:00
Chris Palmer
b8efa11fd9 Added SMD capacitors. 2021-06-08 08:08:35 +01:00
Chris Palmer
3bc8f35e37 Can now put jst_ph connectors on PCBs 2021-06-07 17:32:23 +01:00
Chris Palmer
39c11ef3b2 Added 2p54joiner to represent cropped headers joining PCBs. 2021-06-07 17:31:44 +01:00
Chris Palmer
5a8a1da880 Added Seeeduino XIAO.
Tiny PCBs now shown in a third line.
2021-06-07 12:23:29 +01:00
Chris Palmer
3147862212 PCB lands can be rounded and can specify colour.
Holes can be positioned on the edge to make surface mountable connections.
2021-06-07 10:59:47 +01:00
Chris Palmer
4fc8a7f47d Fixed z-fighting between transparent LEDs and PCB. 2021-06-07 10:56:32 +01:00
Chris Palmer
a9ed9944c3 Added PERF70x51. 2021-06-06 17:18:37 +01:00
Chris Palmer
9cd2dbc316 Added copper colour constant.
Copper PCB pads and veroboard tracks now use copper colour.
2021-06-06 17:17:33 +01:00
Chris Palmer
f3bfbbfcf2 Fixed Python error when top level assembly is empty. 2021-06-06 16:53:06 +01:00
Chris Palmer
baaa85ffed Updated readme. 2021-06-06 16:51:32 +01:00
Chris Palmer
f1a49d4e28 Better description of pcb_grid(). 2021-06-06 16:49:33 +01:00
Chris Palmer
0eed0673b0 Updated changelog. 2021-06-04 18:48:38 +01:00
Chris Palmer
9a4cc7ec42 Ziptie BOM entries no longer segregated by radius wrapped around. 2021-06-04 18:46:31 +01:00
Chris Palmer
2fb1185edf Updated changelog. 2021-06-04 17:49:17 +01:00
Chris Palmer
a782d43e67 bom.py now generates bom.csv to allow costed BOMs to be made using a spreadsheet. 2021-06-04 17:47:29 +01:00
Chris Palmer
ae934d47c7 Updated changelog. 2021-06-03 11:59:54 +01:00
Chris Palmer
823f3b936e Add the ability to have a target specific top level module in place of main_assembly(). 2021-06-03 11:58:10 +01:00
Chris Palmer
3027b942a6 Updated changelog. 2021-06-02 16:07:19 +01:00
Chris Palmer
749a1f0648 Fixed male thread z-fighting bug. 2021-06-02 16:05:51 +01:00
Chris Palmer
5c898df217 More readable code in rounded_polygon. 2021-06-01 09:53:46 +01:00
Chris Palmer
7a566cc856 Updated changelog. 2021-06-01 08:20:44 +01:00
Chris Palmer
20d799a3c1 IEC_320_C14_switched_fused_inlet now shows the correct object name in the example. 2021-06-01 08:18:57 +01:00
Chris Palmer
2ee95bba65 Updated changelog. 2021-05-31 17:24:31 +01:00
Chris Palmer
f49bb63266 Merge branch 'martinbudden-bldc_motors' 2021-05-31 17:22:43 +01:00
Chris Palmer
258109811b Added uppercase version of BLCD_motors.scad. 2021-05-31 17:21:49 +01:00
Chris Palmer
b39fd536c2 Removed lower case version of bldc_motors.scad. 2021-05-31 17:21:03 +01:00
Chris Palmer
a5a87d260d Updated images and readme. 2021-05-31 17:19:56 +01:00
Chris Palmer
b09efb10e0 Merge branch 'bldc_motors' of https://github.com/martinbudden/NopSCADlib into martinbudden-bldc_motors 2021-05-31 16:25:23 +01:00
Chris Palmer
53acaac379 Updated changelog 2021-05-31 16:22:52 +01:00
Chris Palmer
9b40e0dcef Merge branch 'martinbudden-thread_colour_assert' 2021-05-31 16:20:29 +01:00
Martin Budden
00ca412441 Added BLDC3548 motor. 2021-05-30 18:58:55 +01:00
Martin Budden
1e6d7f5dd6 Brushless DC motors. 2021-05-30 18:55:32 +01:00
Martin Budden
ec07d95657 Added assertion to check colour format in module thread. 2021-05-30 16:00:13 +01:00
Chris Palmer
0dab0dca08 Added missing includes core.scad which generates warnings with latest OpenSCAD snapshots.
Note, however, NopSCADlib does not work with the current OpenSCAD snapshot.
2021-05-19 17:54:31 +01:00
Chris Palmer
6e6cd45295 Updated changelog 2021-05-18 23:21:40 +01:00
Chris Palmer
3a7fde6c56 Merge branch 'master' of https://github.com/nophead/NopSCADlib.git 2021-05-18 23:18:18 +01:00
Chris Palmer
c5bb898856 Updated changelog. 2021-05-18 23:16:15 +01:00
Chris Palmer
11ebe2225d Removed spurious convexity in difference from rounded_polygon(). 2021-05-18 23:14:34 +01:00
Chris
a1e25bb878 Merge pull request #180 from martinbudden/global_defs_typo
Typo in global_defs.
2021-05-15 14:36:58 +01:00
Martin Budden
9689683b7e Typo in global_defs. 2021-05-15 11:42:24 +01:00
Chris Palmer
08946e3d70 Updated changelog. 2021-05-02 17:16:21 +01:00
Chris Palmer
15c2946e91 Merge branch 'martinbudden-blower_size' 2021-05-02 17:14:28 +01:00
Chris Palmer
34019196cd Updated readme 2021-05-02 17:14:14 +01:00
Martin Budden
436fc71cf3 Added blower_size function. 2021-05-02 15:27:44 +01:00
Chris Palmer
fd67c166f7 Updated changelog 2021-04-26 00:02:59 +01:00
Chris Palmer
634deab911 Merge branch 'martinbudden-core_xy_orientation' 2021-04-26 00:01:40 +01:00
Chris Palmer
e2feceb608 Updated readme 2021-04-26 00:00:41 +01:00
Chris Palmer
d1258e0b0c Merge branch 'core_xy_orientation' of https://github.com/martinbudden/NopSCADlib into martinbudden-core_xy_orientation 2021-04-25 23:57:44 +01:00
Chris Palmer
bd61a1dc55 Updated changelog 2021-04-25 23:56:47 +01:00
Chris Palmer
055e83902f Merge branch 'martinbudden-leadnut_typo' 2021-04-25 23:38:27 +01:00
Chris Palmer
feec1e7ae5 Updated readme. 2021-04-25 23:37:48 +01:00
Martin Budden
be76af2fc4 Fixed typo in leadnut.scad. 2021-04-25 18:31:51 +01:00
Martin Budden
9c1a9bf357 Add facility to orient core_xy with left motor being lower or upper motor. 2021-04-25 17:56:24 +01:00
Chris Palmer
9647fb474b Updated changelog 2021-04-25 00:08:57 +01:00
Chris Palmer
49fdfea792 Added 35BYGHJ75 geared stepper. 2021-04-25 00:07:22 +01:00
Chris Palmer
ac0bacfeda Removed echo in rails test. 2021-04-25 00:02:05 +01:00
Chris Palmer
6288059d99 Updated changelog. 2021-04-13 15:07:09 +01:00
Chris Palmer
0f1dff230a Merge branch 'martinbudden-pcb_component' 2021-04-13 15:05:18 +01:00
Chris Palmer
e379fa8ada Updated readme. 2021-04-13 15:05:12 +01:00
Chris Palmer
313d7508df Merge branch 'pcb_component' of https://github.com/martinbudden/NopSCADlib into martinbudden-pcb_component 2021-04-13 15:01:27 +01:00
Chris Palmer
083caca4e8 Updated changelog. 2021-04-13 15:00:37 +01:00
Chris Palmer
49329df00c Merge branch 'martinbudden-box_section' 2021-04-13 14:57:35 +01:00
Chris Palmer
edc0b86bb1 Updated images and readme. 2021-04-13 14:56:08 +01:00
Martin Budden
5fbff060b0 Added a pcb_component function. 2021-04-13 14:42:00 +01:00
Chris Palmer
b94ca4ad3a Merge branch 'box_section' of https://github.com/martinbudden/NopSCADlib into martinbudden-box_section 2021-04-12 22:35:01 +01:00
Chris Palmer
bc5515d35e Updated changelog. 2021-04-12 22:31:23 +01:00
Chris Palmer
44d213deaa Merge branch 'martinbudden-psu_size' 2021-04-12 22:29:41 +01:00
Chris Palmer
145c5d9b1a Updated readme. 2021-04-12 22:29:20 +01:00
Chris Palmer
7abbbd9b96 Merge branch 'psu_size' of https://github.com/martinbudden/NopSCADlib into martinbudden-psu_size 2021-04-12 22:26:25 +01:00
Chris Palmer
5b160cee88 Updated changelog. 2021-04-12 22:23:58 +01:00
Chris Palmer
3f31607840 Added No8 screws. 2021-04-12 22:22:25 +01:00
Martin Budden
1efed649cf Added PSU size function. 2021-04-12 17:52:57 +01:00
Martin Budden
b70c2f993c Added box sections. 2021-04-12 17:47:35 +01:00
Chris Palmer
56e252f3dc Updated changelog 2021-04-05 16:54:31 +01:00
Chris Palmer
f12b36ea04 Corrected MGN12 rail end value.
Added assert for rail end value too big.
2021-04-05 16:45:23 +01:00
Chris Palmer
bd5811e69b Updated changelog 2021-04-03 12:17:54 +01:00
Chris Palmer
ede4da6f1d Merge branch 'martinbudden-MGN7Hand9H_carriages' 2021-04-03 12:16:07 +01:00
Chris Palmer
51cc2fd679 Carriages now appear on the BOM and both variants are shown in the rail test. 2021-04-03 12:14:36 +01:00
Chris Palmer
4ce2f53e20 Merge branch 'MGN7Hand9H_carriages' of https://github.com/martinbudden/NopSCADlib into martinbudden-MGN7Hand9H_carriages 2021-04-02 19:53:41 +01:00
Chris Palmer
e338c47e73 Updated changelog 2021-04-02 19:52:15 +01:00
Chris Palmer
8328a70f42 Merge branch 'martinbudden-pulley_children' 2021-04-02 19:49:27 +01:00
Chris Palmer
cc794cd7c3 Updated readme. 2021-04-02 19:48:35 +01:00
Chris Palmer
df28bd5116 Merge branch 'pulley_children' of https://github.com/martinbudden/NopSCADlib into martinbudden-pulley_children 2021-04-02 19:39:28 +01:00
Chris Palmer
61de6041d8 Updated changelog. 2021-04-02 19:31:33 +01:00
Chris Palmer
b2d712bca9 Added quadratic_real_roots() and cubic_real_roots(). 2021-04-02 19:30:38 +01:00
Chris Palmer
f3376edaf1 Documented xor() function. 2021-04-02 19:28:49 +01:00
Chris Palmer
c073419c0b Added opengrab_screw_depth() function. 2021-04-02 19:25:42 +01:00
Martin Budden
608168de8e Added MGN7H and MGN9H carriages. 2021-03-31 01:46:18 +01:00
Martin Budden
fc45a40bd3 Added translated children to pulley. 2021-03-31 01:40:06 +01:00
Chris Palmer
52e9c1d7fd Updated changelog 2021-03-22 16:15:09 +00:00
Chris Palmer
ca1b34e9ca Added sink parameter to screw_polysink() to recess the head. 2021-03-22 16:11:51 +00:00
Chris Palmer
cbab9cea02 Fixed M6_cs_cap_screw. 2021-03-22 12:27:11 +00:00
Chris Palmer
69cf998862 Updated changelog 2021-03-21 18:50:14 +00:00
Chris Palmer
08bce9ec03 Updated changelog 2021-03-21 18:45:01 +00:00
Chris Palmer
4aa7dbb416 Added M6_cs_cap_screw. 2021-03-21 18:37:17 +00:00
Chris Palmer
7c7c2e5d3f Pixel changes due to switch to summer computer. 2021-03-21 17:57:46 +00:00
Chris Palmer
f6f6664c0d Updated OpenSCAD version required. 2021-03-15 00:24:14 +00:00
Chris Palmer
2fd2e118a0 Updated changelog 2021-03-14 19:04:00 +00:00
Chris Palmer
22c6fef113 Updated changelog 2021-03-14 18:56:50 +00:00
Chris Palmer
dcf0c949b9 Merge branch 'SmoothieAq-open_belt' 2021-03-14 18:54:28 +00:00
Chris Palmer
9ded315801 Removed the belt gap options and changed the tests to use open loops instead.
Note previous belt lengths were incorrect with negative turns.
Fixed spelling typos.
_belt_length() no longer needs belt type.
Uptated images and readme.
2021-03-14 18:53:37 +00:00
Chris Palmer
42e03679b4 Merge branch 'open_belt' of https://github.com/SmoothieAq/NopSCADlib into SmoothieAq-open_belt 2021-03-14 14:39:05 +00:00
SmoothieAq
d2c795f5f5 fix nan angle (hopefully) 2021-03-14 14:18:05 +01:00
Chris Palmer
83b4ab2374 Merge branch 'open_belt' of https://github.com/SmoothieAq/NopSCADlib into SmoothieAq-open_belt 2021-03-14 12:33:46 +00:00
SmoothieAq
573c50774b changes after review 2021-03-14 12:48:14 +01:00
Chris Palmer
4b93623492 changelog.py now omits "Updated changelog" commits. 2021-03-13 11:19:59 +00:00
Chris Palmer
d496898c80 Updated changelog 2021-03-13 10:46:30 +00:00
Chris Palmer
544e69c71b pulley_pr() now has an optional belt type for non-standard belt over smooth pulleys. 2021-03-13 10:45:54 +00:00
SmoothieAq
240334784d Extension to belt.scad
Can now:
- render open loops
- twist the belt
- use pulleys instead of radius in the points list

Fixes some precision a few places
Breaking change in belt_length(); now requires a type argument
2021-03-11 13:40:17 +01:00
SmoothieAq
516b225275 Merge pull request #1 from nophead/master
update fork
2021-03-10 09:11:48 +01:00
Chris Palmer
e46e6b6e5b Fixed markdown numbered points in core_xy. 2021-03-08 22:57:00 +00:00
Chris Palmer
4925979519 Updated changelog. 2021-03-06 21:41:15 +00:00
Chris Palmer
298d1f9284 Interface is the same but filenames to be included or used changed.
Changlog upated.
2021-03-06 21:31:53 +00:00
Chris Palmer
fcf2f5f7f0 Merge branch 'martinbudden-rounded_triangle_rename' 2021-03-06 21:25:25 +00:00
Chris Palmer
491c3b4ea8 Updated readme, lib.scad and image. 2021-03-06 21:24:57 +00:00
Chris Palmer
94cb50f725 Merge branch 'rounded_triangle_rename' of https://github.com/martinbudden/NopSCADlib into martinbudden-rounded_triangle_rename 2021-03-06 20:17:00 +00:00
Chris Palmer
1d8275c061 Merge branch 'martinbudden-scs_bearing_blocks_rename' 2021-03-06 20:14:42 +00:00
Chris Palmer
3c605d608b Updated path, readme and image 2021-03-06 20:11:55 +00:00
Chris Palmer
9ba48c7e1a Merge branch 'scs_bearing_blocks_rename' of https://github.com/martinbudden/NopSCADlib into martinbudden-scs_bearing_blocks_rename 2021-03-06 17:03:25 +00:00
Chris Palmer
a6ebc5267b Merge branch 'martinbudden-pillow_blocks_rename' 2021-03-06 17:00:46 +00:00
Chris Palmer
e9554ccffe Fixed paths and image. 2021-03-06 17:00:16 +00:00
Chris Palmer
0d179f3728 Merge branch 'pillow_blocks_rename' of https://github.com/martinbudden/NopSCADlib into martinbudden-pillow_blocks_rename 2021-03-06 16:49:21 +00:00
Chris Palmer
a94e462f34 Merge branch 'martinbudden-coreXY_belts' 2021-03-06 16:39:44 +00:00
Chris Palmer
7ce991e625 Updated readme for pulleys on BOM. 2021-03-06 16:37:54 +00:00
Chris Palmer
3e15be852f Merge branch 'coreXY_belts' of https://github.com/martinbudden/NopSCADlib into martinbudden-coreXY_belts 2021-03-06 16:35:52 +00:00
Martin Budden
7c1c8e92f2 Removed green code. 2021-03-06 16:35:46 +00:00
Chris Palmer
54c3b4f600 Fixed path, updated readme and picture. 2021-03-06 16:35:44 +00:00
Martin Budden
d80fc5709e Left pulleys on BOM when show_pulleys true. 2021-03-06 16:32:36 +00:00
Martin Budden
30236046a8 Renamed rounded_right_triangle files to rounded_triangle. 2021-03-06 16:22:41 +00:00
Martin Budden
93aeb4cf2c Renamed scs_bearing_blocks files to bearing_blocks. 2021-03-06 16:16:43 +00:00
Chris Palmer
f62ca35c86 Merge branch 'coreXY_belts' of https://github.com/martinbudden/NopSCADlib into martinbudden-coreXY_belts 2021-03-06 16:14:23 +00:00
Martin Budden
2320cbdbb8 Renamed kp_pillow_blocks files to pillow_blocks. 2021-03-06 16:13:09 +00:00
Martin Budden
769cb44207 Renamed core_xy files. 2021-03-06 16:06:25 +00:00
Chris
f327df95a3 Merge pull request #162 from martinbudden/tests_py
Improved resilience of compare_images.
2021-03-06 15:58:38 +00:00
Martin Budden
09956b6219 Improved resilience of compare_images. 2021-03-06 15:36:49 +00:00
Chris
f8c9adca5a Merge pull request #161 from martinbudden/cmdline_reorder
Reordered openscad command line parameters to put output name first.
2021-03-06 15:06:03 +00:00
Martin Budden
b83e56713f Reordered openscad command line parameters. 2021-03-06 14:30:35 +00:00
Martin Budden
4c12d5fca4 Added parameterised CoreXY. 2021-03-06 10:10:28 +00:00
Chris Palmer
da4f9fbdc3 Typo in changlog.py doc string. 2021-03-04 09:14:27 +00:00
Chris Palmer
614e5f3a72 Issues in the changelog now link to to the issue. 2021-03-03 19:27:25 +00:00
Chris Palmer
a7eae4f549 Neater changlog format. 2021-03-03 19:10:27 +00:00
Chris Palmer
3cd5769708 Merge branch 'martinbudden-cf_contrast' 2021-03-03 14:32:19 +00:00
Chris Palmer
7b770abe12 Udpated changelog 2021-03-03 14:31:38 +00:00
Chris Palmer
31ab8562a7 Updated images 2021-03-03 14:29:32 +00:00
Chris Palmer
db703379a3 Merge branch 'cf_contrast' of https://github.com/martinbudden/NopSCADlib into martinbudden-cf_contrast 2021-03-03 14:17:48 +00:00
Chris Palmer
cd925bc049 Added changelog link to readme. 2021-03-03 14:12:21 +00:00
Chris Palmer
4a2951e22f Fixed changelog.py for when HEAD doesn't have tag. 2021-03-03 13:51:22 +00:00
Chris Palmer
a93a8f99fb Added CHANGELOG.md for #154 2021-03-03 13:47:09 +00:00
Martin Budden
73c436ee15 Improved contrast of carbon fiber sheets. 2021-02-27 16:34:27 +00:00
Chris Palmer
c69100bd71 Added spring steel and silicone sheets. 2021-02-22 15:26:19 +00:00
Chris Palmer
e0b89359aa Fixed plateup using target dir when no panels or platters. 2021-02-21 14:18:41 +00:00
Chris Palmer
041d720c39 Updated example bom.json. 2021-02-21 14:17:09 +00:00
Chris Palmer
03a0c2fe98 Fixed typo. 2021-02-20 20:13:36 +00:00
Chris Palmer
7c2df8d36d The pose module can now specify the camera distance supressing viewall and
autocentre.
2021-02-20 19:28:52 +00:00
Chris Palmer
8474718884 Added printed pocket_handle(). 2021-02-17 13:20:39 +00:00
Chris Palmer
fe0f32ddc5 Merge branch 'martinbudden-polyholes' 2021-02-11 09:41:27 +00:00
Chris Palmer
f191b9b0f4 Updated readme 2021-02-11 09:40:18 +00:00
Chris Palmer
2b3908b6fd Merge branch 'polyholes' of https://github.com/martinbudden/NopSCADlib into martinbudden-polyholes 2021-02-11 09:11:42 +00:00
Chris Palmer
0a84bf0927 plateup.py now saves the used files to speed up processing when a part hasn't changed.
Added times to plateup.py.
2021-02-11 09:10:15 +00:00
Chris Palmer
da825b17ab Added colorama.init() to plateup.py to handle new coloured changed messages. 2021-02-10 10:22:38 +00:00
Chris Palmer
ca153c971d Fixed platters and panels not working in the GUI, a regression.
set_config() now puts $cwd in target.scad.
use_stl() and use_dxf() included again instead of used.
2021-02-10 10:17:03 +00:00
Martin Budden
0199587907 Allow poly_shapes to collapse to non-poly form. 2021-02-10 08:29:15 +00:00
Chris Palmer
60350eb228 Updated gallery.py for new page break format. 2021-02-09 23:44:03 +00:00
Chris Palmer
4f9729cf86 Now shows what changed to trigger an openscad invocation in cyan. 2021-02-09 23:32:53 +00:00
Chris Palmer
26f1338ca2 Fixed removal of old deps 2021-02-09 14:34:27 +00:00
Chris Palmer
fc44b43638 Temporary files used during make_all and tests now in tmp dir. 2021-02-09 09:52:26 +00:00
Chris Palmer
182f39876a Moved deps directories to separate stl deps from views deps. 2021-02-09 09:18:30 +00:00
Chris Palmer
055e90cbb3 /stls/ and /dxfs/ excluded from deps to prevent circular dependencies. 2021-02-08 22:44:21 +00:00
Chris Palmer
832380f893 Fixed set_config always writing to target.scad. 2021-02-08 20:31:10 +00:00
Chris Palmer
929d082b25 openscad.py now quits if there are errors or warnings in the log.
This is because the exit status is not always set correctly.
2021-02-08 16:03:59 +00:00
Chris Palmer
57212b5701 set_config.py now defines $target. 2021-02-08 15:00:44 +00:00
Chris Palmer
1c3f136657 Fixed $cwd and $target not defined during silent run. 2021-02-08 15:00:01 +00:00
Chris Palmer
cfd2fd32a1 Now checks openscad.echo for warnings when used instead of openscad.log. 2021-02-08 14:58:50 +00:00
Chris Palmer
f573a91a09 Removed redundant rounded_rectangle center = false. 2021-02-08 09:41:07 +00:00
Chris Palmer
d75aff2ccd rounded_retangle() centre now defaults to false. 2021-02-08 09:24:00 +00:00
Chris Palmer
491d85156c Merge branch 'martinbudden-rounded_cubes' 2021-02-08 08:29:50 +00:00
Chris Palmer
c89ce6843f Updated images and readme. 2021-02-08 08:29:08 +00:00
Chris Palmer
1915dae034 Merge branch 'rounded_cubes' of https://github.com/martinbudden/NopSCADlib into martinbudden-rounded_cubes 2021-02-07 22:17:22 +00:00
Chris Palmer
05e8055ce2 Merge branch 'martinbudden-btt_skr_e3_turbo' 2021-02-07 22:01:41 +00:00
Chris Palmer
21822b9abb Updated pictures and readme. 2021-02-07 22:01:26 +00:00
Chris Palmer
d83d4b89bf Merge branch 'btt_skr_e3_turbo' of https://github.com/martinbudden/NopSCADlib into martinbudden-btt_skr_e3_turbo 2021-02-07 21:48:16 +00:00
Chris Palmer
613152f589 Merge branch 'martinbudden-bl30x10' 2021-02-07 21:46:28 +00:00
Chris Palmer
d90c00d140 Updated images and readme. 2021-02-07 21:46:15 +00:00
Chris Palmer
b52ca9589a Merge branch 'bl30x10' of https://github.com/martinbudden/NopSCADlib into martinbudden-bl30x10 2021-02-07 21:25:53 +00:00
Martin Budden
0d024060fc Added BTT_SKR_E3_TURBO. 2021-02-07 07:51:10 +00:00
Martin Budden
c4fe1d1098 Added assertion to check r value. Used extrud_if. 2021-02-07 07:29:02 +00:00
Chris Palmer
a3ced6de45 Merge branch 'martinbudden-mgn9_correction' 2021-02-06 15:29:51 +00:00
Chris Palmer
1cdfe3267c Merge branch 'mgn9_correction' of https://github.com/martinbudden/NopSCADlib into martinbudden-mgn9_correction 2021-02-06 15:28:49 +00:00
Chris Palmer
b67cf4ce97 Library printed parts now make use of stl() child. 2021-02-06 15:24:19 +00:00
Chris Palmer
5bac2bf46d stl() and dxf() can now have the code to make the STL or DXF as a child.
This allows them to be replaced by the STL or DXF when making assembly views.

use_dxf() and use_stl() make use of $cwd and $target, so can be in bom.scad
and be documented.

Corrected the spelling of widget in BOM test.
2021-02-06 15:23:10 +00:00
Chris Palmer
079168142b Views.py and plateup.py now define $cwd and $target. 2021-02-06 15:12:21 +00:00
Chris Palmer
cb30f0c63d Times for parts that no longer exist pruned from build times.
Now shows changes to the total time.
2021-02-06 10:39:39 +00:00
Martin Budden
812fbc106c Updated screw hole position. 2021-02-04 19:59:28 +00:00
Martin Budden
dd38fa6e5d Added 30x10 square radial fan. 2021-02-04 18:26:44 +00:00
Martin Budden
5cdcd4ad37 Corrected MGN9 rail end value. 2021-02-03 11:24:44 +00:00
Chris Palmer
4cb324ed37 Merge branch 'martinbudden-rails_rename' 2021-02-03 07:10:27 +00:00
Chris Palmer
eb997aa18c Updated readme for rails. Note interface change. 2021-02-03 07:10:07 +00:00
Chris Palmer
f09343a285 Merge branch 'rails_rename' of https://github.com/martinbudden/NopSCADlib into martinbudden-rails_rename 2021-02-03 06:38:07 +00:00
Chris Palmer
54aab027bd Merge branch 'martinbudden-skr_mini_e3_update' 2021-02-03 06:35:54 +00:00
Chris Palmer
cc61a11602 Updated PCB images. 2021-02-03 06:35:42 +00:00
Chris Palmer
9cf2e9d7c3 Merge branch 'skr_mini_e3_update' of https://github.com/martinbudden/NopSCADlib into martinbudden-skr_mini_e3_update 2021-02-03 06:26:36 +00:00
Chris Palmer
9da8a3cb26 Set ngb for most library assemblies. 2021-02-03 06:21:44 +00:00
Chris Palmer
36521cf0b9 Set ngb parameter of assembly() to remove it from the global BOM and merge
its parts into it parent's global BOM column.
2021-02-03 06:21:17 +00:00
Martin Budden
22b7aa956c Renamed rounded_rectangle_* to rounded_cube_*. 2021-02-02 17:32:44 +00:00
Martin Budden
f760aaa20a Changed carriage to specify its rail type. 2021-02-02 12:23:03 +00:00
Martin Budden
1c445385b4 Made C version of linear rails and carriages explicit. 2021-02-01 19:21:50 +00:00
Martin Budden
45f3fc275f BTT_SKR_MINI_E3_V2_0 tidy and correction. 2021-02-01 19:19:20 +00:00
Chris Palmer
f7fbbd5fe4 No longer runs markdown twice to make printme.html.
Instead uses empty spans to mark page breaks and then replaces them.
2021-02-01 00:10:54 +00:00
Chris Palmer
a769a38dff Generation of the html files included in the build times. 2021-01-31 10:52:26 +00:00
Chris Palmer
0485eeeb34 Removed page break at the end for printme.html 2021-01-31 10:50:20 +00:00
Chris Palmer
0a7208ff5a Fixed codespell path for multi-target builds. 2021-01-31 10:47:54 +00:00
Chris Palmer
f32182d6df Merge branch 'martinbudden-pulley_colour' 2021-01-26 17:35:02 +00:00
Chris Palmer
84fbd05f9b Updated readme for pulley colour. 2021-01-26 17:34:43 +00:00
Chris Palmer
2a1fa3fe6b Merge branch 'pulley_colour' of https://github.com/martinbudden/NopSCADlib into martinbudden-pulley_colour 2021-01-26 17:10:58 +00:00
Chris Palmer
176dc3231c Merge branch 'martinbudden-screw_m5_dome' 2021-01-26 17:03:32 +00:00
Chris Palmer
e7ac18e3c0 Updated images and readme. 2021-01-26 17:03:16 +00:00
Martin Budden
74b8dcb6d8 Added colour parameter to pulley. 2021-01-26 15:20:20 +00:00
Martin Budden
6269575fd4 Added M5_dome_screw. 2021-01-26 15:12:52 +00:00
Chris Palmer
2923e35725 Added microswitch_op_tol() and microswitch_fp_max() functions. 2021-01-24 21:44:57 +00:00
Chris Palmer
5a1b06fbb9 Merge branch 'martinbudden-BTT_SKR_MINI_E3_V2_0' 2021-01-24 11:20:37 +00:00
Chris Palmer
fd174bbfb4 Updated readme and images. 2021-01-24 11:20:01 +00:00
Chris Palmer
186f31bb09 Merge branch 'BTT_SKR_MINI_E3_V2_0' of https://github.com/martinbudden/NopSCADlib into martinbudden-BTT_SKR_MINI_E3_V2_0 2021-01-24 10:59:03 +00:00
Martin Budden
80f0490d58 Added BTT_SKR_MINI_E3_V2_0 pcb. 2021-01-24 10:55:49 +00:00
Chris Palmer
c9e9942070 Fixed some paths that used NopSCADlib instead of .. 2021-01-23 21:15:00 +00:00
Chris Palmer
e41366e20c Added explicit error message when tmp.png is not generated as expected.
Prints a newline after test runs rather than before.
2021-01-21 12:49:48 +00:00
Chris Palmer
0595fb5a92 Merge branch 'martinbudden-btt_skr_1_4' 2021-01-18 15:57:04 +00:00
Chris Palmer
abb676b75c Updated readme and cover picture for BTT_SKR_V1_4_TURBO PCB.
Added list of hidden pcbs to hide the boring ones.
Smaller PCBs closer together to make space.
2021-01-18 15:56:09 +00:00
Chris Palmer
19bae20e24 Merge branch 'btt_skr_1_4' of https://github.com/martinbudden/NopSCADlib into martinbudden-btt_skr_1_4 2021-01-18 12:54:03 +00:00
Chris Palmer
a7d181ffc4 Merge branch 'martinbudden-rectangular_tube' 2021-01-18 12:52:53 +00:00
Chris Palmer
6b2f8d282b Updated readme and images. 2021-01-18 12:52:41 +00:00
Chris Palmer
5bb95b2406 Merge branch 'rectangular_tube' of https://github.com/martinbudden/NopSCADlib into martinbudden-rectangular_tube 2021-01-18 10:34:51 +00:00
Martin Budden
bd2ea3f284 Added a rectangular tube. 2021-01-17 16:34:09 +00:00
Martin Budden
62183bcadc Added BTT SKR V1.4 Turbo pcb. 2021-01-17 16:29:42 +00:00
393 changed files with 254206 additions and 14277 deletions

1
.gitignore vendored
View File

@@ -11,3 +11,4 @@ options.json
times.txt
*_diff.png
*.echo
cmd_times.txt

2497
CHANGELOG.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
# NopSCADlib usage
## Requirements
1. OpenSCAD 2019.05 or later, download it from here: https://www.openscad.org/downloads.html
1. OpenSCAD 2021.01 or later, download it from here: https://www.openscad.org/downloads.html
1. Python 2.7+ or 3.6+ from https://www.python.org/downloads/
1. ImageMagick 7 www.imagemagick.org
@@ -28,6 +28,8 @@ by downloading https://github.com/nophead/NopSCADlib/archive/master.zip and unzi
The `NopSCADlib/scripts` directory needs to be added to the executable search path, `PATH` on Windows and `path` on Linux and Mac.
Note that on Linux and OSX the full file name including the `.py` will be needed.
The installation can be tested by opening `NopSCADlib/libtest.scad` in the OpenSCAD GUI. It should render all the objects in the library in about 1 minute.
Running `tests` from the command line will run all the tests in the `tests` directory and build the `readme.md` catalog for GitHub and render it to `readme.html`
@@ -172,7 +174,7 @@ This is achieved by having a pair of modules: -
//! Place inserts in the bottom of the posts and push them home with a soldering iron with a conical bit heated to 200°C.
//
module handle_assembly() pose([225, 0, 150], [0, 0, 14]) //! Printed part with inserts in place
assembly("handle") {
assembly("handle", ngb = true) {
translate_z(handle_height())
stl_colour(pp1_colour) vflip() handle_stl();
@@ -201,6 +203,9 @@ When the parent assembly is shown exploded the handle's screws will be exploded
Note also the `pose([225, 0, 150], [0, 0, 14])` call before the `assembly()` call. This allows the sub-assembly to be posed differently in its build step but doesn't
affect its orientation in the parent assembly. The pose parameters are the rotation and the translation taken from the GUI.
Setting `ngb = true` in the `assembly()` prevents the handle assembly appearing as a columun in the top level BOM in the build instructions.
Instead its parts are merged into the parent BOM so the correct quantites are listed.
### Exploded diagrams
A lot of vitamins explode themselves when `$explode=1`. This is done with module `explode()` that can be passed a Z offset, or a 3D vector that gives the displacement
@@ -267,6 +272,22 @@ The target config file is selected by generating `target.scad` that includes `co
The rest of the project includes `target.scad` to use the configuration.
Additionally all the generated file directories (assemblies, bom, stls, dxfs, etc.) are placed in a sub-directory called `<target_name>`.
The build system will look for a `<target_name>_assembly` module and use it as the top level module instead of `main_assembly` if it it exists.
That allows the project description to be target specific if the top level modules are in different scad files.
The top level assembly instructions and assembly contents could also be different if appropriate.
If the top level module is just a shell wrapper that simply includes one other assembly, with no additional parts, then it is removed from the build instructions and
the assembly it calls becomes the top level. This allows a different project description for each target but only one set of top level instructions without repeating them.
### Costed BOMs
A costed bill of materials can be made by opening the generated file `bom/bom.csv` in a spreadsheet program using a single quote as the string delimiter and comma as the field separator.
That gets a list of part descriptions and quantities to which prices can be added to get the total cost and perhaps a URL of where to buy each part.
If a Python file called `parts.py` is found then `bom.py` will attempt to call functions for each part to get a price and URL.
Any functions not found are printed, so you can see the format expected.
The function are passed the quantity to allow them to calculate volume discounts, etc.
### Other libraries
The build scripts need to be able to locate the source files where the modules to generate the STL files and assemblies reside. They will search all the scad files

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -0,0 +1,5 @@
RPI_assembly:
Vitamins:
1 Micro SD card
1 Raspberry Pi Zero
1 Pin header 20 x 2 right_angle

View File

@@ -0,0 +1,7 @@
RPI_case_assembly:
Vitamins:
2 Screw M2.5 pan x 6.4mm
Assemblies:
1 RPI_assembly
1 enviro_case_assembly

View File

@@ -0,0 +1,8 @@
back_assembly:
Vitamins:
1 Fan 17mm x 8mm
1 PMS5003 particle detector
Printed:
1 enviro_plus_case_base.stl
1 fan_duct.stl

View File

@@ -0,0 +1,21 @@
'Micro SD card', 1
'Fan 17mm x 8mm', 1
'Heatfit insert M2', 4
'Nut M2.5 x 2.2mm nyloc', 4
'Enviro+', 1
'Raspberry Pi Zero', 1
'Pin header 20 x 2 right_angle', 1
'PMS5003 particle detector', 1
'Screw M2 cap x 6mm', 4
'Screw M2.5 pan x 6.4mm', 2
'Screw M2.5 pan x 8mm', 4
'Screw M3 pan x 6mm', 3
'SMD capacitor 1206 10uF', 1
'SMD resistor 0805 3K3 0.125W', 1
'SOT223 package FZT851', 1
'Veroboard 6 holes x 6strips', 1
'Washer M2 x 5mm x 0.3mm', 4
'Washer M2.5 x 5.9mm x 0.5mm', 4
'Washer M3 x 7mm x 0.5mm', 3
'Wire link 0.8mm x 6.5mm', 3
'Wire link 0.8mm x 0.4"', 1
Can't render this file because it contains an unexpected character in line 21 and column 23.

View File

@@ -0,0 +1,194 @@
[
{
"name": "back_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {},
"vitamins": {
"pms5003(): PMS5003 particle detector": {
"count": 1
},
"fan(fan17x8): Fan 17mm x 8mm": {
"count": 1
}
},
"printed": {
"fan_duct.stl": {
"count": 1,
"colour": "darkorange"
},
"enviro_plus_case_base.stl": {
"count": 1,
"colour": "grey"
}
},
"routed": {}
},
{
"name": "RPI_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {},
"vitamins": {
"pcb(RPI0): Raspberry Pi Zero": {
"count": 1
},
": Micro SD card": {
"count": 1
},
"pin_header(2p54header, 20, 2, right_angle = true): Pin header 20 x 2 right_angle": {
"count": 1
}
},
"printed": {},
"routed": {}
},
{
"name": "fan_controller_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {},
"vitamins": {
"veroboard(fan_vb): Veroboard 6 holes x 6strips": {
"count": 1
},
"wire_link(0.8, 10.16, tail = 2.5): Wire link 0.8mm x 0.4\"": {
"count": 1
},
"wire_link(0.8, 0, h = 4, tail = 2.5): Wire link 0.8mm x 6.5mm": {
"count": 3
},
"smd_resistor(RES0805, 3K3): SMD resistor 0805 3K3 0.125W": {
"count": 1
},
"smd_capacitor(CAP1206): SMD capacitor 1206 10uF": {
"count": 1
},
"smd_sot(SOT223): SOT223 package FZT851": {
"count": 1
}
},
"printed": {},
"routed": {}
},
{
"name": "enviro_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {
"fan_controller_assembly": 1
},
"vitamins": {
"pcb(EnviroPlus): Enviro+": {
"count": 1
}
},
"printed": {},
"routed": {}
},
{
"name": "case_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {},
"vitamins": {
"insert(F1BM2): Heatfit insert M2": {
"count": 4
},
"washer(M3_washer): Washer M3 x 7mm x 0.5mm": {
"count": 3
},
"screw(M3_pan_screw, 6): Screw M3 pan x 6mm": {
"count": 3
}
},
"printed": {
"enviro_plus_case.stl": {
"count": 1,
"colour": "grey"
},
"bulkhead.stl": {
"count": 1,
"colour": "[0.862745, 0.0784314, 0.235294]"
},
"foot.stl": {
"count": 3,
"colour": "darkorange"
}
},
"routed": {}
},
{
"name": "enviro_case_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {
"case_assembly": 1,
"enviro_assembly": 1
},
"vitamins": {
"screw(M2p5_pan_screw, 8): Screw M2.5 pan x 8mm": {
"count": 4
},
"washer(M2p5_washer): Washer M2.5 x 5.9mm x 0.5mm": {
"count": 4
},
"nut(M2p5_nut, nyloc = true): Nut M2.5 x 2.2mm nyloc": {
"count": 4
}
},
"printed": {},
"routed": {}
},
{
"name": "RPI_case_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {
"enviro_case_assembly": 1,
"RPI_assembly": 1
},
"vitamins": {
"screw(M2p5_pan_screw, 6.4): Screw M2.5 pan x 6.4mm": {
"count": 2
}
},
"printed": {},
"routed": {}
},
{
"name": "main_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {
"RPI_case_assembly": 1,
"back_assembly": 1
},
"vitamins": {
"washer(M2_washer): Washer M2 x 5mm x 0.3mm": {
"count": 4
},
"screw(M2_cap_screw, 6): Screw M2 cap x 6mm": {
"count": 4
}
},
"printed": {},
"routed": {}
}
]

View File

@@ -0,0 +1,53 @@
Vitamins:
F
a
n
E
n c
v o
R i n
p r t
i E o r
n o
c B C v c l M
R a a a i a l a
p s c s r s e i
i e k e o e r n
1| | | | | | | | 1 Micro SD card
| | 1| | | | | | 1 Fan 17mm x 8mm
| | | 4| | | | | 4 Heatfit insert M2
| | | | | 4| | | 4 Nut M2.5 x 2.2mm nyloc
| | | | 1| | | | 1 Enviro+
1| | | | | | | | 1 Raspberry Pi Zero
1| | | | | | | | 1 Pin header 20 x 2 right_angle
| | 1| | | | | | 1 PMS5003 particle detector
| | | | | | | 4| 4 Screw M2 cap x 6mm
| 2| | | | | | | 2 Screw M2.5 pan x 6.4mm
| | | | | 4| | | 4 Screw M2.5 pan x 8mm
| | | 3| | | | | 3 Screw M3 pan x 6mm
| | | | | | 1| | 1 SMD capacitor 1206 10uF
| | | | | | 1| | 1 SMD resistor 0805 3K3 0.125W
| | | | | | 1| | 1 SOT223 package FZT851
| | | | | | 1| | 1 Veroboard 6 holes x 6strips
| | | | | | | 4| 4 Washer M2 x 5mm x 0.3mm
| | | | | 4| | | 4 Washer M2.5 x 5.9mm x 0.5mm
| | | 3| | | | | 3 Washer M3 x 7mm x 0.5mm
| | | | | | 3| | 3 Wire link 0.8mm x 6.5mm
| | | | | | 1| | 1 Wire link 0.8mm x 0.4"
Printed:
| | | 1| | | | | 1 bulkhead.stl
| | | 1| | | | | 1 enviro_plus_case.stl
| | 1| | | | | | 1 enviro_plus_case_base.stl
| | 1| | | | | | 1 fan_duct.stl
| | | 3| | | | | 3 foot.stl
Assemblies:
1 RPI_assembly
1 RPI_case_assembly
1 back_assembly
1 case_assembly
1 enviro_assembly
1 enviro_case_assembly
1 fan_controller_assembly
1 main_assembly

View File

@@ -0,0 +1,10 @@
case_assembly:
Vitamins:
4 Heatfit insert M2
3 Screw M3 pan x 6mm
3 Washer M3 x 7mm x 0.5mm
Printed:
1 bulkhead.stl
1 enviro_plus_case.stl
3 foot.stl

View File

@@ -0,0 +1,6 @@
enviro_assembly:
Vitamins:
1 Enviro+
Assemblies:
1 fan_controller_assembly

View File

@@ -0,0 +1,9 @@
enviro_case_assembly:
Vitamins:
4 Nut M2.5 x 2.2mm nyloc
4 Screw M2.5 pan x 8mm
4 Washer M2.5 x 5.9mm x 0.5mm
Assemblies:
1 case_assembly
1 enviro_assembly

View File

@@ -0,0 +1,8 @@
fan_controller_assembly:
Vitamins:
1 SMD capacitor 1206 10uF
1 SMD resistor 0805 3K3 0.125W
1 SOT223 package FZT851
1 Veroboard 6 holes x 6strips
3 Wire link 0.8mm x 6.5mm
1 Wire link 0.8mm x 0.4"

View File

@@ -0,0 +1,8 @@
main_assembly:
Vitamins:
4 Screw M2 cap x 6mm
4 Washer M2 x 5mm x 0.3mm
Assemblies:
1 RPI_case_assembly
1 back_assembly

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

View File

@@ -0,0 +1,298 @@
<a name="TOP"></a>
# EnviroPlus
Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
![Main Assembly](assemblies/main_assembled.png)
<span></span>
---
## Table of Contents
1. [Parts list](#Parts_list)
1. [Back Assembly](#back_assembly)
1. [RPI Assembly](#RPI_assembly)
1. [Fan Controller Assembly](#fan_controller_assembly)
1. [Enviro Assembly](#enviro_assembly)
1. [Case Assembly](#case_assembly)
1. [Enviro Case Assembly](#enviro_case_assembly)
1. [RPI Case Assembly](#RPI_case_assembly)
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;">Back</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">RPI</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Fan&nbsp;Controller</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Enviro</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Case</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Enviro&nbsp;Case</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">RPI&nbsp;Case</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Main</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">TOTALS</span> | |
|---:|---:|---:|---:|---:|---:|---:|---:|---:|:---|
| | | | | | | | | | **Vitamins** |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; Enviro+ |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; Fan 17mm x 8mm |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp; Heatfit insert M2 |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; Micro SD card |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp; Nut M2.5 x 2.2mm nyloc |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; PMS5003 particle detector |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; Pin header 20 x 2 right_angle |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; Raspberry Pi Zero |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; SMD capacitor 1206 10uF |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; SMD resistor 0805 3K3 0.125W |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; SOT223 package FZT851 |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp; Screw M2 cap x 6mm |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;2&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;2&nbsp; | &nbsp;&nbsp; Screw M2.5 pan x 6.4mm |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp; Screw M2.5 pan x 8mm |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;3&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;3&nbsp; | &nbsp;&nbsp; Screw M3 pan x 6mm |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; Veroboard 6 holes x 6strips |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp; Washer M2 x 5mm x 0.3mm |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp; Washer M2.5 x 5.9mm x 0.5mm |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;3&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;3&nbsp; | &nbsp;&nbsp; Washer M3 x 7mm x 0.5mm |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; Wire link 0.8mm x 0.4" |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;3&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;3&nbsp; | &nbsp;&nbsp; Wire link 0.8mm x 6.5mm |
| &nbsp;&nbsp;2&nbsp; | &nbsp;&nbsp;3&nbsp; | &nbsp;&nbsp;8&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;10&nbsp; | &nbsp;&nbsp;12&nbsp; | &nbsp;&nbsp;2&nbsp; | &nbsp;&nbsp;8&nbsp; | &nbsp;&nbsp;46&nbsp; | &nbsp;&nbsp;Total vitamins count |
| | | | | | | | | | **3D printed parts** |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;bulkhead.stl |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;enviro_plus_case.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;enviro_plus_case_base.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;fan_duct.stl |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;3&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;3&nbsp; | &nbsp;&nbsp;foot.stl |
| &nbsp;&nbsp;2&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;5&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;7&nbsp; | &nbsp;&nbsp;Total 3D printed parts count |
<span></span>
[Top](#TOP)
---
<a name="back_assembly"></a>
## Back Assembly
### Vitamins
|Qty|Description|
|---:|:----------|
|1| Fan 17mm x 8mm|
|1| PMS5003 particle detector|
### 3D Printed parts
| 1 x enviro_plus_case_base.stl | 1 x fan_duct.stl |
|---|---|
| ![enviro_plus_case_base.stl](stls/enviro_plus_case_base.png) | ![fan_duct.stl](stls/fan_duct.png)
### Assembly instructions
![back_assembly](assemblies/back_assembly.png)
1. Print the fan duct in flexible TPE with low infill.
1. Slide the pms5003 into the printed receptacle with the fan to the outside. Secure with tape if it is loose.
1. Slide the fan into the fan duct.
1. Slide the fan duct into the printed recepacle.
![back_assembled](assemblies/back_assembled.png)
<span></span>
[Top](#TOP)
---
<a name="RPI_assembly"></a>
## RPI Assembly
### Vitamins
|Qty|Description|
|---:|:----------|
|1| Micro SD card|
|1| Pin header 20 x 2 right_angle|
|1| Raspberry Pi Zero|
### Assembly instructions
![RPI_assembly](assemblies/RPI_assembly_tn.png)
* Solder a right angle connector to the Raspberry Pi Zero.
![RPI_assembled](assemblies/RPI_assembled_tn.png)
<span></span>
[Top](#TOP)
---
<a name="fan_controller_assembly"></a>
## Fan Controller Assembly
### Vitamins
|Qty|Description|
|---:|:----------|
|1| SMD capacitor 1206 10uF|
|1| SMD resistor 0805 3K3 0.125W|
|1| SOT223 package FZT851|
|1| Veroboard 6 holes x 6strips|
|1| Wire link 0.8mm x 0.4"|
|3| Wire link 0.8mm x 6.5mm|
### Assembly instructions
![fan_controller_assembly](assemblies/fan_controller_assembly_tn.png)
The fan controller is a single transistor wired as a Miller integrator that effectively multiplies the capacitor value by the gain of the transistor.
It converts the PWM signal on GPI4 to a stead DC voltage so that the fan doesn't whine, or stutter.
![Schematic](docs/fan_controller.jpg)
***
* Make two track cuts as shown, one wide and the other narrow.
![TrackCuts](docs/cuts.jpg)
1. Add the SMT compeonents and then the wire links.
1. Add more solder around the transistor to act as a heatsink.
![SMT](docs/smt.jpg)
![fan_controller_assembled](assemblies/fan_controller_assembled_tn.png)
<span></span>
[Top](#TOP)
---
<a name="enviro_assembly"></a>
## Enviro Assembly
### Vitamins
|Qty|Description|
|---:|:----------|
|1| Enviro+|
### Sub-assemblies
| 1 x fan_controller_assembly |
|---|
| ![fan_controller_assembled](assemblies/fan_controller_assembled_tn.png)
### Assembly instructions
![enviro_assembly](assemblies/enviro_assembly_tn.png)
* Solder the fan_controller to the Enviro+ expansion connector at the 5V, GND and #4 pins.
![enviro_assembled](assemblies/enviro_assembled_tn.png)
<span></span>
[Top](#TOP)
---
<a name="case_assembly"></a>
## Case Assembly
### Vitamins
|Qty|Description|
|---:|:----------|
|4| Heatfit insert M2|
|3| Screw M3 pan x 6mm|
|3| Washer M3 x 7mm x 0.5mm|
### 3D Printed parts
| 1 x bulkhead.stl | 1 x enviro_plus_case.stl | 3 x foot.stl |
|---|---|---|
| ![bulkhead.stl](stls/bulkhead.png) | ![enviro_plus_case.stl](stls/enviro_plus_case.png) | ![foot.stl](stls/foot.png)
### Assembly instructions
![case_assembly](assemblies/case_assembly.png)
1. Solvent weld or glue the bulkhead into the recess in the bottom of the case.
1. Fit the heatfit inserts with a soldering iron with a conical bit heated to about 200&deg;C.
1. Tap the three holes for the feet with an M3 tap.
1. Screw on the three feet with M3 x 6mm pan screws and washers.
![case_assembled](assemblies/case_assembled.png)
<span></span>
[Top](#TOP)
---
<a name="enviro_case_assembly"></a>
## Enviro Case Assembly
### Vitamins
|Qty|Description|
|---:|:----------|
|4| Nut M2.5 x 2.2mm nyloc|
|4| Screw M2.5 pan x 8mm|
|4| Washer M2.5 x 5.9mm x 0.5mm|
### Sub-assemblies
| 1 x case_assembly | 1 x enviro_assembly |
|---|---|
| ![case_assembled](assemblies/case_assembled_tn.png) | ![enviro_assembled](assemblies/enviro_assembled_tn.png)
### Assembly instructions
![enviro_case_assembly](assemblies/enviro_case_assembly.png)
* Screw the Enviro+ PCB to the front of the case using M2.5 x 8mm pan screws with washer and nuts on the inside.
![enviro_case_assembled](assemblies/enviro_case_assembled.png)
<span></span>
[Top](#TOP)
---
<a name="RPI_case_assembly"></a>
## RPI Case Assembly
### Vitamins
|Qty|Description|
|---:|:----------|
|2| Screw M2.5 pan x 6.4mm|
### Sub-assemblies
| 1 x RPI_assembly | 1 x enviro_case_assembly |
|---|---|
| ![RPI_assembled](assemblies/RPI_assembled_tn.png) | ![enviro_case_assembled](assemblies/enviro_case_assembled_tn.png)
### Assembly instructions
![RPI_case_assembly](assemblies/RPI_case_assembly.png)
* Plug the RPi into the Enviro+ socket and secure with two screws self tapped into the bosses in the case.
![RPI_case_assembled](assemblies/RPI_case_assembled.png)
<span></span>
[Top](#TOP)
---
<a name="main_assembly"></a>
## Main Assembly
### Vitamins
|Qty|Description|
|---:|:----------|
|4| Screw M2 cap x 6mm|
|4| Washer M2 x 5mm x 0.3mm|
### Sub-assemblies
| 1 x RPI_case_assembly | 1 x back_assembly |
|---|---|
| ![RPI_case_assembled](assemblies/RPI_case_assembled_tn.png) | ![back_assembled](assemblies/back_assembled_tn.png)
### Assembly instructions
![main_assembly](assemblies/main_assembly.png)
* Solder the fan wires to the veroboard assembly
![FanWires](docs/fan_connection.jpg)
* Slide the back assembly into the case and secure with four M2 x 6mm cap screws and washers.
![main_assembled](assemblies/main_assembled.png)
<span></span>
[Top](#TOP)

View File

@@ -0,0 +1,45 @@
//
//! Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
//
// GNU GPL v2
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// Top level model
//
include <NopSCADlib/core.scad>
use <NopSCADlib/vitamins/veroboard.scad>
include <NopSCADlib/vitamins/smds.scad>
fan_vb = vero("fan_vb", "fan_controller", 6, 6, breaks = [[2, 1], [2 + eps, 5]],
components = [
[5, 3, 90, "link", inch(0.4), undef, undef, 2.5],
[0, 5, 0, "link", 0, 4, undef, 2.5],
[0, 1, 0, "link", 0, 4, undef, 2.5],
[0, 0, 0, "link", 0, 4, undef, 2.5],
[2, 5, 0, "-smd_res", RES0805, "3K3"],
[4, 4.7, 90, "-smd_cap", CAP1206, 1.2, "10uF"],
[2, 2.5, 180, "-smd_sot", SOT223, "FZT851"],
],
joints = [[5, 1], [5, 5], [0, [0, 1, 5]]]
);
//! The fan controller is a single transistor wired as a Miller integrator that effectively multiplies the capacitor value by the gain of the transistor.
//! It converts the PWM signal on GPI4 to a stead DC voltage so that the fan doesn't whine, or stutter.
//!
//! ![Schematic](docs/fan_controller.jpg)
//!
//! ***
//! * Make two track cuts as shown, one wide and the other narrow.
//!
//! ![TrackCuts](docs/cuts.jpg)
//!
//! 1. Add the SMT compeonents and then the wire links.
//! 1. Add more solder around the transistor to act as a heatsink.
//!
//! ![SMT](docs/smt.jpg)
//!
module fan_controller_assembly() rotate(90) vflip(!exploded()) veroboard_assembly(fan_vb, -vero_thickness(fan_vb) - 1.4, 0);
fan_controller_assembly();

View File

@@ -0,0 +1,518 @@
//
//! Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
//
// GNU GPL v2
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// Top level model
//
$explode = 0; // [0, 1]
assembly = "main"; // [main, back, RPI, case, enviro_case, RPI_case]
/* [Hidden] */
show_box = true;
show_enviroplus = true;
$pp1_colour = "grey";
$extrusion_width = 0.5;
include <NopSCADlib/core.scad>
include <NopSCADlib/vitamins/pin_headers.scad>
include <NopSCADlib/vitamins/pcbs.scad>
include <NopSCADlib/vitamins/fans.scad>
use <NopSCADlib/vitamins/insert.scad>
use <NopSCADlib/vitamins/veroboard.scad>
use <NopSCADlib/utils/round.scad>
use <NopSCADlib/printed/foot.scad>
use <NopSCADlib/printed/printed_box.scad>
use <fan_controller.scad>
rpi = RPI0;
pcb = EnviroPlus;
fan = fan17x8;
foot = Foot(d = 13, h = 5, t = 2, r = 1, screw = M3_pan_screw);
module foot_stl() foot(foot);
rpi_offset = [0, -pcb_width(pcb) / 2 + 0.5, pcb_width(rpi) / 2 + 8.6];
rpi_holes = [0, 1];
wall = 2;
top_thickness = 2;
base_thickness = 2;
case_inner_rad = 8;
width = pcb_length(pcb) + 9 + 10;
pcb_x = -(width - pcb_length(pcb) - 9) / 2;
depth = pcb_width(pcb) + 9;
height = pcb_width(rpi) / 2 + rpi_offset.z + 9;
bulkhead_outset = 2;
bulkhead_inset = 0.5;
bulkhead_t = 2;
clearance = 0.1;
pcb_screw = alternate_screw(hs_pan, pcb_screw(pcb));
box = pbox(name = "enviro_plus_case", wall = wall, top_t = top_thickness, base_t = base_thickness, screw = M2_cap_screw, radius = case_inner_rad, ridges = [8, 1],
size = [width, depth, height]);
pms5003 = [50, 38, 21];
pms5003_wall = 1;
pms5003_pos = [width / 2 - pms5003.x / 2 - pms5003_wall - pbox_screw_inset(box) - insert_boss_radius(screw_insert(pbox_screw(box)), wall) - 0.5,
depth / 2 - pms5003.z / 2 - wall - 1,
height + top_thickness - pms5003.y / 2];
fan_duct_t = 1.7;
foam_t = 0;
fan_pos = [pms5003_pos.x - pms5003.x / 2 - pms5003_wall - fan_width(fan) / 2 - fan_duct_t, 1 + foam_t, 12 + top_thickness + fan_depth(fan) / 2];
fan_socket = 8;
module fan_shape() {
w = fan_width(fan);
p = fan_hole_pitch(fan);
r = w / 2 - p;
rounded_square([w, w], r);
}
module fan_duct_stl() {
module frame(z, offset, y = -fan_pos.y)
translate([0, y, z])
linear_extrude(height = eps)
offset(offset)
fan_shape();
z = height + top_thickness - fan_pos.z + fan_depth(fan) / 2 - fan_socket;
translate([0, -fan_pos.y, z])
linear_extrude(height = fan_socket)
difference() {
fan_shape();
round(1)
offset(-fan_duct_t)
fan_shape();
}
stl("fan_duct") union() {
difference() {
hull() {
frame(z, 0);
frame(fan_depth(fan), fan_duct_t + foam_t, 0);
}
hull() {
frame(z, -fan_duct_t);
frame(fan_depth(fan), foam_t -extrusion_width / 2, 0);
}
}
linear_extrude(height = fan_depth(fan))
difference() {
offset(fan_duct_t + foam_t)
fan_shape();
offset(foam_t)
fan_shape();
}
}
}
module pms5003() {
vitamin("pms5003(): PMS5003 particle detector");
w = pms5003.x;
d = pms5003.y;
h = pms5003.z;
t = 0.1;
color("silver")
difference() {
linear_extrude(height = h, center = true)
difference() {
square([w, d], center = true);
for(x = [-1, 1], y = [-1, 1])
translate([x * w / 2, y * d / 2])
square(2, center = true);
}
cube([w + 2 * eps, d + 2 * eps, t * 2], center = true);
}
color("black")
rounded_rectangle([w - 2 * t, d - 2 * t, h - 2 * t], r = 1, center = true);
}
module pcb_shape(offset)
rounded_square([pcb_length(pcb) + 2 * offset, pcb_width(pcb) + 2 * offset], pcb_radius(pcb) + offset);
module gap() {
gap = pcb_component_position(pcb, "-chip");
translate([gap.x, -gap.y])
square([17.5, 20], center = true);
}
module rpi_holes()
for(i = rpi_holes) {
hole = pcb_coord(rpi, pcb_holes(rpi)[i]);
translate([hole.x, rpi_offset.y, -hole.y + rpi_offset.z + top_thickness])
rotate([90, 0, 0])
children();
}
module feet_positions() {
clearance = 2;
foot_r = foot_diameter(foot) / 2;
x_inset = case_inner_rad + foot_r - pbox_ridges(box).y;
z_inset = foot_r + clearance;
h = height + base_thickness;
for(p = [[-1, -1], [1, -1], [0, 1]])
translate([p.x * (width / 2 - x_inset), depth / 2 + wall + pbox_ridges(box).y, top_thickness + h / 2 + p.y * (h / 2 - z_inset)])
rotate([90, 0, 0])
children();
}
module slots(h = 10, expand = 0) {
for(comp = [["uSD", 2, 11, 0.7], ["flat_flex", 1, 12, 0.5]]) {
p = pcb_component_position(rpi, comp[0]);
translate([sign(p.x) * (width / 2 + wall / 2 + pbox_ridges(box).y / 2), rpi_offset.y + pcb_thickness(rpi) + comp[3], top_thickness + rpi_offset.z - p.y])
rotate([90, 0, 90])
hull() {
vertical_tearslot(r = comp[1] + expand, l = comp[2], h = h);
if(expand)
vertical_tearslot(r = comp[1] + expand + h / 2, l = comp[2], h = eps);
}
}
}
module box_internal_additions() {
translate([pcb_x, 0]) {
linear_extrude(height = top_thickness + bulkhead_t)
difference() {
pcb_shape(bulkhead_outset + wall + pbox_ridges(box).y + eps);
gap();
pcb_shape(bulkhead_outset + clearance);
}
rpi_holes()
hull() {
wall = 1.8;
r = screw_radius(pcb_screw) + wall;
z = depth / 2 + rpi_offset.y + pbox_ridges(box).y + eps;
offset = max(r, z);
cylinder(r =r, h = z);
translate([0, -offset - r, z])
cube(eps);
}
}
d = washer_diameter(screw_washer(foot_screw(foot))) + 1;
h = pbox_ridges(box).y;
feet_positions()
translate_z(wall - eps)
cylinder(d2 = d, d1 = d + 2 * h, h = h);
slots(wall + pbox_ridges(box).y + eps, 1);
}
module box_external_additions() {
amp = pbox_ridges(box).y + eps;
d = foot_diameter(foot) + 1;
feet_positions()
cylinder(d1 = d, d2 = d + 2 * amp, h = amp);
slots(wall + pbox_ridges(box).y + eps, 1);
}
module box_holes() {
translate([pcb_x, 0]) {
linear_extrude(height = top_thickness + eps)
pcb_shape(clearance);
rpi_holes()
teardrop_plus(r = screw_pilot_hole(pcb_screw), h = 7 - 1.6, center = false);
}
feet_positions()
teardrop(r = screw_pilot_hole(foot_screw(foot)), h = 10, center = true);
grills = 7;
bar = 1.6;
x = pcb_x + pcb_length(pcb) / 2 + 2 * wall + pbox_ridges(box).y + 2 * eps;
w = width / 2 - x;
d = depth - case_inner_rad;
pitch = d / (grills - 1);
for(i = [0 : grills -1])
let(w = i == 0 || i == grills -1 ? w - 1 : w)
translate([x + w / 2, -d / 2 + i * pitch])
rounded_rectangle([w, pitch - bar, 10], 1);
slots();
}
module bulkhead_stl() {
holes = pcb_holes(pcb);
pitch = max([for(h = holes) pcb_coord(pcb, h).x]) - min([for(h = holes) pcb_coord(pcb, h).x]);
boss_r = (pitch - 51.4) / 2;
stl("bulkhead")
linear_extrude(height = bulkhead_t)
difference() {
pcb_shape(bulkhead_outset);
gap();
difference() {
pcb_shape(-bulkhead_inset);
pcb_screw_positions(pcb)
rotate($i * 90)
hull() {
circle(boss_r);
translate([boss_r - eps, -boss_r])
square([eps, boss_r]);
translate([-boss_r, boss_r - eps])
square([boss_r, eps]);
translate([-boss_r, -boss_r])
square(eps);
}
}
pcb_screw_positions(pcb)
poly_circle(screw_clearance_radius(pcb_screw));
}
}
module enviro_plus_case_stl() {
pbox(box) {
box_internal_additions();
box_holes();
box_external_additions();
}
}
module base_additions() {
w = pms5003.x + clearance;
d = pms5003.z + clearance;
wall = pms5003_wall;
translate([pms5003_pos.x, -pms5003_pos.y])
linear_extrude(height = base_thickness + pms5003.y)
difference() {
square([w + 2 * wall, d + 2 * wall], center = true);
square([w, d], center = true);
}
translate([fan_pos.x, 0])
linear_extrude(height = top_thickness + fan_socket)
difference() {
offset(wall)
fan_shape();
fan_shape();
}
}
module base_holes() {
for(i = [0 : 1]) {
p = pcb_component_position(rpi, "usb_uA", i);
translate([p.x + pcb_x, -rpi_offset.y - pcb_thickness(rpi) - 1.3])
rounded_rectangle([11,7, 100], 0.5, true);
}
translate([pms5003_pos.x, -pms5003_pos.y])
rounded_rectangle([pms5003.x - 2 ,pms5003.z - 2, 100], 2, true);
translate([fan_pos.x, 0])
linear_extrude(height = 2 * base_thickness + eps, center = true)
round(1)
offset(-fan_duct_t)
fan_shape();
}
module enviro_plus_case_base_stl()
pbox_base(box) {
base_additions();
base_holes();
}
//! * Solder a right angle connector to the Raspberry Pi Zero.
module RPI_assembly()
assembly("RPI") {
pcb(rpi);
pcb_grid(rpi, 9.5, 0.5, -0.6)
rotate(180)
explode(20)
pin_header(2p54header, 20, 2, right_angle = true);
}
//! 1. Solvent weld or glue the bulkhead into the recess in the bottom of the case.
//! 1. Fit the heatfit inserts with a soldering iron with a conical bit heated to about 200&deg;C.
//! 1. Tap the three holes for the feet with an M3 tap.
//! 1. Screw on the three feet with M3 x 6mm pan screws and washers.
module case_assembly() pose([ 29.60, 0.00, 158.00 ], exploded = true) pose([ 198.00, 0.00, 352.80 ], exploded = false)
assembly("case") {
if(show_box)
stl_colour(pp1_colour) render() enviro_plus_case_stl();
else
render() difference() {
enviro_plus_case_stl();
translate_z(height / 2)
cube([100, 100, height - 20], center = true);
}
pbox_inserts(box);
translate([pcb_x, 0, top_thickness])
explode(20)
stl_colour(pp2_colour) render() bulkhead_stl();
feet_positions() {
foot_assembly(0, foot);
vflip()
explode(20, explode_children = true)
translate_z(foot_thickness(foot))
screw_and_washer(foot_screw(foot), 6);
}
}
//! * Solder the fan_controller to the Enviro+ expansion connector at the 5V, GND and #4 pins.
module enviro_assembly() hflip(exploded())
assembly("enviro") {
if(show_enviroplus)
pcb(pcb);
pcb_grid(pcb, 5.5, 2.5, -pcb_thickness(pcb)) {
hflip()
explode(15)
fan_controller_assembly();
}
if(!exploded())
for(x = [8, 7, 3])
pcb_grid(pcb, x, 0, 0.05)
solder_meniscus(pcb, 0.39, 1);
}
//! * Screw the Enviro+ PCB to the front of the case using M2.5 x 8mm pan screws with washer and nuts on the inside.
module enviro_case_assembly() pose([ 231.40, 0.00, 1.20 ])
assembly("enviro_case") {
case_assembly();
translate([pcb_x, 0, top_thickness])
vflip() explode(20, explode_children = true) {
t = pcb_thickness(pcb);
nut = screw_nut(pcb_screw);
washer = screw_washer(pcb_screw);
no_explode() enviro_assembly();
pcb_screw_positions(pcb) {
translate_z(t)
screw(pcb_screw, screw_longer_than(t + bulkhead_t + nut_thickness(nut, true) + washer_thickness(washer)));
translate_z(-bulkhead_t)
vflip()
explode(20, explode_children = true)
nut_and_washer(nut, true);
}
}
}
//! * Plug the RPi into the Enviro+ socket and secure with two screws self tapped into the bosses in the case.
module RPI_case_assembly() pose([ 20.50, 0.00, 153.30 ])
assembly("RPI_case") {
enviro_case_assembly();
translate([pcb_x, 0]) {
translate_z(top_thickness) {
translate(rpi_offset)
rotate([-90, 0, 0])
RPI_assembly();
}
rpi_holes()
vflip()
translate_z(pcb_thickness(rpi))
screw(pcb_screw, 6.4);
}
}
//! 1. Print the fan duct in flexible TPE with low infill.
//! 1. Slide the pms5003 into the printed receptacle with the fan to the outside. Secure with tape if it is loose.
//! 1. Slide the fan into the fan duct.
//! 1. Slide the fan duct into the printed recepacle.
module back_assembly() pose([ 228.60, 0.00, 24.30 ])
assembly("back") {
translate(pms5003_pos)
explode(-50)
rotate([90, 0, 0])
pms5003();
explode(-20, explode_children = true)
translate(fan_pos) {
explode(-20)
fan(fan);
translate_z(-fan_depth(fan) / 2)
stl_colour(pp4_colour)
render()
fan_duct_stl();
}
translate_z(height + top_thickness + base_thickness + eps) vflip()
stl_colour(show_box ? pp1_colour : pp2_colour) render() enviro_plus_case_base_stl();
}
//! * Solder the fan wires to the veroboard assembly
//!
//! ![FanWires](docs/fan_connection.jpg)
//!
//! * Slide the back assembly into the case and secure with four M2 x 6mm cap screws and washers.
module main_assembly() pose([170, 335, 0], exploded = false) pose([ 42.20, 0.00, 159.60 ], exploded = true)
assembly("main") {
RPI_case_assembly();
explode(20, explode_children = true) {
pbox_base_screws(box);
back_assembly();
}
}
if($preview) {
if(assembly == "main")
main_assembly();
else if(assembly == "case")
case_assembly();
else if(assembly == "back")
back_assembly();
else if(assembly == "RPI")
RPI_assembly();
else if(assembly == "RPI_case")
RPI_case_assembly();
else if(assembly == "enviro_case")
enviro_case_assembly();
}
else {
gap = 5;
enviro_plus_case_stl();
translate([0, -depth - gap])
enviro_plus_case_base_stl();
translate([0, -2 * (depth + gap)])
bulkhead_stl();
}

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: 7.9 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: 26 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: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 105 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: 138 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 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: 124 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 135 KiB

View File

@@ -0,0 +1,16 @@
'Ferrule for 1.5mm^2 wire - not shown', 3
'Wire blue 30/0.25mm strands, length 150mm - not shown', 2
'Wire brown 30/0.25mm strands, length 150mm - not shown', 2
'Wire green & yellow 30/0.25mm strands, length 150mm - not shown', 2
'IEC inlet for ATX', 1
'Heatfit insert M3', 2
'4mm shielded jack socket blue', 2
'4mm shielded jack socket brown', 1
'4mm shielded jack socket green', 2
'Mains socket 13A', 1
'Nut M3 x 2.4mm nyloc', 6
'Screw M3 cs cap x 12mm', 2
'Screw M3 cs cap x 20mm', 2
'Screw M3 dome x 10mm', 4
'Heatshrink sleeving ID 3.2mm x 15mm - not shown', 8
'Washer M3 x 7mm x 0.5mm', 10
1 'Ferrule for 1.5mm^2 wire - not shown', 3
2 'Wire blue 30/0.25mm strands, length 150mm - not shown', 2
3 'Wire brown 30/0.25mm strands, length 150mm - not shown', 2
4 'Wire green & yellow 30/0.25mm strands, length 150mm - not shown', 2
5 'IEC inlet for ATX', 1
6 'Heatfit insert M3', 2
7 '4mm shielded jack socket blue', 2
8 '4mm shielded jack socket brown', 1
9 '4mm shielded jack socket green', 2
10 'Mains socket 13A', 1
11 'Nut M3 x 2.4mm nyloc', 6
12 'Screw M3 cs cap x 12mm', 2
13 'Screw M3 cs cap x 20mm', 2
14 'Screw M3 dome x 10mm', 4
15 'Heatshrink sleeving ID 3.2mm x 15mm - not shown', 8
16 'Washer M3 x 7mm x 0.5mm', 10

View File

@@ -2,6 +2,8 @@
{
"name": "base_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {},
"vitamins": {
@@ -20,6 +22,8 @@
{
"name": "feet_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {
"base_assembly": 1
@@ -46,6 +50,8 @@
{
"name": "mains_in_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {
"feet_assembly": 1
@@ -82,6 +88,8 @@
{
"name": "main_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {
"mains_in_assembly": 1

View File

@@ -0,0 +1,11 @@
include <NopSCADlib/core.scad>
*use_stl("socket_box"); // Importing the STL gives a CGAL error although NetFabb finds nothing wrong with it.
use <../scad/bob_main.scad>
render() socket_box_stl();
for(i = [0 : 3])
translate([i * 25 - 1.5 * 25, -70])
use_stl("foot");

View File

@@ -15,6 +15,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
![Main Assembly](assemblies/main_assembled.png)
<span></span>
---
## Table of Contents
@@ -24,6 +25,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
1. [Mains In Assembly](#mains_in_assembly)
1. [Main Assembly](#main_assembly)
<span></span>
[Top](#TOP)
---
@@ -54,6 +56,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;socket_box.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;4&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;5&nbsp; | &nbsp;&nbsp;Total 3D printed parts count |
<span></span>
[Top](#TOP)
---
@@ -81,6 +84,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
![base_assembled](assemblies/base_assembled.png)
<span></span>
[Top](#TOP)
---
@@ -117,6 +121,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
![feet_assembled](assemblies/feet_assembled.png)
<span></span>
[Top](#TOP)
---
@@ -156,6 +161,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
![mains_in_assembled](assemblies/mains_in_assembled.png)
<span></span>
[Top](#TOP)
---
@@ -199,4 +205,5 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
![main_assembled](assemblies/main_assembled.png)
<span></span>
[Top](#TOP)

View File

@@ -31,7 +31,8 @@
//! while its earth is disconnected. Don't be tempted to float the earth of an oscilloscope this way, use a mains isolation transformer to power the DUT instead.
//! Earth leakage can be measured Canadian CSA style by disconnected the neutral link from the left socket and linking the central neutral to the live.
//
$extrusion_width = 0.5;
$extrusion_width = 0.4;
$layer_height = 0.2;
$pp1_colour = "dimgrey";
$pp2_colour = [0.9, 0.9, 0.9];

View File

@@ -0,0 +1,5 @@
socket_box.stl
foot.stl
foot.stl
foot.stl
foot.stl

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because it is too large Load Diff

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: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

BIN
gallery/IOT_LOAD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

BIN
gallery/PSU_cover.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

BIN
gallery/PotBox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

After

Width:  |  Height:  |  Size: 390 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 202 KiB

View File

@@ -1,40 +1,35 @@
# A gallery of projects made with NopSCADlib
<a name="TOP"></a>
## ArduinoThermostat
Arduino thermostat to control a beer fridge to use it as an environmental chamber.
![](ArduinoThermostat.png)
<a name="TOP"></a>
## EnviroPlus
Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
![](EnviroPlus.png)
<a name="TOP"></a>
## FilamentDryBox
A small fan oven with a spool holder to keep the filament warm and dry.
![](FilamentDryBox.png)
<a name="TOP"></a>
## HydraBot
Current state of HydraRaptor after being modified for laser engraving.
![](HydraBot.png)
<a name="TOP"></a>
## IOT 50V PSU
WiFi controllable PSU
![](IOT_50V_PSU.png)
## IOT LOAD
WiFi controllable programmable load
![](IOT_LOAD.png)
<a name="TOP"></a>
## Lab ATX PSU
Bench power supply built around an ATX PSU.
@@ -47,15 +42,11 @@ Bench power supply built around an ATX PSU.
<a name="TOP"></a>
## Laser Load
15kV dummy load for testing CO2 laser PSUs
![](Laser_load.png)
<a name="TOP"></a>
## MainsBreakOutBox
13A socket break out box with 4mm jacks to measure voltage and / or load current and earth leakage current.
@@ -72,8 +63,6 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
![](MainsBreakOutBox.png)
<a name="TOP"></a>
## Mains Box
Mains isolated and variable supply with metering.
@@ -81,15 +70,21 @@ Mains isolated and variable supply with metering.
## PSU Cover
A base and shroud to make PSU safe to sit on a desk
![](PSU_cover.png)
## PotBox
Potentiometer box with course and fine controls and three 4mm binding posts
![](PotBox.png)
<a name="TOP"></a>
## SunBot
A solar tracker to keep a solar panel pointing at the sun.
![](SunBot.png)
<a name="TOP"></a>
## Turntable
WiFi enabled remote control turntable for photography
@@ -97,8 +92,6 @@ WiFi enabled remote control turntable for photography
Was actually made from DiBond but shown made with carbon fibre here.
<a name="TOP"></a>
## Variac
Motorised variac with WiFi control, see [hydraraptor.blogspot.com/2018/04/esp8266-spi-spy](https://hydraraptor.blogspot.com/2018/04/esp8266-spi-spy.html)
@@ -106,4 +99,3 @@ Motorised variac with WiFi control, see [hydraraptor.blogspot.com/2018/04/esp826

View File

@@ -24,22 +24,24 @@
// bom defaults to 0
// Setting $bom on the command line or in the main file before including lib.scad overrides it everywhere.
// Setting $bom after including lib overrides bom in the libs but not in the local file.
// Setting $_bom in the local file overrides it in the local file but not in the libs.
//
rr_green = [0, 146/255, 0]; // RepRap logo colour
crimson = [220/255, 20/255, 60/255];
$_bom = is_undef($bom) ? 0 : $bom; // 0 no bom, 1 assemblies and stls, 2 vitamins as well
$exploded = is_undef($explode) ? 0 : $explode; // 1 for exploded view
layer_height = is_undef($layer_height) ? 0.25 : $layer_height; // layer heigth when printing
layer_height = is_undef($layer_height) ? 0.25 : $layer_height; // layer height when printing
layer_height0 = is_undef($layer_height0) ? layer_height : $layer_height0; // height of first layer if different
extrusion_width = is_undef($extrusion_width) ? 0.5 : $extrusion_width; // filament width when printing
nozzle = is_undef($nozzle) ? 0.45 : $nozzle; // 3D printer nozzle
cnc_bit_r = is_undef($cnc_bit_r) ? 1.2 : $cnc_bit_r; // minimum tool radius when milling 2D objects
pp1_colour = is_undef($pp1_colour) ? rr_green : $pp1_colour; // printed part colour 1, RepRap logo colour
pp2_colour = is_undef($pp2_colour) ? "Crimson" : $pp2_colour; // printed part colour 2
pp3_colour = is_undef($pp3_colour) ? "SteelBlue" : $pp3_colour; // printed part colour 3
pp4_colour = is_undef($pp4_colour) ? "darkorange" : $pp4_colour;// printed part colour 4
show_rays = is_undef($show_rays) ? false : $show_rays; // show camera sight lines and light direction
show_threads = is_undef($show_threads) ? false : $show_threads; // show screw threads
show_plugs = is_undef($show_plugs) ? false : $show_plugs; // plugs on headers
teardrop_angle = is_undef($teardrop_angle) ? 45 : $teardrop_angle; // teardrop angle
pp1_colour = is_undef($pp1_colour) ? rr_green : $pp1_colour;// printed part colour 1, RepRap logo colour
pp2_colour = is_undef($pp2_colour) ? crimson : $pp2_colour;// printed part colour 2
pp3_colour = is_undef($pp3_colour) ? "SteelBlue" : $pp3_colour;// printed part colour 3
pp4_colour = is_undef($pp4_colour) ? "darkorange" : $pp4_colour;// printed part colour 4
// Minimum wall is about two filaments wide but we extrude it closer to get better bonding
squeezed_wall = $preview ? 2 * extrusion_width - layer_height * (1 - PI / 4)
@@ -50,12 +52,11 @@ eps = 1/128; // small fudge factor to stop CSG barfing on coincident faces.
$fa = 6;
$fs = extrusion_width / 2;
function round_to_layer(z) = ceil(z / layer_height) * layer_height;
// Some additional named colours
function grey(n) = [0.01, 0.01, 0.01] * n; //! Generate a shade of grey to pass to color().
gold = [255/255, 215/255, 0/255];
brass = [255/255, 220/255, 100/255];
silver = [0.75, 0.75, 0.75];
silver = [0.75, 0.75, 0.75];
gold = [255, 215, 0] / 255;
brass = [255, 220, 100] / 255;
copper = [230, 140, 51] / 255;
/*
* Enums
@@ -71,11 +72,6 @@ hs_grub = 4; // pulley set screw
hs_cs_cap = 5;
hs_dome = 6;
//
// Hot end descriptions
//
jhead = 1;
e3d = 2;
//
// Face enumeration
//
f_bottom = 0;

View File

@@ -26,7 +26,10 @@ include <vitamins/psus.scad>
include <vitamins/pcbs.scad>
include <vitamins/batteries.scad>
include <vitamins/bearing_blocks.scad>
include <vitamins/blowers.scad>
include <vitamins/bldc_motors.scad>
include <vitamins/box_sections.scad>
include <vitamins/bulldogs.scad>
include <vitamins/buttons.scad>
include <vitamins/cameras.scad>
@@ -35,10 +38,8 @@ include <vitamins/displays.scad>
include <vitamins/extrusions.scad>
include <vitamins/extrusion_brackets.scad>
include <vitamins/geared_steppers.scad>
include <vitamins/green_terminals.scad>
include <vitamins/hot_ends.scad>
include <vitamins/inserts.scad>
include <vitamins/kp_pillow_blocks.scad>
include <vitamins/ldrs.scad>
include <vitamins/leadnuts.scad>
include <vitamins/led_meter.scad>
@@ -48,12 +49,13 @@ include <vitamins/mains_sockets.scad>
include <vitamins/modules.scad>
include <vitamins/panel_meters.scad>
include <vitamins/pillars.scad>
include <vitamins/pillow_blocks.scad>
include <vitamins/pin_headers.scad>
include <vitamins/pulleys.scad>
include <vitamins/ring_terminals.scad>
include <vitamins/rails.scad>
include <vitamins/rod.scad>
include <vitamins/scs_bearing_blocks.scad>
include <vitamins/servo_motors.scad>
include <vitamins/shaft_couplings.scad>
include <vitamins/sheets.scad>
include <vitamins/sk_brackets.scad>
@@ -61,6 +63,7 @@ include <vitamins/spools.scad>
include <vitamins/ssrs.scad>
include <vitamins/stepper_motors.scad>
include <vitamins/swiss_clips.scad>
include <vitamins/terminal.scad>
include <vitamins/toggles.scad>
include <vitamins/transformers.scad>
include <vitamins/tubings.scad>
@@ -90,7 +93,7 @@ use <utils/gears.scad>
use <utils/hanging_hole.scad>
use <utils/fillet.scad>
use <utils/rounded_polygon.scad>
use <utils/rounded_right_triangle.scad>
use <utils/rounded_triangle.scad>
use <utils/layout.scad>
use <utils/round.scad>
use <utils/offset.scad>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 870 KiB

After

Width:  |  Height:  |  Size: 1007 KiB

View File

@@ -33,18 +33,25 @@
//!
//! See [usage](docs/usage.md) for requirements, installation instructions and a usage guide.
//!
//! A list of changes classified as breaking, additions or fixes is maintained in [CHANGELOG.md](CHANGELOG.md).
//!
//! <img src="libtest.png" width="100%"/>
//
// This file shows all the parts in the library.
//
include <lib.scad>
use <tests/7_segments.scad>
use <tests/ball_bearings.scad>
use <tests/batteries.scad>
use <tests/bearing_blocks.scad>
use <tests/belts.scad>
use <tests/BLDC_motors.scad>
use <tests/blowers.scad>
use <tests/box_sections.scad>
use <tests/bulldogs.scad>
use <tests/buttons.scad>
use <tests/cable_clip.scad>
use <tests/cable_strips.scad>
use <tests/cameras.scad>
use <tests/camera_housing.scad>
@@ -62,12 +69,12 @@ use <tests/hot_ends.scad>
use <tests/IECs.scad>
use <tests/inserts.scad>
use <tests/jack.scad>
use <tests/KP_pillow_blocks.scad>
use <tests/leadnuts.scad>
use <tests/LDRs.scad>
use <tests/LEDs.scad>
use <tests/light_strips.scad>
use <tests/linear_bearings.scad>
use <tests/LED_bezel.scad>
use <tests/LED_meters.scad>
use <tests/magnets.scad>
use <tests/microswitches.scad>
@@ -78,6 +85,8 @@ use <tests/opengrab.scad>
use <tests/panel_meters.scad>
use <tests/PCBs.scad>
use <tests/pillars.scad>
use <tests/pillow_blocks.scad>
use <tests/potentiometers.scad>
use <tests/press_fit.scad>
use <tests/PSUs.scad>
use <tests/pulleys.scad>
@@ -86,8 +95,8 @@ use <tests/ring_terminals.scad>
use <tests/rockers.scad>
use <tests/rod.scad>
use <tests/screws.scad>
use <tests/SCS_bearing_blocks.scad>
use <tests/sealing_strip.scad>
use <tests/servo_motors.scad>
use <tests/shaft_couplings.scad>
use <tests/sheets.scad>
use <tests/SK_brackets.scad>
@@ -116,7 +125,9 @@ use <tests/fixing_block.scad>
use <tests/flat_hinge.scad>
use <tests/foot.scad>
use <tests/handle.scad>
use <tests/knob.scad>
use <tests/PCB_mount.scad>
use <tests/pocket_handle.scad>
use <tests/printed_box.scad>
use <tests/printed_pulleys.scad>
use <tests/ribbon_clamp.scad>
@@ -139,25 +150,55 @@ cable_grommets_y = 0;
translate([x5, cable_grommets_y])
cable_grommets();
translate([x5, cable_grommets_y + 30])
led_bezels();
translate([x5 + 50, cable_grommets_y])
ribbon_clamps();
translate([x5 + 95, cable_grommets_y])
press_fits();
translate([x5, cable_grommets_y + 60])
fixing_blocks_y = cable_grommets_y + 60;
translate([x5, fixing_blocks_y])
fixing_blocks();
translate([x5, cable_grommets_y + 90])
corner_blocks_y = fixing_blocks_y + 30;
translate([x5, corner_blocks_y])
corner_blocks();
translate([x5, cable_grommets_y + 150])
feet();
translate([x5 + 70, cable_grommets_y + 150])
screw_knobs_y = corner_blocks_y + 70;
translate([x5, screw_knobs_y])
screw_knobs();
translate([x5, cable_grommets_y + 470]) {
knobs_y = screw_knobs_y + 40;
translate([640, knobs_y])
printed_pulley_test();
translate([x5, knobs_y])
knobs();
clips_y = knobs_y + 50;
translate([x5, clips_y])
cable_clips();
strap_y = clips_y + 50;
translate([x5 + 60, strap_y])
strap_handles();
translate([x6, strap_y])
feet();
handle_y = strap_y + 50;
translate([x5, handle_y])
handle();
pocket_y = handle_y + 70;
translate([x5 + 65, pocket_y])
pocket_handles();
hinge_y = pocket_y + 100;
translate([x5, hinge_y]) {
door_hinges()
door_latches();
@@ -165,28 +206,19 @@ translate([x5, cable_grommets_y + 470]) {
flat_hinges();
}
translate([x5, cable_grommets_y + 370])
no_explode() socket_boxes();
translate([x5 + 60, cable_grommets_y + 200])
strap_handles();
translate([640, cable_grommets_y + 200])
printed_pulley_test();
translate([x5, cable_grommets_y + 250])
handle();
translate([950, 600])
box_test();
translate([890, 750])
pbox_y = hinge_y + 70;
translate([900, pbox_y])
printed_boxes();
translate([850, 1330])
bbox_test();
box_y = pbox_y + 150;
translate([950, box_y])
box_test();
translate([950, 1400])
rotate(-90)
bbox_test();
inserts_y = 0;
nuts_y = inserts_y + 20;
washers_y = nuts_y + 120;
@@ -198,13 +230,14 @@ sealing_strip_y = springs_y + 20;
tubings_y = sealing_strip_y + 20;
pillars_y = tubings_y + 20;
ball_bearings_y = pillars_y + 40;
pulleys_y = ball_bearings_y +40;
hot_ends_y = pulleys_y + 60;
linear_bearings_y = hot_ends_y + 50;
sheets_y = linear_bearings_y + 100;
pcbs_y = sheets_y + 40;
displays_y = pcbs_y + 170;
fans_y = displays_y + 80;
pulleys_y = ball_bearings_y + 40;
leadnuts_y = pulleys_y + 60;
linear_bearings_y = leadnuts_y + 50;
steppers_y = linear_bearings_y + 110;
sheets_y = steppers_y + 55;
pcbs_y = sheets_y + 60;
displays_y = pcbs_y + 140;
fans_y = displays_y + 110;
transformers_y = fans_y + 120;
psus_y = transformers_y + 190;
@@ -247,13 +280,19 @@ translate([x0, ball_bearings_y])
translate([x0, pulleys_y])
pulleys();
translate([x0, leadnuts_y])
leadnuts();
translate([x0 + 120, leadnuts_y])
leadnuthousings();
translate([x0, linear_bearings_y]) {
linear_bearings();
rods();
}
translate([x0 + 10, hot_ends_y])
hot_ends();
translate([x0, steppers_y])
stepper_motors();
translate([x0, sheets_y])
sheets();
@@ -271,7 +310,7 @@ translate([x0, fans_y]) {
fan_guards();
}
translate([x0, transformers_y])
translate([760, fans_y])
variacs();
translate([x0, psus_y]) {
@@ -283,7 +322,6 @@ translate([x0, psus_y]) {
zipties_y = 0;
bulldogs_y = zipties_y + 30;
swiss_clips_y = bulldogs_y + 35;
leadnuts_y = swiss_clips_y + 50;
translate([x1, zipties_y])
zipties();
@@ -294,10 +332,6 @@ translate([x1, bulldogs_y])
translate([x1, swiss_clips_y])
swiss_clips();
translate([x1, leadnuts_y])
leadnuts();
leds_y = 0;
carriers_y = leds_y + 40;
magnets_y = carriers_y + 40;
@@ -354,18 +388,18 @@ iecs_y = d_connectors_y + 80;
modules_y = iecs_y + 60;
ssrs_y = modules_y + 80;
blowers_y = ssrs_y + 60;
batteries_y = blowers_y + 100;
steppers_y = batteries_y + 55;
panel_meters_y = steppers_y + 70;
hot_ends_y = blowers_y + 100;
batteries_y = hot_ends_y + 55;
panel_meters_y = batteries_y + 70;
extrusions_y = panel_meters_y + 80;
translate([x3, veroboard_y])
veroboard_test();
translate([x3 + 70, veroboard_y + 30])
translate([x3 + 60, veroboard_y + 20])
geared_steppers();
translate([x3 + 140, veroboard_y + 20])
translate([x3 + 160, ssrs_y])
pcb_mounts();
translate([x3 + 170, veroboard_y + 16])
@@ -401,8 +435,8 @@ translate([x3, blowers_y])
translate([x3, batteries_y])
batteries();
translate([x2, steppers_y]) // interloper
stepper_motors();
translate([x3 + 10, hot_ends_y])
hot_ends();
translate([x2, panel_meters_y])
panel_meters();
@@ -410,23 +444,32 @@ translate([x2, panel_meters_y])
translate([x2, extrusions_y])
extrusions();
translate([x3, transformers_y])
translate([400, transformers_y])
transformers();
translate([x4 + 50, transformers_y])
no_explode() socket_boxes();
belts_y = 0;
rails_y = belts_y + 200;
extrusion_brackets_y = rails_y + 250;
sk_brackets_y = extrusion_brackets_y + 80;
kp_pillow_blocks_y = sk_brackets_y + 50;
kp_pillow_blocks_y = sk_brackets_y + 60;
scs_bearing_blocks_y = kp_pillow_blocks_y + 60;
box_sections_y = batteries_y;
BLDC_y = scs_bearing_blocks_y + 120;
pot_y = BLDC_y + 40;
cable_strip_y = pot_y + 50;
translate([0, transformers_y])
servo_motors();
translate([x4 + 200, belts_y + 58]) {
belt_test();
translate([0, 60])
opengrab_test();
}
translate([x4 + 175, belts_y, -20])
@@ -435,7 +478,7 @@ translate([x4 + 175, belts_y, -20])
translate([x4, rails_y + 130])
rails();
translate([770, fans_y + 50])
translate([x4, cable_strip_y])
cable_strips();
translate([x4, kp_pillow_blocks_y])
@@ -447,12 +490,20 @@ translate([x4, sk_brackets_y])
translate([x4, extrusion_brackets_y])
extrusion_brackets();
translate([x4 + 120, extrusion_brackets_y])
translate([x1, swiss_clips_y + 50])
shaft_couplings();
translate([x4, scs_bearing_blocks_y])
scs_bearing_blocks();
translate([x4, BLDC_y])
bldc_motors();
translate([x4, pot_y])
potentiometers();
translate([x2, box_sections_y])
box_sections();
translate([x6, 125])
light_strips();

View File

@@ -30,10 +30,16 @@
//! ![](docs/box.png)
//!
//! Normally the side sheets are the same type but they can be overridden individually as long as the substitute has the same thickness.
//!
//! A box can have an optional name to allow more than one in the same project.
//!
//! The top bezel can have an optional child, which is subtracted to allow modification.
//
include <../core.scad>
include <../utils/core/core.scad>
use <../vitamins/sheet.scad>
use <../vitamins/insert.scad>
use <../vitamins/screw.scad>
use <../vitamins/washer.scad>
use <../utils/quadrant.scad>
use <../utils/round.scad>
@@ -48,12 +54,13 @@ function box_sheets(type) = type[3]; //! Sheet type used for the sides
function box_top_sheet(type) = type[4]; //! Sheet type for the top
function box_base_sheet(type) = type[5]; //! Sheet type for the bottom
function box_feet(type) = type[6]; //! True to enable feet on the bottom bezel
function box_width(type) = type[7]; //! Internal width
function box_depth(type) = type[8]; //! Internal depth
function box_height(type) = type[9]; //! Internal height
function box_name(type) = type[7]; //! Name for projects with more than one box
function box_width(type) = type[8]; //! Internal width
function box_depth(type) = type[9]; //! Internal depth
function box_height(type) = type[10];//! Internal height
function box(screw, wall, sheets, top_sheet, base_sheet, size, feet = false, shelf_screw = M3_dome_screw) = //! Construct a property list for a box.
concat([screw, shelf_screw, wall, sheets, top_sheet, base_sheet, feet], size);
function box(screw, wall, sheets, top_sheet, base_sheet, size, feet = false, shelf_screw = undef, name = "box") = //! Construct a property list for a box.
concat([screw, is_undef(shelf_screw) ? screw : shelf_screw, wall, sheets, top_sheet, base_sheet, feet, name], size);
function box_bezel_clearance(type) = bezel_clearance;
@@ -64,7 +71,7 @@ function box_washer(type) = screw_washer(box_screw(type));
function box_insert(type) = screw_insert(box_screw(type));
function box_shelf_insert(type) = screw_insert(box_shelf_screw(type));
function box_hole_inset(type) = washer_radius(box_washer(type)) + 1;
function box_hole_inset(type) = washer_radius(box_washer(type)) + 1; //! Screw inset from the corner of the internal dimensions
function box_insert_r(type) = insert_hole_radius(box_insert(type));
function box_insert_l(type) = insert_length(box_insert(type));
function box_boss_r(type) = ceil(corrected_radius(box_insert_r(type)) + box_wall(type));
@@ -79,7 +86,6 @@ function box_screw_length(type, top) =
let(s = top ? box_top_sheet(type) : box_base_sheet(type))
screw_length(box_screw(type), sheet_thickness(s) + box_corner_gap(type) + box_profile_overlap(type) - 1, washers = 2, insert = true, longer = true);
function box_wall_clearance(type) = box_sheet_slot(type) / 2 - sheet_thickness(box_sheets(type)) / 2;
function box_margin(type) = box_profile_overlap(type) + box_corner_gap(type); //! How much the bezel intrudes on the specified height
function box_intrusion(type) = box_hole_inset(type) + box_boss_r(type); //! Corner profile intrusion
function sheet_reduction(type) = 2 * box_corner_gap(type) + sheet_end_clearance;
@@ -89,6 +95,8 @@ function box_bezel_height(type, bottom) = //! Bezel height for top or bottom
let(t1 = sheet_thickness(box_base_sheet(type)), t2 = sheet_thickness(box_top_sheet(type)))
box_corner_rad(type) + box_profile_overlap(type) + (bottom ? max(t1, t2) : t2) - sheet_thickness(box_sheets(type));
function box_bc_name(type, suffix) = let(name = box_name(type)) name == "box" ? suffix : str(name, "_", suffix); // Backwards compatible name
grill_hole = 5;
grill_gap = 1.9;
@@ -139,17 +147,17 @@ module box_corner_profile_2D(type) { //! The 2D shape of the corner profile.
}
module box_corner_profile(type) { //! Generates the corner profile STL for 3D printing.
stl("box_corner_profile");
length = box_height(type) - 2 * box_margin(type);
difference() {
linear_extrude(length, center = true, convexity = 5)
box_corner_profile_2D(type);
for(z = [-1, 1])
translate([box_hole_inset(type), box_hole_inset(type), z * length / 2])
insert_hole(box_insert(type), 5);
}
stl(str(box_name(type), "_corner_profile"))
difference() {
linear_extrude(length, center = true, convexity = 5)
box_corner_profile_2D(type);
for(z = [-1, 1])
translate([box_hole_inset(type), box_hole_inset(type), z * length / 2])
insert_hole(box_insert(type), 5);
}
}
module box_corner_profile_section(type, section, sections) { //! Generates interlocking sections of the corner profile to allow it to be taller than the printer
@@ -190,7 +198,7 @@ module box_corner_profile_section(type, section, sections) { //! Generates inter
}
module box_corner_profile_sections(type, section, sections) { //! Generate four copies of a corner profile section
stl("box_corner_profile");
stl(str(box_name(type), "_corner_profile"));
offset = box_boss_r(type) + 1;
for(i = [0 : 3])
rotate(i * 90)
@@ -209,7 +217,6 @@ module box_corner_quadrants(type, width, depth)
}
module box_bezel(type, bottom) { //! Generates top and bottom bezel STLs
stl(bottom ? "bottom_bezel" : "top_bezel");
feet = bottom && box_feet(type);
t = box_sheet_slot(type);
outset = box_outset(type);
@@ -221,66 +228,73 @@ module box_bezel(type, bottom) { //! Generates top and bottom bezel STLs
height = box_bezel_height(type, bottom);
foot_extension = foot_height - height;
difference() {
w = box_width(type);
d = box_depth(type);
translate_z(-box_profile_overlap(type)) difference() {
tw = w + 2 * outset;
td = d + 2 * outset;
rounded_rectangle([tw, td, feet ? foot_height : height], box_corner_rad(type), false);
//
// Remove edges between the feet
//
if(feet)
hull() {
translate_z(height + 0.5)
cube([w - 2 * foot_length, td + 1, 1], center = true);
stl(box_bc_name(type, bottom ? "bottom_bezel" : "top_bezel"))
difference() {
w = box_width(type);
d = box_depth(type);
translate_z(-box_profile_overlap(type)) difference() {
tw = w + 2 * outset;
td = d + 2 * outset;
rounded_rectangle([tw, td, feet ? foot_height : height], box_corner_rad(type));
//
// Remove edges between the feet
//
if(feet)
hull() {
translate_z(height + 0.5)
cube([w - 2 * foot_length, td + 1, 1], center = true);
translate_z(foot_height + 1)
cube([w - 2 * (foot_length - foot_extension), td + 1, 1], center = true);
}
if(feet)
hull() {
translate_z(height + 0.5)
cube([tw + 1, d - 2 * foot_length, 1], center = true);
translate_z(foot_height + 1)
cube([tw + 1, d - 2 * (foot_length - foot_extension), 1], center = true);
}
}
//
// slots for side panels
//
translate_z(-box_profile_overlap(type))
linear_extrude(2 * box_profile_overlap(type), center = true)
for(i = [-1, 1]) {
translate([i * (w + t - sheet_slot_clearance) / 2, 0])
square([t, d - 2 * cgap], center = true);
translate([0, i * (d + t - sheet_slot_clearance) / 2])
square([w - 2 * cgap, t], center = true);
}
//
// recess for top / bottom panel
//
translate_z(cgap)
rounded_rectangle([w + bezel_clearance, d + bezel_clearance, height], inner_r + bezel_clearance / 2, false);
//
// leave plastic over the corner profiles
//
translate_z(-box_profile_overlap(type) - 1)
linear_extrude(box_profile_overlap(type) + cgap + 2)
union() {
difference() {
square([w - 2 * inset,
d - 2 * inset], center = true);
box_corner_quadrants(type, w, d);
translate_z(foot_height + 1)
cube([w - 2 * (foot_length - foot_extension), td + 1, 1], center = true);
}
box_screw_hole_positions(type)
poly_circle(screw_clearance_radius(box_screw(type)));
}
}
if(feet)
hull() {
translate_z(height + 0.5)
cube([tw + 1, d - 2 * foot_length, 1], center = true);
translate_z(foot_height + 1)
cube([tw + 1, d - 2 * (foot_length - foot_extension), 1], center = true);
}
}
//
// slots for side panels
//
translate_z(-box_profile_overlap(type))
linear_extrude(2 * box_profile_overlap(type), center = true)
for(i = [-1, 1]) {
translate([i * (w + t - sheet_slot_clearance) / 2, 0])
square([t, d - 2 * cgap], center = true);
translate([0, i * (d + t - sheet_slot_clearance) / 2])
square([w - 2 * cgap, t], center = true);
}
//
// recess for top / bottom panel
//
translate_z(cgap)
rounded_rectangle([w + bezel_clearance, d + bezel_clearance, height], inner_r + bezel_clearance / 2);
//
// leave plastic over the corner profiles
//
translate_z(-box_profile_overlap(type) - 1)
linear_extrude(box_profile_overlap(type) + cgap + 2)
union() {
difference() {
square([w - 2 * inset,
d - 2 * inset], center = true);
box_corner_quadrants(type, w, d);
}
box_screw_hole_positions(type)
poly_circle(screw_clearance_radius(box_screw(type)));
}
//
// Optional child to subtract
//
if($children && !bottom)
translate_z(-box_profile_overlap(type))
children();
}
}
dowel_length = 20;
@@ -353,7 +367,6 @@ module box_bezel_section(type, bottom, rows, cols, x, y) { //! Generates interlo
translate([0, bw2 / 2, dh2 / 2])
cube([eps, bw2 - 2 * dowel_wall + 2 * extrusion_width, dh2], center = true);
}
}
}
@@ -369,7 +382,9 @@ module box_bezel_section(type, bottom, rows, cols, x, y) { //! Generates interlo
union() {
clip(xmin = 0, xmax = w, ymin = 0, ymax = h)
translate([tw / 2 - x * w, th / 2 - y * h, profile_overlap])
box_bezel(type, bottom);
box_bezel(type, bottom)
if($children && !bottom)
children();
if(x < cols - 1 && y == 0)
translate([w, 0])
@@ -438,8 +453,6 @@ module box_screw_hole_positions(type) {
}
module box_base_blank(type) { //! Generates a 2D template for the base sheet
dxf("box_base");
difference() {
sheet_2D(box_base_sheet(type), box_width(type), box_depth(type), box_sheet_r(type));
@@ -449,8 +462,6 @@ module box_base_blank(type) { //! Generates a 2D template for the base sheet
}
module box_top_blank(type) { //! Generates a 2D template for the top sheet
dxf("box_top");
difference() {
sheet_2D(box_top_sheet(type), box_width(type), box_depth(type), box_sheet_r(type));
@@ -464,8 +475,6 @@ function subst_sheet(type, sheet) =
sheet ? assert(sheet_thickness(sheet) == sheet_thickness(s)) sheet : s;
module box_shelf_blank(type, sheet = false) { //! Generates a 2D template for a shelf sheet
dxf("box_shelf");
difference() {
sheet_2D(subst_sheet(type, sheet), box_width(type) - bezel_clearance, box_depth(type) - bezel_clearance, 1);
@@ -485,7 +494,6 @@ module box_shelf_screw_positions(type, screw_positions, thickness = 0, wall = un
}
module box_shelf_bracket(type, screw_positions, wall = undef) { //! Generates a shelf bracket, the first optional child is a 2D cutout and the second 3D cutouts
stl("shelf_bracket");
w = is_undef(wall) ? box_wall(type) : wall;
insert = box_shelf_insert(type);
lip = 2 * insert_boss_radius(insert, w);
@@ -513,44 +521,45 @@ module box_shelf_bracket(type, screw_positions, wall = undef) { //! Generates a
square([lip, eps]);
}
difference() {
union() {
linear_extrude(w)
difference() {
shape()
if($children)
children(0);
round(2) offset(-width)
stl(box_bc_name(type, "shelf_bracket"))
difference() {
union() {
linear_extrude(w)
difference() {
shape()
if($children)
children(0);
}
linear_extrude(lip)
difference() {
shape()
if($children)
children(0);
round(2) offset(-width)
shape()
if($children)
children(0);
}
offset(-w)
linear_extrude(lip)
difference() {
shape()
if($children)
children(0);
}
offset(-w)
shape()
if($children)
children(0);
}
hflip()
box_shelf_screw_positions(type, screw_positions, 0, w)
boss();
}
if($children > 1)
hflip()
children(1);
hflip()
box_shelf_screw_positions(type, screw_positions, 0, w)
boss();
insert_hole(insert, counterbore = 1, horizontal = true);
}
if($children > 1)
hflip()
children(1);
hflip()
box_shelf_screw_positions(type, screw_positions, 0, w)
insert_hole(insert, counterbore = 1, horizontal = true);
}
}
module box_shelf_bracket_section(type, rows, cols, x, y) { //! Generates sections of the shelf bracket to allow it to be bigger than the printer
@@ -564,33 +573,44 @@ module box_shelf_bracket_section(type, rows, cols, x, y) { //! Generates section
children();
}
module box_left_blank(type, sheet = false) { //! Generates a 2D template for the left sheet, `sheet` can be set to override the type
dxf("box_left");
module box_left_blank(type, sheet = false) //! Generates a 2D template for the left sheet, `sheet` can be set to override the type
sheet_2D(subst_sheet(type, sheet), box_depth(type) - sheet_reduction(type), box_height(type) - sheet_reduction(type), 1);
}
module box_right_blank(type, sheet = false) { //! Generates a 2D template for the right sheet, `sheet` can be set to override the type
dxf("box_right");
module box_right_blank(type, sheet = false) //! Generates a 2D template for the right sheet, `sheet` can be set to override the type
sheet_2D(subst_sheet(type, sheet), box_depth(type) - sheet_reduction(type), box_height(type) - sheet_reduction(type), 1);
}
module box_front_blank(type, sheet = false) { //! Generates a 2D template for the front sheet, `sheet` can be set to override the type
dxf("box_front");
module box_front_blank(type, sheet = false) //! Generates a 2D template for the front sheet, `sheet` can be set to override the type
sheet_2D(subst_sheet(type, sheet), box_width(type) - sheet_reduction(type), box_height(type) - sheet_reduction(type), 1);
}
module box_back_blank(type, sheet = false) { //! Generates a 2D template for the back sheet, `sheet` can be set to override the type
dxf("box_back");
module box_back_blank(type, sheet = false) //! Generates a 2D template for the back sheet, `sheet` can be set to override the type
sheet_2D(subst_sheet(type, sheet), box_width(type) - sheet_reduction(type), box_height(type) - sheet_reduction(type), 1);
}
module box_base(type) render_2D_sheet(box_base_sheet(type)) box_base_blank(type); //! Default base, can be overridden to customise
module box_top(type) render_2D_sheet(box_top_sheet(type)) box_top_blank(type); //! Default top, can be overridden to customise
module box_back(type) render_2D_sheet(box_sheets(type)) box_back_blank(type); //! Default back, can be overridden to customise
module box_front(type) render_2D_sheet(box_sheets(type)) box_front_blank(type); //! Default front, can be overridden to customise
module box_left(type) render_2D_sheet(box_sheets(type)) box_left_blank(type); //! Default left side, can be overridden to customise
module box_right(type) render_2D_sheet(box_sheets(type)) box_right_blank(type); //! Default right side, can be overridden to customise
module box_base(type) //! Default base, can be overridden to customise
render_2D_sheet(box_base_sheet(type))
dxf(str(box_name(type), "_base"))
box_base_blank(type);
module box_top(type) //! Default top, can be overridden to customise
render_2D_sheet(box_top_sheet(type))
dxf(str(box_name(type), "_top"))
box_top_blank(type);
module box_back(type) //! Default back, can be overridden to customise
render_2D_sheet(box_sheets(type))
dxf(str(box_name(type), "_back"))
box_back_blank(type);
module box_front(type) //! Default front, can be overridden to customise
render_2D_sheet(box_sheets(type))
dxf(str(box_name(type), "_front"))
box_front_blank(type);
module box_left(type) //! Default left side, can be overridden to customise
render_2D_sheet(box_sheets(type))
dxf(str(box_name(type), "_left"))
box_left_blank(type);
module box_right(type) //! Default right side, can be overridden to customise
render_2D_sheet(box_sheets(type))
dxf(str(box_name(type), "_right"))
box_right_blank(type);

View File

@@ -23,12 +23,12 @@
// parameters to make the assembly views. E.g. module box_assembly() _box_assembly(box);
//
module _box_assembly(type, top = true, base = true, left = true, right = true, back = true, front = true, bezels = true, corners = 4)
assembly("box") {
assembly(box_name(type)) {
echo("Box:", box_width(type), box_depth(type), box_height(type));
t = sheet_thickness(box_sheets(type));
for(corner = [0 : corners - 1]) {
for(corner = [0 : 1 : corners - 1]) {
x = [-1,1,1,-1][corner];
y = [-1,-1,1,1][corner];
translate([x * (box_width(type) / 2 + 25 * exploded()), y * (box_depth(type) / 2 + 25 * exploded())])
@@ -50,7 +50,9 @@ assembly("box") {
translate_z(z * (box_height(type) / 2 - box_corner_gap(type) + 50 * exploded()))
rotate([z * 90 - 90, 0, 0])
if(bezels && (z > 0 ? top : base))
stl_colour(pp1_colour) render() box_bezel(type, z < 0);
stl_colour(pp1_colour) render() box_bezel(type, z < 0)
if(z > 0 && $children)
children();
translate_z(z * (box_height(type) / 2 + sheet_thickness + 50 * exploded()))
box_screw_hole_positions(type)

View File

@@ -31,7 +31,8 @@
//! * An optional list of fixing blocks to be omitted can be given.
//! * Star washers can be omitted by setting the 11th parameter to false.
//!
//! Uses [fixing blocks](#fixing_block) and [corner blocks](#corner_block).
//! Uses [fixing blocks](#fixing_block) and [corner blocks](#corner_block) by default. Setting `thin_blocks` uses 2screw_blocks instead of
//! fixing_blocks along the sides.
//
use <fixing_block.scad>
@@ -46,15 +47,16 @@ function bbox_span(type) = type[4]; //! Maximum span between fixing blocks
function bbox_width(type) = type[5]; //! Internal width
function bbox_depth(type) = type[6]; //! Internal depth
function bbox_height(type) = type[7]; //! Internal height
function bbox_name(type) = type[8] ? type[8] : "bbox"; //! Optional name if there is more than one box in a project
function bbox_skip_blocks(type)= type[9] ? type[9] : []; //! List of fixing blocks to skip, used to allow a hinged panel for example
function star_washers(type) = type[10] ? type[10] : is_undef(type[10]); //! Set to false to remove star washers.
function bbox_name(type) = type[8]; //! Optional name if there is more than one box in a project
function bbox_skip_blocks(type)= type[9]; //! List of fixing blocks to skip, used to allow a hinged panel for example
function bbox_star_washers(type)= type[10];//! Set to false to remove star washers.
function bbox_thin_blocks(type) = type[11];//! Set for 2 screw blocks instead of three hole fixing blocks.
function bbox(screw, sheets, base_sheet, top_sheet, span, size, name = "bbox", skip_blocks = [], star_washers = true) = //! Construct the property list for a butt_box
[ screw, sheets, base_sheet, top_sheet, span, size.x, size.y, size.z, name, skip_blocks, star_washers ];
function bbox(screw, sheets, base_sheet, top_sheet, span, size, name = "bbox", skip_blocks = [], star_washers = true, thin_blocks = false) = //! Construct the property list for a butt_box
[ screw, sheets, base_sheet, top_sheet, span, size.x, size.y, size.z, name, skip_blocks, star_washers, thin_blocks ];
function bbox_volume(type) = bbox_width(type) * bbox_depth(type) * bbox_height(type) / 1000000; //! Internal volume in litres
function bbox_area(type) = let(w = bbox_width(type), d = bbox_depth(type), h = bbox_height(type)) //! Internal surdface area in m^2
function bbox_area(type) = let(w = bbox_width(type), d = bbox_depth(type), h = bbox_height(type)) //! Internal surface area in m^2
2 * (w * d + w * h + d * h) / 1000000;
module bbox_shelf_blank(type) { //! 2D template for a shelf
@@ -108,15 +110,16 @@ function fixing_block_positions(type) = let(
rotate([y > 0 ? 180 : 0, x * y * 90, 0]),
];
function side_holes(type) = [for(p = fixing_block_positions(type), q = fixing_block_holes(bbox_screw(type))) p * q];
function side_holes(type) = let(
screw = bbox_screw(type),
holes = bbox_thin_blocks(type) ? 2screw_block_holes(screw) : fixing_block_holes(screw))
[for(p = fixing_block_positions(type), q = holes) p * q];
module bbox_drill_holes(type, t)
position_children(concat(corner_holes(type), side_holes(type)), t)
drill(screw_clearance_radius(bbox_screw(type)), 0);
module bbox_base_blank(type) { //! 2D template for the base
dxf(str(bbox_name(type), "_base"));
difference() {
sheet_2D(bbox_base_sheet(type), bbox_width(type), bbox_depth(type), 1);
@@ -125,8 +128,6 @@ module bbox_base_blank(type) { //! 2D template for the base
}
module bbox_top_blank(type) { //! 2D template for the top
dxf(str(bbox_name(type), "_top"));
t = sheet_thickness(bbox_sheets(type));
difference() {
@@ -142,8 +143,6 @@ function subst_sheet(type, sheet) =
sheet ? assert(sheet_thickness(sheet) == sheet_thickness(s)) sheet : s;
module bbox_left_blank(type, sheet = false) { //! 2D template for the left side
dxf(str(bbox_name(type), "_left"));
t = sheet_thickness(bbox_sheets(type));
bb = sheet_thickness(bbox_base_sheet(type));
@@ -156,8 +155,6 @@ module bbox_left_blank(type, sheet = false) { //! 2D template for the left side
}
module bbox_right_blank(type, sheet = false) { //! 2D template for the right side
dxf(str(bbox_name(type), "_right"));
t = sheet_thickness(bbox_sheets(type));
bb = sheet_thickness(bbox_base_sheet(type));
@@ -170,8 +167,6 @@ module bbox_right_blank(type, sheet = false) { //! 2D template for the right sid
}
module bbox_front_blank(type, sheet = false, width = 0) { //! 2D template for the front
dxf(str(bbox_name(type), "_front"));
t = sheet_thickness(bbox_sheets(type));
bb = sheet_thickness(bbox_base_sheet(type));
bt = sheet_thickness(bbox_top_sheet(type));
@@ -185,8 +180,6 @@ module bbox_front_blank(type, sheet = false, width = 0) { //! 2D template for th
}
module bbox_back_blank(type, sheet = false) { //! 2D template for the back
dxf(str(bbox_name(type), "_back"));
bb = sheet_thickness(bbox_base_sheet(type));
t = sheet_thickness(bbox_sheets(type));
@@ -198,22 +191,47 @@ module bbox_back_blank(type, sheet = false) { //! 2D template for the back
}
}
module bbox_base(type) render_2D_sheet(bbox_base_sheet(type)) bbox_base_blank(type); //! Default base, can be overridden to customise
module bbox_top(type) render_2D_sheet(bbox_top_sheet(type)) bbox_top_blank(type); //! Default top, can be overridden to customise
module bbox_back(type) render_2D_sheet(bbox_sheets(type)) bbox_back_blank(type); //! Default back, can be overridden to customise
module bbox_front(type) render_2D_sheet(bbox_sheets(type)) bbox_front_blank(type); //! Default front, can be overridden to customise
module bbox_left(type) render_2D_sheet(bbox_sheets(type)) bbox_left_blank(type); //! Default left side, can be overridden to customise
module bbox_right(type) render_2D_sheet(bbox_sheets(type)) bbox_right_blank(type); //! Default right side, can be overridden to customise
module bbox_base(type) //! Default base, can be overridden to customise
render_2D_sheet(bbox_base_sheet(type))
dxf(str(bbox_name(type), "_base"))
bbox_base_blank(type);
module bbox_top(type) //! Default top, can be overridden to customise
render_2D_sheet(bbox_top_sheet(type))
dxf(str(bbox_name(type), "_top"))
bbox_top_blank(type);
module bbox_back(type) //! Default back, can be overridden to customise
render_2D_sheet(bbox_sheets(type))
dxf(str(bbox_name(type), "_back"))
bbox_back_blank(type);
module bbox_front(type) //! Default front, can be overridden to customise
render_2D_sheet(bbox_sheets(type))
dxf(str(bbox_name(type), "_front"))
bbox_front_blank(type);
module bbox_left(type) //! Default left side, can be overridden to customise
render_2D_sheet(bbox_sheets(type))
dxf(str(bbox_name(type), "_left"))
bbox_left_blank(type);
module bbox_right(type) //! Default right side, can be overridden to customise
render_2D_sheet(bbox_sheets(type))
dxf(str(bbox_name(type), "_right"))
bbox_right_blank(type);
module _bbox_assembly(type, top = true, base = true, left = true, right = true, back = true, front = true) { //! The box assembly, wrap with a local copy without parameters
width = bbox_width(type);
depth = bbox_depth(type);
height = bbox_height(type);
echo("Box:", width, depth, height, volume = bbox_volume(type), area = bbox_area(type));
echo("Butt_box:", width, depth, height, volume = bbox_volume(type), area = bbox_area(type));
t = sheet_thickness(bbox_sheets(type));
bt = sheet_thickness(bbox_base_sheet(type));
tt = sheet_thickness(bbox_top_sheet(type));
star_washers = bbox_star_washers(type);
thin_blocks = bbox_thin_blocks(type);
function is_missing_screw(p) = p.y > depth / 2 - 1 ? !back : false;
@@ -223,13 +241,16 @@ module _bbox_assembly(type, top = true, base = true, left = true, right = true,
let(q = transform([0, 0, 0], p), thickness = q.z > 0 ? tt : bt)
multmatrix(p)
fastened_corner_block_assembly(is_missing_screw(q) && ((q.z > 0) != (q.x > 0)) ? 0 : t, bbox_screw(type), thickness,
is_missing_screw(q) && ((q.z > 0) == (q.x > 0)) ? 0 : t, star_washers = star_washers(type));
is_missing_screw(q) && ((q.z > 0) == (q.x > 0)) ? 0 : t, star_washers = star_washers);
h = height / 2 - 1;
for(p = fixing_block_positions(type))
let(q = transform([0, 0, 0], p), thickness = q.z > h ? tt : q.z < -h ? bt : t)
multmatrix(p)
fastened_fixing_block_assembly(is_missing_screw(q) ? 0 : t, bbox_screw(type), thickness2 = thickness, star_washers = star_washers(type));
if(thin_blocks)
fastened_2screw_block_assembly(is_missing_screw(q) ? 0 : t, bbox_screw(type), thickness_below = thickness, star_washers = star_washers);
else
fastened_fixing_block_assembly(is_missing_screw(q) ? 0 : t, bbox_screw(type), thickness2 = thickness, star_washers = star_washers);
for(x = [-1, 1])
translate([x * (width / 2 + t / 2 + eps + 25 * exploded()), 0])

117
printed/cable_clip.scad Normal file
View File

@@ -0,0 +1,117 @@
//
// NopSCADlib Copyright Chris Palmer 2022
// 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/>.
//
//
//! Cable clips to order. Can be for one or two cables of different sizes.
//
include <../core.scad>
use <../vitamins/wire.scad>
use <../utils/fillet.scad>
wall = 2;
function cable_clip_width(screw) = max(wall + 2 * screw_clearance_radius(screw) + wall, washer_diameter(screw_washer(screw))); //! Width given the `screw`.
function cable_clip_height(cable) = cable_height(cable) + wall; //! Height given the `cable`.
function cable_clip_extent(screw, cable) = screw_clearance_radius(screw) + wall + cable_width(cable) + wall; //! How far it extends from the screw.
function cable_clip_offset(screw, cable) = screw_clearance_radius(screw) + wall + cable_width(cable) / 2; //! The offset of the cable from the screw
module single_cable_clip(screw, cable, h = 0) {
screw_dia = 2 * screw_clearance_radius(screw);
height = cable_clip_width(screw);
depth = h ? h : cable_height(cable) + wall;
w = cable_width(cable);
width = wall + w + wall + screw_dia + wall;
hole_x = wall + w + wall + screw_dia / 2;
rad = min(wall + cable_wire_size(cable) / 2, depth / 2);
r = extrusion_width - eps;
translate([-hole_x, 0]) difference() {
linear_extrude(height)
difference() {
hull() {
rounded_square([width, 1], r, center = false);
translate([width - 1, 0])
rounded_square([1, depth], r, center = false);
translate([rad, depth - rad])
circle(r = rad);
}
translate([wall + cable_width(cable) / 2, 0]) {
hull() {
for(p = cable_bundle_positions(cable))
translate(p)
circle(d = cable_wire_size(cable));
square([w, eps], center = true);
}
for(side = [-1, 1])
translate([side * w / 2, 0])
hflip(side < 0)
fillet(r = r, h = 0);
}
}
translate([hole_x, depth / 2, height / 2])
rotate([90,0,0])
teardrop_plus(h = depth + 1, r = screw_dia / 2, center = true);
}
}
module double_cable_clip(screw, cable1, cable2) {
h = max(cable_clip_height(cable1), cable_clip_height(cable2));
union() {
single_cable_clip(screw, cable1, h);
mirror([1,0,0]) single_cable_clip(screw, cable2, h);
}
}
module cable_clip(screw, cable1, cable2 = 0) { //! Create the STL for a single cable or two cable clip
function clip_str(screw) = str("cable_clip_", screw_radius(screw) * 20);
function cable_str(cable) = str("_", cable_wires(cable), "_", round(cable_wire_size(cable) * 10));
if(cable2) {
stl(str(clip_str(screw), cable_str(cable1), cable_str(cable2)));
double_cable_clip(screw, cable1, cable2);
}
else {
stl(str(clip_str(screw), cable_str(cable1)));
single_cable_clip(screw, cable1);
}
}
module cable_clip_assembly(screw, thickness, cable1, cable2 = 0) { //! Cable clip with the fasteners
height = max(cable_clip_height(cable1), cable2 ? cable_clip_height(cable2) : 0);
stl_colour(pp1_colour) render()
translate([0, cable_clip_width(screw) / 2]) rotate([90, 0, 0])
cable_clip(screw, cable1, cable2);
translate_z(height)
screw_and_washer(screw, screw_length(screw, height + thickness, 2, nyloc = true));
translate_z(-thickness)
vflip()
nut_and_washer(screw_nut(screw), true);
}

View File

@@ -49,84 +49,84 @@ module ribbon_grommet_hole(ways, h = 50, expand = true) { //! Generate a hole fo
}
module ribbon_grommet(ways, thickness) { //! Generate the STL for a printed ribbon grommet
stl(str("ribbon_grommet_", ways, "_", thickness));
width = 2 * (wall + clearance) + thickness;
slot_length = ribbon_clamp_slot(ways);
length = slot_length + 2 * wall + 2 * overlap;
rotate([90, 0, 0])
union() {
for(side = [-1, 1])
translate_z(side * (width - wall) / 2)
linear_extrude(wall, center = true, convexity = 5)
difference() {
hull() {
translate([-length / 2, 0])
square([length, base]);
stl(str("ribbon_grommet_", ways, "_", thickness))
rotate([90, 0, 0])
union() {
for(side = [-1, 1])
translate_z(side * (width - wall) / 2)
linear_extrude(wall, center = true, convexity = 5)
difference() {
hull() {
translate([-length / 2, 0])
square([length, base]);
for(end = [-1, 1])
translate([end * (length / 2 - rad), height - rad])
semi_circle(rad);
for(end = [-1, 1])
translate([end * (length / 2 - rad), height - rad])
semi_circle(rad);
}
translate([-slot_length / 2, base])
square([slot_length, slot_height]);
}
translate([-slot_length / 2, base])
square([slot_length, slot_height]);
}
linear_extrude(width -1, center = true)
difference() {
ribbon_grommet_hole(ways, expand = false, h = 0);
linear_extrude(width -1, center = true)
difference() {
ribbon_grommet_hole(ways, expand = false, h = 0);
translate([-slot_length / 2, base])
square([slot_length, slot_height]);
}
}
translate([-slot_length / 2, base])
square([slot_length, slot_height]);
}
}
}
module round_grommet_top(diameter, thickness, od = undef) { //! Generate the STL for a round grommet top half
stl(str("round_grommet_top_", round(diameter * 10), "_", thickness));
chamfer = layer_height;
h = wall + thickness + wall;
r1 = diameter / 2;
r2 = od == undef ? corrected_radius(r1) + wall : od / 2;
r3 = r2 + overlap;
r0 = r1 + 1;
union() {
rotate_extrude()
polygon([
[r0, 0],
[r3 - chamfer, 0],
[r3, chamfer],
[r3, wall],
[r2, wall],
[r2, h - chamfer],
[r2 - chamfer, h],
[r0, h],
]);
stl(str("round_grommet_top_", round(diameter * 10), "_", thickness))
union() {
rotate_extrude()
polygon([
[r0, 0],
[r3 - chamfer, 0],
[r3, chamfer],
[r3, wall],
[r2, wall],
[r2, h - chamfer],
[r2 - chamfer, h],
[r0, h],
]);
render() difference() {
cylinder(r = r0 + eps, h = h);
render() difference() {
cylinder(r = r0 + eps, h = h);
poly_cylinder(r = r1, h = 100, center = true);
poly_cylinder(r = r1, h = 100, center = true);
}
}
}
}
module round_grommet_bottom(diameter, od = undef) { //! Generate the STL for a round grommet bottom half
stl(str("round_grommet_bottom_", round(diameter * 10)));
chamfer = layer_height;
r1 = diameter / 2;
r2 = od == undef ? corrected_radius(r1) + wall : od / 2;
r3 = r2 + max(overlap, wall + chamfer);
rotate_extrude()
polygon([
[r2, chamfer],
[r2 + chamfer, 0],
[r3, 0],
[r3, wall - chamfer],
[r3 - chamfer, wall],
[r2, wall],
]);
stl(str("round_grommet_bottom_", round(diameter * 10)))
rotate_extrude()
polygon([
[r2, chamfer],
[r2 + chamfer, 0],
[r3, 0],
[r3, wall - chamfer],
[r3 - chamfer, wall],
[r2, wall],
]);
}
module round_grommet_hole(diameter, h = 100) //! Make a hole for a round grommet
@@ -158,33 +158,33 @@ module mouse_grommet_hole(r, h = 50, z = undef, expand = wall + clearance) //! M
square([2 * R, eps]);
}
function mouse_grommet_offset(r) = r + wall;
function mouse_grommet_offset(r) = r + wall; //! Offset of the wire from the ground
function mouse_grommet_length(r) = 2 * r + 2 * wall + 2 * overlap; //! Length of grommet given r
module mouse_grommet(r, thickness) { //! Make the STL for a mouse grommet
stl(str("mouse_grommet_", r * 10, "_", thickness));
width = 2 * (wall + clearance) + thickness;
length = 2 * r + 2 * wall + 2 * overlap;
rotate([90, 0, 0])
union() {
for(side = [-1, 1])
translate_z(side * (width - wall) / 2)
linear_extrude(wall, center = true)
difference() {
mouse_grommet_hole(r, z = r + wall, h = 0, expand = wall + overlap);
stl(str("mouse_grommet_", r * 20, "_", thickness))
rotate([90, 0, 0])
union() {
for(side = [-1, 1])
translate_z(side * (width - wall) / 2)
linear_extrude(wall, center = true)
difference() {
mouse_grommet_hole(r, z = r + wall, h = 0, expand = wall + overlap);
translate([0, wall])
mouse_grommet_hole(r, h = 0, expand = 0);
}
linear_extrude(width - 1, center = true)
difference() {
mouse_grommet_hole(r, h = 0, z = r + wall, expand = wall);
translate([0, wall])
mouse_grommet_hole(r, h = 0, expand = 0);
}
linear_extrude(width - 1, center = true)
difference() {
mouse_grommet_hole(r, h = 0, z = r + wall, expand = wall);
translate([0, wall])
mouse_grommet_hole(r, h = 0, expand = 0);
}
}
}
}
module mouse_grommet_assembly(r, thickness)
@@ -193,10 +193,10 @@ module mouse_grommet_assembly(r, thickness)
mouse_grommet(r, thickness);
module ribbon_grommet_20_3_stl() ribbon_grommet(20, 3);
module mouse_grommet_15_3_stl() mouse_grommet(1.5, 3);
module mouse_grommet_20_3_stl() mouse_grommet(2, 3);
module mouse_grommet_25_3_stl() mouse_grommet(2.5, 3);
module mouse_grommet_30_3_stl() mouse_grommet(3, 3);
module mouse_grommet_30_3_stl() mouse_grommet(1.5, 3);
module mouse_grommet_40_3_stl() mouse_grommet(2, 3);
module mouse_grommet_50_3_stl() mouse_grommet(2.5, 3);
module mouse_grommet_60_3_stl() mouse_grommet(3, 3);
module round_grommet_bottom_30_stl() round_grommet_bottom(3);
module round_grommet_bottom_40_stl() round_grommet_bottom(4);

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