From ccad5ff1c05d16655555f2cb95ab8ad8e80494db Mon Sep 17 00:00:00 2001 From: Daniele Verducci Date: Sun, 4 Jan 2026 18:35:53 +0100 Subject: [PATCH] Modeled and test-fitted keycaps --- enclosure/box.scad | 2 +- enclosure/fabula_enclosure.scad | 2 ++ enclosure/keys.scad | 37 +++++++++++++++++++++++++++++++++ enclosure/test_fit.scad | 5 +++++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 enclosure/keys.scad diff --git a/enclosure/box.scad b/enclosure/box.scad index 8e3525d..ba952f6 100644 --- a/enclosure/box.scad +++ b/enclosure/box.scad @@ -4,7 +4,7 @@ // Global dimensions, change here width = 180; height = 90; -depth = 40; +depth = 45; screw_diameter = 3; // Internal global variables diff --git a/enclosure/fabula_enclosure.scad b/enclosure/fabula_enclosure.scad index 74eb9a7..77c2c6d 100644 --- a/enclosure/fabula_enclosure.scad +++ b/enclosure/fabula_enclosure.scad @@ -21,6 +21,7 @@ module fabula_enclosure_bottom() { // Cutouts translate([98.4, 29, 17]) rotate([0, -90, 0]) usb_cutout(); + // TODO: Speaker cutout, lace hanger, switch cutout } } @@ -30,6 +31,7 @@ module fabula_enclosure_top() { // Supports // Cutouts + } translate([0, -60, 0]) rotate([180, 0, 0]) fabula_enclosure_bottom(); diff --git a/enclosure/keys.scad b/enclosure/keys.scad new file mode 100644 index 0000000..4820bd9 --- /dev/null +++ b/enclosure/keys.scad @@ -0,0 +1,37 @@ +// Contains the keycaps + +distance_from_key_to_enclosure = 6; +enclosure_hole_depth = 6; +button_height_above_enclosure_surface = 3; + +module keycap() { + stopper_flange_height = 2; + // Keycap + cylinder(h = enclosure_hole_depth + stopper_flange_height + button_height_above_enclosure_surface, d = 18, $fn = 128); + // Stopper flange + cylinder(h = stopper_flange_height, d = 24); + // Stem + stem_height = distance_from_key_to_enclosure - stopper_flange_height; + translate([0, 0, -stem_height / 2]){ + difference() { + cube([5, 3.89, stem_height], true); + cube([1, 3.9, stem_height + 0.1], true); + cube([3.9, 1, stem_height + 0.1], true); + } + } +} + +module next_keycap() { + keycap(); +} +module prev_keycap() { + keycap(); +} +module vol_up_keycap() { + keycap(); +} +module vol_down_keycap() { + keycap(); +} + +keycap(); \ No newline at end of file diff --git a/enclosure/test_fit.scad b/enclosure/test_fit.scad index 5bec6fa..6443779 100644 --- a/enclosure/test_fit.scad +++ b/enclosure/test_fit.scad @@ -2,6 +2,7 @@ use use +use module test_fit_components() { @@ -13,6 +14,10 @@ module test_fit_components() { // Components that require cutout on external shell translate([-29, -71.5, 1]) rotate([0, 0, 90]) li_ion_4056_charger_module(); translate([-5, -92, 10]) rotate([90, 0, 0]) switch(); + translate([-13.4, -20.1, 43]) vol_up_keycap(); + translate([12.6, -35.6, 43]) next_keycap(); + translate([-23.4, -44.6, 43]) prev_keycap(); + translate([2.05, -61.05, 43]) vol_down_keycap(); } test_fit_components();