Compare commits
5 Commits
8fc51019c3
...
344de2c84f
Author | SHA1 | Date | |
---|---|---|---|
344de2c84f | |||
a8d02f9229 | |||
af38f0a580 | |||
19fa31b425 | |||
6ca57615e4 |
@ -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:
|
||||
|
||||
* 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:
|
||||
* 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.
|
||||
* 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.
|
||||
|
||||
|
4
TODO.md
4
TODO.md
@ -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 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
|
||||
* 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 ---
|
||||
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
|
||||
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?
|
||||
|
@ -50,6 +50,9 @@ top_plate_x = 175;
|
||||
top_plate_y = 200;
|
||||
top_plate_z = 5;
|
||||
|
||||
// frame interior that supports the top plates
|
||||
panel_support_width = 5;
|
||||
|
||||
// neutrik D screw holes
|
||||
neutrik_d_screw_radius = 1.6 + 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);
|
||||
}
|
||||
|
||||
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() {
|
||||
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() {
|
||||
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() {
|
||||
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();
|
||||
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() {
|
||||
@ -148,34 +181,40 @@ module base_topplate() {
|
||||
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() {
|
||||
difference() {
|
||||
base_topplate();
|
||||
// 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();
|
||||
top_plate_holes();
|
||||
}
|
||||
}
|
||||
|
||||
module topplate_with_raised_overhang() {
|
||||
difference() {
|
||||
base_topplate_with_raised_overhang();
|
||||
top_plate_holes();
|
||||
}
|
||||
}
|
||||
|
||||
module frame_box() {
|
||||
difference() {
|
||||
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();
|
||||
translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0])
|
||||
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 */
|
||||
|
||||
// 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() {
|
||||
translate([68, 132, 0]) button_30mm_hole();
|
||||
translate([68, 132, 0]) button_30mm_hole_for_snapins();
|
||||
}
|
||||
|
||||
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+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)
|
||||
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() {
|
||||
@ -253,8 +308,10 @@ module dir_arc_w_30mm_plus_one() {
|
||||
translate([-33.5, -12.9, 0]) dir_arc_30mm_button_l();
|
||||
}
|
||||
|
||||
// Namco Noir (right hand)
|
||||
|
||||
module noir_button_p1() {
|
||||
translate([40, 145, 0]) button_30mm_hole();
|
||||
translate([40, 145, 0]) button_30mm_hole_for_snapins();
|
||||
}
|
||||
|
||||
module noir_plus_one() {
|
||||
@ -272,8 +329,10 @@ module noir_plus_one() {
|
||||
translate([-3.47-3.47, -78, 0]) noir_button_p1();
|
||||
}
|
||||
|
||||
// Sega Astro City 2P (right hand)
|
||||
|
||||
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() {
|
||||
|
46
src/frame-solo.scad
Normal file
46
src/frame-solo.scad
Normal 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();
|
28
src/top-panel-solo-dir_arc-24mm-combined.scad
Normal file
28
src/top-panel-solo-dir_arc-24mm-combined.scad
Normal 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();
|
Loading…
x
Reference in New Issue
Block a user