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

Compare commits

..

13 Commits

Author SHA1 Message Date
Chris Palmer
d38055c15c Updated readme. 2021-06-17 15:53:59 +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
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
19 changed files with 319 additions and 98 deletions

View File

@@ -3,6 +3,40 @@
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
### [v15.19.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.19.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.18.0...v15.19.0 "diff with v15.18.0")
* 2021-06-17 [`c7a6d81`](https://github.com/nophead/NopSCADlib/commit/c7a6d8164f545e83c4d871080ac63b7d903829df "show commit") [C.P.](# "Chris Palmer") Added `molex_usb_Ax1()` and now shows SMT caps in the PCB test.
### [v15.18.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.18.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.17.1...v15.18.0 "diff with v15.17.1")
* 2021-06-08 [`d1a17bd`](https://github.com/nophead/NopSCADlib/commit/d1a17bd4ac90a7d3d6de7c4d4d032e8198c48647 "show commit") [C.P.](# "Chris Palmer") Added LIPO fuel gauge PCB.
* 2021-06-08 [`b8efa11`](https://github.com/nophead/NopSCADlib/commit/b8efa11fd9504f4b837be663190d238c6227941e "show commit") [C.P.](# "Chris Palmer") Added SMD capacitors.
* 2021-06-07 [`3bc8f35`](https://github.com/nophead/NopSCADlib/commit/3bc8f35e37741ef12d45951546059902b472b34a "show commit") [C.P.](# "Chris Palmer") Can now put `jst_ph` connectors on PCBs
* 2021-06-07 [`39c11ef`](https://github.com/nophead/NopSCADlib/commit/39c11ef3b209256be393b3b211fef72c8ac793a1 "show commit") [C.P.](# "Chris Palmer") Added 2p54joiner to represent cropped headers joining PCBs.
* 2021-06-07 [`5a8a1da`](https://github.com/nophead/NopSCADlib/commit/5a8a1da8801e3d799b7e322b397b236685552f97 "show commit") [C.P.](# "Chris Palmer") Added Seeeduino XIAO.
Tiny PCBs now shown in a third line.
* 2021-06-07 [`3147862`](https://github.com/nophead/NopSCADlib/commit/3147862212d6d1277a5e164909e4004e3e321f10 "show commit") [C.P.](# "Chris Palmer") PCB lands can be rounded and can specify colour.
Holes can be positioned on the edge to make surface mountable connections.
#### [v15.17.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.17.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.17.0...v15.17.1 "diff with v15.17.0")
* 2021-06-07 [`4fc8a7f`](https://github.com/nophead/NopSCADlib/commit/4fc8a7f47df9a880b8e02c9e0f1a3a63d9939c3e "show commit") [C.P.](# "Chris Palmer") Fixed z-fighting between transparent LEDs and PCB.
### [v15.17.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.17.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.16.2...v15.17.0 "diff with v15.16.2")
* 2021-06-06 [`a9ed994`](https://github.com/nophead/NopSCADlib/commit/a9ed9944c328d1fa5121ae10e4e0243bda45f001 "show commit") [C.P.](# "Chris Palmer") Added PERF70x51.
* 2021-06-06 [`9cd2dbc`](https://github.com/nophead/NopSCADlib/commit/9cd2dbc3167c1d14ac1f72e5676f4154151b5638 "show commit") [C.P.](# "Chris Palmer") Added copper colour constant.
Copper PCB pads and veroboard tracks now use copper colour.
#### [v15.16.2](https://github.com/nophead/NopSCADlib/releases/tag/v15.16.2 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.16.1...v15.16.2 "diff with v15.16.1")
* 2021-06-06 [`f3bfbbf`](https://github.com/nophead/NopSCADlib/commit/f3bfbbfcf21209fd993aa7ebc25c8d8d3c12fbd5 "show commit") [C.P.](# "Chris Palmer") Fixed Python error when top level assembly is empty.
* 2021-06-06 [`baaa85f`](https://github.com/nophead/NopSCADlib/commit/baaa85ffedb1a7cdca42e01ca8f2e257438070fc "show commit") [C.P.](# "Chris Palmer") Updated readme.
* 2021-06-06 [`f1a49d4`](https://github.com/nophead/NopSCADlib/commit/f1a49d4e28bf063950b113c64acaa918d470767f "show commit") [C.P.](# "Chris Palmer") Better description of `pcb_grid()`.
#### [v15.16.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.16.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.16.0...v15.16.1 "diff with v15.16.0")
* 2021-06-04 [`9a4cc7e`](https://github.com/nophead/NopSCADlib/commit/9a4cc7ec42bf440e24ad3dacd88d7055736ae793 "show commit") [C.P.](# "Chris Palmer") Ziptie BOM entries no longer segregated by radius wrapped around.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 913 KiB

After

Width:  |  Height:  |  Size: 911 KiB

122
readme.md
View File

@@ -268,21 +268,21 @@ SCSnUU and SCSnLUU bearing blocks
<a name="Belts"></a>
## Belts
Models timing belt running in a path over toothed or smooth pulleys and calculates an accurate length.
Only models 2D paths, belt may twist to support crossed belt core XY and other designes where the belt twists!
Only models 2D paths, belt may twist to support crossed belt core XY and other designs where the belt twists!
By default the path is a closed loop. An open loop can be specified by specifying `open=true`, and in that case the start and end points are not connected, leaving the loop open.
To get a 180 degree twist of the loop, you can use the `twist` argument. `Twist` can be a single number, and in that case the belt will twist after
the position with that number. Alternatively `twist` can be a list of boolean values with a boolean for each position; the belt will then twist after
the position that have a `true` value in the `twist` list. If the path is specified with pulley/idler types, then you can use `auto_twist=true`; in
that case the belt will automatically twist so the back of the belt always runs against idlers and the tooth side runs against pullies. If you use
that case the belt will automatically twist so the back of the belt always runs against idlers and the tooth side runs against pulleys. If you use
`open=true` then you might also use `start_twist=true` to let the belt start the part with the back side out.
The path must be specified as a list of positions. Each position should be either a vector with `[x, y, pulley]` or `[x, y, r]`. A pully is a type from
The path must be specified as a list of positions. Each position should be either a vector with `[x, y, pulley]` or `[x, y, r]`. A pulley is a type from
`pulleys.scad`, and correct radius and angle will automatically be calculated. Alternatively a radius can be specified directly.
To make the back of the belt run against a smooth pulley on the outside of the loop specify a negative pitch radius.
Alternativley you can just specify smooth pulleys in the path, and it will then happen automatically.
Alternatively you can just specify smooth pulleys in the path, and it will then happen automatically.
Individual teeth are not drawn, instead they are represented by a lighter colour.
@@ -595,7 +595,7 @@ PCB mounted buttons. Can optionally have a coloured cap
## Cable_strips
A strip of polypropylene used with ribbon cable to make a cable flexible in one direction only.
Modelled with a Bezier spline, which is not quite the same as a minimum energy curve but very close, epecially
Modelled with a Bezier spline, which is not quite the same as a minimum energy curve but very close, especially
near the extreme positions, where the model needs to be accurate.
When the sides are constrained then a circular model is more accurate.
@@ -643,7 +643,7 @@ PCB cameras.
|:--- |:--- |
| `camera_connector_pos(type)` | The flex connector block for the camera itself's position |
| `camera_connector_size(type)` | The flex connector block for the camera itself's size |
| `camera_lens(type)` | Stack of lens parts, can be round, rectanular or rounded rectangular, with optional tapered aperture |
| `camera_lens(type)` | Stack of lens parts, can be round, rectangular or rounded rectangular, with optional tapered aperture |
| `camera_lens_offset(type)` | Offset of the lens center from the PCB centre |
| `camera_pcb(type)` | The PCB part of the camera |
@@ -901,7 +901,7 @@ Dual inline IC packages and sockets
---
<a name="Displays"></a>
## Displays
LCD dispays.
LCD displays.
[vitamins/displays.scad](vitamins/displays.scad) Object definitions.
@@ -1692,7 +1692,7 @@ Standard domed through hole LEDs. Can specify colour and lead length.
LED strip lights that can be cut to size.
The definitions are for the full length but they can be cut to size by specifying how many segments,
which can by calcuated using `light_strip_segments(type, max_length)`.
which can by calculated using `light_strip_segments(type, max_length)`.
The `light_strip_clip()` module makes a clip to go around the light that can be incorporated into a printed bracket to hold it.
@@ -2123,9 +2123,9 @@ Can be shown stretched by specifying the `actual_id`.
---
<a name="Opengrab"></a>
## Opengrab
Nicodrone OpenGrab V3 electro-permananet magnet, see <https://nicadrone.com/products/epm-v3>.
Nicodrone OpenGrab V3 electro-permanent magnet, see <https://nicadrone.com/products/epm-v3>.
A permanent magnet that can be magnatized and de-magnatized electronically.
A permanent magnet that can be magnetized and de-magnetized electronically.
[vitamins/opengrab.scad](vitamins/opengrab.scad) Implementation.
@@ -2168,7 +2168,7 @@ Panel mounted digital meter modules
Notes on the DSN_VC288:
* The tabs aren't modelled because they can be fully retracted if the PCB is removed.
* The current connector isn't moddelled as it is awkwardly tall. I remove it and solder wires instead.
* The current connector isn't modelled as it is awkwardly tall. I remove it and solder wires instead.
[vitamins/panel_meters.scad](vitamins/panel_meters.scad) Object definitions.
@@ -2247,7 +2247,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| `hdmi_width1(type)` | Inside width at the top |
| `hdmi_width2(type)` | Inside width at the bottom |
| `pcb_accessories(type)` | List of accessories to go on the BOM, SD cards, USB cables, etc. |
| `pcb_colour(type)` | Colour of the subtrate |
| `pcb_colour(type)` | Colour of the substrate |
| `pcb_components(type)` | List of components |
| `pcb_grid(type)` | Grid origin if a perfboard |
| `pcb_hole_d(type)` | Mounting hole diameter |
@@ -2283,7 +2283,8 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| `hdmi(type, cutout = false)` | Draw HDMI socket |
| `jack(cutout = false)` | Draw 3.5mm jack |
| `molex_254(ways)` | Draw molex header |
| `molex_usb_Ax2(cutout)` | Draw Molex USB connector suitable for perf board |
| `molex_usb_Ax1(cutout)` | Draw Molex USB A connector suitable for perf board |
| `molex_usb_Ax2(cutout)` | Draw Molex dual USB A connector suitable for perf board |
| `pcb(type)` | Draw specified PCB |
| `pcb_assembly(type, height, thickness)` | Draw PCB assembly with spaces and fasteners in place |
| `pcb_base(type, height, thickness, wall = 2)` | Generate STL for a base with PCB spacers |
@@ -2336,6 +2337,9 @@ 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_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 |
@@ -2384,7 +2388,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| `hdmi_width1(type)` | Inside width at the top |
| `hdmi_width2(type)` | Inside width at the bottom |
| `pcb_accessories(type)` | List of accessories to go on the BOM, SD cards, USB cables, etc. |
| `pcb_colour(type)` | Colour of the subtrate |
| `pcb_colour(type)` | Colour of the substrate |
| `pcb_components(type)` | List of components |
| `pcb_grid(type)` | Grid origin if a perfboard |
| `pcb_hole_d(type)` | Mounting hole diameter |
@@ -2420,7 +2424,8 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| `hdmi(type, cutout = false)` | Draw HDMI socket |
| `jack(cutout = false)` | Draw 3.5mm jack |
| `molex_254(ways)` | Draw molex header |
| `molex_usb_Ax2(cutout)` | Draw Molex USB connector suitable for perf board |
| `molex_usb_Ax1(cutout)` | Draw Molex USB A connector suitable for perf board |
| `molex_usb_Ax2(cutout)` | Draw Molex dual USB A connector suitable for perf board |
| `pcb(type)` | Draw specified PCB |
| `pcb_assembly(type, height, thickness)` | Draw PCB assembly with spaces and fasteners in place |
| `pcb_base(type, height, thickness, wall = 2)` | Generate STL for a base with PCB spacers |
@@ -2461,6 +2466,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pcb(EnviroPlus)` | Enviro+ |
| 1 | `pcb(ExtruderPCB)` | Extruder connection PCB |
| 1 | `pcb(Keyes5p1)` | Keyes5.1 Arduino Uno expansion board - not shown |
| 1 | `pcb(LIPO_fuel_gauge)` | LIPO fuel gauge |
| 1 | `pcb(MP1584EN)` | MP1584EN 3A buck converter |
| 1 | `pcb(MT3608)` | MT3608 boost converter module |
| 1 | `pcb(Melzi)` | Melzi electronics - not shown |
@@ -2487,14 +2493,16 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pcb(RPI0)` | Raspberry Pi Zero |
| 8 | `screw(M2_cap_screw, 16)` | Screw M2 cap x 16mm |
| 8 | `screw(M2_cap_screw, 20)` | Screw M2 cap x 20mm |
| 2 | `screw(M2p5_cap_screw, 20)` | Screw M2.5 cap x 20mm |
| 2 | `screw(M2p5_cap_screw, 16)` | Screw M2.5 cap x 16mm |
| 8 | `screw(M2p5_cap_screw, 20)` | Screw M2.5 cap x 20mm |
| 8 | `screw(M2p5_cap_screw, 25)` | Screw M2.5 cap x 25mm |
| 8 | `screw(M2p5_cap_screw, 30)` | Screw M2.5 cap x 30mm |
| 12 | `screw(M2p5_pan_screw, 25)` | Screw M2.5 pan x 25mm |
| 4 | `screw(M2p5_pan_screw, 20)` | Screw M2.5 pan x 20mm |
| 8 | `screw(M2p5_pan_screw, 25)` | Screw M2.5 pan x 25mm |
| 8 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
| 9 | `screw(M3_cap_screw, 30)` | Screw M3 cap x 30mm |
| 9 | `screw(M3_cap_screw, 35)` | Screw M3 cap x 35mm |
| 4 | `screw(M3_cap_screw, 25)` | Screw M3 cap x 25mm |
| 14 | `screw(M3_cap_screw, 30)` | Screw M3 cap x 30mm |
| 8 | `screw(M4_cap_screw, 35)` | Screw M4 cap x 35mm |
| 1 | `pcb(XIAO)` | Seeeduino XIAO |
| 1 | `pcb(TP4056)` | TP4056 Li-lon Battery charger module |
| 3 | `terminal_35(2)` | Terminal block 2 way 3.5mm |
| 2 | `green_terminal(gt_2p54, 4)` | Terminal block 4 way 0.1" |
@@ -2513,22 +2521,22 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 4 | pcb_spacer2070.stl |
| 4 | pcb_spacer2080.stl |
| 4 | pcb_spacer2090.stl |
| 4 | pcb_spacer25120.stl |
| 4 | pcb_spacer25130.stl |
| 4 | pcb_spacer25140.stl |
| 4 | pcb_spacer25150_2.stl |
| 4 | pcb_spacer25160_2.stl |
| 4 | pcb_spacer25180.stl |
| 4 | pcb_spacer25190.stl |
| 2 | pcb_spacer2580.stl |
| 4 | pcb_spacer30170.stl |
| 5 | pcb_spacer30200.stl |
| 5 | pcb_spacer30210.stl |
| 4 | pcb_spacer30220.stl |
| 4 | pcb_spacer25100.stl |
| 4 | pcb_spacer25110.stl |
| 4 | pcb_spacer25120_2.stl |
| 4 | pcb_spacer25130_2.stl |
| 4 | pcb_spacer25150.stl |
| 4 | pcb_spacer25160.stl |
| 2 | pcb_spacer2550.stl |
| 4 | pcb_spacer2590.stl |
| 4 | pcb_spacer30140.stl |
| 5 | pcb_spacer30170.stl |
| 5 | pcb_spacer30180.stl |
| 4 | pcb_spacer30190.stl |
| 4 | pcb_spacer3050.stl |
| 4 | pcb_spacer3060.stl |
| 4 | pcb_spacer40230.stl |
| 4 | pcb_spacer40240.stl |
| 4 | pcb_spacer40200.stl |
| 4 | pcb_spacer40210.stl |
<a href="#top">Top</a>
@@ -2694,7 +2702,7 @@ Pin headers and sockets, etc.
---
<a name="PSUs"></a>
## PSUs
Powersupplies. Can be a simple cube or can be defined by a list of six faces, each with thickness, holes, cutouts, etc.
Power supplies. Can be a simple cube or can be defined by a list of six faces, each with thickness, holes, cutouts, etc.
Face order is bottom, top, left, right, front, back.
@@ -2792,7 +2800,7 @@ Timing belt pulleys, both toothed and plain with internal bearings for idlers.
| `pulley_hub_length(type)` | Hub length |
| `pulley_od(type)` | Outer diameter |
| `pulley_screw(type)` | Grub screw type |
| `pulley_screw_length(type)` | Grup screw length |
| `pulley_screw_length(type)` | Grub screw length |
| `pulley_screw_z(type)` | Grub screw position |
| `pulley_screws(type)` | Number of grub screws |
| `pulley_teeth(type)` | Number of teeth |
@@ -2963,7 +2971,7 @@ Ring terminals and earth assemblies for DiBond panels.
### Modules
| Module | Description |
|:--- |:--- |
| `ring_terminal(type)` | Draw specifeid ring terminal |
| `ring_terminal(type)` | Draw specified ring terminal |
| `ring_terminal_assembly(type, thickness, top = false)` | Earthing assembly for DiBond twin skins |
| `ring_terminal_hole(type, h = 0)` | Drill hole for the screw |
@@ -3039,7 +3047,7 @@ Rocker switch. Also used for neon indicator in the same form factor.
## Rod
Steel rods and studding with chamfered ends.
These items are sysmtrical, so by default the origin is in the centre but it can be changed to the bottom.
These items are symmetrical, so by default the origin is in the centre but it can be changed to the bottom.
[vitamins/rod.scad](vitamins/rod.scad) Implementation.
@@ -3241,7 +3249,7 @@ Shaft couplings
## Sheets
Sheet materials. Rectangular with optional rounded corners. Negative radii make a chamfer.
The "Soft" parameter can be used to determinesif the sheet material needs machine screws or wood screws, e.g.:
The "Soft" parameter can be used to determine if the sheet material needs machine screws or wood screws, e.g.:
* If soft, wood screws will be used, with a pilot hole.
* If not soft, either tapped holes or a clearance hole and nuts will be used to retain screws.
@@ -3268,8 +3276,8 @@ When woven sheets (e.g. carbon fibre) are rendered it is necessary to specify th
| `sheet_colour2(type)` | Second colour for a woven sheet |
| `sheet_is_soft(type)` | Is soft enough for wood screws |
| `sheet_thickness(type)` | Thickness |
| `sheet_warp(type)` | Wovern sheet warp |
| `sheet_weft(type)` | Wovern sheet weft |
| `sheet_warp(type)` | Woven sheet warp |
| `sheet_weft(type)` | Woven sheet weft |
### Functions
| Function | Description |
@@ -3385,6 +3393,8 @@ Surface mount components for PCBs.
### Properties
| Function | Description |
|:--- |:--- |
| `smd_cap_end_cap(type)` | End cap width |
| `smd_cap_size(type)` | Body length, width |
| `smd_led_lens(type)` | Lens length width and height |
| `smd_led_size(type)` | Body length, width and height |
| `smd_res_end_cap(type)` | End cap width |
@@ -3401,6 +3411,7 @@ Surface mount components for PCBs.
### Modules
| Module | Description |
|:--- |:--- |
| `smd_capacitor(type, height)` | 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 |
@@ -3411,6 +3422,9 @@ 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_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 |
@@ -4000,7 +4014,7 @@ If a washer is given a child, usually a screw or a nut, then it is placed on its
| `spring_washer_thickness(type)` | Spring washer thickness |
| `star_washer_diameter(type)` | Star version size |
| `washer_diameter(type)` | External diameter |
| `washer_size(type)` | Noiminal size |
| `washer_size(type)` | Nominal size |
| `washer_soft(type)` | True if rubber |
| `washer_thickness(type)` | Thickness |
@@ -4308,7 +4322,7 @@ Uses [fixing blocks](#fixing_block) and [corner blocks](#corner_block).
| Function | Description |
|:--- |:--- |
| `bbox(screw, sheets, base_sheet, top_sheet, span, size, name = "bbox", skip_blocks = [], star_washers = true)` | Construct the property list for a butt_box |
| `bbox_area(type)` | Internal surdface area in m^2 |
| `bbox_area(type)` | Internal surface area in m^2 |
| `bbox_volume(type)` | Internal volume in litres |
### Modules
@@ -4611,7 +4625,7 @@ Rubber door [sealing strip](#sealing_strip) is used to make it airtight and a [d
|:--- |:--- |
| `door_hinge(door_thickness)` | Generates STL for the moving part of the hinge |
| `door_hinge_assembly(top, door_thickness = 6)` | The moving assembly that goes on the door |
| `door_hinge_hole_positions(dir = 0)` | Position chidren at the door hole positions |
| `door_hinge_hole_positions(dir = 0)` | Position children at the door hole positions |
| `door_hinge_parts_stl()` | Generates the STL for both parts of the hinge |
| `door_hinge_stat_hole_positions(dir = 0)` | Position children over the screws holes of the stationary part |
| `door_hinge_stat_stl()` | Generates the STL for the stationary part |
@@ -4657,7 +4671,7 @@ Door latch for 6mm acrylic door for 3D printer. See [door_hinge](#door_hinge).
### Modules
| Module | Description |
|:--- |:--- |
| `door_latch_assembly(sheet_thickness = 3)` | The assembly for a specified sheet thickess |
| `door_latch_assembly(sheet_thickness = 3)` | The assembly for a specified sheet thickness |
| `door_latch_stl()` | Generates the STL for the printed part |
![door_latch](tests/png/door_latch.png)
@@ -4682,7 +4696,7 @@ Door latch for 6mm acrylic door for 3D printer. See [door_hinge](#door_hinge).
## Drag_chain
Parametric cable drag chain to limit the bend radius of a cable run.
Each link has a maximum bend angle of 45&deg;, so the mininium radius is proportional to the link length.
Each link has a maximum bend angle of 45&deg;, so the minimum radius is proportional to the link length.
The travel property is how far it can move in each direction, i.e. half the maximum travel if the chain is mounted in the middle of the travel.
@@ -4746,7 +4760,7 @@ to the assembly, for example to add inserts.
---
<a name="Fan_guard"></a>
## Fan_guard
Pintable fan finger guard to match the specified fan. To be `include`d, not `use`d.
Printable fan finger guard to match the specified fan. To be `include`d, not `use`d.
The ring spacing as well as the number of spokes can be specified, if zero a gasket is generated instead of a guard.
@@ -4891,7 +4905,7 @@ This allows the hinges and one set of screws to belong to one assembly and the o
| `hinge_depth(type)` | Depth of each leaf |
| `hinge_knuckle_dia(type)` | The knuckle diameter |
| `hinge_knuckles(type)` | How many knuckles |
| `hinge_margin(type)` | How far to keep the screws from the knuckes |
| `hinge_margin(type)` | How far to keep the screws from the knuckles |
| `hinge_pin_dia(type)` | The pin diameter |
| `hinge_screw(type)` | Screw type to mount it |
| `hinge_screws(type)` | How many screws |
@@ -6156,7 +6170,7 @@ A sector of a circle between two angles.
---
<a name="Sweep"></a>
## Sweep
Utility to generate a polhedron by sweeping a 2D profile along a 3D path and utilities for generating paths.
Utility to generate a polyhedron by sweeping a 2D profile along a 3D path and utilities for generating paths.
The initial orientation is the Y axis of the profile points towards the initial center of curvature, Frenet-Serret style.
Subsequent rotations use the minimum rotation method.
@@ -6249,7 +6263,7 @@ Simple tube or ring
### Modules
| Module | Description |
|:--- |:--- |
| `rectangular_tube(size, center = true, thickness = 1, fillet = 0.5)` | Create a retangular tube with filleted corners |
| `rectangular_tube(size, center = true, thickness = 1, fillet = 0.5)` | Create a rectangular tube with filleted corners |
| `ring(or, ir)` | Create a ring with specified external and internal radii |
| `tube(or, ir, h, center = true)` | Create a tube with specified external and internal radii and height `h` |
| `woven_tube(or, ir, h, center= true, colour = grey(30)` | Create a woven tube with specified external and internal radii, height `h`, colours, warp and weft |
@@ -6273,7 +6287,7 @@ Setting the `ngb` parameter of `assembly` to `true` removes its column from the
This is to prevent the global BOM page becoming too wide in large projects by having it include just the major assemblies.
The example below shows how to define a vitamin and incorporate it into an assembly with sub-assemblies and make an exploded view.
The resulting flat BOM is shown but heirachical BOMs are also generated for real projects.
The resulting flat BOM is shown but hierarchical BOMs are also generated for real projects.
If the code to make an STL or DXF is made a child of the `stl()` or `dxf()` module then the STL or DXF will be used in the assembly views generated by `views.py` instead of generating
it with code.
@@ -6353,7 +6367,7 @@ The `pose()` module allows assembly views in the readme to be posed differently
---
<a name="Clip"></a>
## Clip
Construct arbirarily large box to partition 3D space and clip objects, useful for creating cross sections to see the inside when debugging.
Construct arbitrarily large box to partition 3D space and clip objects, useful for creating cross sections to see the inside when debugging.
Original version by Doug Moen on the OpenSCAD forum
@@ -6431,7 +6445,7 @@ This can be used to mitigate the number of sides being small and make small hole
large increase in the number of facets.
When set to 1 the polygons alternate each layer, when set higher the rotation takes `twist + 1` layers to repeat.
A small additional rotation is added to make the polygon rotate one more side over the length of the hole to make it appear round when
veiwed end on.
viewed end on.
When `twist` is set the resulting cylinder is extended by `eps` at each end so that the exact length of the hole can be used without
leaving a scar on either surface.
@@ -6445,7 +6459,7 @@ leaving a scar on either surface.
|:--- |:--- |
| `corrected_diameter(d, n = undef)` | Adjusted diameter to make flats lie on the circle |
| `corrected_radius(r, n = undef)` | Adjusted radius to make flats lie on the circle |
| `sides(r, n = undef)` | Optimium number of sides for specified radius |
| `sides(r, n = undef)` | Optimum number of sides for specified radius |
### Modules
| Module | Description |

View File

@@ -64,21 +64,25 @@ test_pcb = ["TestPCB", "Test PCB",
[ 16, 2, 90, "smd_res", RES1206, "1K"],
[ 19, 2, 90, "smd_res", RES0805, "1K"],
[ 22, 2, 90, "smd_res", RES0603, "1K"],
[ 25, 2, 90, "smd_cap", CAP1206, 1.5],
[ 28, 2, 90, "smd_cap", CAP0805, 1.0],
[ 31, 2, 90, "smd_cap", CAP0603, 0.7],
[ 10, 10, 0, "2p54header", 4, 1],
[ 25, 10, 0, "2p54header", 5, 1, false, "blue" ],
[ 10, 20, 0, "2p54boxhdr", 4, 2],
[ 10, 30, 0, "2p54socket", 6, 1],
[ 25, 30, 0, "2p54socket", 4, 1, false, 0, false, "red" ],
[ 10, 40, 0, "chip", 10, 5, 1, grey(20)],
[ 5, 50, 0, "led", LED3mm, "red"],
[ 12, 50, 0, "led", LED5mm, "orange"],
[ 25, 50, 0, "led", LED10mm, "yellow"],
[ 10, 65, 180, "rj45"],
[ 8, 85, 180, "usb_A"],
[ 65, 50, 0, "led", LED3mm, "red"],
[ 75, 50, 0, "led", LED5mm, "orange"],
[ 90, 50, 0, "led", LED10mm, "yellow"],
[ 10, 45, 180, "rj45"],
[ 8, 65, 180, "usb_A"],
[ 8, 105, 180, "usb_Ax2"],
[ 7, 85, 180, "molex_usb_Ax1"],
[ 8.5,125, 180, "molex_usb_Ax2"],
[ 3, 140, 180, "usb_uA"],
[ 8, 155, 180, "usb_B"],
[ 8.5, 125, 180, "molex_usb_Ax2"],
[ 25, 200, 0, "buzzer", 4.5, 8.5],
[ 25, 218, 0, "buzzer"],
[ 8, 190, 180, "jack"],
@@ -127,6 +131,8 @@ test_pcb = ["TestPCB", "Test PCB",
[ 52, 200, 0, "pcb", 11, TMC2130 ],
[ 80, 200, 0, "pdip", 24, "27C32", true, inch(0.6) ],
[ 80, 170, 0, "pdip", 8, "NE555" ],
[ 80, 150, 0, "chip", 10, 5, 1, grey(20)],
[ 52, 206, 0, "2p54socket", 8, 1 ],
[ 52, 194, 0, "2p54socket", 8, 1, false, 0, false, "red" ],
[ 50, 220, 0, "standoff", 5, 4.5, 12.5, 2.54],

View File

@@ -29,6 +29,11 @@ module pcbs() {
rotate(90)
pcb_assembly(pcbs[$i], 5 + $i, 3);
translate([0, 45])
layout([for(p = tiny_pcbs) pcb_length(p)], 3)
translate([0, pcb_width(tiny_pcbs[$i]) / 2])
pcb_assembly(tiny_pcbs[$i], 5 + $i, 3);
translate([0, 120])
layout([for(p = perfboards) pcb_length(p)], 10)
translate([0, -pcb_width(perfboards[$i]) / 2])

View File

@@ -28,6 +28,11 @@ module smds() {
translate([0, 3])
layout([for(l = smd_leds) smd_led_size(l).x], 1)
smd_led(smd_leds[$i], ["green", "blue", "red"][$i % 3]);
translate([0, 6])
layout([for(c = smd_capacitors) smd_cap_size(c).x], 1)
let(c = smd_capacitors[$i])
smd_capacitor(c, smd_cap_size(c).y * 0.8);
}
if($preview)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

After

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View File

@@ -29,7 +29,7 @@
//! This is to prevent the global BOM page becoming too wide in large projects by having it include just the major assemblies.
//!
//! The example below shows how to define a vitamin and incorporate it into an assembly with sub-assemblies and make an exploded view.
//! The resulting flat BOM is shown but heirachical BOMs are also generated for real projects.
//! The resulting flat BOM is shown but hierarchical BOMs are also generated for real projects.
//!
//! If the code to make an STL or DXF is made a child of the `stl()` or `dxf()` module then the STL or DXF will be used in the assembly views generated by `views.py` instead of generating
//! it with code.

View File

@@ -18,7 +18,7 @@
//
//
//! Construct arbirarily large box to partition 3D space and clip objects, useful for creating cross sections to see the inside when debugging.
//! Construct arbitrarily large box to partition 3D space and clip objects, useful for creating cross sections to see the inside when debugging.
//!
//! Original version by Doug Moen on the OpenSCAD forum
//

View File

@@ -28,12 +28,12 @@
//! large increase in the number of facets.
//! When set to 1 the polygons alternate each layer, when set higher the rotation takes `twist + 1` layers to repeat.
//! A small additional rotation is added to make the polygon rotate one more side over the length of the hole to make it appear round when
//! veiwed end on.
//! viewed end on.
//!
//! When `twist` is set the resulting cylinder is extended by `eps` at each end so that the exact length of the hole can be used without
//! leaving a scar on either surface.
//
function sides(r, n = undef) = is_undef(n) ? max(round(4 * r), 3) : n ? max(n, 3) : r2sides(r); //! Optimium number of sides for specified radius
function sides(r, n = undef) = is_undef(n) ? max(round(4 * r), 3) : n ? max(n, 3) : r2sides(r); //! Optimum number of sides for specified radius
function corrected_radius(r, n = undef) = r / cos(180 / sides(r, n)); //! Adjusted radius to make flats lie on the circle
function corrected_diameter(d, n = undef) = 2 * corrected_radius(d / 2 , n); //! Adjusted diameter to make flats lie on the circle

View File

@@ -161,7 +161,7 @@ module usb_A(h, v_flange_l, bar, cutout) {
}
}
module molex_usb_Ax2(cutout) { //! Draw Molex USB connector suitable for perf board
module molex_usb_Ax2(cutout) { //! Draw Molex dual USB A connector suitable for perf board
w = 15.9;
h = 16.6;
l = 17;
@@ -221,6 +221,63 @@ module molex_usb_Ax2(cutout) { //! Draw Molex USB connector suitable for perf bo
}
}
module molex_usb_Ax1(cutout) { //! Draw Molex USB A connector suitable for perf board
w = 15.3;
h = 7.7;
l = 14.5;
pin_l = 2.8;
clearance = 0.2;
tag_l = 4.4;
tag_r = 0.5;
tag_w = 1.5;
tag_t = 0.3;
if(cutout)
translate([0, -w / 2 - clearance, -clearance])
cube([100, w + 2 * clearance, h + 2 * clearance]);
else {
color(silver)
translate([-l / 2, 0])
rotate([90, 0, 90])
translate([-w / 2, 0]) {
cube([w, h, l - 9]);
linear_extrude(l)
difference() {
square([w, h]);
translate([w / 2, h / 2])
square([12.6, 5.08], center = true);
}
}
translate([-1.5, 0, h / 2])
usb_A_tongue();
color(silver)
rotate(-90) {
for(x = [-1.5 : 1 : 1.5])
translate([inch(x / 10), - l / 2 + inch(0.05)])
hull() {
cube([0.6, 0.3, 2 * pin_l - 2], center = true);
cube([0.4, 0.3, 2 * pin_l], center = true);
}
for(side = [-1, 1])
translate([side * w / 2, -l / 2 + 4.2])
rotate(-side * 90)
hull() {
translate([0, tag_l - tag_r])
cylinder(r = tag_r, h = tag_t);
translate([-tag_w / 2, 0])
cube([tag_w, eps, tag_t]);
}
}
}
}
module rj45(cutout = false) { //! Draw RJ45 Ethernet connector
l = 21;
w = 16;
@@ -919,6 +976,7 @@ module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb compon
rotate(comp.z) {
// Components that have a cutout parameter go in this section
if(show(comp, "2p54header")) pin_header(2p54header, comp[4], comp[5], param(6, false), param(8, false), cutouts, colour = param(7, undef));
if(show(comp, "2p54joiner")) pin_header(2p54joiner, comp[4], comp[5], param(6, false), param(8, false), cutouts, colour = param(7, undef));
if(show(comp, "2p54boxhdr")) box_header(2p54header, comp[4], comp[5], param(6, false), cutouts);
if(show(comp, "2p54socket")) pin_socket(2p54header, comp[4], comp[5], param(6, false), param(7, 0), param(8, false), cutouts, param(9, undef));
if(show(comp, "chip")) chip(comp[4], comp[5], comp[6], param(7, grey(30)), cutouts);
@@ -938,6 +996,7 @@ module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb compon
if(show(comp, "uSD")) uSD(comp[4], cutouts);
if(show(comp, "trimpot10")) trimpot10(param(4, false), cutouts);
if(show(comp, "molex_usb_Ax2")) molex_usb_Ax2(cutouts);
if(show(comp, "molex_usb_Ax1")) molex_usb_Ax1(cutouts);
if(show(comp, "smd_led")) smd_led(comp[4], comp[5], cutouts);
if(show(comp, "block")) block(size = [comp[4], comp[5], comp[6]], colour = comp[7], makes_cutout = param(8));
if(!cutouts) {
@@ -961,9 +1020,11 @@ module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb compon
if(show(comp, "D_plug")) translate_z(d_pcb_offset(comp[4])) d_plug(comp[4], pcb = true);
if(show(comp, "molex_hdr")) molex_254(comp[4]);
if(show(comp, "jst_xh")) jst_xh_header(jst_xh_header, comp[4], param(5, false), param(6, "white"), param(7, undef));
if(show(comp, "jst_ph")) jst_xh_header(jst_ph_header, comp[4], param(5, false), param(6, "white"), param(7, undef));
if(show(comp, "potentiometer")) potentiometer(param(4, 5), param(5, 9));
if(show(comp, "buzzer")) buzzer(param(4, 9), param(5, 12), param(6, grey(20)));
if(show(comp, "smd_res")) smd_resistor(comp[4], comp[5]);
if(show(comp, "smd_cap")) smd_capacitor(comp[4], comp[5]);
}
}
}
@@ -1018,43 +1079,62 @@ module pcb_grid_positions(type) {
module pcb(type) { //! Draw specified PCB
grid = pcb_grid(type);
t = pcb_thickness(type);
w = pcb_width(type);
l = pcb_length(type);
module pcb_shape()
if(Len(pcb_polygon(type)))
polygon(pcb_polygon(type));
else
rounded_square([l, w], r = pcb_radius(type));
if(pcb_name(type))
vitamin(str("pcb(", type[0], "): ", pcb_name(type)));
for(part = pcb_accessories(type))
vitamin(part);
color(pcb_colour(type)) linear_extrude(t) difference() {
if(Len(pcb_polygon(type)))
polygon(pcb_polygon(type));
else
rounded_square([pcb_length(type), pcb_width(type)], r = pcb_radius(type));
color(pcb_colour(type))
linear_extrude(t)
difference() {
pcb_shape();
pcb_hole_positions(type)
circle(d = pcb_hole_d(type) + eps);
pcb_hole_positions(type)
offset(eps)
circle4n(d = pcb_hole_d(type));
if(Len(grid))
pcb_grid_positions(type)
circle(d = 1 + eps);
}
if(Len(grid))
pcb_grid_positions(type)
circle(d = 1 + eps);
}
land = pcb_land_d(type);
land_r = Len(land) > 2 ? land[2] : 0;
hole = pcb_hole_d(type);
color("silver")
plating = 0.1;
color(Len(land) > 3 ? land[3] : silver)
translate_z(t / 2)
pcb_hole_positions(type)
if(is_list(land))
linear_extrude(t + 2 * eps, center = true)
difference() {
square(land, center = true);
linear_extrude(t + 2 * plating, center = true)
difference() {
intersection() {
pcb_hole_positions(type)
if(is_list(land)) {
p = pcb_holes(type)[$i]; // If edge SMT pad then make it rectangular to overlap without gaps
edge = abs(p.x) < eps || abs(p.x - l) < eps || abs(p.y) < eps || abs(p.y - w) < eps;
rounded_square([land.x, land.y], edge ? 0 : land_r);
}
else
circle(d = max(land, 1));
circle(d = hole);
}
else
tube(or = max(land, 1) / 2, ir = hole / 2, h = t + 2 * eps);
offset(eps)
pcb_shape(); // Handle half holes on the edge of PCBs such as ESP8266
}
pcb_hole_positions(type)
circle4n(d = hole);
}
fr4 = pcb_colour(type) != "sienna";
plating = 0.15;
pcb_colour = pcb_colour(type);
color(pcb_colour == "green" ? silver : pcb_colour == "sienna" ? copper : gold)
translate_z(-plating)

View File

@@ -749,7 +749,56 @@ ESP_01 = [
[] // accessories
];
pcbs = [MP1584EN, TP4056, ESP_01, RAMPSEndstop, MT3608, PI_IO, ExtruderPCB, ZC_A0591, RPI0, EnviroPlus, ArduinoUno3, ArduinoLeonardo, WD2002SJ, RPI3, RPI4, BTT_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO, BTT_SKR_V1_4_TURBO, DuetE, Duex5];
XIAO = [
"XIAO", "Seeeduino XIAO",
21, 18, 1.2, // Size
1.5, // corner radius
0.8, // mounting hole diameter
[2, 2.6, 1- eps, gold], // pad around mounting hole
grey(25), // color
false, // true if parts should be separate BOM items
[for(x = [0:6], y = [-1,1]) [x * 2.54 + 2.71, y * 3 * 2.54 + 9], // Inboard hole positions
for(x = [0:6], y = [-1,1]) [x * 2.54 + 2.71, y * 9 + 9]], // Hole positions on the edge, pad overlaps the inboard holes
[ // components
[7.6, 9, 0, "block", 12.3, 12, 2.41, silver], // can
[21 + 1.76 - 7.35 / 2, 9, 0, "usb_C"],
],
[] // accessories
];
LIPO_fuel_gauge = [
"LIPO_fuel_gauge", "LIPO fuel gauge",
24, 10, 1.6, // Size
0, // corner radius
1, // mounting hole diameter
1.8, // pad around mounting hole
"red", // color
false, // true if parts should be separate BOM items
[for(x = [0:2], y = [-1,1]) [x * 2.54 + 5.27, y * 1.5 * 2.54 + 5],
for(x = 3, y = [-1,1]) [x * 2.54 + 5.27, y * 0.5 * 2.54 + 5]],
[ // components
[17, 5, 90, "jst_ph", 2, true],
[2.54 + 5.27, 1.5 * 2.54 + 5, 0, "-2p54joiner", 3, 1],
[2.54 + 5.27, -1.5 * 2.54 + 5, 0, "-2p54joiner", 3, 1],
[3 * 2.54 + 5.27, 5, 0, "-2p54joiner", 1, 2],
[6.4 + 1.5, 5, 0, "chip", 3, 2, 0.8],
[1.2, 2.5, 90, "smd_res", RES0603, "472"],
[2.4, 2.5, 90, "smd_res", RES0603, "472"],
[1.2, -2.5, 90, "smd_res", RES0603, "472"],
[2.4, -2.5, 90, "smd_res", RES0603, "472"],
[10.35, -4, -90, "smd_res", RES0603, "181"],
[10.35, 4, -90, "smd_res", RES0603, "102"],
[12.89, 1.5 * 2.54 + 5, 0, "smd_cap", CAP0603, 0.85],
[12.89,-1.5 * 2.54 + 5, 0, "smd_cap", CAP0603, 0.85],
],
[] // accessories
];
tiny_pcbs = [XIAO, MP1584EN, TP4056, ESP_01, LIPO_fuel_gauge];
pcbs = [RAMPSEndstop, MT3608, PI_IO, ExtruderPCB, ZC_A0591, RPI0, EnviroPlus, ArduinoUno3, ArduinoLeonardo, WD2002SJ, RPI3, RPI4, BTT_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO, BTT_SKR_V1_4_TURBO, DuetE, Duex5];
pcbs_not_shown = [Melzi, Duex2, PSU12V1A, Keyes5p1];

View File

@@ -17,16 +17,18 @@
// If not, see <https://www.gnu.org/licenses/>.
//
// p p b p p b s b b p r r
// i i e i i a o o o i a a
// t n l n n s c x x n
// c o e k b h
// h l w w c s t y
// c h z o
// p p b p p b s b b p r r
// i i e i i a o o o i a a
// t n l n n s c x x n
// c o e k b h
// h l w w c s t y
// c h z o
// f
2p54header = ["2p54header", 2.54, 11.6, 3.2, 0.66, "gold", grey(20), 8.5, [0, 0, 8.7], 2.4, 0, 0, 0 ];
jst_xh_header = ["jst_xh_header",2.5, 10, 3.4, 0.64, "gold", grey(90), 0, [4.9, 5.75, 7], 0.8, 0.525, 0.6, 6.1];
jst_ph_header = ["jst_ph_header",2.0, 9, 3.4, 0.64, silver, grey(90), 0, [3.9, 4.5, 6], 0.6, 0.55, 0.25, 4.8];
2p54header = ["2p54header", 2.54, 11.6, 3.2, 0.66, gold, grey(20), 8.5, [0, 0, 8.7], 2.4, 0, 0, 0 ];
2p54joiner = ["2p54joiner", 2.54, 6.86, 2.5, 0.66, gold, grey(20), 8.5, [0, 0, 8.7], 2.4, 0, 0, 0 ]; // Cropped pins for joining PCBs
jst_xh_header = ["jst_xh_header",2.5, 10, 3.4, 0.64, gold, grey(90), 0, [4.9, 5.75, 7], 0.8, 0.525, 0.6, 6.1];
jst_ph_header = ["jst_ph_header",2.0, 9, 3.4, 0.64, silver, grey(90), 0, [3.9, 4.5, 6], 0.6, 0.55, 0.25, 4.8];
pin_headers = [ 2p54header ];

View File

@@ -109,3 +109,23 @@ module smd_resistor(type, value) { //! Draw an SMD resistor with specified value
resize([(size.x - 2 * cap) * 0.75, size.y / 2])
text(value, halign = "center", valign = "center");
}
function smd_cap_size(type) = type[1]; //! Body length, width
function smd_cap_end_cap(type) = type[2]; //! End cap width
module smd_capacitor(type, height) { //! Draw an SMD capacitor with specified height
size = smd_cap_size(type);
vitamin(str("smd_capacitor(", type[0], "): SMD capacitor ", smd_size(size)));
cap = smd_cap_end_cap(type);
t = 0.02;
color("tan")
translate_z(height / 2)
cube([size.x - 2 * cap, size.y - 2 * t, height - 2 * t], center = true);
color(silver)
for(end = [-1, 1])
translate([end * (size.x / 2 - cap / 2), 0, height / 2])
cube([cap, size.y - 2 * eps, height], center = true);
}

View File

@@ -32,4 +32,10 @@ RES1206 = ["RES1206", [3.1, 1.6, 0.6], 0.5, 1/4];
smd_resistors = [RES0603, RES0805, RES1206];
CAP0603 = ["CAP0603", [1.6, 0.8], 0.3];
CAP0805 = ["CAP0805", [2.0, 1.2], 0.4];
CAP1206 = ["CAP1206", [3.1, 1.6], 0.5];
smd_capacitors = [CAP0603, CAP0805, CAP1206];
use <smd.scad>