diff --git a/libtest.png b/libtest.png
index 14983aa..47ade9f 100644
Binary files a/libtest.png and b/libtest.png differ
diff --git a/printed/psu_shroud.scad b/printed/psu_shroud.scad
index bb18f35..2c952db 100644
--- a/printed/psu_shroud.scad
+++ b/printed/psu_shroud.scad
@@ -27,6 +27,7 @@ use <../vitamins/insert.scad>
use <../vitamins/wire.scad>
use <../vitamins/psu.scad>
use <../utils/round.scad>
+use <../vitamins/terminal.scad>
wall = 1.8;
top = 1.5;
diff --git a/readme.md b/readme.md
index fa9a0e9..0de8711 100644
--- a/readme.md
+++ b/readme.md
@@ -38,15 +38,15 @@ A list of changes classified as breaking, additions or fixes is maintained in [C
Components | Nuts | Springs | Knob | Rounded_cylinder | |
DIP | O_ring | Stepper_motors | PCB_mount | Rounded_polygon | |
D_connectors | Opengrab | Swiss_clips | PSU_shroud | Rounded_triangle | |
- Displays | PCB | Toggles | Pocket_handle | Sector | |
- Extrusion_brackets | PCBs | Transformers | Press_fit | Sweep | |
- Extrusions | PSUs | Tubings | Printed_box | Thread | |
- Fans | Panel_meters | Variacs | Printed_pulleys | Tube | |
- Fuseholder | Pillars | Veroboard | Ribbon_clamp | | |
- Geared_steppers | Pillow_blocks | Washers | SSR_shroud | | |
- Green_terminals | Pin_headers | Wire | Screw_knob | | |
- Hot_ends | Potentiometers | Zipties | Socket_box | | |
- Hygrometer | Pulleys | | Strap_handle | | |
+ Displays | PCB | Terminals | Pocket_handle | Sector | |
+ Extrusion_brackets | PCBs | Toggles | Press_fit | Sweep | |
+ Extrusions | PSUs | Transformers | Printed_box | Thread | |
+ Fans | Panel_meters | Tubings | Printed_pulleys | Tube | |
+ Fuseholder | Pillars | Variacs | Ribbon_clamp | | |
+ Geared_steppers | Pillow_blocks | Veroboard | SSR_shroud | | |
+ Green_terminals | Pin_headers | Washers | Screw_knob | | |
+ Hot_ends | Potentiometers | Wire | Socket_box | | |
+ Hygrometer | Pulleys | Zipties | Strap_handle | | |
---
@@ -2546,6 +2546,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pcb(ArduinoLeonardo)` | Arduino Leonardo |
| 1 | `pcb(ArduinoNano)` | Arduino Nano |
| 1 | `pcb(ArduinoUno3)` | Arduino Uno R3 |
+| 1 | `pcb(BTT_RELAY_V1_2)` | BigTreeTech Relay Module v1.2 |
| 1 | `pcb(BTT_SKR_E3_TURBO)` | BigTreeTech SKR E3 Turbo |
| 1 | `pcb(BTT_SKR_MINI_E3_V2_0)` | BigTreeTech SKR Mini E3 v2.0 |
| 1 | `pcb(BTT_SKR_V1_4_TURBO)` | BigTreeTech SKR v1.4 Turbo |
@@ -2570,7 +2571,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 |
-| 28 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
+| 32 | `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 |
@@ -2594,8 +2595,8 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 4 | `screw(M2p5_pan_screw, 20)` | Screw M2.5 pan x 20mm |
| 8 | `screw(M2p5_pan_screw, 25)` | Screw M2.5 pan x 25mm |
| 10 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
-| 14 | `screw(M3_cap_screw, 30)` | Screw M3 cap x 30mm |
-| 4 | `screw(M3_cap_screw, 35)` | Screw M3 cap x 35mm |
+| 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 |
| 1 | `pcb(XIAO)` | Seeeduino XIAO |
| 1 | `pcb(TP4056)` | TP4056 Li-lon Battery charger module |
@@ -2605,7 +2606,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pcb(WD2002SJ)` | WD2002SJ Buck Boost DC-DC converter |
| 20 | `washer(M2_washer)` | Washer M2 x 5mm x 0.3mm |
| 30 | `washer(M2p5_washer)` | Washer M2.5 x 5.9mm x 0.5mm |
-| 28 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
+| 32 | `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 |
@@ -2625,13 +2626,14 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 2 | pcb_spacer2550.stl |
| 4 | pcb_spacer2580.stl |
| 4 | pcb_spacer30160.stl |
-| 5 | pcb_spacer30190.stl |
+| 4 | pcb_spacer30190.stl |
| 5 | pcb_spacer30200.stl |
-| 4 | pcb_spacer30210.stl |
+| 5 | pcb_spacer30210.stl |
+| 4 | pcb_spacer30220.stl |
| 4 | pcb_spacer3050.stl |
| 6 | pcb_spacer3060.stl |
-| 4 | pcb_spacer40220.stl |
| 4 | pcb_spacer40230.stl |
+| 4 | pcb_spacer40240.stl |
Top
@@ -2888,19 +2890,12 @@ Face order is bottom, top, left, right, front, back.
| `psu_screw_hole_radius(type)` | Clearance hole for screw, bigger than normal on ATX |
| `psu_terminals(type)` | How many terminals and the y offset from the back |
| `psu_width(type)` | Width |
-| `terminal_block_depth(type)` | Total depth |
-| `terminal_block_depth2(type)` | Depth of contact well |
-| `terminal_block_divider(type)` | Width of the dividers |
-| `terminal_block_height(type)` | Height of the dividers |
-| `terminal_block_height2(type)` | Height under the contacts |
-| `terminal_block_pitch(type)` | Pitch between screws |
### Functions
| Function | Description |
|:--- |:--- |
| `psu_face_transform(type, face)` | Returns a transformation matrix to get to the specified face |
| `psu_size(type)` | Size |
-| `terminal_block_length(type, ways)` | Total length of terminal block |
### Modules
| Module | Description |
@@ -2908,7 +2903,6 @@ Face order is bottom, top, left, right, front, back.
| `atx_psu_cutout(type, face = f_front)` | Cut out for the rear of an ATX, which is actually f_front! |
| `psu(type)` | Draw a power supply |
| `psu_screw_positions(type, face = undef)` | Position children at the screw positions on the preferred mounting face, which can be overridden. |
-| `terminal_block(type, ways)` | Draw a power supply terminal block |

@@ -3938,6 +3932,38 @@ Should be reasonably accurate if not close to fully open.
| 2 | `swiss_clip(UKPFS1008_10)` | Swiss picture clip UKPFS1008_10 11mm |
+Top
+
+---
+
+## Terminals
+[vitamins/terminal.scad](vitamins/terminal.scad) Implementation.
+
+[tests/terminals.scad](tests/terminals.scad) Code for this example.
+
+### Properties
+| Function | Description |
+|:--- |:--- |
+| `terminal_block_depth(type)` | Total depth |
+| `terminal_block_depth2(type)` | Depth of contact well |
+| `terminal_block_divider(type)` | Width of the dividers |
+| `terminal_block_height(type)` | Height of the dividers |
+| `terminal_block_height2(type)` | Height under the contacts |
+| `terminal_block_pitch(type)` | Pitch between screws |
+
+### Functions
+| Function | Description |
+|:--- |:--- |
+| `terminal_block_length(type, ways)` | Total length of terminal block |
+
+### Modules
+| Module | Description |
+|:--- |:--- |
+| `terminal_block(type, ways)` | Draw a power supply terminal block |
+
+
+
+
Top
---
diff --git a/tests/png/pcbs.png b/tests/png/pcbs.png
index dae19fe..db7ea59 100644
Binary files a/tests/png/pcbs.png and b/tests/png/pcbs.png differ
diff --git a/tests/png/terminals.png b/tests/png/terminals.png
new file mode 100644
index 0000000..1d9ba00
Binary files /dev/null and b/tests/png/terminals.png differ
diff --git a/tests/terminals.scad b/tests/terminals.scad
new file mode 100644
index 0000000..b47368e
--- /dev/null
+++ b/tests/terminals.scad
@@ -0,0 +1,28 @@
+//
+// NopSCADlib Copyright Chris Palmer 2018
+// 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 .
+//
+include <../utils/core/core.scad>
+
+use<../vitamins/terminal.scad>
+
+mw_terminals = [9.525, 1.5, 15, 17.8, 7, 15];
+
+module terminals()
+ terminal_block(mw_terminals, 10);
+
+terminals();
diff --git a/vitamins/pcb.scad b/vitamins/pcb.scad
index 2063d66..5aad53d 100644
--- a/vitamins/pcb.scad
+++ b/vitamins/pcb.scad
@@ -38,6 +38,7 @@ use
use
use
use
+use
include
function pcb_name(type) = type[1]; //! Description
@@ -1088,6 +1089,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]);
if(show(comp, "vero_pin")) vero_pin(param(4, false));
+ if(show(comp, "terminal")) terminal_block(comp[5], comp[4]);
}
}
}
diff --git a/vitamins/pcbs.scad b/vitamins/pcbs.scad
index bd0174c..f95ed1c 100644
--- a/vitamins/pcbs.scad
+++ b/vitamins/pcbs.scad
@@ -198,6 +198,34 @@ Duex5 = ["Duex5", "Duex5 expansion board",
]),
[]];
+BTT_RELAY_V1_2 = [
+ "BTT_RELAY_V1_2", "BigTreeTech Relay Module v1.2",
+ 80.4, 36.3, 1.5, // size
+ 1, // corner radius
+ 3, // mounting hole diameter
+ 5, // pad around mounting hole
+ grey(25), // color
+ false, // true if parts should be separate BOM items
+ [ // hole positions
+ [3, 3.5], [-3, 3.5], [3, -3.5], [-3, -3.5]
+ ],
+ [ // components
+ [ 44.5, 10.0, 0, "block", 25, 20, 15.8, grey(20) ],
+ [ 47.5, -7.6, 0, "block", 19, 15.25, 15.8, "SkyBlue" ],
+ //[ -14.5, 18.15, 0, "block", 16, 30, 17.0, grey(25) ],
+ //[ -14.5, 18.15, 0, "block", 15, 25.5, 17.1, "PaleGoldenrod" ],
+ [ 2.5, 10.65, 270, "jst_xh", 2, false, grey(20), ],
+ [ 2.5, 18.15, 270, "jst_xh", 2, false, grey(20), ],
+ [ 2.5, 25.65, 270, "jst_xh", 2, false, grey(20), ],
+ [ 11.0, 2.0, 0, "2p54header", 2, 1 ],
+ [ 23.0, 2.0, 0, "2p54header", 4, 1 ],
+ [ 7.9, -3.3, 90, "2p54header", 2, 1 ],
+ [ -6.5, 2.45, 180, "terminal", 3, [10, 1.33, 13.2, 16, 7, 13] ],
+ ],
+ [], // accessories
+ [], // grid
+];
+
BTT_SKR_MINI_E3_V2_0 = [
"BTT_SKR_MINI_E3_V2_0", "BigTreeTech SKR Mini E3 v2.0",
100.75, 70.25, 1.6, // size
@@ -882,7 +910,7 @@ KY_040 = ["KY_040", "KY-040 rotart encoder breakout",
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_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO, BTT_SKR_V1_4_TURBO, DuetE, Duex5];
+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_not_shown = [Melzi, Duex2, PSU12V1A, Keyes5p1, PI_IO, ExtruderPCB];
diff --git a/vitamins/psu.scad b/vitamins/psu.scad
index 9a58a08..c70bec1 100644
--- a/vitamins/psu.scad
+++ b/vitamins/psu.scad
@@ -30,6 +30,7 @@ use <../utils/round.scad>
use
use
use
+use
function psu_face_holes(type) = type[0]; //! List of screw hole positions
function psu_face_thickness(type) = type[1]; //! The thickness
@@ -55,65 +56,6 @@ function psu_terminals(type) = type[10]; //! How many terminals and t
function psu_faces(type) = type[11]; //! List of face descriptions
function psu_accessories(type) = type[12]; //! Accessories to add to BOM, e.g. mains lead
-function terminal_block_pitch(type) = type[0]; //! Pitch between screws
-function terminal_block_divider(type) = type[1]; //! Width of the dividers
-function terminal_block_height(type) = type[2]; //! Height of the dividers
-function terminal_block_depth(type) = type[3]; //! Total depth
-function terminal_block_height2(type) = type[4]; //! Height under the contacts
-function terminal_block_depth2(type) = type[5]; //! Depth of contact well
-
-function terminal_block_length(type, ways) = terminal_block_pitch(type) * ways + terminal_block_divider(type); //! Total length of terminal block
-
-module terminal_block(type, ways) { //! Draw a power supply terminal block
- tl = terminal_block_length(type, ways);
- depth = terminal_block_depth(type);
- depth2 = terminal_block_depth2(type);
- div = terminal_block_divider(type);
- h = terminal_block_height(type);
- h2 = terminal_block_height2(type);
- pitch = terminal_block_pitch(type);
- back_wall = depth - depth2;
- contact_depth = depth2 - back_wall;
- contact_width = pitch - div;
- contact_h = 0.4;
- washer_t = 1.2;
- translate([0, -tl]) {
- color(grey(20)) {
- cube([depth, tl, h2]);
-
- translate([depth2, 0])
- cube([depth - depth2, tl, h]);
-
- for(i = [0 : ways])
- translate([0, i * pitch + div])
- rotate([90, 0, 0])
- linear_extrude(div)
- hull() {
- r = 2;
- square([depth, eps]);
-
- translate([depth - eps, 0])
- square([eps, h]);
-
- translate([r, h - r])
- circle4n(r);
- }
- }
- color("silver")
- for(i = [0 : ways - 1]) translate([0, i * pitch + div, h2]) {
- translate([back_wall, 1])
- cube([contact_depth, contact_width - 2, contact_h]);
-
- translate([back_wall + contact_depth / 2 - contact_width / 2, 0])
- cube([contact_width, contact_width, contact_h + washer_t]);
-
- translate([back_wall + contact_depth / 2, contact_width / 2, contact_h + washer_t])
- not_on_bom() no_explode()
- screw(M3_pan_screw, 8);
- }
- }
-}
-
function psu_face_transform(type, face) = //! Returns a transformation matrix to get to the specified face
let(l = psu_length(type),
w = psu_width(type),
diff --git a/vitamins/terminal.scad b/vitamins/terminal.scad
new file mode 100644
index 0000000..b762dca
--- /dev/null
+++ b/vitamins/terminal.scad
@@ -0,0 +1,79 @@
+//
+// NopSCADlib Copyright Chris Palmer 2018
+// 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 .
+//
+
+include <../core.scad>
+
+function terminal_block_pitch(type) = type[0]; //! Pitch between screws
+function terminal_block_divider(type) = type[1]; //! Width of the dividers
+function terminal_block_height(type) = type[2]; //! Height of the dividers
+function terminal_block_depth(type) = type[3]; //! Total depth
+function terminal_block_height2(type) = type[4]; //! Height under the contacts
+function terminal_block_depth2(type) = type[5]; //! Depth of contact well
+
+function terminal_block_length(type, ways) = terminal_block_pitch(type) * ways + terminal_block_divider(type); //! Total length of terminal block
+
+module terminal_block(type, ways) { //! Draw a power supply terminal block
+ tl = terminal_block_length(type, ways);
+ depth = terminal_block_depth(type);
+ depth2 = terminal_block_depth2(type);
+ div = terminal_block_divider(type);
+ h = terminal_block_height(type);
+ h2 = terminal_block_height2(type);
+ pitch = terminal_block_pitch(type);
+ back_wall = depth - depth2;
+ contact_depth = depth2 - back_wall;
+ contact_width = pitch - div;
+ contact_h = 0.4;
+ washer_t = 1.2;
+ translate([0, -tl]) {
+ color(grey(20)) {
+ cube([depth, tl, h2]);
+
+ translate([depth2, 0])
+ cube([depth - depth2, tl, h]);
+
+ for(i = [0 : ways])
+ translate([0, i * pitch + div])
+ rotate([90, 0, 0])
+ linear_extrude(div)
+ hull() {
+ r = 2;
+ square([depth, eps]);
+
+ translate([depth - eps, 0])
+ square([eps, h]);
+
+ translate([r, h - r])
+ circle4n(r);
+ }
+ }
+ color("silver")
+ for(i = [0 : ways - 1]) translate([0, i * pitch + div, h2]) {
+ translate([back_wall, 1])
+ cube([contact_depth, contact_width - 2, contact_h]);
+
+ translate([back_wall + contact_depth / 2 - contact_width / 2, 0])
+ cube([contact_width, contact_width, contact_h + washer_t]);
+
+ translate([back_wall + contact_depth / 2, contact_width / 2, contact_h + washer_t])
+ not_on_bom() no_explode()
+ screw(M3_pan_screw, 8);
+ }
+ }
+}