Compare commits

..

5 Commits

Author SHA1 Message Date
344de2c84f
standalone frame, with tweaks to the frame as a consequence
* frame width has been reduced in order to leave more space and have
  sunken buttons somewhat accessible
* the cutout for neutrik mounts has been reduced and moved into the
  holes themselves, to do this more modularly and restore some support
2023-08-26 21:57:12 -05:00
a8d02f9229
squish a decent all buttons layout onto one panel
this uses the new raised panel look, I'm trying it out but haven't
updated the other top panels yet until I'm sure I like it --- it'll mean
a lot of chopping
2023-08-26 14:48:01 -05:00
af38f0a580
move top plate holes into reusable module 2023-08-26 14:42:58 -05:00
19fa31b425
a one-panel 24mm dir arc + action buttons layout
(you can fit 6! not bad!)
2023-08-25 15:36:41 -05:00
6ca57615e4
solve for 24mm/30mm snap-ins 2023-08-25 15:36:38 -05:00
5 changed files with 159 additions and 33 deletions

View File

@ -45,13 +45,10 @@ What you'll need beyond these objects:
This is a living repository, and as such, there are likely issues with the objects, known or otherwise. Be aware: This is a living repository, and as such, there are likely issues with the objects, known or otherwise. Be aware:
* The top panel is 5mm tall and doesn't have an inset; snap-in buttons likely do not fit.
* A composition error made the frame 5mm shorter than intended and wasn't noticed until I printed everything: * A composition error made the frame 5mm shorter than intended and wasn't noticed until I printed everything:
* Some levers don't have enough clearance in the case. * Some levers don't have enough clearance in the case.
* Buttons with traditional quick connects are a *very* tight fit, you will probably need to bend pins. * Buttons with traditional quick connects are a *very* tight fit, you will probably need to bend pins.
* The PCB mount position was very tight on the buttons panel; it will probably have to be moved. * The PCB mount position was very tight on the buttons panel; it will probably have to be moved.
* Support for the top plate was removed from the frame due to overhang issues, and now the top plate can bow slightly
with pressure; a new solution needs to be found.
These issues may be fixed in the future; see `TODO.md` for details. These issues may be fixed in the future; see `TODO.md` for details.

View File

@ -7,12 +7,8 @@ Notes for "next time".
* I need at least 5mm, maybe 10mm, more height, to fit some of my levers like the Nobi Bullet * I need at least 5mm, maybe 10mm, more height, to fit some of my levers like the Nobi Bullet
* I couldn't even fit a JLF without the compensations in v1 on the bottom panel * I couldn't even fit a JLF without the compensations in v1 on the bottom panel
* I had to bend the pins a bit on Crown SDB-202s, too * I had to bend the pins a bit on Crown SDB-202s, too
* Top plates are 1-2mm too thick for snap-ins, maybe have a variant with a couple shaved off like with the bottom plate
workaround
* The plates bow a bit on the top when pressure is applied, because there's no support from the frame up there --- * The plates bow a bit on the top when pressure is applied, because there's no support from the frame up there ---
adding 5mm to the frame should leave a couple mm for support to get added back adding 5mm to the frame should leave a couple mm for support to get added back
* PCB mount on `top-panel-dir_arc-plus-w-30mm-plus-one-with-mount.scad` doesn't leave room for a USB cable on the right * PCB mount on `top-panel-dir_arc-plus-w-30mm-plus-one-with-mount.scad` doesn't leave room for a USB cable on the right
hand side hand side
* The panels' connection points could probably be a bit thinner to accommodate more bolts. A 20mm bolt barely clears the
two panels and I don't like that kind of bolt connection.
* Engraving some cosmetic stuff? Or maybe a place to mount other plates? * Engraving some cosmetic stuff? Or maybe a place to mount other plates?

View File

@ -50,6 +50,9 @@ top_plate_x = 175;
top_plate_y = 200; top_plate_y = 200;
top_plate_z = 5; top_plate_z = 5;
// frame interior that supports the top plates
panel_support_width = 5;
// neutrik D screw holes // neutrik D screw holes
neutrik_d_screw_radius = 1.6 + hole_tolerance; neutrik_d_screw_radius = 1.6 + hole_tolerance;
neutrik_d_radius = 12 + hole_tolerance; neutrik_d_radius = 12 + hole_tolerance;
@ -64,14 +67,43 @@ module m4_hole_countersink() {
cylinder(r1=m4_bolt_radius, r2=m4_bolt_countersink_radius, h=3.2, $fn=50, center=true); cylinder(r1=m4_bolt_radius, r2=m4_bolt_countersink_radius, h=3.2, $fn=50, center=true);
} }
module top_plate_holes() {
// holes for mount bolts
translate([77.5, 90, 0]) m4_hole();
translate([77.5, -90, 0]) m4_hole();
translate([-77.5, 90, 0]) m4_hole();
translate([-77.5, -90, 0]) m4_hole();
// holes for mount bolt countersinks
translate([77.5, 90, 2]) m4_hole_countersink();
translate([77.5, -90, 2]) m4_hole_countersink();
translate([-77.5, 90, 2]) m4_hole_countersink();
translate([-77.5, -90, 2]) m4_hole_countersink();
}
module button_24mm_hole() { module button_24mm_hole() {
cylinder(r=small_button_radius, h=100, $fn=50, center=true); cylinder(r=small_button_radius, h=100, $fn=50, center=true);
} }
module button_24mm_hole_for_snapins() {
button_24mm_hole();
// carve out space for snap-ins, leave 3mm
// slagcoin has screw-in nut diameter at 29.5mm, so radius+6 to leave some space
// translation is to leave 3mm thickness in the plate without recentering anything
translate([0, 0, -25]) cylinder(r=small_button_radius+6, h=49, $fn=50, center=true);
}
module button_30mm_hole() { module button_30mm_hole() {
cylinder(r=big_button_radius, h=100, $fn=50, center=true); cylinder(r=big_button_radius, h=100, $fn=50, center=true);
} }
module button_30mm_hole_for_snapins() {
button_30mm_hole();
// carve out space for snap-ins, leave 3mm
// slagcoin has screw-in nut diameter at 36mm, so radius+6 to leave some space
// translation is to leave 3mm thickness in the plate without recentering anything
translate([0, 0, -25]) cylinder(r=big_button_radius+6, h=49, $fn=50, center=true);
}
module frame_hex_bolt_hole() { module frame_hex_bolt_hole() {
scale([1, 1, 2]) cylinder(r=m4_bolt_hex_exterior_radius, h=frame_z, $fn=6, center=true); scale([1, 1, 2]) cylinder(r=m4_bolt_hex_exterior_radius, h=frame_z, $fn=6, center=true);
} }
@ -92,6 +124,7 @@ module neutrik_d_mount() {
neutrik_d_hole(); neutrik_d_hole();
translate([9.5, 12, 0]) neutrik_d_screw_hole(); translate([9.5, 12, 0]) neutrik_d_screw_hole();
translate([-9.5, -12, 0]) neutrik_d_screw_hole(); translate([-9.5, -12, 0]) neutrik_d_screw_hole();
translate([0, 0, 25]) cube([32, 37, 50], center=true);
} }
module m3_mount_post() { module m3_mount_post() {
@ -148,34 +181,40 @@ module base_topplate() {
cube([top_plate_x, top_plate_y, top_plate_z], center=true); cube([top_plate_x, top_plate_y, top_plate_z], center=true);
} }
// this takes the base_topplate and makes it a small frame, putting a larger top plate
module base_topplate_with_raised_overhang() {
// make a frame out of the top plate (and keep the main plate on the center plane)
translate([0, 0, -5]) difference() {
base_topplate();
cube([top_plate_x-(panel_support_width*2), top_plate_y-(panel_support_width*2), top_plate_z*2], center=true);
}
translate([(top_plate_x/2)-10, (top_plate_y/2)-10, -2.5]) resize([0, 0, 10]) frame_mount_column();
translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, -2.5]) resize([0, 0, 10]) frame_mount_column();
translate([(top_plate_x/2)-10, -((top_plate_y/2)-10), -2.5]) resize([0, 0, 10]) frame_mount_column();
translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), -2.5]) resize([0, 0, 10]) frame_mount_column();
// larger top plate
roundedcube([top_plate_x+25, top_plate_y+25, top_plate_z], center=true, radius=1);
}
module topplate() { module topplate() {
difference() { difference() {
base_topplate(); base_topplate();
// holes for mount bolts top_plate_holes();
translate([77.5, 90, 0]) }
m4_hole(); }
translate([77.5, -90, 0])
m4_hole(); module topplate_with_raised_overhang() {
translate([-77.5, 90, 0]) difference() {
m4_hole(); base_topplate_with_raised_overhang();
translate([-77.5, -90, 0]) top_plate_holes();
m4_hole();
// holes for mount bolt countersinks
translate([77.5, 90, 2])
m4_hole_countersink();
translate([77.5, -90, 2])
m4_hole_countersink();
translate([-77.5, 90, 2])
m4_hole_countersink();
translate([-77.5, -90, 2])
m4_hole_countersink();
} }
} }
module frame_box() { module frame_box() {
difference() { difference() {
roundedcube([frame_x, frame_y, frame_z], center=true, radius=3); roundedcube([frame_x, frame_y, frame_z], center=true, radius=3);
cube([frame_x-26, frame_y-26, frame_z+5], center=true); cube([frame_x-(panel_support_width*2), frame_y-(panel_support_width*2), frame_z+5], center=true);
} }
} }
@ -227,16 +266,32 @@ module frame() {
frame_hex_bolt_hole(); frame_hex_bolt_hole();
translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0]) translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0])
frame_hex_bolt_hole(); frame_hex_bolt_hole();
// thin up the mount point to accommodate snap-ins, ethercon adapter
translate([0, 10, 10]) cube([120, 180, 60], center=true);
} }
} }
/* LAYOUTS */ /* LAYOUTS */
// Directional Arc (both hands)
module dir_arc_24mm_combined_6_button() {
button_24mm_hole_for_snapins();
translate([29.5, 0, 0]) button_24mm_hole_for_snapins();
translate([29.5+26.3, -12.9, 0]) button_24mm_hole_for_snapins();
translate([29.5+26.3+15.5+9.7+2.6, 0, 0]) button_24mm_hole_for_snapins();
translate([29.5+26.3+15.5+9.7+2.6+26.9, 10.9, 0]) button_24mm_hole_for_snapins();
translate([29.5+26.3+15.5+9.7+2.6+26.9+29.6, 10.9, 0]) button_24mm_hole_for_snapins();
translate([29.5+26.3+15.5+9.7, -29.4, 0]) button_24mm_hole_for_snapins();
translate([29.5+26.3+15.5+9.7+2.6+26.9-1.7, 10.9-30.1, 0]) button_24mm_hole_for_snapins();
translate([29.5+26.3+15.5+9.7+2.6+26.9+29.6, 10.9-30.1, 0]) button_24mm_hole_for_snapins();
translate([29.5+26.3+15.5, -65.2, 0]) button_30mm_hole_for_snapins();
}
// Directional Arc (left hand)
module dir_arc_30mm_button_l() { module dir_arc_30mm_button_l() {
translate([68, 132, 0]) button_30mm_hole(); translate([68, 132, 0]) button_30mm_hole_for_snapins();
} }
module dir_arc_w_30mm() { module dir_arc_w_30mm() {
@ -245,7 +300,7 @@ module dir_arc_w_30mm() {
translate([35+33.5, -12.9, 0]) dir_arc_30mm_button_l(); translate([35+33.5, -12.9, 0]) dir_arc_30mm_button_l();
translate([35+7, 34.5, 0]) dir_arc_30mm_button_l(); translate([35+7, 34.5, 0]) dir_arc_30mm_button_l();
// just my guesstimate on this one, but note that this is the same position as sega 2p (just mirrored) // just my guesstimate on this one, but note that this is the same position as sega 2p (just mirrored)
translate([top_plate_x-33.06, 145-19-9-11-19-9-11, 0]) button_30mm_hole(); translate([top_plate_x-33.06, 145-19-9-11-19-9-11, 0]) button_30mm_hole_for_snapins();
} }
module dir_arc_w_30mm_plus_one() { module dir_arc_w_30mm_plus_one() {
@ -253,8 +308,10 @@ module dir_arc_w_30mm_plus_one() {
translate([-33.5, -12.9, 0]) dir_arc_30mm_button_l(); translate([-33.5, -12.9, 0]) dir_arc_30mm_button_l();
} }
// Namco Noir (right hand)
module noir_button_p1() { module noir_button_p1() {
translate([40, 145, 0]) button_30mm_hole(); translate([40, 145, 0]) button_30mm_hole_for_snapins();
} }
module noir_plus_one() { module noir_plus_one() {
@ -272,8 +329,10 @@ module noir_plus_one() {
translate([-3.47-3.47, -78, 0]) noir_button_p1(); translate([-3.47-3.47, -78, 0]) noir_button_p1();
} }
// Sega Astro City 2P (right hand)
module sega_2p_p1() { module sega_2p_p1() {
translate([33.06, 145, 0]) button_30mm_hole(); translate([33.06, 145, 0]) button_30mm_hole_for_snapins();
} }
module sega_2p_plus_one() { module sega_2p_plus_one() {

46
src/frame-solo.scad Normal file
View File

@ -0,0 +1,46 @@
/* Copyright Brian Stephan 2023
*
* This file is part of the Buildable Stick System.
*
* The Buildable Stick System is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* The Buildable Stick System is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* the Buildable Stick System. If not, see <https://www.gnu.org/licenses/>.
*/
include <components.scad>
module solo_frame() {
difference() {
rotate([0, 0, 90]) frame();
// neutrik mounts for connector, switches
translate([0, (frame_x/2)-2.5, 0]) rotate([90, 0, 0]) neutrik_d_mount();
translate([-40, (frame_x/2)-2.5, 0]) rotate([270, 0, 0]) button_24mm_hole_for_snapins();
translate([40, (frame_x/2)-2.5, 0]) rotate([270, 0, 0]) button_24mm_hole_for_snapins();
// aux button holes
translate([-frame_y/2+2.5, 0, 0]) rotate([0, 0, 270])
translate([0, 0, 0]) rotate([90, 0, 0]) button_24mm_hole_for_snapins();
translate([-frame_y/2+2.5, 0, 0]) rotate([0, 0, 270])
translate([-40, 0, 0]) rotate([90, 0, 0]) button_24mm_hole_for_snapins();
translate([-frame_y/2+2.5, 0, 0]) rotate([0, 0, 270])
translate([40, 0, 0]) rotate([90, 0, 0]) button_24mm_hole_for_snapins();
translate([frame_y/2-2.5, 0, 0]) rotate([0, 0, 90])
translate([0, 0, 0]) rotate([90, 0, 0]) button_24mm_hole_for_snapins();
translate([frame_y/2-2.5, 0, 0]) rotate([0, 0, 90])
translate([-40, 0, 0]) rotate([90, 0, 0]) button_24mm_hole_for_snapins();
translate([frame_y/2-2.5, 0, 0]) rotate([0, 0, 90])
translate([40, 0, 0]) rotate([90, 0, 0]) button_24mm_hole_for_snapins();
}
}
solo_frame();

View File

@ -0,0 +1,28 @@
/* Copyright Brian Stephan 2023
*
* This file is part of the Buildable Stick System.
*
* The Buildable Stick System is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* The Buildable Stick System is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* the Buildable Stick System. If not, see <https://www.gnu.org/licenses/>.
*/
include <components.scad>
module dir_arc_24mm_combined_6_button_panel() {
difference() {
rotate([0, 0, -90]) topplate_with_raised_overhang();
translate([-top_plate_x+105, -top_plate_y/2+135, 0]) dir_arc_24mm_combined_6_button();
}
}
dir_arc_24mm_combined_6_button_panel();