Compare commits
31 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
75262efe3a | ||
|
c1e4625382 | ||
|
6059c5f556 | ||
|
a5a55533e1 | ||
|
4ceb6bd863 | ||
|
e0df0f31a5 | ||
|
664d04ad93 | ||
|
78b8c2031e | ||
|
2001de2408 | ||
|
64fb562f58 | ||
|
bf163587fa | ||
|
1238dba90a | ||
|
f40a7d19a9 | ||
|
a054eb8216 | ||
|
05edd923b8 | ||
|
b58a59dab7 | ||
|
6b6ffb2b74 | ||
|
1e30ad24e8 | ||
|
dc715ff2b7 | ||
|
c57c202e31 | ||
|
26bfe96614 | ||
|
fa49ae09fa | ||
|
974457eabd | ||
|
2cc3c6ec7c | ||
|
633843d45e | ||
|
1a472c8ed5 | ||
|
f44d9ae424 | ||
|
4f0c443c8e | ||
|
ecd534b577 | ||
|
aec72118fa | ||
|
0d828f8f7f |
1
.gitignore
vendored
@@ -11,3 +11,4 @@ options.json
|
||||
times.txt
|
||||
*_diff.png
|
||||
*.echo
|
||||
cmd_times.txt
|
||||
|
41
CHANGELOG.md
@@ -3,6 +3,47 @@
|
||||
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
|
||||
|
||||
|
||||
#### [v20.10.3](https://github.com/nophead/NopSCADlib/releases/tag/v20.10.3 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v20.10.2...v20.10.3 "diff with v20.10.2")
|
||||
* 2022-08-03 [`4ceb6bd`](https://github.com/nophead/NopSCADlib/commit/4ceb6bd8639cd39ac39798b3eccd178526a56c13 "show commit") [C.](# "Chris") Fixed a gap in printed hinges.
|
||||
|
||||
#### [v20.10.2](https://github.com/nophead/NopSCADlib/releases/tag/v20.10.2 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v20.10.1...v20.10.2 "diff with v20.10.1")
|
||||
* 2022-07-16 [`664d04a`](https://github.com/nophead/NopSCADlib/commit/664d04ad93c28c2614d5991e2b8dfa78964f6a99 "show commit") [C.](# "Chris") Now logs the time taken to run non OpenSCAD commands in `cmd_times.txt`
|
||||
|
||||
#### [v20.10.1](https://github.com/nophead/NopSCADlib/releases/tag/v20.10.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v20.10.0...v20.10.1 "diff with v20.10.0")
|
||||
* 2022-06-30 [`f44d9ae`](https://github.com/nophead/NopSCADlib/commit/f44d9ae424f407baa4f8b5187819b43b30800257 "show commit") [M.B.](# "Martin Budden") Made includes relative in `bldc_motors`.
|
||||
|
||||
* 2022-07-15 [`1238dba`](https://github.com/nophead/NopSCADlib/commit/1238dba90ac5c48ba01abb9e7926a064353489de "show commit") [C.](# "Chris") Updated readme.
|
||||
|
||||
* 2022-06-22 [`aec7211`](https://github.com/nophead/NopSCADlib/commit/aec72118fac218ca033264fa7b28db2bff7db10a "show commit") [M.B.](# "Martin Budden") Fixed typos.
|
||||
|
||||
### [v20.10.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.10.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.9.0...v20.10.0 "diff with v20.9.0")
|
||||
* 2022-07-04 [`b58a59d`](https://github.com/nophead/NopSCADlib/commit/b58a59dab70bb414dd90dc5a9055d6bf3b4f6144 "show commit") [C.](# "Chris") Updated images and readme.
|
||||
|
||||
* 2022-07-04 [`6b6ffb2`](https://github.com/nophead/NopSCADlib/commit/6b6ffb2b74cc89ffecbcad7c304c3c4f047a8805 "show commit") [C.](# "Chris") Added SOICs to tests.
|
||||
|
||||
* 2022-07-04 [`1e30ad2`](https://github.com/nophead/NopSCADlib/commit/1e30ad24e802dc6e075fd73185551202101d4793 "show commit") [C.](# "Chris") Added `smd_soic` to `pcb_component()`.
|
||||
|
||||
* 2022-07-04 [`dc715ff`](https://github.com/nophead/NopSCADlib/commit/dc715ff2b70ae98615ee43750f3bb7613b481f7b "show commit") [C.](# "Chris") Tweaked SOIC text size.
|
||||
|
||||
* 2022-07-04 [`c57c202`](https://github.com/nophead/NopSCADlib/commit/c57c202e31c70351f38ef6299c60b0deb54bd296 "show commit") [M.](# "MS3FGX") Adjust lead sizing
|
||||
|
||||
* 2022-07-02 [`26bfe96`](https://github.com/nophead/NopSCADlib/commit/26bfe96614741206c8da6d126edfa9eb5326cb8f "show commit") [M.](# "MS3FGX") Add SOIC SMD Package
|
||||
|
||||
### [v20.9.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.9.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.8.0...v20.9.0 "diff with v20.8.0")
|
||||
* 2022-07-02 [`2cc3c6e`](https://github.com/nophead/NopSCADlib/commit/2cc3c6ec7c9d8ee285d49111559d40fb2a3112e1 "show commit") [C.](# "Chris") Updated images and readme.
|
||||
|
||||
* 2022-07-02 [`633843d`](https://github.com/nophead/NopSCADlib/commit/633843d45eacd42619581a4619752700e1cd687b "show commit") [C.](# "Chris") Added LED1206 example to PCB test.
|
||||
|
||||
* 2022-07-02 [`1a472c8`](https://github.com/nophead/NopSCADlib/commit/1a472c8ed549e230f7df93989f3e1db729b4b281 "show commit") [M.](# "MS3FGX") Add 1206 SMD LED
|
||||
|
||||
### [v20.8.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.8.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.7.0...v20.8.0 "diff with v20.7.0")
|
||||
* 2022-06-23 [`ecd534b`](https://github.com/nophead/NopSCADlib/commit/ecd534b5773928b9987023bd4370f661cc750fbd "show commit") [C.P.](# "Chris Palmer") Added `NEMA_connection_pos()`.
|
||||
Changed motor wire colours and tweaked wire position and size,
|
||||
|
||||
### [v20.7.0](https://github.com/nophead/NopSCADlib/releases/tag/v20.7.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v20.6.1...v20.7.0 "diff with v20.6.1")
|
||||
* 2022-06-21 [`28c36a4`](https://github.com/nophead/NopSCADlib/commit/28c36a4e966cceccbbdc330cf9a6fdeaa0283889 "show commit") [C.P.](# "Chris Palmer") `rounded_polygon()` now copes with the degenerate case when tangents intersect to form a sharp corner with no arc.
|
||||
Added an `offset()` function with some limitations.
|
||||
|
||||
#### [v20.6.1](https://github.com/nophead/NopSCADlib/releases/tag/v20.6.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v20.6.0...v20.6.1 "diff with v20.6.0")
|
||||
* 2022-06-21 [`6a9af0a`](https://github.com/nophead/NopSCADlib/commit/6a9af0af8aef68978b8be248810d07c85150341b "show commit") [C.P.](# "Chris Palmer") Updates images
|
||||
|
||||
|
BIN
libtest.png
Before Width: | Height: | Size: 984 KiB After Width: | Height: | Size: 992 KiB |
@@ -111,8 +111,8 @@ module hinge_male(type, female = false) { //! The half with the stationary
|
||||
rotate(180)
|
||||
teardrop(r = kr, h = 0);
|
||||
|
||||
translate([-kr - 1, -kr])
|
||||
square(1);
|
||||
translate([-kr - inset - eps, -kr])
|
||||
square([eps, t]);
|
||||
}
|
||||
teardrop_plus(r = pr + (female ? gap : 0), h = 0);
|
||||
}
|
||||
|
@@ -44,7 +44,7 @@ function knob_height(type) = //! Total height of the knob
|
||||
screw_knob_stem_h(type) + screw_knob_flange_t(type);
|
||||
|
||||
module screw_knob(type) { //! Generate the STL for a knob to fit the specified hex screw
|
||||
type = !is_list(type[0]) ? screw_knob(type) : type; // Allow just the screw to be specified for backwards compatability
|
||||
type = !is_list(type[0]) ? screw_knob(type) : type; // Allow just the screw to be specified for backwards compatibility
|
||||
screw = screw_knob_screw(type);
|
||||
wall = screw_knob_wall(type);
|
||||
trap_r = nut_trap_radius(screw_nut(screw));
|
||||
|
58
readme.md
@@ -2440,12 +2440,16 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | `ax_res(res1_8, 1e+6, tol = 1)` | Resistor 1e+6 Ohms 1% 0.125W |
|
||||
| 1 | `smd_led(LED0603, orange)` | SMD LED 0603 orange |
|
||||
| 1 | `smd_led(LED0805, red)` | SMD LED 0805 red |
|
||||
| 1 | `smd_led(LED1206, blue)` | SMD LED 1306 blue |
|
||||
| 1 | `smd_capacitor(CAP0603)` | SMD capacitor 0603 |
|
||||
| 1 | `smd_capacitor(CAP0805)` | SMD capacitor 0805 |
|
||||
| 1 | `smd_capacitor(CAP1206)` | SMD capacitor 1206 |
|
||||
| 1 | `smd_resistor(RES0603, 1K)` | SMD resistor 0603 1K 0.1W |
|
||||
| 1 | `smd_resistor(RES0805, 1K)` | SMD resistor 0805 1K 0.125W |
|
||||
| 1 | `smd_resistor(RES1206, 1K)` | SMD resistor 1206 1K 0.25W |
|
||||
| 1 | `smd_soic(SOIC16)` | SOIC16 package ICL323 |
|
||||
| 1 | `smd_soic(SOIC18)` | SOIC18 package PIC18F88 |
|
||||
| 1 | `smd_soic(SOIC8)` | SOIC8 package M34063 |
|
||||
| 1 | `smd_sot(SOT223)` | SOT223 package LM117 |
|
||||
| 1 | `smd_sot(SOT23)` | SOT23 package 2N7000 |
|
||||
| 1 | `square_button(button_4p5mm)` | Square button 4.5mm |
|
||||
@@ -2581,6 +2585,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | `pcb(ExtruderPCB)` | Extruder connection PCB - not shown |
|
||||
| 1 | `pcb(KY_040)` | KY-040 rotart encoder breakout |
|
||||
| 1 | `pcb(Keyes5p1)` | Keyes5.1 Arduino Uno expansion board - not shown |
|
||||
| 1 | `pcb(L9110S)` | L9110S 2-Channel motor driver module |
|
||||
| 1 | `pcb(LIPO_fuel_gauge)` | LIPO fuel gauge |
|
||||
| 1 | `pcb(MP1584EN)` | MP1584EN 3A buck converter |
|
||||
| 1 | `pcb(MT3608)` | MT3608 boost converter module |
|
||||
@@ -2591,7 +2596,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | `molex_254(3)` | Molex KK header 3 way - not shown |
|
||||
| 20 | `nut(M2_nut, nyloc = true)` | Nut M2 x 1.6mm nyloc |
|
||||
| 30 | `nut(M2p5_nut, nyloc = true)` | Nut M2.5 x 2.2mm nyloc |
|
||||
| 32 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
|
||||
| 36 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
|
||||
| 8 | `nut(M4_nut, nyloc = true)` | Nut M4 x 3.2mm nyloc |
|
||||
| 1 | `pcb(PI_IO)` | PI_IO V2 - not shown |
|
||||
| 1 | `pcb(PSU12V1A)` | PSU 12V 1A - not shown |
|
||||
@@ -2614,10 +2619,12 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 8 | `screw(M2p5_cap_screw, 30)` | Screw M2.5 cap x 30mm |
|
||||
| 4 | `screw(M2p5_pan_screw, 20)` | Screw M2.5 pan x 20mm |
|
||||
| 8 | `screw(M2p5_pan_screw, 25)` | Screw M2.5 pan x 25mm |
|
||||
| 10 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
|
||||
| 13 | `screw(M3_cap_screw, 30)` | Screw M3 cap x 30mm |
|
||||
| 9 | `screw(M3_cap_screw, 35)` | Screw M3 cap x 35mm |
|
||||
| 8 | `screw(M4_cap_screw, 35)` | Screw M4 cap x 35mm |
|
||||
| 8 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
|
||||
| 6 | `screw(M3_cap_screw, 20)` | Screw M3 cap x 20mm |
|
||||
| 8 | `screw(M3_cap_screw, 30)` | Screw M3 cap x 30mm |
|
||||
| 14 | `screw(M3_cap_screw, 35)` | Screw M3 cap x 35mm |
|
||||
| 4 | `screw(M4_cap_screw, 35)` | Screw M4 cap x 35mm |
|
||||
| 4 | `screw(M4_cap_screw, 40)` | Screw M4 cap x 40mm |
|
||||
| 1 | `pcb(XIAO)` | Seeeduino XIAO |
|
||||
| 1 | `pcb(TP4056)` | TP4056 Li-lon Battery charger module |
|
||||
| 3 | `terminal_35(2)` | Terminal block 2 way 3.5mm - not shown |
|
||||
@@ -2626,34 +2633,37 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
||||
| 1 | `pcb(WD2002SJ)` | WD2002SJ Buck Boost DC-DC converter |
|
||||
| 20 | `washer(M2_washer)` | Washer M2 x 5mm x 0.3mm |
|
||||
| 30 | `washer(M2p5_washer)` | Washer M2.5 x 5.9mm x 0.5mm |
|
||||
| 32 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
|
||||
| 36 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
|
||||
| 8 | `washer(M4_washer)` | Washer M4 x 9mm x 0.8mm |
|
||||
| 1 | `pcb(ZC_A0591)` | ZC-A0591 ULN2003 driver PCB |
|
||||
|
||||
### Printed
|
||||
| Qty | Filename |
|
||||
| ---:|:--- |
|
||||
| 8 | pcb_spacer20100.stl |
|
||||
| 4 | pcb_spacer20100.stl |
|
||||
| 4 | pcb_spacer20110.stl |
|
||||
| 4 | pcb_spacer2070.stl |
|
||||
| 4 | pcb_spacer2080.stl |
|
||||
| 4 | pcb_spacer2090.stl |
|
||||
| 4 | pcb_spacer25120.stl |
|
||||
| 4 | pcb_spacer25130.stl |
|
||||
| 4 | pcb_spacer25140_2.stl |
|
||||
| 4 | pcb_spacer25140.stl |
|
||||
| 4 | pcb_spacer25150_2.stl |
|
||||
| 4 | pcb_spacer25170.stl |
|
||||
| 4 | pcb_spacer25160_2.stl |
|
||||
| 4 | pcb_spacer25180.stl |
|
||||
| 4 | pcb_spacer25190.stl |
|
||||
| 2 | pcb_spacer2550.stl |
|
||||
| 4 | pcb_spacer2580.stl |
|
||||
| 4 | pcb_spacer30160.stl |
|
||||
| 4 | pcb_spacer30190.stl |
|
||||
| 5 | pcb_spacer30200.stl |
|
||||
| 4 | pcb_spacer2590.stl |
|
||||
| 4 | pcb_spacer30170.stl |
|
||||
| 4 | pcb_spacer30200.stl |
|
||||
| 5 | pcb_spacer30210.stl |
|
||||
| 4 | pcb_spacer30220.stl |
|
||||
| 5 | pcb_spacer30220.stl |
|
||||
| 4 | pcb_spacer30230.stl |
|
||||
| 4 | pcb_spacer3050.stl |
|
||||
| 6 | pcb_spacer3060.stl |
|
||||
| 4 | pcb_spacer40230.stl |
|
||||
| 4 | pcb_spacer3060.stl |
|
||||
| 2 | pcb_spacer3070.stl |
|
||||
| 4 | pcb_spacer3080.stl |
|
||||
| 4 | pcb_spacer40240.stl |
|
||||
| 4 | pcb_spacer40250.stl |
|
||||
|
||||
|
||||
<a href="#top">Top</a>
|
||||
@@ -3643,6 +3653,12 @@ Surface mount components for PCBs.
|
||||
| `smd_res_end_cap(type)` | End cap width |
|
||||
| `smd_res_power(type)` | Power rating in Watts |
|
||||
| `smd_res_size(type)` | Body length, width and height |
|
||||
| `smd_soic_lead_pitch(type)` | Lead pitch |
|
||||
| `smd_soic_lead_size(type)` | Lead width, foot depth, lead thickness |
|
||||
| `smd_soic_lead_span(type)` | Total span of leads |
|
||||
| `smd_soic_lead_z(type)` | Top of lead frame from top |
|
||||
| `smd_soic_size(type)` | Body length, width and height |
|
||||
| `smd_soic_z(type)` | Height above PCB surface |
|
||||
| `smd_sot_lead_pitch(type)` | Lead pitch |
|
||||
| `smd_sot_lead_size(type)` | Lead width, foot depth, lead thickness |
|
||||
| `smd_sot_lead_span(type)` | Total span of leads |
|
||||
@@ -3664,6 +3680,7 @@ Surface mount components for PCBs.
|
||||
| `smd_capacitor(type, height, value = undef)` | Draw an SMD capacitor with specified height |
|
||||
| `smd_led(type, colour, cutout)` | Draw an SMD LED with specified `colour` |
|
||||
| `smd_resistor(type, value)` | Draw an SMD resistor with specified value |
|
||||
| `smd_soic(type, value)` | Draw an SMD SOIC |
|
||||
| `smd_sot(type, value)` | Draw an SMD transistor |
|
||||
|
||||

|
||||
@@ -3673,12 +3690,16 @@ Surface mount components for PCBs.
|
||||
| ---:|:--- |:---|
|
||||
| 1 | `smd_led(LED0603, green)` | SMD LED 0603 green |
|
||||
| 1 | `smd_led(LED0805, blue)` | SMD LED 0805 blue |
|
||||
| 1 | `smd_led(LED1206, red)` | SMD LED 1306 red |
|
||||
| 1 | `smd_capacitor(CAP0603)` | SMD capacitor 0603 |
|
||||
| 1 | `smd_capacitor(CAP0805)` | SMD capacitor 0805 |
|
||||
| 1 | `smd_capacitor(CAP1206)` | SMD capacitor 1206 |
|
||||
| 1 | `smd_resistor(RES0603, 1R0)` | SMD resistor 0603 1R0 0.1W |
|
||||
| 1 | `smd_resistor(RES0805, 10M)` | SMD resistor 0805 10M 0.125W |
|
||||
| 1 | `smd_resistor(RES1206, 100K)` | SMD resistor 1206 100K 0.25W |
|
||||
| 1 | `smd_soic(SOIC16)` | SOIC16 package SOIC16 |
|
||||
| 1 | `smd_soic(SOIC18)` | SOIC18 package SOIC18 |
|
||||
| 1 | `smd_soic(SOIC8)` | SOIC8 package SOIC8 |
|
||||
| 1 | `smd_sot(SOT223)` | SOT223 package FZT851 |
|
||||
| 1 | `smd_sot(SOT23)` | SOT23 package 2N7000 |
|
||||
|
||||
@@ -3887,6 +3908,7 @@ NEMA stepper motor model.
|
||||
| Function | Description |
|
||||
|:--- |:--- |
|
||||
| `NEMA_big_hole(type)` | Clearance hole for the big boss |
|
||||
| `NEMA_connection_pos(type, jst_connector = false)` | Position of the wires or the connector |
|
||||
| `NEMA_holes(type)` | Screw positions for for loop |
|
||||
|
||||
### Modules
|
||||
@@ -6698,7 +6720,7 @@ Each vertex, apart from the first and the last, has an associated radius and the
|
||||
| `rounded_path_vertices(path)` | Show the unrounded version of a rounded_path for debug |
|
||||
| `segmented_path(path, min_segment)` | Add points to a path to enforce a minimum segment length |
|
||||
| `skin_faces(points, npoints, facets, loop, offset = 0)` | Create the mesh for the swept volume without end caps |
|
||||
| `spiral_paths(path, n, r, twists, start_angle)` | Create a new paths which sprial around the given path. Use for making twisted cables |
|
||||
| `spiral_paths(path, n, r, twists, start_angle)` | Create a new paths which spiral around the given path. Use for making twisted cables |
|
||||
| `sweep(path, profile, loop = false, twist = 0)` | Generate the point list and face list of the swept volume |
|
||||
|
||||
### Modules
|
||||
|
@@ -47,7 +47,12 @@ def do_cmd(cmd, output = sys.stdout):
|
||||
for arg in cmd:
|
||||
print(arg, end = " ")
|
||||
print()
|
||||
return subprocess.call(cmd, stdout = output, stderr = output)
|
||||
t = time.time()
|
||||
rv = subprocess.call(cmd, stdout = output, stderr = output)
|
||||
elapsed = time.time() - t
|
||||
with open("cmd_times.txt", 'at') as f:
|
||||
print(cmd[0], cmd[-1], elapsed, file = f)
|
||||
return rv
|
||||
|
||||
def compare_images(a, b, c):
|
||||
if not os.path.isfile(b):
|
||||
|
@@ -61,6 +61,7 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
[
|
||||
[ 20, -5, 180, "trimpot10"],
|
||||
[ 20, -15, 90, "trimpot10", true],
|
||||
[ 7, 2, 90, "smd_led", LED1206, "blue"],
|
||||
[ 10, 2, 90, "smd_led", LED0805, "red"],
|
||||
[ 13, 2, 90, "smd_led", LED0603, "orange"],
|
||||
[ 16, 2, 90, "smd_res", RES1206, "1K"],
|
||||
@@ -114,7 +115,6 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
[ 60, 3, 0, "flex"],
|
||||
[ 50, 15, -90, "flat_flex"],
|
||||
[ 40, 15, -90, "flat_flex", true],
|
||||
[ 60, 35, 0, "D_plug", DCONN9],
|
||||
|
||||
[ 50, 50, 0, "molex_hdr", 2],
|
||||
[ 50, 60, 0, "jst_xh", 2],
|
||||
@@ -139,8 +139,11 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
[ 55, 170, 0, "button_4p5mm"],
|
||||
[ 50, 185, 0, "microswitch", small_microswitch],
|
||||
[ 52, 200, 0, "pcb", 11, TMC2130 ],
|
||||
[ 80, 200, 0, "pdip", 24, "27C32", true, inch(0.6) ],
|
||||
[ 80, 170, 0, "pdip", 8, "NE555" ],
|
||||
[ 80, 210, 0, "pdip", 24, "27C32", true, inch(0.6) ],
|
||||
[ 80, 180, 0, "pdip", 8, "NE555" ],
|
||||
[ 80, 166, -90, "smd_soic", SOIC18, "PIC18F88"],
|
||||
[ 71, 166, -90, "smd_soic", SOIC16, "ICL323"],
|
||||
[ 64, 166, -90, "smd_soic", SOIC8, "M34063"],
|
||||
[ 80, 150, 0, "chip", 10, 5, 1, grey(20)],
|
||||
|
||||
[ 52, 206, 0, "2p54socket", 8, 1 ],
|
||||
@@ -148,7 +151,8 @@ test_pcb = ["test_pcb", "Test PCB",
|
||||
[ 50, 220, 0, "standoff", 5, 4.5, 12.5, 2.54],
|
||||
[ 50, 240, 0, "potentiometer"],
|
||||
[ 75, 240, 0, "potentiometer", KY_040_encoder, 8],
|
||||
[ 30, 85, -90, "7seg", WT5011BSR, 2],
|
||||
[ 30, 85, -90, "7seg", WT5011BSR, 2],
|
||||
[ 30, 55, -90, "D_plug", DCONN9],
|
||||
],
|
||||
// accessories
|
||||
[]
|
||||
|
@@ -38,6 +38,12 @@ module smds() {
|
||||
layout([for(s = smd_sots) smd_sot_size(s).x], 1)
|
||||
let(s = smd_sots[$i])
|
||||
smd_sot(s, ["2N7000", "FZT851"][$i]);
|
||||
|
||||
translate([0, 20])
|
||||
layout([for(s = smd_soics) smd_soic_size(s).x], 1)
|
||||
let(s = smd_soics[$i])
|
||||
smd_soic(s, s[0]);
|
||||
|
||||
}
|
||||
|
||||
if($preview)
|
||||
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 184 KiB |
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 163 KiB |
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 182 KiB |
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB |
@@ -16,18 +16,28 @@
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
show_connection_pos = false;
|
||||
|
||||
/* [Hidden] */
|
||||
include <../core.scad>
|
||||
include <../vitamins/stepper_motors.scad>
|
||||
|
||||
use <../utils/layout.scad>
|
||||
|
||||
has_connector = [NEMA17_27, NEMA17_40, NEMA17_40L280, NEMA8_30, NEMA8_30BH];
|
||||
|
||||
module stepper_motors()
|
||||
layout([for(s = stepper_motors) NEMA_width(s)], 5, no_offset = false) let(m = stepper_motors[$i]) {
|
||||
rotate(180)
|
||||
NEMA(m, 0, in([NEMA17_27, NEMA17_40, NEMA17_40L280, NEMA8_30, NEMA8_30BH], m));
|
||||
rotate(180) {
|
||||
NEMA(m, 0, in(has_connector, m) ? true : show_connection_pos ? undef : false);
|
||||
|
||||
translate_z(4)
|
||||
NEMA_screws(m, M3_pan_screw, n = $i - 2, earth = $i > 6 ? undef : $i - 3);
|
||||
if(show_connection_pos)
|
||||
translate(NEMA_connection_pos(m, in(has_connector, m)))
|
||||
sphere();
|
||||
|
||||
translate_z(4)
|
||||
NEMA_screws(m, M3_pan_screw, n = $i - 2, earth = $i > 6 ? undef : $i - 3);
|
||||
}
|
||||
}
|
||||
|
||||
if($preview)
|
||||
|
@@ -239,7 +239,7 @@ function segmented_path(path, min_segment) = [ //! Add points to a path to enfo
|
||||
path[len(path) - 1]
|
||||
];
|
||||
|
||||
function spiral_paths(path, n, r, twists, start_angle) = let( //! Create a new paths which sprial around the given path. Use for making twisted cables
|
||||
function spiral_paths(path, n, r, twists, start_angle) = let( //! Create a new paths which spiral around the given path. Use for making twisted cables
|
||||
segment = twists ? path_length(path) / twists / r2sides(2 * r) : inf,
|
||||
transforms = sweep_transforms(segmented_path(path, segment), twist = 360 * twists)
|
||||
) [for(i = [0 : n - 1]) let(initial = [r, 0, 0, 1] * rotate(start_angle + i * 360 / n)) [for(t = transforms) initial * t]];
|
||||
|
@@ -20,11 +20,11 @@
|
||||
//
|
||||
//! Brushless DC electric motor
|
||||
//
|
||||
include <NopSCADlib/core.scad>
|
||||
include <../utils/core/core.scad>
|
||||
|
||||
use <NopSCADlib/vitamins/rod.scad>
|
||||
use <NopSCADlib/utils/thread.scad>
|
||||
use <NopSCADlib/utils/tube.scad>
|
||||
use <rod.scad>
|
||||
use <../utils/thread.scad>
|
||||
use <../utils/tube.scad>
|
||||
|
||||
|
||||
function BLDC_diameter(type) = type[1]; //! Diameter of motor
|
||||
|
@@ -1134,6 +1134,7 @@ module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb compon
|
||||
if(show(comp, "smd_res")) smd_resistor(comp[4], comp[5]);
|
||||
if(show(comp, "smd_cap")) smd_capacitor(comp[4], comp[5], param(6, undef));
|
||||
if(show(comp, "smd_sot")) smd_sot(comp[4], comp[5]);
|
||||
if(show(comp, "smd_soic")) smd_soic(comp[4], comp[5]);
|
||||
if(show(comp, "vero_pin")) vero_pin(param(4, false));
|
||||
if(show(comp, "terminal")) terminal_block(comp[5], comp[4]);
|
||||
if(show(comp, "text")) color("white") linear_extrude(eps) resize([comp[4], comp[5]]) text(comp[6], font = param(7, "Liberation Mono"), valign = "center", halign = "center");
|
||||
|
@@ -908,9 +908,19 @@ KY_040 = ["KY_040", "KY-040 rotart encoder breakout",
|
||||
],
|
||||
[]];
|
||||
|
||||
L9110S = ["L9110S", "L9110S 2-Channel motor driver module", 29.2, 23, 1.6, 0, 3, 0, "#2140BE", false, [[10.7, 2.3], [10.7, -2.3], [-5.3, 2.3], [-5.3, -2.3] ],
|
||||
[
|
||||
[ -1.3, 11.5, 0, "2p54header", 1, 6],
|
||||
[ 16, 9.5 , 0, "smd_led", LED0805, "red"],
|
||||
for(i = [-1, 1]) [ 4, 5.5*i, 180, "gterm508", 2],
|
||||
for(i = [-1, 1]) [ 17.38, 3*i, 90, "smd_soic", SOIC8, "" ]
|
||||
],
|
||||
[]];
|
||||
|
||||
|
||||
tiny_pcbs = [XIAO, MP1584EN, TP4056, ESP_01, LIPO_fuel_gauge];
|
||||
|
||||
pcbs = [RAMPSEndstop, KY_040, MT3608, ZC_A0591, ArduinoNano, RPI_Pico, ESP32_DOIT_V1, RPI0, EnviroPlus, ArduinoUno3, ArduinoLeonardo, WD2002SJ, RPI3, RPI4, BTT_RELAY_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO, BTT_SKR_V1_4_TURBO, DuetE, Duex5];
|
||||
pcbs = [RAMPSEndstop, MT3608, KY_040, L9110S, ZC_A0591, ArduinoNano, RPI_Pico, ESP32_DOIT_V1, RPI0, EnviroPlus, ArduinoUno3, ArduinoLeonardo, WD2002SJ, RPI3, RPI4, BTT_RELAY_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO, BTT_SKR_V1_4_TURBO, DuetE, Duex5];
|
||||
|
||||
pcbs_not_shown = [Melzi, Duex2, PSU12V1A, Keyes5p1, PI_IO, ExtruderPCB];
|
||||
|
||||
|
@@ -178,3 +178,53 @@ module smd_sot(type, value) { //! Draw an SMD transistor
|
||||
text(value, halign = "center", valign = "center");
|
||||
|
||||
}
|
||||
|
||||
function smd_soic_size(type) = type[1]; //! Body length, width and height
|
||||
function smd_soic_z(type) = type[2]; //! Height above PCB surface
|
||||
function smd_soic_lead_z(type) = type[3]; //! Top of lead frame from top
|
||||
function smd_soic_lead_pitch(type) = type[4]; //! Lead pitch
|
||||
function smd_soic_lead_span(type) = type[5]; //! Total span of leads
|
||||
function smd_soic_lead_size(type) = type[6]; //! Lead width, foot depth, lead thickness
|
||||
|
||||
module smd_soic(type, value) { //! Draw an SMD SOIC
|
||||
vitamin(str("smd_soic(", type[0], "): ", type[0], " package ", value));
|
||||
|
||||
size = smd_soic_size(type);
|
||||
z0 = smd_soic_z(type);
|
||||
z2 = z0 + size.z;
|
||||
z1 = z2 - smd_soic_lead_z(type);
|
||||
slant = 5; //! 5 degree body draft angle
|
||||
pitch = smd_soic_lead_pitch(type);
|
||||
span = (smd_soic_lead_span(type) / 2);
|
||||
leads = floor(size.x / pitch) + 1;
|
||||
ls = smd_soic_lead_size(type);
|
||||
|
||||
r = ls.z;
|
||||
gullwing = rounded_path([[0, 0, ls.z / 2], [0, ls.y - ls.z, ls.z / 2], r, [0, ls.y -ls.z + z1 - ls.z, z1 - ls.z / 2], r, [0, span / 2, z1 - ls.z / 2]], $fn = 32);
|
||||
|
||||
color(grey(20))
|
||||
hull()
|
||||
for(z = [z0, z1, z2], inset = abs(z - z1) * tan(slant))
|
||||
translate_z(z)
|
||||
cube([size.x - 2 * inset, size.y - 2 * inset, eps], center = true);
|
||||
|
||||
color(silver) {
|
||||
for(i = [0 : leads - 1]) {
|
||||
translate([i * pitch - size.x / 2 + (size.x - (leads - 1) * pitch) / 2, -span])
|
||||
sweep(gullwing, rectangle_points(ls.x, ls.z));
|
||||
|
||||
rotate(180)
|
||||
translate([0, -span / 2])
|
||||
translate([i * pitch - size.x / 2 + (size.x - (leads - 1) * pitch) / 2, -span / 2])
|
||||
sweep(gullwing, rectangle_points(ls.x, ls.z));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
color("white")
|
||||
translate_z(z0 + size.z)
|
||||
linear_extrude(eps)
|
||||
resize([size.x * 0.9, size.y / 2])
|
||||
text(value, halign = "center", valign = "center");
|
||||
|
||||
}
|
||||
|
@@ -23,8 +23,9 @@
|
||||
|
||||
LED0603 = ["LED0603", [1.6, 0.8, 0.18], [1.0, 0.8, 0.42]];
|
||||
LED0805 = ["LED0805", [2.0, 1.25, 0.46], [1.4, 1.25, 0.54]];
|
||||
LED1206 = ["LED1206", [3.2, 1.6, 0.5], [2.0, 1.6, .6]];
|
||||
|
||||
smd_leds = [LED0603, LED0805];
|
||||
smd_leds = [LED0603, LED0805, LED1206];
|
||||
|
||||
RES0603 = ["RES0603", [1.6, 0.8, 0.45], 0.3, 1/10];
|
||||
RES0805 = ["RES0805", [2.0, 1.2, 0.45], 0.4, 1/8];
|
||||
@@ -43,4 +44,10 @@ SOT223 = ["SOT223", [6.5, 3.5, 1.6], 0.05, 0.89, 2.3, 7.0, [0.7, 0.95, 0.25], 3]
|
||||
|
||||
smd_sots = [SOT23, SOT223];
|
||||
|
||||
SOIC8 = ["SOIC8", [4.90, 3.90, 1.25], 0.10, 0.66, 1.27, 6.00, [0.31, .50, 0.20]];
|
||||
SOIC16 = ["SOIC16", [9.90, 3.90, 1.25], 0.10, 0.66, 1.27, 6.00, [0.31, .50, 0.20]];
|
||||
SOIC18 = ["SOIC18", [11.40, 7.50, 2.00], 0.10, 1.20, 1.27, 10.30, [0.31, .50, 0.20]];
|
||||
|
||||
smd_soics = [SOIC8, SOIC16, SOIC18];
|
||||
|
||||
use <smd.scad>
|
||||
|
@@ -51,6 +51,18 @@ stepper_body_colour = grey(20);
|
||||
stepper_cap_colour = grey(50);
|
||||
stepper_machined_colour = grey(90);
|
||||
|
||||
function NEMA_connection_pos(type, jst_connector = false) = let( //! Position of the wires or the connector
|
||||
side = NEMA_width(type),
|
||||
length = NEMA_length(type),
|
||||
cap = NEMA_cap_heights(type)[1],
|
||||
hdr = NEMA_end_connector(type) ? jst_zh_header : jst_ph_header,
|
||||
socket_size = hdr_box_size(hdr),
|
||||
end_conn_inset = socket_size.y - 2
|
||||
)
|
||||
jst_connector ? NEMA_end_connector(type) ? [0, side / 2 + hdr_y_offset(hdr) + socket_size.y / 2 - end_conn_inset, -length]
|
||||
: [0, side / 2 + socket_size.z, hdr_y_offset(hdr) - socket_size.y / 2 - length + cap]
|
||||
: [0, side / 2, -length + cap / 2];
|
||||
|
||||
module NEMA_outline(type) //! 2D outline
|
||||
intersection() {
|
||||
side = NEMA_width(type);
|
||||
@@ -185,14 +197,14 @@ module NEMA(type, shaft_angle = 0, jst_connector = false) { //! Draw specified N
|
||||
not_on_bom()
|
||||
leadscrew(shaft_rad * 2, shaft.x + length + shaft2, shaft.y, shaft.z, center = false);
|
||||
|
||||
if(!jst_connector)
|
||||
if(jst_connector == false)
|
||||
translate([0, side / 2, -length + cap / 2])
|
||||
rotate([90, 0, 0])
|
||||
for(i = [0 : 3])
|
||||
rotate(225 + i * 90)
|
||||
color(["red", "blue","green","black"][i])
|
||||
translate([1, 0, 0])
|
||||
cylinder(r = 1.5 / 2, h = 12, center = true);
|
||||
color(["red", "green", "black", "blue"][i])
|
||||
translate([1.48 / sqrt(2), 0, 0])
|
||||
cylinder(d = 1.48, h = 12, center = true);
|
||||
}
|
||||
|
||||
module NEMA_screw_positions(type, n = 4) { //! Positions children at the screw holes
|
||||
|