From d187312cd328d79faad527f72ce3a925497f3f9a Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Fri, 5 Sep 2025 14:46:24 -0500 Subject: [PATCH] create new "ergo" layout based on a 30mm WASD layout for both left and right hands, these layouts have a WASD layout as a base, with the left and right sides pulled slightly down from the center, and with 8+ button layouts pulling down even further to match the arg for the pinky finger locations. I've been playing with this for a while, and think I like it, at least like it enough to commit it Signed-off-by: Brian S. Stephan --- src/components.scad | 70 +++++++++++++++++++ ...rgo-wasd-five-30mm-and-ergo-nine-30mm.scad | 24 +++++++ .../ergo-nine-plus-aux-button-with-mount.scad | 15 ++++ .../inset/ergo-nine-plus-aux-button.scad | 17 +++++ ...er-and-ergo-wasd-five-panel-with-oled.scad | 18 +++++ .../inset/lever-and-ergo-wasd-five-panel.scad | 18 +++++ 6 files changed, 162 insertions(+) create mode 100644 src/misc/decorative-plate-ergo-wasd-five-30mm-and-ergo-nine-30mm.scad create mode 100644 src/panels/inset/ergo-nine-plus-aux-button-with-mount.scad create mode 100644 src/panels/inset/ergo-nine-plus-aux-button.scad create mode 100644 src/panels/inset/lever-and-ergo-wasd-five-panel-with-oled.scad create mode 100644 src/panels/inset/lever-and-ergo-wasd-five-panel.scad diff --git a/src/components.scad b/src/components.scad index acc41bc..ef56360 100644 --- a/src/components.scad +++ b/src/components.scad @@ -510,6 +510,76 @@ module sega_2p_eleven() { translate([sega_2p_column_5_offset, -19-9-11, 0]) sega_2p_p1(); } +// BSS ERGO - 30mm + +module ergo_wasd_30mm() { + button_30mm_hole(); // W + translate([0, -36, 0]) button_30mm_hole(); // S + translate([-34.5, -36-9, 0]) button_30mm_hole(); // A + translate([34.5, -36-9, 0]) button_30mm_hole(); // D +} + +module ergo_six_30mm() { + ergo_wasd_30mm(); + translate([-34.5, -9, 0]) button_30mm_hole(); // left of W + translate([34.5, -9, 0]) button_30mm_hole(); // right of W +} + +module ergo_eight_30mm() { + ergo_six_30mm(); + translate([34.5*1.9, -9*3, 0]) button_30mm_hole(); // top right of right of W + translate([34.5*1.9, -36-9*3, 0]) button_30mm_hole(); // right of D +} + +module ergo_wasd_five_30mm() { + translate([-51.75, 65.5, 0]) rotate([0, 0, 10]) { + ergo_wasd_30mm(); + } + translate([0, 0, 0]) sega_2p_nine_thumb_button(); +} + +module ergo_nine_30mm() { + translate([-51.75, 65.5, 0]) rotate([0, 0, 10]) { + ergo_eight_30mm(); + } + translate([0, 0, 0]) sega_2p_nine_thumb_button(); +} + +// untested +// BSS ERGO - 24mm +/* module ergo_wasd() { */ +/* button_24mm_hole(); // W */ +/* translate([0, -27, 0]) button_24mm_hole(); // S */ +/* translate([-26, -27-7, 0]) button_24mm_hole(); // A */ +/* translate([26, -27-7, 0]) button_24mm_hole(); // D */ +/* } */ + +/* module ergo_six() { */ +/* ergo_wasd(); */ +/* translate([-26, -7, 0]) button_24mm_hole(); // left of W */ +/* translate([26, -7, 0]) button_24mm_hole(); // right of W */ +/* } */ + +/* module ergo_eight() { */ +/* ergo_six(); */ +/* translate([26*2-2, -7*3, 0]) button_24mm_hole(); // top right of right of W */ +/* translate([26*2-2, -27-7*3, 0]) button_24mm_hole(); // top right of right of W */ +/* } */ + +/* module ergo_wasd_five() { */ +/* translate([-63.25, 65.5, 0]) rotate([0, 0, 10]) { */ +/* ergo_wasd(); */ +/* } */ +/* translate([0, 0, 0]) sega_2p_nine_thumb_button(); */ +/* } */ + +/* module ergo_nine() { */ +/* translate([-63.25, 65.5, 0]) rotate([0, 0, 10]) { */ +/* ergo_eight(); */ +/* } */ +/* translate([0, 0, 0]) sega_2p_nine_thumb_button(); */ +/* } */ + module shiokenstar() { translate([-172, 32, 0]) dir_arc_24mm_directionals(); sega_2p(); diff --git a/src/misc/decorative-plate-ergo-wasd-five-30mm-and-ergo-nine-30mm.scad b/src/misc/decorative-plate-ergo-wasd-five-30mm-and-ergo-nine-30mm.scad new file mode 100644 index 0000000..3ac992d --- /dev/null +++ b/src/misc/decorative-plate-ergo-wasd-five-30mm-and-ergo-nine-30mm.scad @@ -0,0 +1,24 @@ +/* + * SPDX-FileCopyrightText: © 2025 Brian S. Stephan + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +include +include + +module ergo_wasd_five_30mm_and_ergo_nine_30mm_decorative_plate() { + difference() { + // get a 2mm slice of the jumbo decorative button cylinders + union() { + translate([-panel_x/2, 0, -70]) mirror([1, 0, 0]) ergo_wasd_five_30mm(); + translate([panel_x/2, 0, -70]) ergo_nine_30mm(); + } + translate([0, 0, -100]) cube([500, 500, 198], center=true); + translate([0, 0, 100]) cube([500, 500, 198], center=true); + // cut out the normal holes + translate([-panel_x/2, 0, -1]) mirror([1, 0, 0]) ergo_wasd_five_30mm(); + translate([panel_x/2, 0, -1]) ergo_nine_30mm(); + } +} + +ergo_wasd_five_30mm_and_ergo_nine_30mm_decorative_plate(); diff --git a/src/panels/inset/ergo-nine-plus-aux-button-with-mount.scad b/src/panels/inset/ergo-nine-plus-aux-button-with-mount.scad new file mode 100644 index 0000000..39bfb4a --- /dev/null +++ b/src/panels/inset/ergo-nine-plus-aux-button-with-mount.scad @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: © 2025 Brian S. Stephan + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +include +include +use + +module ergo_nine_plus_aux_button_panel_with_mount() { + ergo_nine_plus_aux_button_panel(); + translate([30, -50, -(panel_z/2) - 3]) pcb_mount(); +} + +ergo_nine_plus_aux_button_panel_with_mount(); diff --git a/src/panels/inset/ergo-nine-plus-aux-button.scad b/src/panels/inset/ergo-nine-plus-aux-button.scad new file mode 100644 index 0000000..47cf744 --- /dev/null +++ b/src/panels/inset/ergo-nine-plus-aux-button.scad @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: © 2025 Brian S. Stephan + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +include +include + +module ergo_nine_plus_aux_button_panel() { + difference() { + panel(); + ergo_nine_30mm(); + translate([89, 30, 0]) button_24mm_hole(); + } +} + +ergo_nine_plus_aux_button_panel(); diff --git a/src/panels/inset/lever-and-ergo-wasd-five-panel-with-oled.scad b/src/panels/inset/lever-and-ergo-wasd-five-panel-with-oled.scad new file mode 100644 index 0000000..aaff443 --- /dev/null +++ b/src/panels/inset/lever-and-ergo-wasd-five-panel-with-oled.scad @@ -0,0 +1,18 @@ +/* + * SPDX-FileCopyrightText: © 2025 Brian S. Stephan + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +include +include +use + +module lever_and_ergo_wasd_five_panel_with_oled() { + difference() { + lever_and_ergo_wasd_five_panel(); + translate([0, -(panel_y/2 - 22), 0]) adafruit_pid_326_oled_ssd1306_mount_cutout(); + } + translate([0, -(panel_y/2 - 22), 0]) adafruit_pid_326_oled_ssd1306_mount(); +} + +lever_and_ergo_wasd_five_panel_with_oled(); diff --git a/src/panels/inset/lever-and-ergo-wasd-five-panel.scad b/src/panels/inset/lever-and-ergo-wasd-five-panel.scad new file mode 100644 index 0000000..d36aaf2 --- /dev/null +++ b/src/panels/inset/lever-and-ergo-wasd-five-panel.scad @@ -0,0 +1,18 @@ +/* + * SPDX-FileCopyrightText: © 2025 Brian S. Stephan + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +include +include + +module lever_and_ergo_wasd_five_panel() { + difference() { + panel(); + mirror([1, 0, 0]) ergo_wasd_five_30mm(); + translate([(-panel_x/2)+55, (panel_y/2)-75, 0]) levermountholes(); + translate([(-panel_x/2)+55, (panel_y/2)-75, 0]) levermountcountersinks(); + } +} + +lever_and_ergo_wasd_five_panel();