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

Compare commits

...

12 Commits

Author SHA1 Message Date
Chris Palmer
a74bf094aa Added TUK FACK2SPM Cat5E RJ45 shielded panel mount coupler. 2020-05-30 15:29:28 +01:00
Chris Palmer
5a06f79466 Updated gallery pic. 2020-05-26 18:24:04 +01:00
Chris Palmer
98e17080d8 Added meter_shunt_y() function to led_meter. 2020-05-26 15:19:38 +01:00
Chris Palmer
d3f308a45e Pixel differences in images due to OpenSCAD version update. 2020-05-20 21:58:07 +01:00
Chris Palmer
fe454884e0 Fixed Ampmeter typo. 2020-05-20 21:41:54 +01:00
Chris Palmer
c019448dd3 Unused imaged removed. 2020-05-20 21:40:13 +01:00
Chris Palmer
eadc541e8f Screw_and_washer() no longer adds washers for countersunk screws. 2020-05-18 15:29:19 +01:00
Chris Palmer
02791c40ac pbox_outer_shape() added and pbox_screw_positions() documented. 2020-05-18 15:28:26 +01:00
Chris Palmer
85b8ffbbc3 Fixed pin header parameter values passed from PCBs. 2020-05-18 15:27:22 +01:00
Chris Palmer
dd5d3869ad Removed old file 2020-05-18 15:04:41 +01:00
Chris Palmer
b84eb3cf31 Updated big picture 2020-05-02 21:38:53 +01:00
Chris Palmer
0ec7aabcfb Modelled DSP5005 power supply module as a panel_meter.
Panel_meters can now have inner apertures and buttons.
2020-05-02 20:42:26 +01:00
28 changed files with 244 additions and 63 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 KiB

After

Width:  |  Height:  |  Size: 293 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 KiB

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 794 KiB

After

Width:  |  Height:  |  Size: 798 KiB

View File

@@ -78,7 +78,7 @@ function pbox_screw_inset(type) = //! How far the base screws are inset
R = pbox_radius(type)
) max(r, R - (R - r) / sqrt(2));
module pbox_screw_positions(type) {
module pbox_screw_positions(type) { //! Place children at base screw positions
foot = pbox_foot(type);
inset = pbox_screw_inset(type);
for(x = [-1, 1], y = [-1, 1])
@@ -127,6 +127,9 @@ module pbox_inner_shape(type) {
rounded_square([w, d], rad, center = true);
}
module pbox_outer_shape(type) //! 2D outer shape of the box
offset(pbox_wall(type) / 2) pbox_mid_shape(type);
module pbox_base(type) { //! Generate the STL for the base
stl(str(pbox_name(type),"_base"));
t = pbox_base(type);
@@ -161,7 +164,7 @@ module pbox(type) { //! Generate the STL for the main case
difference() {
union() {
linear_extrude(total_height)
offset(wall / 2) pbox_mid_shape(type);
pbox_outer_shape(type);
if($children > 2)
children(2);

View File

@@ -523,6 +523,8 @@ Various electronic components used in hot ends and heated beds.
| Function | Description |
|:--- |:--- |
| ```TO220_thickness()``` | Thickness of the tab of a TO220 |
| ```fack2spm_bezel_size()``` | FACK2SPM Bezel dimensions |
| ```fack2spm_screw()``` | Screw type for FACK2SPM |
### Modules
| Module | Description |
@@ -531,6 +533,9 @@ Various electronic components used in hot ends and heated beds.
| ```al_clad_resistor(type, value, leads = true)``` | Draw an aluminium clad resistor |
| ```al_clad_resistor_hole_positions(type)``` | Position children at the screw holes of an aluminium clad resistor |
| ```al_clad_resistor_holes(type, h = 100)``` | Drill screw holes for an aluminium clad resistor |
| ```fack2spm()``` | Draw a FACK2SPM Cat5E RJ45 shielded panel mount coupler |
| ```fack2spm_hole_positions()``` | Place children at the FACK2SPM mounting hole positions |
| ```fack2spm_holes(h = 0)``` | Cut the holes for a FACK2SPM |
| ```panel_USBA()``` | Draw a panel mount USBA connector |
| ```panel_USBA_hole_positions()``` | Place children at hole positions |
| ```panel_USBA_holes(h = 100)``` | Make holes for USBA connector |
@@ -555,6 +560,7 @@ Various electronic components used in hot ends and heated beds.
| 4 | ```screw(M2p5_pan_screw, 16)``` | Screw M2.5 pan x 16mm |
| 4 | ```screw(M3_pan_screw, 16)``` | Screw M3 pan x 16mm |
| 1 | ```panel_USBA()``` | Socket USB A panel mount |
| 1 | ```tuk_fack2spm()``` | TUK FACK2SPM Cat5E RJ45 shielded panel mount coupler |
| 1 | ```thermal_cutout(TC)``` | Thermal cutout TC |
| 1 | ```resistor(Epcos)``` | Thermistor Epcos B57560G104F 100K 1% |
| 1 | ```resistor(EpcosBlue)``` | Thermistor Epcos B57861S104F40 100K 1% |
@@ -1433,7 +1439,7 @@ The 7 SEGMENT.TTF font from the [docs](docs) directory needs to be installed to
| ```meter_lug_size(type)``` | Lug length and width |
| ```meter_offset(type)``` | Display position, 0 = center, +1 = top |
| ```meter_pcb_size(type)``` | PCB size excluding lugs |
| ```meter_shunt(type)``` | Ampmeter shunt wire |
| ```meter_shunt(type)``` | Ammeter shunt wire |
| ```meter_size(type)``` | Size of display |
### Functions
@@ -1443,6 +1449,7 @@ The 7 SEGMENT.TTF font from the [docs](docs) directory needs to be installed to
| ```meter_bezel_rad(type)``` | Printed bezel corner radius |
| ```meter_bezel_wall(type)``` | Printed bezel wall thickness |
| ```meter_bezel_width(type)``` | Printed bezel width |
| ```meter_shunt_y(type)``` | Shunt y coordinate |
### Modules
| Module | Description |
@@ -1970,10 +1977,18 @@ Notes on the DSN_VC288:
| Function | Description |
|:--- |:--- |
| ```pmeter_aperture(type)``` | Aperture length, width and bevel |
| ```pmeter_bevel(type)``` | Bezel bevel inset and start height |
| ```pmeter_bevel(type)``` | Bezel bevel inset and start height or a radius |
| ```pmeter_bezel(type)``` | Bezel size |
| ```pmeter_bezel_r(type)``` | Bezel radius |
| ```pmeter_button_colour(type)``` | Button colour |
| ```pmeter_button_pos(type)``` | Button position |
| ```pmeter_button_r(type)``` | Button radius |
| ```pmeter_button_size(type)``` | Button size |
| ```pmeter_buttons(type)``` | List of buttons |
| ```pmeter_inner_ap(type)``` | Inner aperture |
| ```pmeter_inner_ap_o(type)``` | Inner aperture offset |
| ```pmeter_pcb(type)``` | Optional PCB for open types |
| ```pmeter_pcb_h(type)``` | Component height from the front |
| ```pmeter_pcb_z(type)``` | Distance of PCB from the back |
| ```pmeter_size(type)``` | Body size including bezel height |
| ```pmeter_tab(type)``` | Tab size |
@@ -1989,6 +2004,7 @@ Notes on the DSN_VC288:
| Module | Description |
|:--- |:--- |
| ```panel_meter(type)``` | Draw panel mounted LCD meter module |
| ```panel_meter_button(type)``` | Draw panel meter button |
| ```panel_meter_cutout(type, h = 0)``` | Make panel cutout |
![panel_meters](tests/png/panel_meters.png)
@@ -1999,6 +2015,7 @@ Notes on the DSN_VC288:
| 1 | ```panel_meter(DSN_VC288)``` | DSN-VC288 DC 100V 10A Voltmeter ammeter |
| 1 | ```panel_meter(PZEM001)``` | Peacefair PZEM-001 AC digital multi-function meter |
| 1 | ```panel_meter(PZEM021)``` | Peacefair PZEM-021 AC digital multi-function meter |
| 1 | ```panel_meter(DSP5005)``` | Ruideng DSP5005 Power supply module |
<a href="#top">Top</a>
@@ -2084,7 +2101,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 1 | ```box_header(2p54header, 4, 2, smt = 0)``` | Box header 4 x 2 |
| 1 | ```box_header(2p54header, 4, 2)``` | Box header 4 x 2 |
| 1 | ```d_plug(DCONN9, pcb = true)``` | D-type 9 way PCB mount plug |
| 1 | ```dil_socket(12, 15.24)``` | DIL socket 24 x 0.6" |
| 1 | ```hdmi(hdmi_full)``` | HDMI socket |
@@ -2097,12 +2114,11 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | ```microswitch(small_microswitch)``` | Microswitch DM1-00P-110-3 |
| 1 | ```hdmi(hdmi_mini)``` | Mini HDMI socket |
| 1 | ```molex_254(2)``` | Molex KK header 2 way |
| 1 | ```pin_header(2p54header, 4, 1, smt = 0)``` | Pin header 4 x 1 |
| 1 | ```pin_header(2p54header, 5, 1, smt = undef)``` | Pin header 5 x 1 |
| 1 | ```pin_socket(2p54header, 4, 1, right_angle = undef, height = undef, smt = undef)``` | Pin socket 4 x 1 |
| 1 | ```pin_header(2p54header, 4, 1)``` | Pin header 4 x 1 |
| 1 | ```pin_header(2p54header, 5, 1)``` | Pin header 5 x 1 |
| 1 | ```pin_socket(2p54header, 4, 1)``` | Pin socket 4 x 1 |
| 1 | ```pin_socket(2p54header, 6, 1)``` | Pin socket 6 x 1 |
| 1 | ```pin_socket(2p54header, 8, 1)``` | Pin socket 8 x 1 |
| 1 | ```pin_socket(2p54header, 8, 1, right_angle = undef, height = undef, smt = undef)``` | Pin socket 8 x 1 |
| 2 | ```pin_socket(2p54header, 8, 1)``` | Pin socket 8 x 1 |
| 1 | ```ax_res(res1_2, 10, tol = 10)``` | Resistor 10 Ohms 10% 0.5W |
| 1 | ```ax_res(res1_4, 100, tol = 2)``` | Resistor 100 Ohms 2% 0.25W |
| 1 | ```ax_res(res1_8, 1000)``` | Resistor 1000 Ohms 5% 0.125W |
@@ -4696,6 +4712,8 @@ It can also have printed feet on the base with the screws doubling up to hold th
| ```pbox_base(type)``` | Generate the STL for the base |
| ```pbox_base_screws(type, thickness = 0)``` | Place the screws and feet |
| ```pbox_inserts(type)``` | Place the inserts for the base screws |
| ```pbox_outer_shape(type)``` | 2D outer shape of the box |
| ```pbox_screw_positions(type)``` | Place children at base screw positions |
![printed_box](tests/png/printed_box.png)

View File

@@ -61,10 +61,10 @@ test_pcb = ["TestPCB", "Test PCB",
[ 20, -15, 0, "trimpot10", true],
[ 10, 2, 0, "smd_led", LED0805, "red"],
[ 10, 10, 0, "2p54header", 4, 1],
[ 25, 10, 0, "2p54header", 5, 1, undef, "blue" ],
[ 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, undef, undef, undef, "red" ],
[ 25, 30, 0, "2p54socket", 4, 1, false, 0, false, "red" ],
[ 10, 40, 0, "chip", 10, 5, 1, grey20],
[ 5, 50, 0, "led", LED3mm, "red"],
[ 12, 50, 0, "led", LED5mm, "orange"],
@@ -119,7 +119,7 @@ test_pcb = ["TestPCB", "Test PCB",
[ 80, 200, 0, "pdip", 24, "27C32", true, inch(0.6) ],
[ 80, 170, 0, "pdip", 8, "NE555" ],
[ 52, 206, 0, "2p54socket", 8, 1 ],
[ 52, 194, 0, "2p54socket", 8, 1, undef, undef, undef, "red" ],
[ 52, 194, 0, "2p54socket", 8, 1, false, 0, false, "red" ],
[ 50, 220, 0, "standoff", 5, 4.5, 12.5, 2.54],
[ 50, 240, 0, "potentiometer"],
[ 75, 240, 0, "potentiometer", 7, 8],

View File

@@ -41,9 +41,12 @@ module components() {
translate([0, 50])
TO220("Generic TO220 package");
translate([50, 50])
translate([40, 50])
panel_USBA();
translate([80, 50])
fack2spm();
translate([0,80])
thermal_cutouts();

View File

@@ -22,7 +22,7 @@ use <../utils/layout.scad>
include <../vitamins/panel_meters.scad>
module panel_meters()
layout([for(p = panel_meters) pmeter_size(p).x], 20)
layout([for(p = panel_meters) pmeter_bezel(p).x], 10)
panel_meter(panel_meters[$i]);
if($preview)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -28,6 +28,7 @@ include <../core.scad>
include <tubings.scad>
include <spades.scad>
use <../utils/rounded_cylinder.scad>
use <../utils/dogbones.scad>
function resistor_length(type) = type[2]; //! Body length
function resistor_diameter(type) = type[3]; //! Body diameter
@@ -447,3 +448,75 @@ module thermal_cutout(type) { //! Draw specified thermal cutout
thermal_cutout_hole_positions(type)
children();
}
function fack2spm_bezel_size() = [19.2, 35.5, 2.6, 2]; //! FACK2SPM Bezel dimensions
module fack2spm_hole_positions() //! Place children at the FACK2SPM mounting hole positions
for(end = [-1, 1])
translate([0, end * 28.96 / 2])
children();
function fack2spm_screw() = M3_dome_screw; //! Screw type for FACK2SPM
module fack2spm_holes(h = 0) { //! Cut the holes for a FACK2SPM
fack2spm_hole_positions()
drill(screw_clearance_radius(fack2spm_screw()), h);
dogbone_rectangle([17.15, 22.86, h]);
}
module fack2spm() { //! Draw a FACK2SPM Cat5E RJ45 shielded panel mount coupler
vitamin("tuk_fack2spm(): TUK FACK2SPM Cat5E RJ45 shielded panel mount coupler");
bezel = fack2spm_bezel_size();
body = [16.8, 22.8, 9.8];
socket = [14.5, 16.1, 29.6];
y_offset = -(19.45 - 16.3) / 2;
plug = [12, 6.8, 10];
plug_y = y_offset - socket.y / 2 + 4 + plug.y / 2;
tab1 = [4, 3];
tab2 = [6.3, 1.6];
module socket()
translate([0, y_offset])
square([socket.x, socket.y], center = true);
color("silver") {
linear_extrude(bezel.z)
difference() {
rounded_square([bezel.x, bezel.y], bezel[3]);
fack2spm_hole_positions()
circle(d = 3.15);
socket();
}
translate_z(bezel.z - body.z)
linear_extrude(body.z - eps)
difference() {
square([body.x, body.y], center = true);
socket();
}
translate_z(bezel.z - socket.z)
linear_extrude(socket.z - 0.1)
difference() {
offset(-0.1) socket();
translate([0, plug_y]) {
square([plug.x, plug.y], center = true);
translate([0, -plug.y / 2]) {
square([tab1.x, 2 * tab1.y], center = true);
square([tab2.x, 2 * tab2.y], center = true);
}
}
}
translate([0, plug_y, -socket.z / 2])
cube([plug.x, plug.y, socket.z - 2 * plug.z], center = true);
}
}

View File

@@ -34,7 +34,7 @@ function meter_lug_size(type) = type[4]; //! Lug length and width
function meter_lug_offset(type) = type[5]; //! Lug position, 0 = center, +1 = top
function meter_hole_pitch(type) = type[6]; //! Lug hole pitch
function meter_hole_radius(type) = type[7]; //! Lug hole radius
function meter_shunt(type) = type[8]; //! Ampmeter shunt wire
function meter_shunt(type) = type[8]; //! Ammeter shunt wire
function meter_pos(type) = (meter_pcb_size(type).y - meter_size(type).y) * meter_offset(type) / 2;
function meter_lug_pos(type) = (meter_pcb_size(type).y - meter_lug_size(type).y) * meter_lug_offset(type) / 2;
@@ -44,6 +44,8 @@ module meter_hole_positions(type) //! Position children over the holes
translate([side * meter_hole_pitch(type) / 2, meter_lug_pos(type)])
children();
function meter_shunt_y(type) = meter_pos(type) - meter_pcb_size(type).y / 2; //! Shunt y coordinate
module meter(type, colour = "red", value = "888", display_colour = false) //! Draw a meter with optional colour and display value
{
vitamin(str("meter(", type[0], arg(colour, "red", "colour"), "): LED ", meter_shunt(type) ? "am" : "volt", "meter ", colour));
@@ -80,7 +82,7 @@ module meter(type, colour = "red", value = "888", display_colour = false) //! Dr
shunt = meter_shunt(type);
if(shunt)
translate([0, -meter_pcb_size(type).y / 2 + meter_pos(type), size.z])
translate([0, meter_shunt_y(type), size.z])
vflip()
color("#b87333")
wire_link(shunt.y, shunt.x, shunt.z, tail = 2);

View File

@@ -28,21 +28,42 @@
include <../utils/core/core.scad>
use <../utils/dogbones.scad>
use <../utils/rounded_cylinder.scad>
use <pcb.scad>
function pmeter_size(type) = type[2]; //! Body size including bezel height
function pmeter_bezel(type) = type[3]; //! Bezel size
function pmeter_bezel_r(type) = type[4]; //! Bezel radius
function pmeter_bevel(type) = type[5]; //! Bezel bevel inset and start height
function pmeter_aperture(type) = type[6]; //! Aperture length, width and bevel
function pmeter_tab(type) = type[7]; //! Tab size
function pmeter_tab_z(type) = type[8]; //! Tab vertical position
function pmeter_thickness(type) = type[9]; //! Wall thickness if not closed
function pmeter_pcb(type) = type[10]; //! Optional PCB for open types
function pmeter_pcb_z(type) = type[11]; //! Distance of PCB from the back
function pmeter_size(type) = type[2]; //! Body size including bezel height
function pmeter_bezel(type) = type[3]; //! Bezel size
function pmeter_bezel_r(type) = type[4]; //! Bezel radius
function pmeter_bevel(type) = type[5]; //! Bezel bevel inset and start height or a radius
function pmeter_aperture(type) = type[6]; //! Aperture length, width and bevel
function pmeter_tab(type) = type[7]; //! Tab size
function pmeter_tab_z(type) = type[8]; //! Tab vertical position
function pmeter_thickness(type) = type[9]; //! Wall thickness if not closed
function pmeter_inner_ap(type) = type[10]; //! Inner aperture
function pmeter_inner_ap_o(type) = type[11]; //! Inner aperture offset
function pmeter_pcb(type) = type[12]; //! Optional PCB for open types
function pmeter_pcb_z(type) = type[13]; //! Distance of PCB from the back
function pmeter_pcb_h(type) = type[14]; //! Component height from the front
function pmeter_buttons(type) = type[15]; //! List of buttons
function pmeter_button_pos(type) = type[0]; //! Button position
function pmeter_button_size(type) = type[1]; //! Button size
function pmeter_button_r(type) = type[2]; //! Button radius
function pmeter_button_colour(type) = type[3]; //! Button colour
function pmeter_depth(type) = pmeter_size(type).z - pmeter_bezel(type).z; //! Depth below bezel
module panel_meter_button(type) { //! Draw panel meter button
size = pmeter_button_size(type);
r = pmeter_button_r(type);
color(pmeter_button_colour(type))
translate(pmeter_button_pos(type))
if(size.x)
rounded_rectangle(pmeter_button_size(type), r, center = false);
else
cylinder(r = r, h = size.z);
}
module panel_meter(type) { //! Draw panel mounted LCD meter module
vitamin(str("panel_meter(", type[0], "): ", type[1]));
size = pmeter_size(type);
@@ -51,29 +72,52 @@ module panel_meter(type) { //! Draw panel mounted LCD meter module
t = pmeter_thickness(type);
r = pmeter_bezel_r(type);
h = size.z - bezel.z;
app = pmeter_aperture(type);
ap = pmeter_aperture(type);
tab = pmeter_tab(type);
tab_z = pmeter_tab_z(type);
pcb = pmeter_pcb(type);
ap2 = pmeter_inner_ap(type);
pcb_h = pmeter_pcb_h(type) - bezel.z;
buttons = pmeter_buttons(type);
color("#94A7AB")
cube([app.x, app.y, 3 * eps], center = true);
cube([ap.x, ap.y, 3 * eps], center = true);
module corner(x, y)
translate([x * (bezel.x / 2 - bevel), y * (bezel.y / 2 - bevel)])
rounded_cylinder(r = r, r2 = bevel, h = bezel.z);
color(grey30) union() {
//
// Bezel and aperture
//
difference() {
hull() {
rounded_rectangle([bezel.x - 2 * bevel.x, bezel.y - 2 * bevel.x, bezel.z], r - bevel.x, center = false);
rounded_rectangle([bezel.x, bezel.y, bevel[1]],r, center = false);
}
hull() {
translate_z(bezel.z + eps) {
cube([app.x + app.z, app.y + app.z, eps], center = true);
cube([app.x, app.y, bezel.z * 2], center = true);
if(is_list(bevel))
hull() {
rounded_rectangle([bezel.x - 2 * bevel.x, bezel.y - 2 * bevel.x, bezel.z], r - bevel.x, center = false);
rounded_rectangle([bezel.x, bezel.y, bevel[1]], r, center = false);
}
else
hull() {
corner(-1, -1);
corner(-1, 1);
corner( 1, -1);
corner( 1, 1);
}
hull() {
r = max(0, -ap.z);
if(ap.z > 0)
translate_z(bezel.z + eps)
cube([ap.x + ap.z, ap.y + ap.z, eps], center = true);
translate_z(bezel.z + eps)
rounded_rectangle([ap.x, ap.y, bezel.z * 2], r, center = true);
}
}
//
// Body
//
translate_z(-h)
linear_extrude(h)
difference() {
@@ -82,7 +126,9 @@ module panel_meter(type) { //! Draw panel mounted LCD meter module
if(t)
square([size.x - 2 * t, size.y - 2 * t], center = true);
}
//
// tabs
//
if(tab)
for(end = [-1, 1])
translate([end * (size.x / 2 + tab.x / 2), 0, -size.z + tab_z])
@@ -91,10 +137,27 @@ module panel_meter(type) { //! Draw panel mounted LCD meter module
cube([tab.x, tab.y, tab.z], center = true);
}
if(ap2)
color("grey")
linear_extrude(ap2.z)
difference() {
square([ap.x, ap.y], center = true);
translate(pmeter_inner_ap_o(type))
square([ap2.x, ap2.y], center = true);
}
if(pcb)
vflip()
translate_z(h - pcb_thickness(pcb) - pmeter_pcb_z(type))
pcb(pcb);
if(pcb_h > 0)
%translate_z(-pcb_h / 2 - eps)
cube([size.x - 2 * t - eps, size.y - 2 * t - eps, pcb_h], center = true);
if(buttons)
for(b = buttons)
panel_meter_button(b);
}
module panel_meter_cutout(type, h = 0) { //! Make panel cutout

View File

@@ -20,19 +20,32 @@
//
//! Panel mounted digital meter modules
//
// body size bezel size, radius, bevel aperture tab tab_z t
// inner aperture offset pcb pcb z h
PZEM021 = ["PZEM021", "Peacefair PZEM-021 AC digital multi-function meter", [84.6, 44.7, 24.4], [89.6, 49.6, 2.3], 1.5, [1, 1], [51, 30, 5], [1.3, 10, 6], 15.5, 0];
PZEM001 = ["PZEM001", "Peacefair PZEM-001 AC digital multi-function meter", [62 , 52.5, 24.4], [67, 57.5, 2.0], 2.0, [1, 1], [61, 46,-3], [1.2, 10, 6], 15.5, 0,
[36, 36, 1.9], [0, 0], false, 0, 0, [
[[25, 8, 0], [0, 0, 2], 4, grey90],
[[25, -8, 0], [0, 0, 2], 4, grey90],
PZEM021 = ["PZEM021", "Peacefair PZEM-021 AC digital multi-function meter", [84.6, 44.7, 24.4], [89.6, 49.6, 2.3], 1.5, [1, 1], [51, 30, 5], [1.3, 10, 6], 15.5, 0];
PZEM001 = ["PZEM001", "Peacefair PZEM-001 AC digital multi-function meter", [62 , 52.5, 24.4], [67, 57.5, 2.0], 1.5, [1, 1], [36, 36, 0], [1.2, 10, 6], 15.5, 0];
]];
DSN_VC288PCB = ["", "", 41, 21, 1, 0, 0, 0, "green", false, [],
[ [ 5, -3, 0, "jst_xh", 3],
DSP5004PCB = ["", "", 68, 36, 1.6, 0, 0, 0, "green", false, [], [], []];
DSP5005 = ["DSP5005", "Ruideng DSP5005 Power supply module", [71.6, 39.8, 25.0], [79, 43.0, 2.3], 2.0, 1, [67, 32,-1], [2.0, 12, 9], 13.5, 1.5,
[28, 27, 0.7], [-4.5, 0], DSP5004PCB, 10, 36, [
[[ 22, 4, 2], [ 0, 0, 11], 6, "silver"],
[[ 22, 4, 5], [ 0, 0, 6], 6.5, "silver"],
[[ 22, -9, 0], [ 8, 6, 1], 2.99, "yellow"],
[[-25, -9, 0], [ 6.5, 4.5, 1], 0.5, "yellow"],
[[-25, 0, 0], [ 6.5, 4.5, 1], 0.5, "yellow"],
[[-25, 9, 0], [ 6.5, 4.5, 1], 0.5, "yellow"],
]];
],
[]];
DSN_VC288PCB = ["", "", 41, 21, 1, 0, 0, 0, "green", false, [], [[ 5, -3, 0, "jst_xh", 3], ], []];
DSN_VC288 = ["DSN_VC288","DSN-VC288 DC 100V 10A Voltmeter ammeter", [45.3, 26, 17.4], [47.8, 28.8, 2.5], 0, [1, 1.8], [36, 18, 2.5], [], 0, 2,
DSN_VC288PCB, 5];
[], 0, DSN_VC288PCB, 5];
panel_meters = [DSN_VC288, PZEM021, PZEM001];
panel_meters = [DSN_VC288, PZEM021, PZEM001, DSP5005];
use <panel_meter.scad>

View File

@@ -883,9 +883,9 @@ module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb compon
function param(n, default = 0) = len(comp) > n ? comp[n] : default;
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, cutouts, colour = param(7, undef));
if(show(comp, "2p54boxhdr")) box_header(2p54header, comp[4], comp[5], param(6), cutouts);
if(show(comp, "2p54socket")) pin_socket(2p54header, comp[4], comp[5], param(6, false), param(7), param(8, false), cutouts, param(9, undef));
if(show(comp, "2p54header")) pin_header(2p54header, comp[4], comp[5], param(6, false), 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, grey30), cutouts);
if(show(comp, "rj45")) rj45(cutouts);
if(show(comp, "usb_A")) usb_Ax1(cutouts);

View File

@@ -259,22 +259,28 @@ module screw_countersink(type) { //! Countersink shape
module screw_and_washer(type, length, star = false, penny = false) { //! Screw with a washer which can be standard or penny and an optional star washer on top
washer = screw_washer(type);
head_type = screw_head_type(type);
translate_z(exploded() * 6)
if(penny)
penny_washer(washer);
else
washer(washer);
if(head_type != hs_cs && head_type != hs_cs_cap) {
translate_z(exploded() * 6)
if(penny)
penny_washer(washer);
else
washer(washer);
translate_z(washer_thickness(washer)) {
if(star) {
translate_z(exploded() * 8)
star_washer(washer);
translate_z(washer_thickness(washer)) {
if(star) {
translate_z(exploded() * 8)
star_washer(washer);
translate_z(washer_thickness(washer))
translate_z(washer_thickness(washer))
screw(type, length);
}
else
screw(type, length);
}
else
screw(type, length);
}
else
translate_z(eps)
screw(type, length);
}