16 Commits

Author SHA1 Message Date
6a4980165d write down a thing to try if I ever get time 2023-11-10 15:49:45 -06:00
7d3b4c0a6c update notes on bolts/plate heights 2023-11-10 15:49:26 -06:00
f2efee40ee include a finished photo, this time of an inset-based stick 2023-11-10 15:49:14 -06:00
53ecd27047 convert decorative plates to scaling the base button rather than adding 2023-11-09 12:47:05 -06:00
544f4fb4ce cleanups to the decorative plates 2023-11-09 12:29:18 -06:00
b9d66a4a2f remove commented out code 2023-11-09 08:02:47 -06:00
696697f574 more inset panels, my normal 9+1 buttons 2023-11-09 07:52:05 -06:00
d2a1a5be13 scoot the dir arc in and up a bit
the horizontal move sends the dir arc closer to the edge, and the
vertical move puts the top back where it used to be before moving the
rest of the layouts down

both of these choices are entirely subjective
2023-11-08 18:38:06 -06:00
56f2214339 scoot the button layouts down a bit
this gives a bit more space at the front, mostly so that the decorative
plate doesn't hang over the edge of an inset panel
2023-11-08 18:37:02 -06:00
6fa474b748 update README, need 40mm spacers since chopping the bottom 2023-11-08 18:14:19 -06:00
e13946e883 inset panel for a lever + directionals + W 2023-11-07 14:39:36 -06:00
fbf0dc6896 allow the frame bottom to take insets/raised panels too
this complicates the print, in that now printing the frame requires
supports, but by cutting in on the bottom the same way as the top, we
can center some stuff better and also make the plates a bit more
interchangeable. this also eliminates the slightly unsightly bottom
panel hanging out in the open, so overall I think it's worth the
printing complication
2023-11-02 16:34:08 -05:00
538fb1430b add a dustwasher for JLF mounts 2023-10-26 18:09:41 -05:00
8025038db5 improve 24mm + W layout components, add decorative plate 2023-10-04 16:47:06 -05:00
11107fe826 add lever + 6 30mm button sega 2P layout panel
a bit tight but totally possible
2023-10-04 16:45:53 -05:00
4ec97b9f36 add components for an OLED cutout and panel using it 2023-10-04 16:44:59 -05:00
21 changed files with 310 additions and 59 deletions

View File

@@ -4,6 +4,12 @@ Files for 3D printing an arcade stick.
![An example of stick components displayed in OpenSCAD](docs/two-panel-example-v3.png)
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
![A photo of a completed stick](docs/finished-v3.1.jpg)
[Photo of a completed inset panel-based stick.]
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
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))
* 4 M3 8mm hex bolts to secure the PCB to a panel
* Per frame and plate combo:
* 4 45mm M4 hex brass standoffs
* 8 12-16mm M4 countersunk hex bolts
* 4 40mm M4 hex brass standoffs (or equivalent)
* 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:
* 8 16mm M4 bolts
* 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.
* 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 bottom panels: **$5.90 USD** (118.16g 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 (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)
* 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)
@@ -59,16 +69,15 @@ 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 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)
* 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)
* 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
Board, ~$60 for Sanwa buttons and a lever, and ~$20 for miscellaneous connectors and wiring --- you can put a

View File

@@ -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
* 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
* 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

View File

@@ -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*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);
}
}

View File

@@ -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*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);
}
}

View File

@@ -23,6 +23,9 @@ include <roundedcube.scad>
// adjustments
hole_tolerance = 0.15;
// M2
m2_screw_selftap_radius = 0.95;
// M3
m3_screw_selftap_radius = 1.3;
@@ -76,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 = 12;
jumbo_decorative_radius = 15;
decorative_radius_scale = 1.75;
jumbo_decorative_radius_scale = 2;
/* PARTS */
@@ -111,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, 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, 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);
}
// 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
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, 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, 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);
}
module frame_hex_bolt_hole() {
@@ -155,6 +158,25 @@ module frame_cutout() {
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() {
difference() {
cylinder(r=m3_screw_selftap_radius*4, h=8, $fn=6, center=true);
@@ -236,7 +258,7 @@ module topplate() {
module bottom_plate_with_overhang() {
difference() {
overhang_plate();
rotate([180, 0, 0]) base_top_plate_with_raised_overhang();
rotate([180, 0, 0]) top_plate_holes();
}
}
@@ -291,6 +313,7 @@ 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();
@@ -311,49 +334,60 @@ module dir_arc_24mm_directionals() {
module dir_arc_24mm_6_button() {
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+15.5+9.7+2.6+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, 0, 0]) button_24mm_hole();
translate([29.5+26.3+27.8+26.9, 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+2.6+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-1.7, 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
module dir_arc_24mm_8_button_compressed() {
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+15.5+9.7+2.6+26.9+2.6, 40.3, 0]) button_24mm_hole();
translate([29.5+26.3+27.8+2.6, 29.4, 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)
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)+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() {
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();
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();
}
module dir_arc_w_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() {
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)
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() {
@@ -374,7 +408,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, 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() {

View File

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

View File

@@ -31,12 +31,12 @@ module middle_frame() {
difference() {
base_middle_frame();
// connection holes to other frames
translate([0, 0, -top_plate_z/2]) frame_connection_holes();
translate([0, 0, -top_plate_z/2]) mirror([1, 0, 0]) frame_connection_holes();
frame_connection_holes();
mirror([1, 0, 0]) frame_connection_holes();
// cable routing holes
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();
frame_cable_routing_hole();
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();

View File

@@ -30,10 +30,10 @@ module right_frame() {
difference() {
base_right_frame();
// 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
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
translate([30, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();

View File

@@ -20,11 +20,10 @@ include <components.scad>
module button_24mm_decorative_plate() {
difference() {
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);
// 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);
// cut out the normal holes
translate([0, 0, -1]) button_24mm_hole();
}

View 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();

View File

@@ -20,7 +20,7 @@ include <components.scad>
module dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate() {
difference() {
// get a 1mm slice of the bigger button cylinders
// get a 2mm 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,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]) 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();

View File

@@ -20,10 +20,10 @@ include <components.scad>
module dir_arc_plus_w_30mm_decorative_plate() {
difference() {
// 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);
// 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);
// cut out the normal holes
translate([0, 0, -1]) dir_arc_w_30mm();
}

View 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();

View File

@@ -20,11 +20,10 @@ include <components.scad>
module sega_2p_plus_one_decorative_plate() {
difference() {
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);
// 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);
// cut out the normal holes
translate([0, 0, -1]) sega_2p_plus_one();
}

View 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();

View 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();

View File

@@ -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();

View 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();

View 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>
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();

View File

@@ -21,8 +21,7 @@ include <components.scad>
module dir_arc_plus_w_24mm_8_button_panel() {
difference() {
top_plate_with_raised_overhang();
translate([-71.5, -top_plate_y/2+122.5, 0]) dir_arc_24mm_8_button_compressed();
translate([-34.5, 51, 0]) button_24mm_hole();
translate([-80.5, top_plate_y/6, 0]) dir_arc_plus_w_24mm_8_button();
}
}