Compare commits

...

17 Commits

Author SHA1 Message Date
42f417d86a
middle frame mostly ok, but I forgot to check neutrik panel thickness 2023-08-18 00:23:59 -05:00
e94a0498a3
remove the test hole from the lever plate 2023-08-17 20:45:38 -05:00
6e1ef9efaf
tiny rename for the lever base plate
this might move into components (while not adjusted) at some point
2023-08-17 20:27:59 -05:00
925cfebe9e
moduleize left lever panel for reuse 2023-08-17 20:02:59 -05:00
0bea740cee
move frame chopper into components for reuse 2023-08-17 19:55:42 -05:00
a94836ff96
modularize left_frame for reuse 2023-08-17 19:54:07 -05:00
2cae32bce5
move frame mounting holes to components 2023-08-17 19:53:40 -05:00
4f22e08613
rename to match standardizing 2023-08-17 19:47:18 -05:00
8b850143ed
trivial, maybe meaningless, tweak to line up "+1" with noir 2023-08-17 19:43:09 -05:00
530b973a2d
renaming the lever panel to fit the pattern 2023-08-17 18:50:56 -05:00
362d156067
make the noir and sega 2p panels modules
mostly so I can use them in other .scad files to compare layouts and
that kind of thing
2023-08-17 18:49:09 -05:00
c14c97e832
did a Namco Noir layout, it also worked fine 2023-08-17 18:43:46 -05:00
23efe61eeb
test sega 2P layout, buttons fit pretty well 2023-08-17 16:09:43 -05:00
b47b192fd4
successful version of the left frame
print seems aligned with the top plate, hole sizes look right, still
need to pair it with a true middle frame
2023-08-17 10:53:43 -05:00
a3cdbf7069
small tweaks to hole sizes
shouldn't be enough to reprint the top left panel yet, just tweaking
based on the frame and test runs
2023-08-16 18:47:03 -05:00
894e46c4ee
more components that look good on a test print 2023-08-16 18:18:42 -05:00
a3b9cab08e
successful test of the frame relative to the top plate 2023-08-16 15:02:01 -05:00
6 changed files with 294 additions and 12 deletions

View File

@ -19,16 +19,31 @@
/* QUASI-CONSTANTS */ /* QUASI-CONSTANTS */
// adjustments // adjustments
hole_tolerance = 0.25; hole_tolerance = 0.15;
// M4 // M4
m4_bolt_radius = 2 + hole_tolerance; m4_bolt_radius = 2 + hole_tolerance;
m4_bolt_countersink_radius = 6 + hole_tolerance; m4_bolt_countersink_radius = 6.1 + hole_tolerance;
m4_bolt_hex_exterior = 3.5 + hole_tolerance; m4_bolt_hex_exterior_radius = 3.6 + hole_tolerance;
// 24mm button // 24mm button
small_button_radius = 12 + hole_tolerance; small_button_radius = 12 + hole_tolerance;
// 30mm button
big_button_radius = 15 + hole_tolerance;
// case dimensions
frame_x = 185;
frame_y = 210;
frame_z = 45;
top_plate_x = 175;
top_plate_y = 200;
top_plate_z = 5;
// neutrik D screw holes
neutrik_d_screw_radius = 1.6 + hole_tolerance;
neutrik_d_radius = 12 + hole_tolerance;
/* PARTS */ /* PARTS */
module m4_hole() { module m4_hole() {
@ -36,13 +51,39 @@ module m4_hole() {
} }
module m4_hole_countersink() { module m4_hole_countersink() {
cylinder(r1=m4_bolt_radius, r2=m4_bolt_countersink_radius, h=3.1, $fn=50, center=true); cylinder(r1=m4_bolt_radius, r2=m4_bolt_countersink_radius, h=3.2, $fn=50, center=true);
} }
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_30mm_hole() {
cylinder(r=big_button_radius, h=100, $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);
}
module frame_interchange_hole() {
cylinder(r=15, h=50, $fn=50, center=true);
}
module neutrik_d_hole() {
cylinder(r=neutrik_d_radius, h=100, $fn=50, center=true);
}
module neutrik_d_screw_hole() {
cylinder(r=neutrik_d_screw_radius, h=100, $fn=50, center=true);
}
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();
}
/* PIECES */ /* PIECES */
module levermountbase() { module levermountbase() {
@ -80,7 +121,7 @@ module levermountholes() {
} }
module base_topplate() { module base_topplate() {
cube([175,200,5], center=true); cube([top_plate_x, top_plate_y, top_plate_z], center=true);
} }
module topplate() { module topplate() {
@ -106,3 +147,109 @@ module topplate() {
m4_hole_countersink(); m4_hole_countersink();
} }
} }
module frame_box() {
difference() {
cube([frame_x, frame_y, frame_z], center=true);
cube([160, 185, frame_z+5], center=true);
}
}
module frame_mount_column() {
cube([20, 20, frame_z], center=true);
}
module frame_panel_surround() {
difference() {
cube([frame_x, frame_y, top_plate_z], center=true);
scale([1, 1, 2]) base_topplate();
}
}
module frame_side_chopper() {
translate([frame_x/2, 0, 0]) cube([10.001, 2*(frame_y+top_plate_y), 2*(frame_z+top_plate_z)], center=true);
}
module frame_connection_holes() {
translate([frame_x/2, (frame_y/4)+10, (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
translate([frame_x/2, (frame_y/4)+10, -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
translate([frame_x/2, (frame_y/4)-10, (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
translate([frame_x/2, (frame_y/4)-10, -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
translate([frame_x/2, -((frame_y/4)+10), (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
translate([frame_x/2, -((frame_y/4)+10), -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
translate([frame_x/2, -((frame_y/4)-10), (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
translate([frame_x/2, -((frame_y/4)-10), -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
}
module frame_cable_routing_hole() {
translate([frame_x/2, 0, 0]) rotate([0, 90, 0]) frame_interchange_hole();
}
module base_frame() {
frame_box();
translate([0, 0, frame_z/2 + top_plate_z/2])
frame_panel_surround();
translate([(top_plate_x/2)-10, (top_plate_y/2)-10, 0])
frame_mount_column();
translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0])
frame_mount_column();
translate([(top_plate_x/2)-10, -((top_plate_y/2)-10), 0])
frame_mount_column();
translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0])
frame_mount_column();
}
module frame() {
difference() {
base_frame();
translate([(top_plate_x/2)-10, (top_plate_y/2)-10, 0])
frame_hex_bolt_hole();
translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0])
frame_hex_bolt_hole();
translate([(top_plate_x/2)-10, -((top_plate_y/2)-10), 0])
frame_hex_bolt_hole();
translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0])
frame_hex_bolt_hole();
}
}
/* LAYOUTS */
module noir_button_p1() {
translate([40, 145, 0]) button_30mm_hole();
}
module noir_plus_one() {
// standard 8 (all relative to the first button) (via r/fightsticks)
noir_button_p1();
translate([32.94, 7.37+4.49, 0]) noir_button_p1();
translate([32.94+34.54, 7.37, 0]) noir_button_p1();
translate([32.94+34.54+33.02, -6.86, 0]) noir_button_p1();
translate([-3.47, -6.86-19.64-4.32-7.62, 0]) noir_button_p1();
translate([29.38, -6.86-19.64, 0]) noir_button_p1();
translate([29.38+3.56+31.24, -6.86-19.64-4.32, 0]) noir_button_p1();
translate([29.38+3.56+31.24+3.3+29.04, -6.86-19.64-4.32-7.62-6.93, 0]) noir_button_p1();
// just my guesstimate on this one, but note that this is the same position as sega 2p
translate([-3.47-3.47, -78, 0]) noir_button_p1();
}
module sega_2p_p1() {
translate([33.06, 145, 0]) button_30mm_hole();
}
module sega_2p_plus_one() {
// via slagcoin
sega_2p_p1();
translate([30.5, 11+9, 0]) sega_2p_p1();
translate([30.5+36, 11+9, 0]) sega_2p_p1();
translate([30.5+36+36, 11, 0]) sega_2p_p1();
translate([0, -19-9-11, 0]) sega_2p_p1();
translate([30.5, -19, 0]) sega_2p_p1();
translate([30.5+36, -19, 0]) sega_2p_p1();
translate([30.5+36+36, -19-9, 0]) sega_2p_p1();
// just my guesstimate on this one, but note that this is the same position as sega 2p
translate([0, -19-9-11-19-9-11, 0]) sega_2p_p1();
}

40
src/frame-left.scad Normal file
View File

@ -0,0 +1,40 @@
/* Copyright Brian Stephan 2023
*
* This file is part of bullet-system-stick.
*
* bullet-system-stick 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.
*
* bullet-system-stick 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
* bullet-system-stick. If not, see <https://www.gnu.org/licenses/>.
*/
include <components.scad>
module base_left_frame() {
difference() {
frame();
// chop the right edge off
frame_side_chopper();
}
}
module left_frame() {
difference() {
base_left_frame();
// connection holes to other frames
frame_connection_holes();
// cable routing hole
frame_cable_routing_hole();
}
}
left_frame();

44
src/frame-middle.scad Normal file
View File

@ -0,0 +1,44 @@
/* Copyright Brian Stephan 2023
*
* This file is part of bullet-system-stick.
*
* bullet-system-stick 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.
*
* bullet-system-stick 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
* bullet-system-stick. If not, see <https://www.gnu.org/licenses/>.
*/
include <components.scad>
module middle_frame() {
difference() {
frame();
// chop the left and right edge off
frame_side_chopper();
mirror([1, 0, 0]) frame_side_chopper();
}
}
difference() {
middle_frame();
// connection holes to other frames
frame_connection_holes();
mirror([1, 0, 0]) frame_connection_holes();
// cable routing holes
frame_cable_routing_hole();
mirror([1, 0, 0]) frame_cable_routing_hole();
// neutrik mounts for connector, switches
translate([0, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount();
translate([-40, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount();
translate([40, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount();
}

View File

@ -19,7 +19,7 @@
include <components.scad> include <components.scad>
// combine the lever mount and generic plate, with mounting holes // combine the lever mount and generic plate, with mounting holes
module leverplate() { module left_lever_panel() {
difference() { difference() {
// base plate // base plate
union() { union() {
@ -33,9 +33,4 @@ module leverplate() {
} }
} }
// put a 24mm hole in the lever plate just as a test left_lever_panel();
difference() {
leverplate();
translate([70,0,0])
button_24mm_hole();
}

View File

@ -0,0 +1,28 @@
/* Copyright Brian Stephan 2023
*
* This file is part of bullet-system-stick.
*
* bullet-system-stick 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.
*
* bullet-system-stick 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
* bullet-system-stick. If not, see <https://www.gnu.org/licenses/>.
*/
include <components.scad>
module namco_noir_plus_one_panel() {
difference() {
translate([top_plate_x/2, top_plate_y/2, 0]) topplate();
noir_plus_one();
}
}
namco_noir_plus_one_panel();

View File

@ -0,0 +1,28 @@
/* Copyright Brian Stephan 2023
*
* This file is part of bullet-system-stick.
*
* bullet-system-stick 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.
*
* bullet-system-stick 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
* bullet-system-stick. If not, see <https://www.gnu.org/licenses/>.
*/
include <components.scad>
module sega_2p_plus_one_panel() {
difference() {
translate([top_plate_x/2, top_plate_y/2, 0]) topplate();
sega_2p_plus_one();
}
}
sega_2p_plus_one_panel();