Add countersinks and recessed screw holes to extended GFCI plates

- Add 5mm diameter, 2mm deep countersinks around outer screw holes (front face)
- Make main pill-shaped screw holes recessed from back (3.5mm deep)
- Leaves 1.5mm solid wall on front face for clean appearance
- Add STL exports for all light switch plate variants

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Cal Corum 2025-12-24 14:50:27 -06:00
parent 38a723b01b
commit de88c8b794
8 changed files with 63 additions and 17 deletions

BIN
light-switches/blank.stl Normal file

Binary file not shown.

View File

@ -35,12 +35,18 @@ screw_holes_enabled = true;
screw_hole_height = 6.0; // mm - vertical dimension (was diameter)
screw_hole_width = 14.0; // mm - horizontal dimension (250% of height)
screw_hole_spacing = 83.3; // mm - distance between main screw holes
main_screw_recess_depth = 3.5; // mm - depth from back face (Z=5), leaves solid wall on front
// Outer screw holes (smaller, beyond the main holes)
outer_screw_holes_enabled = true;
outer_screw_hole_offset = 6.35; // mm (0.25 inches) beyond main holes
outer_screw_hole_diameter = 2.68; // mm (67% of main hole diameter)
// Countersink around outer screw holes (front face)
countersink_enabled = true;
countersink_diameter = 5.0; // mm - total diameter of recess
countersink_depth = 2.0; // mm - depth of recess into front face
/* [Resolution] */
$fn = 64;
@ -100,25 +106,42 @@ module paddle_opening_3d() {
module screw_holes() {
if (screw_holes_enabled) {
// Main screw holes: recessed from back face (positive Z), solid wall on front
main_screw_start_z = plate_thickness - main_screw_recess_depth;
// Top main screw hole (pill-shaped, horizontal)
translate([0, screw_hole_spacing/2, -0.1])
linear_extrude(height = plate_thickness + 0.2)
translate([0, screw_hole_spacing/2, main_screw_start_z])
linear_extrude(height = main_screw_recess_depth + 0.1)
rect([screw_hole_width, screw_hole_height], rounding=screw_hole_height/2);
// Bottom main screw hole (pill-shaped, horizontal)
translate([0, -screw_hole_spacing/2, -0.1])
linear_extrude(height = plate_thickness + 0.2)
translate([0, -screw_hole_spacing/2, main_screw_start_z])
linear_extrude(height = main_screw_recess_depth + 0.1)
rect([screw_hole_width, screw_hole_height], rounding=screw_hole_height/2);
}
if (outer_screw_holes_enabled) {
// Top outer screw hole (above top main hole)
translate([0, screw_hole_spacing/2 + outer_screw_hole_offset, -0.1])
cylinder(h = plate_thickness + 0.2, d = outer_screw_hole_diameter);
translate([0, screw_hole_spacing/2 + outer_screw_hole_offset, 0]) {
// Through-hole
translate([0, 0, -0.1])
cylinder(h = plate_thickness + 0.2, d = outer_screw_hole_diameter);
// Countersink on front face
if (countersink_enabled)
translate([0, 0, -0.1])
cylinder(h = countersink_depth + 0.1, d = countersink_diameter);
}
// Bottom outer screw hole (below bottom main hole)
translate([0, -screw_hole_spacing/2 - outer_screw_hole_offset, -0.1])
cylinder(h = plate_thickness + 0.2, d = outer_screw_hole_diameter);
translate([0, -screw_hole_spacing/2 - outer_screw_hole_offset, 0]) {
// Through-hole
translate([0, 0, -0.1])
cylinder(h = plate_thickness + 0.2, d = outer_screw_hole_diameter);
// Countersink on front face
if (countersink_enabled)
translate([0, 0, -0.1])
cylinder(h = countersink_depth + 0.1, d = countersink_diameter);
}
}
}

View File

@ -32,11 +32,17 @@ screw_holes_enabled = true;
screw_hole_height = 6.0; // mm - vertical dimension (was diameter)
screw_hole_width = 14.0; // mm - horizontal dimension (250% of height)
screw_hole_spacing = 83.3; // mm - distance between main screw holes
main_screw_recess_depth = 3.5; // mm - depth from back face (Z=5), leaves solid wall on front
// Outer screw holes (smaller, beyond the main holes)
outer_screw_holes_enabled = true;
outer_screw_hole_offset = 6.35; // mm (0.25 inches) beyond main holes
outer_screw_hole_diameter = 2.68; // mm (67% of main hole diameter)
outer_screw_hole_diameter = 3.175; // mm (67% of main hole diameter)
// Countersink around outer screw holes (front face)
countersink_enabled = true;
countersink_diameter = 5.0; // mm - total diameter of recess
countersink_depth = 2.0; // mm - depth of recess into front face
/* [Resolution] */
$fn = 64;
@ -94,25 +100,42 @@ module paddle_opening_3d() {
module screw_holes() {
if (screw_holes_enabled) {
// Main screw holes: recessed from back face (positive Z), solid wall on front
main_screw_start_z = plate_thickness - main_screw_recess_depth;
// Top main screw hole (pill-shaped, horizontal)
translate([0, screw_hole_spacing/2, -0.1])
linear_extrude(height = plate_thickness + 0.2)
translate([0, screw_hole_spacing/2, main_screw_start_z])
linear_extrude(height = main_screw_recess_depth + 0.1)
rect([screw_hole_width, screw_hole_height], rounding=screw_hole_height/2);
// Bottom main screw hole (pill-shaped, horizontal)
translate([0, -screw_hole_spacing/2, -0.1])
linear_extrude(height = plate_thickness + 0.2)
translate([0, -screw_hole_spacing/2, main_screw_start_z])
linear_extrude(height = main_screw_recess_depth + 0.1)
rect([screw_hole_width, screw_hole_height], rounding=screw_hole_height/2);
}
if (outer_screw_holes_enabled) {
// Top outer screw hole (above top main hole)
translate([0, screw_hole_spacing/2 + outer_screw_hole_offset, -0.1])
cylinder(h = plate_thickness + 0.2, d = outer_screw_hole_diameter);
translate([0, screw_hole_spacing/2 + outer_screw_hole_offset, 0]) {
// Through-hole
translate([0, 0, -0.1])
cylinder(h = plate_thickness + 0.2, d = outer_screw_hole_diameter);
// Countersink on front face
if (countersink_enabled)
translate([0, 0, -0.1])
cylinder(h = countersink_depth + 0.1, d = countersink_diameter);
}
// Bottom outer screw hole (below bottom main hole)
translate([0, -screw_hole_spacing/2 - outer_screw_hole_offset, -0.1])
cylinder(h = plate_thickness + 0.2, d = outer_screw_hole_diameter);
translate([0, -screw_hole_spacing/2 - outer_screw_hole_offset, 0]) {
// Through-hole
translate([0, 0, -0.1])
cylinder(h = plate_thickness + 0.2, d = outer_screw_hole_diameter);
// Countersink on front face
if (countersink_enabled)
translate([0, 0, -0.1])
cylinder(h = countersink_depth + 0.1, d = countersink_diameter);
}
}
}

Binary file not shown.

Binary file not shown.

BIN
light-switches/outlet.stl Normal file

Binary file not shown.

Binary file not shown.

BIN
light-switches/switch.stl Normal file

Binary file not shown.