Compare commits

..

No commits in common. "53ecd2704780d3f5e7825f232cb05a42002e9974" and "8025038db554ee5d3b3adab7dabd7e890dd9a6d1" have entirely different histories.

17 changed files with 54 additions and 169 deletions

View File

@ -30,7 +30,7 @@ What you'll need beyond these objects:
Board](https://github.com/OpenStickCommunity/Hardware/tree/main/RP2040%20Advanced%20Breakout%20Board)) Board](https://github.com/OpenStickCommunity/Hardware/tree/main/RP2040%20Advanced%20Breakout%20Board))
* 4 M3 8mm hex bolts to secure the PCB to a panel * 4 M3 8mm hex bolts to secure the PCB to a panel
* Per frame and plate combo: * Per frame and plate combo:
* 4 40mm M4 hex brass standoffs (or equivalent) * 4 45mm M4 hex brass standoffs
* 8 12-16mm M4 countersunk hex bolts * 8 12-16mm M4 countersunk hex bolts
* Per frame connection point: * Per frame connection point:
* 8 16mm M4 bolts * 8 16mm M4 bolts
@ -59,12 +59,10 @@ Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
of 2023-09-12) of 2023-09-12)
* 4 M3 flange nuts to connect Neutrik D plates to frames: **$0.34 USD** (you can get a pack of 100 on Amazon for $8.50, * 4 M3 flange nuts to connect Neutrik D plates to frames: **$0.34 USD** (you can get a pack of 100 on Amazon for $8.50,
as of 2023-09-12) as of 2023-09-12)
* 8 40mm M4 spacers to connect panels to frames: **$2.40 USD** (you can get a pack of 10 on AliExpress for $3, as of * 8 45mm M4 spacers to connect panels to frames: **$2.40 USD** (you can get a pack of 10 on AliExpress for $3, as of
2023-09-12) 2023-09-12)
* You could 3D print these too, but you're probably better off with brass ones as they give some weight to the * You could 3D print these too, but you're probably better off with brass ones as they give some weight to the
stick anyway stick anyway
* You can also use a shorter length with longer bolts, or combine multiple spacers, if either of those yield better
prices
* 8 16mm M4 bolts to connect top plates to frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of * 8 16mm M4 bolts to connect top plates to frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of
* 8 12mm M4 bolts to connect bottom plates to frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of * 8 12mm M4 bolts to connect bottom plates to frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of
2023-09-12) 2023-09-12)

View File

@ -21,7 +21,7 @@ include <components.scad>
module bottom_panel() { module bottom_panel() {
difference() { difference() {
mirror([0, 0, 1]) topplate(); mirror([0, 0, 1]) topplate();
translate([0, 0, top_plate_z/2]) cube([top_plate_x-40, top_plate_y-40, top_plate_z], center=true); translate([0, 0, top_plate_z/2]) cube([top_plate_x*5/6, top_plate_y*5/6, top_plate_z], center=true);
} }
} }

View File

@ -21,7 +21,7 @@ include <components.scad>
module bottom_panel_solo() { module bottom_panel_solo() {
difference() { difference() {
bottom_plate_with_overhang(); bottom_plate_with_overhang();
translate([0, 0, top_plate_z/2]) cube([top_plate_x-40, top_plate_y-40, top_plate_z], center=true); translate([0, 0, top_plate_z/2]) cube([top_plate_x*5/6, top_plate_y*5/6, top_plate_z], center=true);
} }
} }

View File

@ -79,8 +79,8 @@ neutrik_d_screw_radius = 1.6 + hole_tolerance;
neutrik_d_radius = 12 + hole_tolerance; neutrik_d_radius = 12 + hole_tolerance;
// additional button radius for decorative panels, etc. // additional button radius for decorative panels, etc.
decorative_radius_scale = 1.75; decorative_radius = 12;
jumbo_decorative_radius_scale = 2; jumbo_decorative_radius = 15;
/* PARTS */ /* PARTS */
@ -114,8 +114,8 @@ module button_24mm_hole() {
// translation is to leave 3mm thickness in the plate without recentering anything // 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); translate([0, 0, -25]) cylinder(r=small_button_radius+6, h=49, $fn=50, center=true);
// space for decorative button surround stuff // space for decorative button surround stuff
translate([0, 0, 50]) cylinder(r=small_button_radius*decorative_radius_scale, h=20, $fn=50, center=true); translate([0, 0, 50]) cylinder(r=small_button_radius+decorative_radius, h=20, $fn=50, center=true);
translate([0, 0, 70]) cylinder(r=small_button_radius*jumbo_decorative_radius_scale, h=20, $fn=50, center=true); translate([0, 0, 70]) cylinder(r=small_button_radius+jumbo_decorative_radius, h=20, $fn=50, center=true);
} }
// button hole, with extra wide bits for various uses (cutting out space // button hole, with extra wide bits for various uses (cutting out space
@ -127,8 +127,8 @@ module button_30mm_hole() {
// translation is to leave 3mm thickness in the plate without recentering anything // 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); translate([0, 0, -25]) cylinder(r=big_button_radius+6, h=49, $fn=50, center=true);
// space for decorative button surround stuff // space for decorative button surround stuff
translate([0, 0, 50]) cylinder(r=big_button_radius*decorative_radius_scale, h=20, $fn=50, center=true); translate([0, 0, 50]) cylinder(r=big_button_radius+decorative_radius, h=20, $fn=50, center=true);
translate([0, 0, 70]) cylinder(r=big_button_radius*jumbo_decorative_radius_scale, h=20, $fn=50, center=true); translate([0, 0, 70]) cylinder(r=big_button_radius+jumbo_decorative_radius, h=20, $fn=50, center=true);
} }
module frame_hex_bolt_hole() { module frame_hex_bolt_hole() {
@ -258,7 +258,7 @@ module topplate() {
module bottom_plate_with_overhang() { module bottom_plate_with_overhang() {
difference() { difference() {
rotate([180, 0, 0]) base_top_plate_with_raised_overhang(); overhang_plate();
rotate([180, 0, 0]) top_plate_holes(); rotate([180, 0, 0]) top_plate_holes();
} }
} }
@ -313,7 +313,6 @@ module frame() {
difference() { difference() {
base_frame(); base_frame();
translate([0, 0, frame_z/2]) scale([1, 1, 2]) base_topplate(); translate([0, 0, frame_z/2]) scale([1, 1, 2]) base_topplate();
translate([0, 0, -frame_z/2]) scale([1, 1, 2]) base_topplate();
translate([plate_to_frame_point_x, plate_to_frame_point_y, 0]) frame_hex_bolt_hole(); translate([plate_to_frame_point_x, plate_to_frame_point_y, 0]) frame_hex_bolt_hole();
translate([-plate_to_frame_point_x, plate_to_frame_point_y, 0]) frame_hex_bolt_hole(); translate([-plate_to_frame_point_x, plate_to_frame_point_y, 0]) frame_hex_bolt_hole();
translate([plate_to_frame_point_x, -plate_to_frame_point_y, 0]) frame_hex_bolt_hole(); translate([plate_to_frame_point_x, -plate_to_frame_point_y, 0]) frame_hex_bolt_hole();
@ -364,30 +363,30 @@ module dir_arc_plus_w_24mm_8_button() {
module dir_arc_30mm_thumb_button() { module dir_arc_30mm_thumb_button() {
// 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/2)-28.06, (-top_plate_y/2)+62, 0]) button_30mm_hole(); translate([(top_plate_x/2)-28.06, (-top_plate_y/2)+67, 0]) button_30mm_hole();
} }
module dir_arc_30mm() { module dir_arc_30mm() {
dir_arc_30mm_thumb_button(); dir_arc_30mm_thumb_button();
translate([0, 57.2, 0]) dir_arc_30mm_thumb_button(); translate([-5.4, 52.2, 0]) dir_arc_30mm_thumb_button();
translate([-33.8, 57.2+12.9, 0]) dir_arc_30mm_thumb_button(); translate([-5.4-33.8, 52.2+12.9, 0]) dir_arc_30mm_thumb_button();
translate([-33.8-34.8, 57.2+12.9, 0]) dir_arc_30mm_thumb_button(); translate([-5.4-33.8-34.8, 52.2+12.9, 0]) dir_arc_30mm_thumb_button();
} }
module dir_arc_w_30mm() { module dir_arc_w_30mm() {
dir_arc_30mm(); dir_arc_30mm();
translate([-26.8, 57.2+12.9+34.5, 0]) dir_arc_30mm_thumb_button(); translate([-5.4-26.8, 52.2+12.9+34.5, 0]) dir_arc_30mm_thumb_button();
} }
module dir_arc_w_30mm_plus_one() { module dir_arc_w_30mm_plus_one() {
dir_arc_w_30mm(); dir_arc_w_30mm();
translate([-33.8-34.8-33.8, 57.2, 0]) dir_arc_30mm_thumb_button(); translate([-5.4-33.8-34.8-33.8, 52.2, 0]) dir_arc_30mm_thumb_button();
} }
// Namco Noir (right hand) // Namco Noir (right hand)
module noir_button_p1() { module noir_button_p1() {
translate([-top_plate_x/2, -top_plate_y/2, 0]) translate([35, 140, 0]) button_30mm_hole(); translate([-top_plate_x/2, -top_plate_y/2, 0]) translate([35, 145, 0]) button_30mm_hole();
} }
module noir_plus_one() { module noir_plus_one() {
@ -408,7 +407,7 @@ module noir_plus_one() {
// Sega Astro City 2P (right hand) // Sega Astro City 2P (right hand)
module sega_2p_p1() { module sega_2p_p1() {
translate([-top_plate_x/2, -top_plate_y/2, 0]) translate([28.06, 140, 0]) button_30mm_hole(); translate([-top_plate_x/2, -top_plate_y/2, 0]) translate([28.06, 145, 0]) button_30mm_hole();
} }
module sega_2p_6_button() { module sega_2p_6_button() {

View File

@ -30,10 +30,10 @@ module left_frame() {
difference() { difference() {
base_left_frame(); base_left_frame();
// connection holes to other frames // connection holes to other frames
frame_connection_holes(); translate([0, 0, -top_plate_z/2]) frame_connection_holes();
// cable routing hole // cable routing hole
frame_cable_routing_hole(); translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole();
// aux button holes // aux button holes
translate([-30, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole(); translate([-30, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();

View File

@ -31,12 +31,12 @@ module middle_frame() {
difference() { difference() {
base_middle_frame(); base_middle_frame();
// connection holes to other frames // connection holes to other frames
frame_connection_holes(); translate([0, 0, -top_plate_z/2]) frame_connection_holes();
mirror([1, 0, 0]) frame_connection_holes(); translate([0, 0, -top_plate_z/2]) mirror([1, 0, 0]) frame_connection_holes();
// cable routing holes // cable routing holes
frame_cable_routing_hole(); translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole();
mirror([1, 0, 0]) frame_cable_routing_hole(); translate([0, 0, -top_plate_z/2]) mirror([1, 0, 0]) frame_cable_routing_hole();
// neutrik mounts for connector, switches // neutrik mounts for connector, switches
translate([0, (frame_y/2)-neutrik_panel_thickness, 0]) rotate([90, 0, 0]) neutrik_d_mount(); translate([0, (frame_y/2)-neutrik_panel_thickness, 0]) rotate([90, 0, 0]) neutrik_d_mount();

View File

@ -30,10 +30,10 @@ module right_frame() {
difference() { difference() {
base_right_frame(); base_right_frame();
// connection holes to other frames // connection holes to other frames
mirror([1, 0, 0]) frame_connection_holes(); mirror([1, 0, 0]) translate([0, 0, -top_plate_z/2]) frame_connection_holes();
// cable routing hole // cable routing hole
mirror([1, 0, 0]) frame_cable_routing_hole(); mirror([1, 0, 0]) translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole();
// aux button holes // aux button holes
translate([30, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole(); translate([30, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();

View File

@ -20,10 +20,11 @@ include <components.scad>
module button_24mm_decorative_plate() { module button_24mm_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the bigger button cylinders decorative_add=10;
translate([0, 0, -55]) button_24mm_hole(); // get a 1mm slice of the bigger button cylinders
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -45]) button_24mm_hole();
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, -50]) cube([500, 500, 98], center=true);
translate([0, 0, 50]) cube([500, 500, 98], center=true);
// cut out the normal holes // cut out the normal holes
translate([0, 0, -1]) button_24mm_hole(); translate([0, 0, -1]) button_24mm_hole();
} }

View File

@ -20,10 +20,11 @@ include <components.scad>
module dir_arc_plus_w_24mm_8_button_decorative_plate() { module dir_arc_plus_w_24mm_8_button_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the bigger button cylinders decorative_add=10;
translate([0, 0, -55]) dir_arc_plus_w_24mm_8_button(); // get a 1mm slice of the bigger button cylinders
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -45]) dir_arc_plus_w_24mm_8_button();
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, -50]) cube([500, 500, 98], center=true);
translate([0, 0, 50]) cube([500, 500, 98], center=true);
// cut out the normal holes // cut out the normal holes
translate([0, 0, -1]) dir_arc_plus_w_24mm_8_button(); translate([0, 0, -1]) dir_arc_plus_w_24mm_8_button();
} }

View File

@ -20,7 +20,7 @@ include <components.scad>
module dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate() { module dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the bigger button cylinders // get a 1mm slice of the bigger button cylinders
union() { union() {
translate([-top_plate_x/2, 0, -65]) dir_arc_w_30mm(); translate([-top_plate_x/2, 0, -65]) dir_arc_w_30mm();
translate([top_plate_x/2, 0, -65]) sega_2p_plus_one(); translate([top_plate_x/2, 0, -65]) sega_2p_plus_one();
@ -31,6 +31,8 @@ module dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate() {
translate([-top_plate_x/2, 0, -1]) dir_arc_w_30mm(); translate([-top_plate_x/2, 0, -1]) dir_arc_w_30mm();
translate([top_plate_x/2, 0, -1]) sega_2p_plus_one(); translate([top_plate_x/2, 0, -1]) sega_2p_plus_one();
} }
/* // fill in some space */
/* translate([-6, -6, 0]) cube([23, 23, 1], center=true); */
} }
dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate(); dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate();

View File

@ -20,10 +20,10 @@ include <components.scad>
module dir_arc_plus_w_30mm_decorative_plate() { module dir_arc_plus_w_30mm_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the bigger button cylinders // get a 1mm slice of the bigger button cylinders
translate([0, 0, -55]) dir_arc_w_30mm(); translate([0, 0, -45]) dir_arc_w_30mm();
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -50]) cube([500, 500, 98], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 50]) cube([500, 500, 98], center=true);
// cut out the normal holes // cut out the normal holes
translate([0, 0, -1]) dir_arc_w_30mm(); translate([0, 0, -1]) dir_arc_w_30mm();
} }

View File

@ -20,10 +20,11 @@ include <components.scad>
module sega_2p_6_button_decorative_plate() { module sega_2p_6_button_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the bigger button cylinders decorative_add=10;
translate([0, 0, -55]) sega_2p_6_button(); // get a 1mm slice of the bigger button cylinders
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -45]) sega_2p_6_button();
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, -50]) cube([500, 500, 98], center=true);
translate([0, 0, 50]) cube([500, 500, 98], center=true);
// cut out the normal holes // cut out the normal holes
translate([0, 0, -1]) sega_2p_6_button(); translate([0, 0, -1]) sega_2p_6_button();
} }

View File

@ -20,10 +20,11 @@ include <components.scad>
module sega_2p_plus_one_decorative_plate() { module sega_2p_plus_one_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the bigger button cylinders decorative_add=10;
translate([0, 0, -55]) sega_2p_plus_one(); // get a 1mm slice of the bigger button cylinders
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -45]) sega_2p_plus_one();
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, -50]) cube([500, 500, 98], center=true);
translate([0, 0, 50]) cube([500, 500, 98], center=true);
// cut out the normal holes // cut out the normal holes
translate([0, 0, -1]) sega_2p_plus_one(); translate([0, 0, -1]) sega_2p_plus_one();
} }

View File

@ -1,29 +0,0 @@
/* 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 jlf_dustwasher() {
difference() {
cylinder(r=jumbo_decorative_radius+5+hole_tolerance, h=2, $fn=50, center=true);
// 5.25 = 4.55 (diameter of shaft is 9.10mm) + .25 to let it take an angle
cylinder(r=4.8, h=2.1, $fn=50, center=true);
}
}
jlf_dustwasher();

View File

@ -1,32 +0,0 @@
/* 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 top_panel_inset_lever_and_dir_arc_w_30mm() {
difference() {
union() {
topplate();
translate([(-top_plate_x/2)+55, (top_plate_y/2)-75, -((top_plate_z/2)+(lever_mount_z/2))]) levermountbase();
}
dir_arc_w_30mm();
translate([(-top_plate_x/2)+55, (top_plate_y/2)-75, 0]) levermountholes();
}
}
top_panel_inset_lever_and_dir_arc_w_30mm();

View File

@ -1,27 +0,0 @@
/* 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>
use <top-panel-inset-sega-2p-plus-one-plus-control.scad>
module top_panel_inset_sega_2p_plus_one_plus_control_with_mount() {
top_panel_inset_sega_2p_plus_one_plus_control();
translate([30, -50, -(top_plate_z/2) - 3]) pcb_mount();
}
top_panel_inset_sega_2p_plus_one_plus_control_with_mount();

View File

@ -1,30 +0,0 @@
/* 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 top_panel_inset_sega_2p_plus_one_plus_control() {
difference() {
topplate();
sega_2p_plus_one();
rotate([0, 0, 180]) side_chopper();
translate([89, 30, 0]) button_24mm_hole();
}
}
top_panel_inset_sega_2p_plus_one_plus_control();