Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 49dbff41ae | |||
| 5a4d2300a8 |
@@ -0,0 +1,56 @@
|
|||||||
|
xdim = 23.497 + 1.5;
|
||||||
|
ydim = 18.155;
|
||||||
|
zdim = 13.5;
|
||||||
|
wt = 1;
|
||||||
|
a = 0.897;
|
||||||
|
b = 4.364;
|
||||||
|
c = 10.222;
|
||||||
|
d = 3.168;
|
||||||
|
e = 1.495;
|
||||||
|
f = 3.168;
|
||||||
|
|
||||||
|
//conn_pos = [a, a+b+c, a+b+c+d+e];
|
||||||
|
conn_pos = [a+b+c, a+b+c+d+e];
|
||||||
|
conn_dim = [
|
||||||
|
// [b, 8],
|
||||||
|
[d, 8],
|
||||||
|
[f, 8]
|
||||||
|
];
|
||||||
|
|
||||||
|
div_width = 0.5;
|
||||||
|
div_reach = 2.8;
|
||||||
|
div_pos = a+b+c+d+(e/2)-(div_width/2);
|
||||||
|
|
||||||
|
psu_case();
|
||||||
|
|
||||||
|
module psu_case() {
|
||||||
|
translate([wt + div_pos, wt, 0]) {
|
||||||
|
cube(size=[div_width, div_reach, zdim + wt]);
|
||||||
|
}
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
cube(size=[ xdim + (2 * wt),
|
||||||
|
ydim + (2 * wt),
|
||||||
|
zdim + wt]);
|
||||||
|
translate([wt,wt,wt]) {
|
||||||
|
cube(size=[ xdim,
|
||||||
|
ydim + wt + 1,
|
||||||
|
zdim + wt + 1]);
|
||||||
|
}
|
||||||
|
conn_cuts();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module conn_cuts() {
|
||||||
|
translate([wt, -1, 0]) {
|
||||||
|
for(i = [0:1:len(conn_pos) - 1]) {
|
||||||
|
translate([ conn_pos[i], 0, -wt]) {
|
||||||
|
cube([ conn_dim[i][0],
|
||||||
|
wt + 2,
|
||||||
|
conn_dim[i][1] + 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//color("red") conn_cuts();
|
||||||
@@ -0,0 +1,208 @@
|
|||||||
|
//*** DIMENSIONS ***//
|
||||||
|
x = 0; y = 1; z = 2; // simplify array references
|
||||||
|
printer_layer_height=0.1313;
|
||||||
|
tol = 0.25; // tolerance
|
||||||
|
$fn = 80; // facet count for curves
|
||||||
|
|
||||||
|
label_text = "2026-05 v3.5";
|
||||||
|
label_size = 5;
|
||||||
|
|
||||||
|
// Include non-printing placeholder compoenents
|
||||||
|
render_placeholders = false;
|
||||||
|
|
||||||
|
// Only render mesh overlap structures
|
||||||
|
render_supports = false;
|
||||||
|
|
||||||
|
// Junction Box
|
||||||
|
jbox_dim = [51,92,82];
|
||||||
|
jbox_screw_distance = 83.5;
|
||||||
|
jbox_screw_dia = 2.1;
|
||||||
|
jbox_ear_width = 18.155 + 2;
|
||||||
|
jbox_ear_thickness = 3;
|
||||||
|
jbox_ear_pleatau = -15;
|
||||||
|
jbox_hole_inset = 4;
|
||||||
|
jbox_mount_dim = [15, 10, jbox_dim.z];
|
||||||
|
|
||||||
|
// Dial
|
||||||
|
dial_pos = [23.63,19.52];
|
||||||
|
dial_r = 18;
|
||||||
|
dial_bezel_r = 3;
|
||||||
|
dial_depth = 10.5;
|
||||||
|
dial_walls = 1.5;
|
||||||
|
dial_shaft_depth = 5;
|
||||||
|
dial_shaft_r = 10 / 2;
|
||||||
|
dial_hole_r = 6.25 / 2;
|
||||||
|
dial_hole_cut = (dial_hole_r * 2) - 4.75;
|
||||||
|
dial_faceplate_tol = 1.0;
|
||||||
|
|
||||||
|
// Faceplate
|
||||||
|
face_pos = [0, -5, 0];
|
||||||
|
thickness = 3;
|
||||||
|
corner_r = 10;
|
||||||
|
// brim_thickness = 13.5;
|
||||||
|
brim_thickness = 19.5 + 5;
|
||||||
|
display_thickness = 8;
|
||||||
|
display_window_layers = 3;
|
||||||
|
display_window_thickness = display_window_layers * printer_layer_height;
|
||||||
|
display_window_depth = 1;
|
||||||
|
display_pos = [[10.93,39.44],[10.93,59.76]];
|
||||||
|
display_dim = [25.4,19,display_thickness];
|
||||||
|
display_tolerance = 0.25;
|
||||||
|
xdim = 75; //placeholder
|
||||||
|
ydim = 115;
|
||||||
|
zdim = display_thickness + display_window_depth;
|
||||||
|
yoff = -10;
|
||||||
|
|
||||||
|
// MAX IC keepout
|
||||||
|
max_pos = [47.20,55.95]; // centered
|
||||||
|
max_dim = [10,34,4];
|
||||||
|
|
||||||
|
// Control PCB
|
||||||
|
pcb_dim = [54.8,82.29,1.6];
|
||||||
|
pcb_pos = [
|
||||||
|
(xdim / 2) - dial_pos.x,
|
||||||
|
(ydim / 2) - (pcb_dim.y / 2) + 5,
|
||||||
|
zdim
|
||||||
|
];
|
||||||
|
diffuse_inter_digit=12.7;
|
||||||
|
diffuse_xoff1 = 1;
|
||||||
|
diffuse_xoff2 = diffuse_xoff1 + diffuse_inter_digit;
|
||||||
|
diffuse_yoff = 2.5;
|
||||||
|
|
||||||
|
mounting_holes = [
|
||||||
|
[3.31,3.08],
|
||||||
|
[49.78,35.05],
|
||||||
|
[51.01,5.08],
|
||||||
|
[3.81,78.81],
|
||||||
|
[51.01,78.81]
|
||||||
|
];
|
||||||
|
|
||||||
|
// ESP Backpack
|
||||||
|
esp_header_dim = [3,38,3];
|
||||||
|
esp_header_offset = 6;
|
||||||
|
esp_pos = [23.43,19.59,pcb_dim.z+esp_header_dim.z];
|
||||||
|
esp_dim = [48,26,4];
|
||||||
|
|
||||||
|
mounting_stem_r = 8.75/2;
|
||||||
|
relay_mounting_stem_r = 7.75/2;
|
||||||
|
mounting_hole_r = 2.75/2; //for M2 screws
|
||||||
|
mounting_hole_depth = 5; //for 6mm long screws
|
||||||
|
mounting_stem_support_height = zdim;
|
||||||
|
mounting_stem_support_base = zdim;
|
||||||
|
mounting_stem_support_thickness = 2;
|
||||||
|
|
||||||
|
hook_dim = [3,20,30];
|
||||||
|
hook_cut_pos = [-1,10,3];
|
||||||
|
hook_cut_dim = [3, 10];
|
||||||
|
hook_cut_height = 20;
|
||||||
|
hook_cut_angle = 2;
|
||||||
|
|
||||||
|
// RELAY BOARD
|
||||||
|
|
||||||
|
relay_dim = [41.58,62.22,1.6];
|
||||||
|
relay_pos = [(jbox_dim.x / 2) - (relay_dim.x / 2),
|
||||||
|
jbox_mount_dim.y + 7,
|
||||||
|
-9.5];
|
||||||
|
relay_mounting_holes = [
|
||||||
|
[3.81,3.81],
|
||||||
|
[38.1,3.81],
|
||||||
|
[3.81,58.65],
|
||||||
|
[38.1,58.65]
|
||||||
|
];
|
||||||
|
relay_cover_height = 15.0;
|
||||||
|
relay_cover_thickness = 1.5;
|
||||||
|
relay_cover_mount_stem_r = 3.75;
|
||||||
|
relay_cover_mount_hole_r = 1.9;
|
||||||
|
relay_cover_mount_thickness = 1;
|
||||||
|
relay_sidewalls = 1.5; //TODO, merge this with thickness
|
||||||
|
relay_pcb_inset = 5.5;
|
||||||
|
relay_threaded_insert_depth = 8; //For M2x8x3.5 inserts
|
||||||
|
// NOTE: the following amount of the threaded brass insert should
|
||||||
|
// be left protruding:
|
||||||
|
// relay_pcb_inset - relay_dim.z = 5.5 - 1.6 = 3.9
|
||||||
|
|
||||||
|
// array of tuples, [pos,length]
|
||||||
|
// relay_conn_openings = [
|
||||||
|
// [8.0,9.0],
|
||||||
|
// [32.0,4],
|
||||||
|
// [42.5,4]
|
||||||
|
// ];
|
||||||
|
relay_actap_pos = [ [relay_dim.x-3.81,34.29],[relay_dim.x-3.81,44.45] ];
|
||||||
|
relay_passthrough_pos = [6.35 - 2,13.7 - 1];
|
||||||
|
relay_passthrough_dim = [4+2,8+2,10];
|
||||||
|
relay_conn_height=relay_pcb_inset - relay_dim.z;
|
||||||
|
|
||||||
|
// DHT SENSOR
|
||||||
|
dht_dim = [20.2,16.4,9.4];
|
||||||
|
dht_pos = [xdim - dht_dim.x - thickness - 11,
|
||||||
|
thickness,
|
||||||
|
thickness - 1];
|
||||||
|
dht_slot_dim = [1.5,dht_dim.y + thickness,dht_dim.z];
|
||||||
|
dht_slot_spacing = 1.5;
|
||||||
|
|
||||||
|
// FACEPLATE HOOKS
|
||||||
|
face_hook_tol = 0.25;
|
||||||
|
face_hook_thickness = 3;
|
||||||
|
face_hook_width = 15;
|
||||||
|
face_hook_jbox_clearance = 2;
|
||||||
|
face_hook_dim_4 = [ 2,15, 10];
|
||||||
|
face_hook_overreach = (xdim / 2) - (jbox_dim.x / 2) - face_hook_dim_4.x - face_hook_tol;
|
||||||
|
face_hook_dim_1 = [12,
|
||||||
|
face_hook_width,
|
||||||
|
thickness];
|
||||||
|
face_hook_dim_2 = [ thickness,
|
||||||
|
face_hook_width,
|
||||||
|
-relay_pos.z];
|
||||||
|
face_hook_dim_3 = [face_hook_overreach + face_hook_jbox_clearance,
|
||||||
|
15,
|
||||||
|
1.5];
|
||||||
|
face_hook_slot_dim = [2 + 2, 15/2 + 1,3];
|
||||||
|
face_hook_slot_pos = [-1,15/2,4];
|
||||||
|
face_hook_pos = [
|
||||||
|
[8, 70], // left side
|
||||||
|
[8, 70] // right side
|
||||||
|
];
|
||||||
|
face_hook_tab_dim = [3,
|
||||||
|
8,
|
||||||
|
face_hook_slot_dim.z - (face_hook_tol * 2)];
|
||||||
|
|
||||||
|
// BEZEL
|
||||||
|
|
||||||
|
bezel_r = 5;
|
||||||
|
|
||||||
|
// MODULES
|
||||||
|
|
||||||
|
module mounting_stem(depth, stem_r = mounting_stem_r, hole_r = mounting_hole_r) {
|
||||||
|
difference() {
|
||||||
|
linear_extrude(depth) {
|
||||||
|
circle(stem_r);
|
||||||
|
}
|
||||||
|
translate([0,0,2]) {
|
||||||
|
linear_extrude(depth + 1) {
|
||||||
|
circle(hole_r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// stem_support(0);
|
||||||
|
// stem_support(90);
|
||||||
|
// stem_support(180);
|
||||||
|
// stem_support(270);
|
||||||
|
}
|
||||||
|
|
||||||
|
//support triangle
|
||||||
|
support_points = [
|
||||||
|
[0,0],
|
||||||
|
[0, mounting_stem_support_height],
|
||||||
|
[mounting_stem_support_base, 0]
|
||||||
|
];
|
||||||
|
support_paths = [[0, 1, 2]];
|
||||||
|
|
||||||
|
module stem_support(rotation) {
|
||||||
|
rotate([90,0,rotation]) {
|
||||||
|
translate([mounting_stem_r - 1,0,-mounting_stem_support_thickness / 2]) {
|
||||||
|
linear_extrude(mounting_stem_support_thickness) {
|
||||||
|
polygon(points=support_points, paths=support_paths);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
@@ -0,0 +1,248 @@
|
|||||||
|
include <enclosure.h>
|
||||||
|
use <PSU.scad>
|
||||||
|
|
||||||
|
//*** DIMENSIONS ***//
|
||||||
|
|
||||||
|
//*** ASSEMBLY ***//
|
||||||
|
|
||||||
|
if (render_supports) {
|
||||||
|
supports();
|
||||||
|
} else {
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
if (render_placeholders) {
|
||||||
|
placeholder_board();
|
||||||
|
*color("grey", 0.5) placeholder_jbox();
|
||||||
|
}
|
||||||
|
color("cyan") jbox_mounting_ears();
|
||||||
|
*color("white") relay_plate();
|
||||||
|
*color("blue") label();
|
||||||
|
*color("pink") sidewalls();
|
||||||
|
*color("cyan") face_hooks();
|
||||||
|
}
|
||||||
|
*color("red") relay_passthrough();
|
||||||
|
translate([0,0,-1])
|
||||||
|
*relay_mounting_stems(0);
|
||||||
|
}
|
||||||
|
*relay_mounting_stems(mounting_hole_r);
|
||||||
|
}
|
||||||
|
|
||||||
|
psu_case_attached();
|
||||||
|
|
||||||
|
*color("grey") placeholder_jbox();
|
||||||
|
|
||||||
|
//*** MODULES ***//
|
||||||
|
|
||||||
|
module psu_case_attached() {
|
||||||
|
translate([18.155/2+1,30,-24.0])
|
||||||
|
rotate([0,0,90])
|
||||||
|
psu_case();
|
||||||
|
}
|
||||||
|
|
||||||
|
module sidewalls() {
|
||||||
|
rotate([0,180,0]) {
|
||||||
|
translate([ -relay_dim.x/2,
|
||||||
|
relay_pos.y,
|
||||||
|
-relay_pos.z]) {
|
||||||
|
difference() {
|
||||||
|
cube(size=[ relay_dim.x,
|
||||||
|
relay_dim.y,
|
||||||
|
mounting_hole_depth]);
|
||||||
|
translate([ relay_sidewalls,
|
||||||
|
relay_sidewalls,
|
||||||
|
-1]) {
|
||||||
|
cube(size=[ relay_dim.x - (2 * relay_sidewalls),
|
||||||
|
relay_dim.y - (2 * relay_sidewalls),
|
||||||
|
mounting_hole_depth + 2]);
|
||||||
|
}
|
||||||
|
for(i = [0:len(relay_mounting_holes)-1]) {
|
||||||
|
translate(relay_mounting_holes[i]) {
|
||||||
|
mounting_stem(mounting_hole_depth + thickness,
|
||||||
|
hole_r = 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module relay_mounting_stems(r) {
|
||||||
|
stem_depth = relay_threaded_insert_depth - relay_pcb_inset + relay_dim.z + 2;
|
||||||
|
translate([jbox_dim.x/2,0,stem_depth]) {
|
||||||
|
rotate([0,0,180]) {
|
||||||
|
translate([relay_pos.x, -relay_pos.y - relay_dim.y, relay_pos.z]) {
|
||||||
|
for(i = [0:len(relay_mounting_holes)-1]) {
|
||||||
|
translate(relay_mounting_holes[i]) {
|
||||||
|
translate([0,0, 0]) {
|
||||||
|
rotate([180,0,0]) {
|
||||||
|
mounting_stem(stem_depth, stem_r = relay_mounting_stem_r, hole_r = r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module supports() {
|
||||||
|
relay_mounting_stems(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
module label() {
|
||||||
|
translate([ relay_pos.x + 0,
|
||||||
|
relay_pos.y + 10,
|
||||||
|
relay_pos.z+thickness])
|
||||||
|
rotate([0,0,90])
|
||||||
|
linear_extrude(0.75)
|
||||||
|
text(label_text, size=label_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
module face_hooks() {
|
||||||
|
for(i = [0:len(face_hook_pos[1])-1]) {
|
||||||
|
translate([0,face_hook_pos[1][i],relay_pos.z]) {
|
||||||
|
face_hook_right();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = [0:len(face_hook_pos[0])-1]) {
|
||||||
|
translate([0,face_hook_pos[0][i],relay_pos.z]) {
|
||||||
|
face_hook_left();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module face_hook_left() {
|
||||||
|
mirror([1,0,0])
|
||||||
|
face_hook_right();
|
||||||
|
}
|
||||||
|
|
||||||
|
module face_hook_right() {
|
||||||
|
//difference() {
|
||||||
|
translate([jbox_dim.x/2 - face_hook_dim_1.x - face_hook_jbox_clearance - thickness,0,0]) {
|
||||||
|
if (!render_supports) {
|
||||||
|
cube(size=face_hook_dim_1);
|
||||||
|
}
|
||||||
|
translate([face_hook_dim_1.x,0,0]) {
|
||||||
|
cube(size=face_hook_dim_2);
|
||||||
|
translate([0,0,face_hook_dim_2.z]) {
|
||||||
|
cube(size=face_hook_dim_3);
|
||||||
|
translate([face_hook_dim_3.x,0,0]) {
|
||||||
|
difference() {
|
||||||
|
cube(size=face_hook_dim_4);
|
||||||
|
translate(face_hook_slot_pos) {
|
||||||
|
cube(size=face_hook_slot_dim);
|
||||||
|
translate([ 0,
|
||||||
|
12,
|
||||||
|
-5.5]) {
|
||||||
|
rotate([45,0,0]) {
|
||||||
|
cube(size=10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module placeholder_jbox() {
|
||||||
|
translate([-jbox_dim.x/2,0,-jbox_dim.z]) {
|
||||||
|
difference() {
|
||||||
|
translate([-3,-3,-3])
|
||||||
|
cube([jbox_dim.x + 6,
|
||||||
|
jbox_dim.y + 6,
|
||||||
|
jbox_dim.z + 3]);
|
||||||
|
cube([jbox_dim.x, jbox_dim.y, jbox_dim.z + 1]);
|
||||||
|
}
|
||||||
|
translate([(jbox_dim.x/2) - (jbox_mount_dim.x/2), 0, 0]) {
|
||||||
|
cube(jbox_mount_dim);
|
||||||
|
translate([0,jbox_dim.y - jbox_mount_dim.y ,0])
|
||||||
|
cube(jbox_mount_dim);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module placeholder_board() {
|
||||||
|
rotate([0,180,0])
|
||||||
|
translate([-jbox_dim.x/2,0,2 * -relay_pos.z + relay_pcb_inset - relay_dim.z])
|
||||||
|
color("green") {
|
||||||
|
translate(relay_pos) {
|
||||||
|
difference() {
|
||||||
|
cube(size=relay_dim);
|
||||||
|
for(i = [0:len(relay_mounting_holes)-1]) {
|
||||||
|
translate([0,0,-1])
|
||||||
|
translate(relay_mounting_holes[i]) {
|
||||||
|
linear_extrude(zdim) {
|
||||||
|
circle(r=2.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module relay_plate() {
|
||||||
|
rotate([0,180,0])
|
||||||
|
translate([0,0,2 * -relay_pos.z - thickness])
|
||||||
|
translate([-jbox_dim.x/2,0,0])
|
||||||
|
translate([relay_pos.x - relay_cover_thickness,relay_pos.y,relay_pos.z]) {
|
||||||
|
cube(size=[relay_dim.x + (2 * relay_cover_thickness), relay_dim.y, thickness]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module relay_passthrough() {
|
||||||
|
rotate([0,180,0])
|
||||||
|
translate([0,0,2 * -relay_pos.z - thickness ])
|
||||||
|
translate([-jbox_dim.x/2,0,0])
|
||||||
|
translate([relay_pos.x - relay_cover_thickness,relay_pos.y,relay_pos.z]) {
|
||||||
|
translate([ relay_dim.x - relay_passthrough_pos.x,
|
||||||
|
relay_dim.y - relay_passthrough_pos.y] ) {
|
||||||
|
cube(size=relay_passthrough_dim, center=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module jbox_mounting_ears() {
|
||||||
|
translate([0,jbox_hole_inset,0]) {
|
||||||
|
jbox_mounting_ear();
|
||||||
|
translate([0,jbox_screw_distance,0]) {
|
||||||
|
rotate([0,0,180]) {
|
||||||
|
jbox_mounting_ear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
translate([-jbox_ear_width/2, jbox_mount_dim.y, relay_pos.z]) {
|
||||||
|
difference() {
|
||||||
|
cube([jbox_ear_width,
|
||||||
|
jbox_dim.y - (2 * jbox_mount_dim.y) - 2,
|
||||||
|
thickness]);
|
||||||
|
translate([15,21.5,-5])
|
||||||
|
cube([4, 6,10]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module jbox_mounting_ear() {
|
||||||
|
linear_extrude(jbox_ear_thickness) {
|
||||||
|
difference() {
|
||||||
|
intersection() {
|
||||||
|
square([jbox_ear_width, 12], center=true);
|
||||||
|
translate([0, jbox_ear_pleatau, 0]) {
|
||||||
|
rotate([0,0,45]) {
|
||||||
|
square([50,50]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
circle(r=jbox_screw_dia);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
translate([-jbox_ear_width/2, jbox_mount_dim.y - jbox_hole_inset, relay_pos.z]) {
|
||||||
|
cube([jbox_ear_width, thickness, -relay_pos.z + jbox_ear_thickness]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module fplate_mount() {
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user