Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
6a4980165d
|
|||
|
7d3b4c0a6c
|
|||
|
f2efee40ee
|
|||
|
53ecd27047
|
|||
|
544f4fb4ce
|
|||
|
b9d66a4a2f
|
|||
|
696697f574
|
|||
|
d2a1a5be13
|
|||
|
56f2214339
|
|||
|
6fa474b748
|
|||
|
e13946e883
|
|||
|
fbf0dc6896
|
|||
|
538fb1430b
|
|||
|
8025038db5
|
|||
|
11107fe826
|
|||
|
4ec97b9f36
|
25
README.md
25
README.md
@@ -4,6 +4,12 @@ Files for 3D printing an arcade stick.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
[Photo of a completed inset panel-based stick.]
|
||||||
|
|
||||||
Originally an attempt to make a couple customized STL files for the [OpenStickCommunity Fightstick
|
Originally an attempt to make a couple customized STL files for the [OpenStickCommunity Fightstick
|
||||||
Case](https://github.com/OpenStickCommunity/Hardware/tree/main/Fightstick%20Case), the changes ballooned to fit my
|
Case](https://github.com/OpenStickCommunity/Hardware/tree/main/Fightstick%20Case), the changes ballooned to fit my
|
||||||
design and became incompatible with that project's components. This should be considered a different project with some
|
design and became incompatible with that project's components. This should be considered a different project with some
|
||||||
@@ -30,8 +36,12 @@ 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 45mm M4 hex brass standoffs
|
* 4 40mm M4 hex brass standoffs (or equivalent)
|
||||||
* 8 12-16mm M4 countersunk hex bolts
|
* 8 M4 countersunk hex bolts
|
||||||
|
* Overhang plates should use 12-16mm length bolts since they are taller
|
||||||
|
* Inset plates should probably use 8-12mm bolts --- some standoffs aren't threaded the whole way, making 16mm
|
||||||
|
too long to go flush
|
||||||
|
* If making the 40mm standoffs from multiple smaller ones, make sure they have enough length to take your bolts!
|
||||||
* Per frame connection point:
|
* Per frame connection point:
|
||||||
* 8 16mm M4 bolts
|
* 8 16mm M4 bolts
|
||||||
* 8 M4 flange nuts
|
* 8 M4 flange nuts
|
||||||
@@ -50,8 +60,8 @@ This is a rough estimate of the cost to produce one of these sticks, assuming a
|
|||||||
Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
|
Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
|
||||||
|
|
||||||
* Left and right frame: **$7.08 USD** (141.84g each, as of 2023-09-12)
|
* Left and right frame: **$7.08 USD** (141.84g each, as of 2023-09-12)
|
||||||
* Left and right top panels: **~$6.74 USD** (~135g each, as of 2023-09-12)
|
* Left and right (overhang) top panels: **~$6.74 USD** (~135g each, as of 2023-09-12)
|
||||||
* Left and right bottom panels: **$5.90 USD** (118.16g each, as of 2023-09-12)
|
* Left and right (overhang) bottom panels: **$5.90 USD** (118.16g each, as of 2023-09-12)
|
||||||
* Miscellaneous mounting plates, decorative plates, etc.: **~$1.00 USD** (~40g, as of 2023-09-12)
|
* Miscellaneous mounting plates, decorative plates, etc.: **~$1.00 USD** (~40g, as of 2023-09-12)
|
||||||
* 8 16mm M4 bolts to connect the frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of 2023-09-12)
|
* 8 16mm M4 bolts to connect the frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of 2023-09-12)
|
||||||
* 8 M4 flange nuts to connect the frames: **$0.68 USD** (you can get a pack of 100 on Amazon for $8.50, as of 2023-09-12)
|
* 8 M4 flange nuts to connect the frames: **$0.68 USD** (you can get a pack of 100 on Amazon for $8.50, as of 2023-09-12)
|
||||||
@@ -59,16 +69,15 @@ 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 45mm M4 spacers to connect panels to frames: **$2.40 USD** (you can get a pack of 10 on AliExpress for $3, as of
|
* 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
|
||||||
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)
|
||||||
* You may be tempted to use 16mm M4 bolts for both the top and bottom, but the spacers I have aren't threaded all
|
|
||||||
the way through the shaft, and 16mm bolts won't make it all the way on the bottom panel, but do on the top panel
|
|
||||||
(which is 5mm thicker); be careful I guess
|
|
||||||
|
|
||||||
With an enclosure coming in around $26, depending on your choices --- say, ~$30 for TheTrain's RP2040 Advanced Breakout
|
With an enclosure coming in around $26, depending on your choices --- say, ~$30 for TheTrain's RP2040 Advanced Breakout
|
||||||
Board, ~$60 for Sanwa buttons and a lever, and ~$20 for miscellaneous connectors and wiring --- you can put a
|
Board, ~$60 for Sanwa buttons and a lever, and ~$20 for miscellaneous connectors and wiring --- you can put a
|
||||||
|
|||||||
1
TODO.md
1
TODO.md
@@ -8,3 +8,4 @@ Notes for "next time".
|
|||||||
* Try making it so top plates are bolted in from the side of the frame rather than the top
|
* Try making it so top plates are bolted in from the side of the frame rather than the top
|
||||||
* I'm thinking of abandoning this, because it makes the frame more complicated to have a portion of a column rather
|
* I'm thinking of abandoning this, because it makes the frame more complicated to have a portion of a column rather
|
||||||
than the full column, but I'll keep it here for a bit longer
|
than the full column, but I'll keep it here for a bit longer
|
||||||
|
* Try making frames out of four pieces connected at joints on the hex posts, rather than one large piece?
|
||||||
|
|||||||
BIN
docs/finished-v3.1.jpg
Normal file
BIN
docs/finished-v3.1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 MiB |
@@ -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*5/6, top_plate_y*5/6, top_plate_z], center=true);
|
translate([0, 0, top_plate_z/2]) cube([top_plate_x-40, top_plate_y-40, top_plate_z], center=true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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*5/6, top_plate_y*5/6, top_plate_z], center=true);
|
translate([0, 0, top_plate_z/2]) cube([top_plate_x-40, top_plate_y-40, top_plate_z], center=true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ include <roundedcube.scad>
|
|||||||
// adjustments
|
// adjustments
|
||||||
hole_tolerance = 0.15;
|
hole_tolerance = 0.15;
|
||||||
|
|
||||||
|
// M2
|
||||||
|
m2_screw_selftap_radius = 0.95;
|
||||||
|
|
||||||
// M3
|
// M3
|
||||||
m3_screw_selftap_radius = 1.3;
|
m3_screw_selftap_radius = 1.3;
|
||||||
|
|
||||||
@@ -76,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 = 12;
|
decorative_radius_scale = 1.75;
|
||||||
jumbo_decorative_radius = 15;
|
jumbo_decorative_radius_scale = 2;
|
||||||
|
|
||||||
/* PARTS */
|
/* PARTS */
|
||||||
|
|
||||||
@@ -111,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, h=20, $fn=50, center=true);
|
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, 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
// button hole, with extra wide bits for various uses (cutting out space
|
// button hole, with extra wide bits for various uses (cutting out space
|
||||||
@@ -124,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, h=20, $fn=50, center=true);
|
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, 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
module frame_hex_bolt_hole() {
|
module frame_hex_bolt_hole() {
|
||||||
@@ -155,6 +158,25 @@ module frame_cutout() {
|
|||||||
cube([36.5, 8, 40], center=true);
|
cube([36.5, 8, 40], center=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module m2_mount_post() {
|
||||||
|
difference() {
|
||||||
|
cylinder(r=m2_screw_selftap_radius*2.25, h=3, $fn=6, center=true);
|
||||||
|
cylinder(r=m2_screw_selftap_radius, h=3*2, $fn=50, center=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module oled_ssd1306_mount() {
|
||||||
|
translate([11.5, 12, 0]) m2_mount_post();
|
||||||
|
translate([11.5, -12, 0]) m2_mount_post();
|
||||||
|
translate([-11.5, 12, 0]) m2_mount_post();
|
||||||
|
translate([-11.5, -12, 0]) m2_mount_post();
|
||||||
|
}
|
||||||
|
|
||||||
|
module oled_ssd1306_mount_cutout() {
|
||||||
|
translate([0, 1.9, 0]) cube([25, 14, 5], center=true);
|
||||||
|
translate([0, 0, -1.0]) cube([35, 35, 4], center=true);
|
||||||
|
}
|
||||||
|
|
||||||
module m3_mount_post() {
|
module m3_mount_post() {
|
||||||
difference() {
|
difference() {
|
||||||
cylinder(r=m3_screw_selftap_radius*4, h=8, $fn=6, center=true);
|
cylinder(r=m3_screw_selftap_radius*4, h=8, $fn=6, center=true);
|
||||||
@@ -236,7 +258,7 @@ module topplate() {
|
|||||||
|
|
||||||
module bottom_plate_with_overhang() {
|
module bottom_plate_with_overhang() {
|
||||||
difference() {
|
difference() {
|
||||||
overhang_plate();
|
rotate([180, 0, 0]) base_top_plate_with_raised_overhang();
|
||||||
rotate([180, 0, 0]) top_plate_holes();
|
rotate([180, 0, 0]) top_plate_holes();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -291,6 +313,7 @@ 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();
|
||||||
@@ -311,49 +334,60 @@ module dir_arc_24mm_directionals() {
|
|||||||
|
|
||||||
module dir_arc_24mm_6_button() {
|
module dir_arc_24mm_6_button() {
|
||||||
dir_arc_24mm_directionals();
|
dir_arc_24mm_directionals();
|
||||||
translate([29.5+26.3+15.5+9.7+2.6, 0, 0]) button_24mm_hole();
|
translate([29.5+26.3+27.8, 0, 0]) button_24mm_hole();
|
||||||
translate([29.5+26.3+15.5+9.7+2.6+26.9, 10.9, 0]) button_24mm_hole();
|
translate([29.5+26.3+27.8+26.9, 10.9, 0]) button_24mm_hole();
|
||||||
translate([29.5+26.3+15.5+9.7+2.6+26.9+29.6, 10.9, 0]) button_24mm_hole();
|
translate([29.5+26.3+27.8+26.9+29.6, 10.9, 0]) button_24mm_hole();
|
||||||
translate([29.5+26.3+15.5+9.7, -29.4, 0]) button_24mm_hole();
|
translate([29.5+26.3+15.5+9.7, -29.4, 0]) button_24mm_hole();
|
||||||
translate([29.5+26.3+15.5+9.7+2.6+26.9-1.7, 10.9-30.1, 0]) button_24mm_hole();
|
translate([29.5+26.3+27.8+26.9-1.7, 10.9-30.1, 0]) button_24mm_hole();
|
||||||
translate([29.5+26.3+15.5+9.7+2.6+26.9+29.6, 10.9-30.1, 0]) button_24mm_hole();
|
translate([29.5+26.3+27.8+26.9+29.6-0.2, 10.9-30.1, 0]) button_24mm_hole();
|
||||||
|
}
|
||||||
|
|
||||||
|
module dir_arc_24mm_8_button() {
|
||||||
|
dir_arc_24mm_6_button();
|
||||||
|
translate([29.5+26.3+27.8+26.9+29.6+29.5, 7.1, 0]) button_24mm_hole();
|
||||||
|
translate([29.5+26.3+27.8+26.9+29.6+29.5-0.3, -23.9, 0]) button_24mm_hole();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6 button plus the normal fourth column for 8 button actually on a third row
|
// 6 button plus the normal fourth column for 8 button actually on a third row
|
||||||
module dir_arc_24mm_8_button_compressed() {
|
module dir_arc_24mm_8_button_compressed() {
|
||||||
dir_arc_24mm_6_button();
|
dir_arc_24mm_6_button();
|
||||||
translate([29.5+26.3+15.5+9.7+2.6+2.6, 29.4, 0]) button_24mm_hole();
|
translate([29.5+26.3+27.8+2.6, 29.4, 0]) button_24mm_hole();
|
||||||
translate([29.5+26.3+15.5+9.7+2.6+26.9+2.6, 40.3, 0]) button_24mm_hole();
|
translate([29.5+26.3+27.8+26.9+2.6, 40.3, 0]) button_24mm_hole();
|
||||||
|
}
|
||||||
|
|
||||||
|
module dir_arc_plus_w_24mm_8_button() {
|
||||||
|
dir_arc_24mm_8_button();
|
||||||
|
translate([36, 28, 0]) button_24mm_hole();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Directional Arc (left hand)
|
// Directional Arc (left hand)
|
||||||
|
|
||||||
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)+67, 0]) button_30mm_hole();
|
translate([(top_plate_x/2)-28.06, (-top_plate_y/2)+62, 0]) button_30mm_hole();
|
||||||
}
|
}
|
||||||
|
|
||||||
module dir_arc_30mm() {
|
module dir_arc_30mm() {
|
||||||
dir_arc_30mm_thumb_button();
|
dir_arc_30mm_thumb_button();
|
||||||
translate([-5.4, 52.2, 0]) dir_arc_30mm_thumb_button();
|
translate([0, 57.2, 0]) dir_arc_30mm_thumb_button();
|
||||||
translate([-5.4-33.8, 52.2+12.9, 0]) dir_arc_30mm_thumb_button();
|
translate([-33.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();
|
translate([-33.8-34.8, 57.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([-5.4-26.8, 52.2+12.9+34.5, 0]) dir_arc_30mm_thumb_button();
|
translate([-26.8, 57.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([-5.4-33.8-34.8-33.8, 52.2, 0]) dir_arc_30mm_thumb_button();
|
translate([-33.8-34.8-33.8, 57.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, 145, 0]) button_30mm_hole();
|
translate([-top_plate_x/2, -top_plate_y/2, 0]) translate([35, 140, 0]) button_30mm_hole();
|
||||||
}
|
}
|
||||||
|
|
||||||
module noir_plus_one() {
|
module noir_plus_one() {
|
||||||
@@ -374,7 +408,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, 145, 0]) button_30mm_hole();
|
translate([-top_plate_x/2, -top_plate_y/2, 0]) translate([28.06, 140, 0]) button_30mm_hole();
|
||||||
}
|
}
|
||||||
|
|
||||||
module sega_2p_6_button() {
|
module sega_2p_6_button() {
|
||||||
|
|||||||
@@ -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
|
||||||
translate([0, 0, -top_plate_z/2]) frame_connection_holes();
|
frame_connection_holes();
|
||||||
|
|
||||||
// cable routing hole
|
// cable routing hole
|
||||||
translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole();
|
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();
|
||||||
|
|||||||
@@ -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
|
||||||
translate([0, 0, -top_plate_z/2]) frame_connection_holes();
|
frame_connection_holes();
|
||||||
translate([0, 0, -top_plate_z/2]) mirror([1, 0, 0]) frame_connection_holes();
|
mirror([1, 0, 0]) frame_connection_holes();
|
||||||
|
|
||||||
// cable routing holes
|
// cable routing holes
|
||||||
translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole();
|
frame_cable_routing_hole();
|
||||||
translate([0, 0, -top_plate_z/2]) mirror([1, 0, 0]) frame_cable_routing_hole();
|
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();
|
||||||
|
|||||||
@@ -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]) translate([0, 0, -top_plate_z/2]) frame_connection_holes();
|
mirror([1, 0, 0]) frame_connection_holes();
|
||||||
|
|
||||||
// cable routing hole
|
// cable routing hole
|
||||||
mirror([1, 0, 0]) translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole();
|
mirror([1, 0, 0]) 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();
|
||||||
|
|||||||
@@ -20,11 +20,10 @@ include <components.scad>
|
|||||||
|
|
||||||
module button_24mm_decorative_plate() {
|
module button_24mm_decorative_plate() {
|
||||||
difference() {
|
difference() {
|
||||||
decorative_add=10;
|
// get a 2mm slice of the bigger button cylinders
|
||||||
// get a 1mm slice of the bigger button cylinders
|
translate([0, 0, -55]) button_24mm_hole();
|
||||||
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, 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]) button_24mm_hole();
|
translate([0, 0, -1]) button_24mm_hole();
|
||||||
}
|
}
|
||||||
|
|||||||
32
src/misc-decorative-plate-dir_arc-plus-w-24mm-8-button.scad
Normal file
32
src/misc-decorative-plate-dir_arc-plus-w-24mm-8-button.scad
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* 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_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);
|
||||||
|
// cut out the normal holes
|
||||||
|
translate([0, 0, -1]) dir_arc_plus_w_24mm_8_button();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_arc_plus_w_24mm_8_button_decorative_plate();
|
||||||
@@ -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 1mm slice of the bigger button cylinders
|
// get a 2mm 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,8 +31,6 @@ 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();
|
||||||
|
|||||||
@@ -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 1mm slice of the bigger button cylinders
|
// get a 2mm slice of the bigger button cylinders
|
||||||
translate([0, 0, -45]) dir_arc_w_30mm();
|
translate([0, 0, -55]) dir_arc_w_30mm();
|
||||||
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);
|
translate([0, 0, 100]) cube([500, 500, 198], 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();
|
||||||
}
|
}
|
||||||
|
|||||||
32
src/misc-decorative-plate-sega-2p-6-button.scad
Normal file
32
src/misc-decorative-plate-sega-2p-6-button.scad
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* 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 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);
|
||||||
|
// cut out the normal holes
|
||||||
|
translate([0, 0, -1]) sega_2p_6_button();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sega_2p_6_button_decorative_plate();
|
||||||
@@ -20,11 +20,10 @@ include <components.scad>
|
|||||||
|
|
||||||
module sega_2p_plus_one_decorative_plate() {
|
module sega_2p_plus_one_decorative_plate() {
|
||||||
difference() {
|
difference() {
|
||||||
decorative_add=10;
|
// get a 2mm slice of the bigger button cylinders
|
||||||
// get a 1mm slice of the bigger button cylinders
|
translate([0, 0, -55]) sega_2p_plus_one();
|
||||||
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, 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]) sega_2p_plus_one();
|
translate([0, 0, -1]) sega_2p_plus_one();
|
||||||
}
|
}
|
||||||
|
|||||||
29
src/misc-dustwasher-jlf.scad
Normal file
29
src/misc-dustwasher-jlf.scad
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/* 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();
|
||||||
32
src/top-panel-inset-lever-and-dir_arc-plus-w-30mm.scad
Normal file
32
src/top-panel-inset-lever-and-dir_arc-plus-w-30mm.scad
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* 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();
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/* 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();
|
||||||
30
src/top-panel-inset-sega-2p-plus-one-plus-control.scad
Normal file
30
src/top-panel-inset-sega-2p-plus-one-plus-control.scad
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
/* 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();
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/* 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-right-sega-2p-plus-one-plus-control-with-mount.scad>
|
||||||
|
|
||||||
|
module top_panel_right_sega_2p_plus_one_plus_control_with_mount_with_oled() {
|
||||||
|
difference() {
|
||||||
|
top_panel_right_sega_2p_plus_one_plus_control_with_mount();
|
||||||
|
translate([75, 77.5, 0]) oled_ssd1306_mount_cutout();
|
||||||
|
}
|
||||||
|
translate([75, 77.5, 0.5]) oled_ssd1306_mount();
|
||||||
|
}
|
||||||
|
|
||||||
|
top_panel_right_sega_2p_plus_one_plus_control_with_mount_with_oled();
|
||||||
@@ -21,8 +21,7 @@ include <components.scad>
|
|||||||
module dir_arc_plus_w_24mm_8_button_panel() {
|
module dir_arc_plus_w_24mm_8_button_panel() {
|
||||||
difference() {
|
difference() {
|
||||||
top_plate_with_raised_overhang();
|
top_plate_with_raised_overhang();
|
||||||
translate([-71.5, -top_plate_y/2+122.5, 0]) dir_arc_24mm_8_button_compressed();
|
translate([-80.5, top_plate_y/6, 0]) dir_arc_plus_w_24mm_8_button();
|
||||||
translate([-34.5, 51, 0]) button_24mm_hole();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user