Compare commits
No commits in common. "53ecd2704780d3f5e7825f232cb05a42002e9974" and "8025038db554ee5d3b3adab7dabd7e890dd9a6d1" have entirely different histories.
53ecd27047
...
8025038db5
@ -30,7 +30,7 @@ What you'll need beyond these objects:
|
||||
Board](https://github.com/OpenStickCommunity/Hardware/tree/main/RP2040%20Advanced%20Breakout%20Board))
|
||||
* 4 M3 8mm hex bolts to secure the PCB to a panel
|
||||
* 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
|
||||
* Per frame connection point:
|
||||
* 8 16mm M4 bolts
|
||||
@ -59,12 +59,10 @@ Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
|
||||
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,
|
||||
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)
|
||||
* You could 3D print these too, but you're probably better off with brass ones as they give some weight to the
|
||||
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 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)
|
||||
|
@ -21,7 +21,7 @@ include <components.scad>
|
||||
module bottom_panel() {
|
||||
difference() {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ include <components.scad>
|
||||
module bottom_panel_solo() {
|
||||
difference() {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -79,8 +79,8 @@ neutrik_d_screw_radius = 1.6 + hole_tolerance;
|
||||
neutrik_d_radius = 12 + hole_tolerance;
|
||||
|
||||
// additional button radius for decorative panels, etc.
|
||||
decorative_radius_scale = 1.75;
|
||||
jumbo_decorative_radius_scale = 2;
|
||||
decorative_radius = 12;
|
||||
jumbo_decorative_radius = 15;
|
||||
|
||||
/* PARTS */
|
||||
|
||||
@ -114,8 +114,8 @@ module button_24mm_hole() {
|
||||
// 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);
|
||||
// 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, 70]) cylinder(r=small_button_radius*jumbo_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, h=20, $fn=50, center=true);
|
||||
}
|
||||
|
||||
// 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
|
||||
translate([0, 0, -25]) cylinder(r=big_button_radius+6, h=49, $fn=50, center=true);
|
||||
// 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, 70]) cylinder(r=big_button_radius*jumbo_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, h=20, $fn=50, center=true);
|
||||
}
|
||||
|
||||
module frame_hex_bolt_hole() {
|
||||
@ -258,7 +258,7 @@ module topplate() {
|
||||
|
||||
module bottom_plate_with_overhang() {
|
||||
difference() {
|
||||
rotate([180, 0, 0]) base_top_plate_with_raised_overhang();
|
||||
overhang_plate();
|
||||
rotate([180, 0, 0]) top_plate_holes();
|
||||
}
|
||||
}
|
||||
@ -313,7 +313,6 @@ module frame() {
|
||||
difference() {
|
||||
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([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() {
|
||||
// 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() {
|
||||
dir_arc_30mm_thumb_button();
|
||||
translate([0, 57.2, 0]) dir_arc_30mm_thumb_button();
|
||||
translate([-33.8, 57.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, 52.2, 0]) dir_arc_30mm_thumb_button();
|
||||
translate([-5.4-33.8, 52.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() {
|
||||
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() {
|
||||
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)
|
||||
|
||||
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() {
|
||||
@ -408,7 +407,7 @@ module noir_plus_one() {
|
||||
// Sega Astro City 2P (right hand)
|
||||
|
||||
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() {
|
||||
|
@ -30,10 +30,10 @@ module left_frame() {
|
||||
difference() {
|
||||
base_left_frame();
|
||||
// connection holes to other frames
|
||||
frame_connection_holes();
|
||||
translate([0, 0, -top_plate_z/2]) frame_connection_holes();
|
||||
|
||||
// cable routing hole
|
||||
frame_cable_routing_hole();
|
||||
translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole();
|
||||
|
||||
// aux button holes
|
||||
translate([-30, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();
|
||||
|
@ -31,12 +31,12 @@ module middle_frame() {
|
||||
difference() {
|
||||
base_middle_frame();
|
||||
// connection holes to other frames
|
||||
frame_connection_holes();
|
||||
mirror([1, 0, 0]) frame_connection_holes();
|
||||
translate([0, 0, -top_plate_z/2]) frame_connection_holes();
|
||||
translate([0, 0, -top_plate_z/2]) mirror([1, 0, 0]) frame_connection_holes();
|
||||
|
||||
// cable routing holes
|
||||
frame_cable_routing_hole();
|
||||
mirror([1, 0, 0]) frame_cable_routing_hole();
|
||||
translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole();
|
||||
translate([0, 0, -top_plate_z/2]) mirror([1, 0, 0]) frame_cable_routing_hole();
|
||||
|
||||
// neutrik mounts for connector, switches
|
||||
translate([0, (frame_y/2)-neutrik_panel_thickness, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
||||
|
@ -30,10 +30,10 @@ module right_frame() {
|
||||
difference() {
|
||||
base_right_frame();
|
||||
// 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
|
||||
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
|
||||
translate([30, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();
|
||||
|
@ -20,10 +20,11 @@ include <components.scad>
|
||||
|
||||
module button_24mm_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) button_24mm_hole();
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
decorative_add=10;
|
||||
// get a 1mm slice of the bigger button cylinders
|
||||
translate([0, 0, -45]) button_24mm_hole();
|
||||
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
|
||||
translate([0, 0, -1]) button_24mm_hole();
|
||||
}
|
||||
|
@ -20,10 +20,11 @@ include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_24mm_8_button_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) dir_arc_plus_w_24mm_8_button();
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
decorative_add=10;
|
||||
// get a 1mm slice of the bigger button cylinders
|
||||
translate([0, 0, -45]) dir_arc_plus_w_24mm_8_button();
|
||||
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
|
||||
translate([0, 0, -1]) dir_arc_plus_w_24mm_8_button();
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
// get a 1mm slice of the bigger button cylinders
|
||||
union() {
|
||||
translate([-top_plate_x/2, 0, -65]) dir_arc_w_30mm();
|
||||
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]) 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();
|
||||
|
@ -20,10 +20,10 @@ include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_30mm_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) dir_arc_w_30mm();
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
// get a 1mm slice of the bigger button cylinders
|
||||
translate([0, 0, -45]) dir_arc_w_30mm();
|
||||
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
|
||||
translate([0, 0, -1]) dir_arc_w_30mm();
|
||||
}
|
||||
|
@ -20,10 +20,11 @@ include <components.scad>
|
||||
|
||||
module sega_2p_6_button_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) sega_2p_6_button();
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
decorative_add=10;
|
||||
// get a 1mm slice of the bigger button cylinders
|
||||
translate([0, 0, -45]) sega_2p_6_button();
|
||||
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
|
||||
translate([0, 0, -1]) sega_2p_6_button();
|
||||
}
|
||||
|
@ -20,10 +20,11 @@ include <components.scad>
|
||||
|
||||
module sega_2p_plus_one_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) sega_2p_plus_one();
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
decorative_add=10;
|
||||
// get a 1mm slice of the bigger button cylinders
|
||||
translate([0, 0, -45]) sega_2p_plus_one();
|
||||
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
|
||||
translate([0, 0, -1]) sega_2p_plus_one();
|
||||
}
|
||||
|
@ -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();
|
@ -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();
|
@ -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();
|
@ -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();
|
Loading…
x
Reference in New Issue
Block a user