Compare commits
91 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
6a4980165d
|
|||
|
7d3b4c0a6c
|
|||
|
f2efee40ee
|
|||
|
53ecd27047
|
|||
|
544f4fb4ce
|
|||
|
b9d66a4a2f
|
|||
|
696697f574
|
|||
|
d2a1a5be13
|
|||
|
56f2214339
|
|||
|
6fa474b748
|
|||
|
e13946e883
|
|||
|
fbf0dc6896
|
|||
|
538fb1430b
|
|||
|
8025038db5
|
|||
|
11107fe826
|
|||
|
4ec97b9f36
|
|||
|
a960e57bd1
|
|||
|
c67722d0da
|
|||
|
fa1f6927c5
|
|||
|
1da14d6dc3
|
|||
|
0611e23975
|
|||
|
87db45df15
|
|||
|
28809230bc
|
|||
|
2253889430
|
|||
|
a26f87a9d2
|
|||
|
962402c291
|
|||
|
63c7113d9f
|
|||
|
163dfc2c63
|
|||
|
aa633584e5
|
|||
|
767b38acef
|
|||
|
56367369b7
|
|||
|
fa304606df
|
|||
|
5d5eb34f8a
|
|||
|
17ab4815a6
|
|||
|
afd548f8d9
|
|||
|
e2549694ea
|
|||
|
2aab029905
|
|||
|
0f11aacec4
|
|||
|
3f0712af70
|
|||
|
51ba220a5a
|
|||
|
47d9a523c3
|
|||
|
3e74f3d915
|
|||
|
cfb48574b2
|
|||
|
36a96fbe26
|
|||
|
86ba641ba6
|
|||
|
3d24dad1ae
|
|||
|
fe961e8a7e
|
|||
|
28c0c0e475
|
|||
|
2960151d98
|
|||
|
82d1913551
|
|||
|
88fc53988e
|
|||
|
f73c94be2f
|
|||
|
cd21b4dd0a
|
|||
|
7a71c8cd81
|
|||
|
350fc27285
|
|||
|
3b3b857568
|
|||
|
fddb5d450e
|
|||
|
0329dd2b3c
|
|||
|
ee3dd23b36
|
|||
|
0e00f8d5d1
|
|||
|
b911a1b7c1
|
|||
|
ff19699d61
|
|||
|
8140d5e3a8
|
|||
|
708122e510
|
|||
|
b704f158db
|
|||
|
5177090625
|
|||
|
679d3025fe
|
|||
|
e68ffbfc7b
|
|||
|
ed3c5a1210
|
|||
|
fbf919b764
|
|||
|
9881f6391e
|
|||
|
bfae2b093b
|
|||
|
43a036e17c
|
|||
|
3b964ee6d8
|
|||
|
fe0e3b6017
|
|||
|
16d3feadc1
|
|||
|
1db6577f75
|
|||
|
cd5cd422e5
|
|||
|
652653180e
|
|||
|
73e93d4536
|
|||
|
e51b79a193
|
|||
|
694e2c6173
|
|||
|
a8ca6bafa9
|
|||
|
cd71ed013b
|
|||
|
12273649f5
|
|||
|
57be13d9cb
|
|||
|
344de2c84f
|
|||
|
a8d02f9229
|
|||
|
af38f0a580
|
|||
|
19fa31b425
|
|||
|
6ca57615e4
|
15
Makefile
15
Makefile
@@ -1,11 +1,14 @@
|
|||||||
SRCDIR = ./src
|
SRC_FILES := $(wildcard ./src/*.scad)
|
||||||
all: $(SRCDIR)/*
|
SRC_FILES := $(filter-out ./src/blown-up-demo.scad, $(SRC_FILES))
|
||||||
mkdir -p build
|
SRC_FILES := $(filter-out ./src/components.scad, $(SRC_FILES))
|
||||||
|
SRC_FILES := $(filter-out ./src/roundedcube.scad, $(SRC_FILES))
|
||||||
|
all: $(SRC_FILES)
|
||||||
|
mkdir -p ./build
|
||||||
for file in $^ ; do \
|
for file in $^ ; do \
|
||||||
openscad -o $${file}.stl $${file} ; \
|
openscad -o $${file}.stl $${file} ; \
|
||||||
mv $${file}.stl build ; \
|
mv $${file}.stl ./build/ ; \
|
||||||
done
|
done
|
||||||
|
zip ./build/buildable-stick-system-`git describe --dirty`-stls.zip ./build/*
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm build/*.stl
|
rm -rf ./build
|
||||||
rmdir build
|
|
||||||
|
|||||||
63
README.md
63
README.md
@@ -2,7 +2,13 @@
|
|||||||
|
|
||||||
Files for 3D printing an arcade stick.
|
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
|
||||||
@@ -30,29 +36,60 @@ 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
|
* 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 25mm M4 bolts
|
* 8 16mm M4 bolts
|
||||||
* 8 M4 flange nuts
|
* 8 M4 flange nuts
|
||||||
* For a lever:
|
* For a lever:
|
||||||
* 4 12-16mm M4 countersunk hex bolts
|
* 4 12-16mm M4 countersunk hex bolts
|
||||||
* 4 M4 flange nuts
|
* 4 M4 flange nuts
|
||||||
|
* For Neutrik D connections:
|
||||||
|
* 2 10mm M3 hex bolts
|
||||||
|
* 2 M3 flange nuts
|
||||||
* Buttons and levers as desired
|
* Buttons and levers as desired
|
||||||
* Wiring as required
|
* Wiring as required
|
||||||
|
|
||||||
### Issues and Limitations
|
## Rough Costs
|
||||||
|
|
||||||
This is a living repository, and as such, there are likely issues with the objects, known or otherwise. Be aware:
|
This is a rough estimate of the cost to produce one of these sticks, assuming a usual 2-frame design and layout.
|
||||||
|
Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
|
||||||
|
|
||||||
* The top panel is 5mm tall and doesn't have an inset; snap-in buttons likely do not fit.
|
* Left and right frame: **$7.08 USD** (141.84g each, as of 2023-09-12)
|
||||||
* A composition error made the frame 5mm shorter than intended and wasn't noticed until I printed everything:
|
* Left and right (overhang) top panels: **~$6.74 USD** (~135g each, as of 2023-09-12)
|
||||||
* Some levers don't have enough clearance in the case.
|
* Left and right (overhang) bottom panels: **$5.90 USD** (118.16g each, as of 2023-09-12)
|
||||||
* Buttons with traditional quick connects are a *very* tight fit, you will probably need to bend pins.
|
* Miscellaneous mounting plates, decorative plates, etc.: **~$1.00 USD** (~40g, as of 2023-09-12)
|
||||||
* The PCB mount position was very tight on the buttons panel; it will probably have to be moved.
|
* 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)
|
||||||
* Support for the top plate was removed from the frame due to overhang issues, and now the top plate can bow slightly
|
* 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)
|
||||||
with pressure; a new solution needs to be found.
|
* 4 10mm M3 bolts to connect Neutrik D plates to frames: **$0.40 USD** (you can get a pack of 100 on Amazon for $10, as
|
||||||
|
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
|
||||||
|
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)
|
||||||
|
|
||||||
|
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
|
||||||
|
full-featured controller with an open source foundation together for around $135.
|
||||||
|
|
||||||
|
## Miscellany
|
||||||
|
|
||||||
|
See the `/docs/` directory for more thoughts too scattered for this document.
|
||||||
|
|
||||||
|
## Issues and Limitations
|
||||||
|
|
||||||
|
This is a living repository, and as such, there are likely issues with the objects, known or otherwise.
|
||||||
These issues may be fixed in the future; see `TODO.md` for details.
|
These issues may be fixed in the future; see `TODO.md` for details.
|
||||||
|
|
||||||
## Development and Contributing
|
## Development and Contributing
|
||||||
|
|||||||
17
TODO.md
17
TODO.md
@@ -2,17 +2,10 @@
|
|||||||
|
|
||||||
Notes for "next time".
|
Notes for "next time".
|
||||||
|
|
||||||
## v2
|
## v4
|
||||||
|
|
||||||
* I need at least 5mm, maybe 10mm, more height, to fit some of my levers like the Nobi Bullet
|
|
||||||
* I couldn't even fit a JLF without the compensations in v1 on the bottom panel
|
|
||||||
* I had to bend the pins a bit on Crown SDB-202s, too
|
|
||||||
* Top plates are 1-2mm too thick for snap-ins, maybe have a variant with a couple shaved off like with the bottom plate
|
|
||||||
workaround
|
|
||||||
* The plates bow a bit on the top when pressure is applied, because there's no support from the frame up there ---
|
|
||||||
adding 5mm to the frame should leave a couple mm for support to get added back
|
|
||||||
* PCB mount on `top-panel-dir_arc-plus-w-30mm-plus-one-with-mount.scad` doesn't leave room for a USB cable on the right
|
|
||||||
hand side
|
|
||||||
* The panels' connection points could probably be a bit thinner to accommodate more bolts. A 20mm bolt barely clears the
|
|
||||||
two panels and I don't like that kind of bolt connection.
|
|
||||||
* Engraving some cosmetic stuff? Or maybe a place to mount other plates?
|
* Engraving some cosmetic stuff? Or maybe a place to mount other plates?
|
||||||
|
* 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
BIN
docs/finished-v3.1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 MiB |
24
docs/materials.md
Normal file
24
docs/materials.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Materials
|
||||||
|
|
||||||
|
bss's random thoughts and notes on 3D printing materials.
|
||||||
|
|
||||||
|
## Bambu Lab PLA
|
||||||
|
|
||||||
|
### Basic
|
||||||
|
|
||||||
|
* In general, nice texture, but under direct light, you can see a bit of the infill pattern through the walls. Not super
|
||||||
|
distracting, but it's there.
|
||||||
|
|
||||||
|
#### White
|
||||||
|
|
||||||
|
* Walls are practically translucent, you can almost always see the infill. Do not use for major components.
|
||||||
|
* Looks perfectly good for thin things like the Neutrik plates, decorative pieces, that kind of thing.
|
||||||
|
|
||||||
|
### Matte
|
||||||
|
|
||||||
|
* I don't like the texture as much, but they do produce nice non-primary color colorways, and you don't see the infill.
|
||||||
|
* Seems like their plastic treatment leaves some plate residue, so be better about cleaning it or you'll get ghosts.
|
||||||
|
|
||||||
|
## Hatchbox PLA
|
||||||
|
|
||||||
|
* Haven't done a lot of this yet, but my wife really likes the blue.
|
||||||
BIN
docs/three-panel-example-v2.png
Normal file
BIN
docs/three-panel-example-v2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
BIN
docs/two-panel-example-v3.png
Normal file
BIN
docs/two-panel-example-v3.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
39
src/blown-up-demo.scad
Normal file
39
src/blown-up-demo.scad
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/* 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 <frame-left.scad>
|
||||||
|
use <frame-right.scad>
|
||||||
|
use <top-panel-left-lever-and-dir_arc-plus-w-30mm.scad>
|
||||||
|
use <top-panel-right-sega-2p-plus-one-plus-control-with-mount.scad>
|
||||||
|
use <bottom-panel-left.scad>
|
||||||
|
use <bottom-panel-right.scad>
|
||||||
|
use <misc-decorative-plate-24mm-button.scad>
|
||||||
|
use <misc-decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one.scad>
|
||||||
|
use <misc-dustwasher-lsx-nobi.scad>
|
||||||
|
|
||||||
|
color("#C12E1F") translate([-top_plate_x/2-25, 0, frame_z/2+75]) top_panel_left_lever_and_dir_arc_w_30mm();
|
||||||
|
color("#C12E1F") translate([top_plate_x/2+25, 0, frame_z/2+75]) top_panel_right_sega_2p_plus_one_plus_control_with_mount();
|
||||||
|
color("black") translate([-frame_x/2+5-25, 0, -2.5]) left_frame();
|
||||||
|
color("black") translate([frame_x/2+25, 0, -2.5]) right_frame();
|
||||||
|
color("#C12E1F") translate([-top_plate_x/2-25, 0, -5-frame_z/2-75]) bottom_panel_left();
|
||||||
|
color("#C12E1F") translate([top_plate_x/2+25, 0, -5-frame_z/2-75]) bottom_panel_right();
|
||||||
|
|
||||||
|
color("black") translate([0, 0, 3+frame_z/2+150]) dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate();
|
||||||
|
color("black") translate([-195, 25, 3+frame_z/2+150]) lsx_nobi_dustwasher();
|
||||||
|
color("black") translate([top_plate_x, 25, 3+frame_z/2+150]) button_24mm_decorative_plate();
|
||||||
28
src/bottom-panel-inset.scad
Normal file
28
src/bottom-panel-inset.scad
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/* 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 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bottom_panel();
|
||||||
30
src/bottom-panel-left.scad
Normal file
30
src/bottom-panel-left.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>
|
||||||
|
use <bottom-panel-solo.scad>
|
||||||
|
|
||||||
|
module bottom_panel_left() {
|
||||||
|
difference() {
|
||||||
|
bottom_panel_solo();
|
||||||
|
// chop the right edge off
|
||||||
|
side_chopper();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bottom_panel_left();
|
||||||
30
src/bottom-panel-middle.scad
Normal file
30
src/bottom-panel-middle.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>
|
||||||
|
use <bottom-panel-left.scad>
|
||||||
|
use <bottom-panel-right.scad>
|
||||||
|
|
||||||
|
module bottom_panel_middle() {
|
||||||
|
intersection() {
|
||||||
|
bottom_panel_left();
|
||||||
|
bottom_panel_right();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bottom_panel_middle();
|
||||||
@@ -17,9 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
include <components.scad>
|
include <components.scad>
|
||||||
|
use <bottom-panel-left.scad>
|
||||||
|
|
||||||
module bottom_panel() {
|
module bottom_panel_right() {
|
||||||
mirror([0, 0, 1]) topplate();
|
rotate([0, 0, 180]) bottom_panel_left();
|
||||||
}
|
}
|
||||||
|
|
||||||
bottom_panel();
|
bottom_panel_right();
|
||||||
@@ -17,13 +17,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
include <components.scad>
|
include <components.scad>
|
||||||
use <bottom-panel.scad>
|
|
||||||
|
|
||||||
module bottom_panel_concave() {
|
module bottom_panel_solo() {
|
||||||
difference() {
|
difference() {
|
||||||
bottom_panel();
|
bottom_plate_with_overhang();
|
||||||
translate([0, 0, top_plate_z/2]) cube([top_plate_x*2/3, top_plate_y*2/3, 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bottom_panel_concave();
|
bottom_panel_solo();
|
||||||
@@ -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;
|
||||||
|
|
||||||
@@ -43,17 +46,42 @@ lever_mount_y = 95;
|
|||||||
lever_mount_z = 2;
|
lever_mount_z = 2;
|
||||||
|
|
||||||
// case dimensions
|
// case dimensions
|
||||||
frame_x = 183;
|
// base frame box. reminder: top of inside (including mounts) is chopped by top_plate_z for plates
|
||||||
|
frame_x = 233;
|
||||||
frame_y = 208;
|
frame_y = 208;
|
||||||
frame_z = 45; // reminder: inside (including mounts) is chopped by top_plate_z for plates
|
frame_z = 50;
|
||||||
top_plate_x = 175;
|
|
||||||
top_plate_y = 200;
|
// depth of the "lip" of the frame that the top plate sets into/supports the overhang
|
||||||
|
frame_wall = 8;
|
||||||
|
|
||||||
|
// per neutrik (mm)
|
||||||
|
neutrik_panel_thickness = 3;
|
||||||
|
|
||||||
|
// top plate, which can either be the whole plate ("inset") or the mounting frame for a plate that overhangs
|
||||||
|
top_plate_x = frame_x - frame_wall;
|
||||||
|
top_plate_y = frame_y - frame_wall;
|
||||||
top_plate_z = 5;
|
top_plate_z = 5;
|
||||||
|
|
||||||
|
// how much the top plate x/y is expanded to overhang the frame
|
||||||
|
// note that this is relative to the top plate (so the wall is added back)
|
||||||
|
top_plate_overhang_amount = frame_wall + 17;
|
||||||
|
overhang_top_plate_x = top_plate_x + top_plate_overhang_amount;
|
||||||
|
overhang_top_plate_y = top_plate_y + top_plate_overhang_amount;
|
||||||
|
|
||||||
|
plate_to_frame_point_x = (top_plate_x/2)-10;
|
||||||
|
plate_to_frame_point_y = (top_plate_y/2)-10;
|
||||||
|
|
||||||
|
// frame interior that supports the top plates
|
||||||
|
panel_support_width = 5;
|
||||||
|
|
||||||
// neutrik D screw holes
|
// neutrik D screw holes
|
||||||
neutrik_d_screw_radius = 1.6 + hole_tolerance;
|
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.
|
||||||
|
decorative_radius_scale = 1.75;
|
||||||
|
jumbo_decorative_radius_scale = 2;
|
||||||
|
|
||||||
/* PARTS */
|
/* PARTS */
|
||||||
|
|
||||||
module m4_hole() {
|
module m4_hole() {
|
||||||
@@ -64,12 +92,43 @@ module m4_hole_countersink() {
|
|||||||
cylinder(r1=m4_bolt_radius, r2=m4_bolt_countersink_radius, h=3.2, $fn=50, center=true);
|
cylinder(r1=m4_bolt_radius, r2=m4_bolt_countersink_radius, h=3.2, $fn=50, center=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
module button_24mm_hole() {
|
module top_plate_holes() {
|
||||||
cylinder(r=small_button_radius, h=100, $fn=50, center=true);
|
// holes for mount bolts
|
||||||
|
translate([plate_to_frame_point_x, plate_to_frame_point_y, 0]) m4_hole();
|
||||||
|
translate([plate_to_frame_point_x, -plate_to_frame_point_y, 0]) m4_hole();
|
||||||
|
translate([-plate_to_frame_point_x, plate_to_frame_point_y, 0]) m4_hole();
|
||||||
|
translate([-plate_to_frame_point_x, -plate_to_frame_point_y, 0]) m4_hole();
|
||||||
|
// holes for mount bolt countersinks
|
||||||
|
translate([plate_to_frame_point_x, plate_to_frame_point_y, 2]) m4_hole_countersink();
|
||||||
|
translate([plate_to_frame_point_x, -plate_to_frame_point_y, 2]) m4_hole_countersink();
|
||||||
|
translate([-plate_to_frame_point_x, plate_to_frame_point_y, 2]) m4_hole_countersink();
|
||||||
|
translate([-plate_to_frame_point_x, -plate_to_frame_point_y, 2]) m4_hole_countersink();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// button hole, with extra wide bits for various uses (cutting out space
|
||||||
|
// for snap-ins, etc.
|
||||||
|
module button_24mm_hole() {
|
||||||
|
cylinder(r=small_button_radius, h=100, $fn=50, center=true);
|
||||||
|
// carve out space for snap-ins, leave 3mm
|
||||||
|
// slagcoin has screw-in nut diameter at 29.5mm, so radius+6 to leave some space
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// button hole, with extra wide bits for various uses (cutting out space
|
||||||
|
// for snap-ins, etc.
|
||||||
module button_30mm_hole() {
|
module button_30mm_hole() {
|
||||||
cylinder(r=big_button_radius, h=100, $fn=50, center=true);
|
cylinder(r=big_button_radius, h=100, $fn=50, center=true);
|
||||||
|
// carve out space for snap-ins, leave 3mm
|
||||||
|
// slagcoin has screw-in nut diameter at 36mm, so radius+6 to leave some space
|
||||||
|
// 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
module frame_hex_bolt_hole() {
|
module frame_hex_bolt_hole() {
|
||||||
@@ -94,6 +153,30 @@ module neutrik_d_mount() {
|
|||||||
translate([-9.5, -12, 0]) neutrik_d_screw_hole();
|
translate([-9.5, -12, 0]) neutrik_d_screw_hole();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// space for a neutrik D mount or 24mm button
|
||||||
|
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() {
|
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);
|
||||||
@@ -148,34 +231,49 @@ module base_topplate() {
|
|||||||
cube([top_plate_x, top_plate_y, top_plate_z], center=true);
|
cube([top_plate_x, top_plate_y, top_plate_z], center=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module overhang_plate() {
|
||||||
|
roundedcube([overhang_top_plate_x, overhang_top_plate_y, top_plate_z], center=true, radius=1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// this takes the base_topplate and makes it a small frame, putting a larger top plate
|
||||||
|
module base_top_plate_with_raised_overhang() {
|
||||||
|
// make a frame out of the top plate (and keep the main plate on the center plane)
|
||||||
|
translate([0, 0, -5]) difference() {
|
||||||
|
base_topplate();
|
||||||
|
cube([top_plate_x-(panel_support_width*2), top_plate_y-(panel_support_width*2), top_plate_z*2], center=true);
|
||||||
|
}
|
||||||
|
translate([plate_to_frame_point_x, plate_to_frame_point_y, -2.5]) resize([0, 0, 10]) frame_mount_column();
|
||||||
|
translate([-(plate_to_frame_point_x), plate_to_frame_point_y, -2.5]) resize([0, 0, 10]) frame_mount_column();
|
||||||
|
translate([plate_to_frame_point_x, -(plate_to_frame_point_y), -2.5]) resize([0, 0, 10]) frame_mount_column();
|
||||||
|
translate([-(plate_to_frame_point_x), -(plate_to_frame_point_y), -2.5]) resize([0, 0, 10]) frame_mount_column();
|
||||||
|
overhang_plate();
|
||||||
|
}
|
||||||
|
|
||||||
module topplate() {
|
module topplate() {
|
||||||
difference() {
|
difference() {
|
||||||
base_topplate();
|
base_topplate();
|
||||||
// holes for mount bolts
|
top_plate_holes();
|
||||||
translate([77.5, 90, 0])
|
}
|
||||||
m4_hole();
|
}
|
||||||
translate([77.5, -90, 0])
|
|
||||||
m4_hole();
|
module bottom_plate_with_overhang() {
|
||||||
translate([-77.5, 90, 0])
|
difference() {
|
||||||
m4_hole();
|
rotate([180, 0, 0]) base_top_plate_with_raised_overhang();
|
||||||
translate([-77.5, -90, 0])
|
rotate([180, 0, 0]) top_plate_holes();
|
||||||
m4_hole();
|
}
|
||||||
// holes for mount bolt countersinks
|
}
|
||||||
translate([77.5, 90, 2])
|
|
||||||
m4_hole_countersink();
|
module top_plate_with_raised_overhang() {
|
||||||
translate([77.5, -90, 2])
|
difference() {
|
||||||
m4_hole_countersink();
|
base_top_plate_with_raised_overhang();
|
||||||
translate([-77.5, 90, 2])
|
top_plate_holes();
|
||||||
m4_hole_countersink();
|
|
||||||
translate([-77.5, -90, 2])
|
|
||||||
m4_hole_countersink();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module frame_box() {
|
module frame_box() {
|
||||||
difference() {
|
difference() {
|
||||||
roundedcube([frame_x, frame_y, frame_z], center=true, radius=3);
|
roundedcube([frame_x, frame_y, frame_z], center=true, radius=3);
|
||||||
cube([frame_x-26, frame_y-26, frame_z+5], center=true);
|
cube([top_plate_x-(panel_support_width*2), top_plate_y-(panel_support_width*2), frame_z+5], center=true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,20 +281,20 @@ module frame_mount_column() {
|
|||||||
cube([20, 20, frame_z], center=true);
|
cube([20, 20, frame_z], center=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
module frame_side_chopper() {
|
module side_chopper() {
|
||||||
translate([frame_x/2, 0, 0]) cube([8, 2*(frame_y+top_plate_y), 2*(frame_z+top_plate_z)], center=true);
|
translate([frame_x/2+4, 0, 0]) cube([16, 2*(frame_y+top_plate_y), 2*(frame_z+top_plate_z)], center=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
module frame_connection_holes() {
|
module frame_connection_holes() {
|
||||||
translate([frame_x/2, (frame_y/4)+10, (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
translate([frame_x/2, (frame_y/4)+15, (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
||||||
translate([frame_x/2, (frame_y/4)+10, -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
translate([frame_x/2, (frame_y/4)+15, -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
||||||
translate([frame_x/2, (frame_y/4)-10, (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
translate([frame_x/2, (frame_y/4)-15, (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
||||||
translate([frame_x/2, (frame_y/4)-10, -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
translate([frame_x/2, (frame_y/4)-15, -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
||||||
|
|
||||||
translate([frame_x/2, -((frame_y/4)+10), (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
translate([frame_x/2, -((frame_y/4)+15), (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
||||||
translate([frame_x/2, -((frame_y/4)+10), -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
translate([frame_x/2, -((frame_y/4)+15), -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
||||||
translate([frame_x/2, -((frame_y/4)-10), (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
translate([frame_x/2, -((frame_y/4)-15), (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
||||||
translate([frame_x/2, -((frame_y/4)-10), -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
translate([frame_x/2, -((frame_y/4)-15), -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
|
||||||
}
|
}
|
||||||
|
|
||||||
module frame_cable_routing_hole() {
|
module frame_cable_routing_hole() {
|
||||||
@@ -205,56 +303,91 @@ module frame_cable_routing_hole() {
|
|||||||
|
|
||||||
module base_frame() {
|
module base_frame() {
|
||||||
frame_box();
|
frame_box();
|
||||||
translate([(top_plate_x/2)-10, (top_plate_y/2)-10, 0])
|
translate([plate_to_frame_point_x, plate_to_frame_point_y, 0]) frame_mount_column();
|
||||||
frame_mount_column();
|
translate([-plate_to_frame_point_x, plate_to_frame_point_y, 0]) frame_mount_column();
|
||||||
translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0])
|
translate([plate_to_frame_point_x, -(plate_to_frame_point_y), 0]) frame_mount_column();
|
||||||
frame_mount_column();
|
translate([-plate_to_frame_point_x, -(plate_to_frame_point_y), 0]) frame_mount_column();
|
||||||
translate([(top_plate_x/2)-10, -((top_plate_y/2)-10), 0])
|
|
||||||
frame_mount_column();
|
|
||||||
translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0])
|
|
||||||
frame_mount_column();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module frame() {
|
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([(top_plate_x/2)-10, (top_plate_y/2)-10, 0])
|
translate([0, 0, -frame_z/2]) scale([1, 1, 2]) base_topplate();
|
||||||
frame_hex_bolt_hole();
|
translate([plate_to_frame_point_x, plate_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||||
translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0])
|
translate([-plate_to_frame_point_x, plate_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||||
frame_hex_bolt_hole();
|
translate([plate_to_frame_point_x, -plate_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||||
translate([(top_plate_x/2)-10, -((top_plate_y/2)-10), 0])
|
translate([-plate_to_frame_point_x, -plate_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||||
frame_hex_bolt_hole();
|
|
||||||
translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0])
|
|
||||||
frame_hex_bolt_hole();
|
|
||||||
|
|
||||||
// thin up the mount point to accommodate snap-ins, ethercon adapter
|
|
||||||
translate([0, 10, 10]) cube([120, 180, 60], center=true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LAYOUTS */
|
/* LAYOUTS */
|
||||||
|
|
||||||
module dir_arc_30mm_button_l() {
|
// Directional Arc (both hands)
|
||||||
translate([68, 132, 0]) button_30mm_hole();
|
|
||||||
|
module dir_arc_24mm_directionals() {
|
||||||
|
button_24mm_hole();
|
||||||
|
translate([29.5, 0, 0]) button_24mm_hole();
|
||||||
|
translate([29.5+26.3, -12.9, 0]) button_24mm_hole();
|
||||||
|
translate([29.5+26.3+15.5, -65.2, 0]) button_30mm_hole();
|
||||||
|
}
|
||||||
|
|
||||||
|
module dir_arc_24mm_6_button() {
|
||||||
|
dir_arc_24mm_directionals();
|
||||||
|
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+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+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)+62, 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
module dir_arc_w_30mm() {
|
module dir_arc_w_30mm() {
|
||||||
dir_arc_30mm_button_l();
|
dir_arc_30mm();
|
||||||
translate([35, 0, 0]) dir_arc_30mm_button_l();
|
translate([-26.8, 57.2+12.9+34.5, 0]) dir_arc_30mm_thumb_button();
|
||||||
translate([35+33.5, -12.9, 0]) dir_arc_30mm_button_l();
|
|
||||||
translate([35+7, 34.5, 0]) dir_arc_30mm_button_l();
|
|
||||||
// just my guesstimate on this one, but note that this is the same position as sega 2p (just mirrored)
|
|
||||||
translate([top_plate_x-33.06, 145-19-9-11-19-9-11, 0]) button_30mm_hole();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module dir_arc_w_30mm_plus_one() {
|
module dir_arc_w_30mm_plus_one() {
|
||||||
dir_arc_w_30mm();
|
dir_arc_w_30mm();
|
||||||
translate([-33.5, -12.9, 0]) dir_arc_30mm_button_l();
|
translate([-33.8-34.8-33.8, 57.2, 0]) dir_arc_30mm_thumb_button();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Namco Noir (right hand)
|
||||||
|
|
||||||
module noir_button_p1() {
|
module noir_button_p1() {
|
||||||
translate([40, 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() {
|
||||||
@@ -272,21 +405,30 @@ module noir_plus_one() {
|
|||||||
translate([-3.47-3.47, -78, 0]) noir_button_p1();
|
translate([-3.47-3.47, -78, 0]) noir_button_p1();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sega Astro City 2P (right hand)
|
||||||
|
|
||||||
module sega_2p_p1() {
|
module sega_2p_p1() {
|
||||||
translate([33.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_plus_one() {
|
module sega_2p_6_button() {
|
||||||
// via slagcoin
|
// via slagcoin
|
||||||
sega_2p_p1();
|
sega_2p_p1();
|
||||||
translate([30.5, 11+9, 0]) sega_2p_p1();
|
translate([30.5, 11+9, 0]) sega_2p_p1();
|
||||||
translate([30.5+36, 11+9, 0]) sega_2p_p1();
|
translate([30.5+36, 11+9, 0]) sega_2p_p1();
|
||||||
translate([30.5+36+36, 11, 0]) sega_2p_p1();
|
|
||||||
translate([0, -19-9-11, 0]) sega_2p_p1();
|
translate([0, -19-9-11, 0]) sega_2p_p1();
|
||||||
translate([30.5, -19, 0]) sega_2p_p1();
|
translate([30.5, -19, 0]) sega_2p_p1();
|
||||||
translate([30.5+36, -19, 0]) sega_2p_p1();
|
translate([30.5+36, -19, 0]) sega_2p_p1();
|
||||||
translate([30.5+36+36, -19-9, 0]) sega_2p_p1();
|
}
|
||||||
|
|
||||||
// just my guesstimate on this one, but note that this is the same position as sega 2p
|
module sega_2p() {
|
||||||
|
sega_2p_6_button();
|
||||||
|
translate([30.5+36+36, 11, 0]) sega_2p_p1();
|
||||||
|
translate([30.5+36+36, -19-9, 0]) sega_2p_p1();
|
||||||
|
}
|
||||||
|
|
||||||
|
module sega_2p_plus_one() {
|
||||||
|
sega_2p();
|
||||||
|
// just my guesstimate on this one
|
||||||
translate([0, -19-9-11-19-9-11, 0]) sega_2p_p1();
|
translate([0, -19-9-11-19-9-11, 0]) sega_2p_p1();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ module base_left_frame() {
|
|||||||
difference() {
|
difference() {
|
||||||
frame();
|
frame();
|
||||||
// chop the right edge off
|
// chop the right edge off
|
||||||
frame_side_chopper();
|
side_chopper();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,15 +30,22 @@ 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([0, 100, 0]) rotate([90, 0, 0]) button_24mm_hole();
|
translate([-30, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();
|
||||||
translate([-40, 100, 0]) rotate([90, 0, 0]) button_24mm_hole();
|
translate([-30, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
translate([40, 100, 0]) rotate([90, 0, 0]) button_24mm_hole();
|
translate([-70, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();
|
||||||
|
translate([-70, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
translate([10, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();
|
||||||
|
translate([10, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
|
||||||
|
// neutrix button hole
|
||||||
|
translate([70, (frame_y/2)-neutrik_panel_thickness, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
||||||
|
translate([70, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ module base_middle_frame() {
|
|||||||
difference() {
|
difference() {
|
||||||
frame();
|
frame();
|
||||||
// chop the left and right edge off
|
// chop the left and right edge off
|
||||||
frame_side_chopper();
|
side_chopper();
|
||||||
mirror([1, 0, 0]) frame_side_chopper();
|
mirror([1, 0, 0]) side_chopper();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,17 +31,20 @@ 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, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
translate([0, (frame_y/2)-neutrik_panel_thickness, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
||||||
translate([-40, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
translate([40, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
translate([-40, (frame_y/2)-neutrik_panel_thickness, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
||||||
|
translate([-40, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
translate([40, (frame_y/2)-neutrik_panel_thickness, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
||||||
|
translate([40, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,10 +17,36 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
include <components.scad>
|
include <components.scad>
|
||||||
use <frame-left.scad>
|
|
||||||
|
module base_right_frame() {
|
||||||
|
difference() {
|
||||||
|
frame();
|
||||||
|
// chop the left edge off
|
||||||
|
mirror([1, 0, 0]) side_chopper();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module right_frame() {
|
module right_frame() {
|
||||||
mirror([1, 0, 0]) left_frame();
|
difference() {
|
||||||
|
base_right_frame();
|
||||||
|
// connection holes to other frames
|
||||||
|
mirror([1, 0, 0]) frame_connection_holes();
|
||||||
|
|
||||||
|
// 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();
|
||||||
|
translate([30, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
translate([70, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();
|
||||||
|
translate([70, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
translate([-10, 101.5, 0]) rotate([270, 0, 0]) button_24mm_hole();
|
||||||
|
translate([-10, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
|
||||||
|
// neutrix button hole
|
||||||
|
translate([-70, (frame_y/2)-neutrik_panel_thickness, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
||||||
|
translate([-70, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
right_frame();
|
right_frame();
|
||||||
|
|||||||
55
src/frame-solo.scad
Normal file
55
src/frame-solo.scad
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
/* 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 solo_frame() {
|
||||||
|
difference() {
|
||||||
|
frame();
|
||||||
|
|
||||||
|
// neutrik mounts for connector, switches
|
||||||
|
translate([0, (frame_y/2)-2.5, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
||||||
|
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
translate([-40, (frame_y/2)-2.5, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
||||||
|
translate([-40, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
translate([40, (frame_y/2)-2.5, 0]) rotate([90, 0, 0]) neutrik_d_mount();
|
||||||
|
translate([40, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
|
||||||
|
|
||||||
|
// aux button holes
|
||||||
|
translate([-frame_x/2+2.5, 0, 0]) rotate([0, 0, 270])
|
||||||
|
translate([0, 0, 0]) rotate([90, 0, 0]) button_24mm_hole();
|
||||||
|
translate([(frame_x/2)-neutrik_panel_thickness-4, 0, 0]) rotate([0, 0, 90]) frame_cutout();
|
||||||
|
translate([-frame_x/2+2.5, 0, 0]) rotate([0, 0, 270])
|
||||||
|
translate([-40, 0, 0]) rotate([90, 0, 0]) button_24mm_hole();
|
||||||
|
translate([(frame_x/2)-neutrik_panel_thickness-4, -40, 0]) rotate([0, 0, 90]) frame_cutout();
|
||||||
|
translate([-frame_x/2+2.5, 0, 0]) rotate([0, 0, 270])
|
||||||
|
translate([40, 0, 0]) rotate([90, 0, 0]) button_24mm_hole();
|
||||||
|
translate([(frame_x/2)-neutrik_panel_thickness-4, 40, 0]) rotate([0, 0, 90]) frame_cutout();
|
||||||
|
translate([frame_x/2-2.5, 0, 0]) rotate([0, 0, 90])
|
||||||
|
translate([0, 0, 0]) rotate([90, 0, 0]) button_24mm_hole();
|
||||||
|
translate([-(frame_x/2)+neutrik_panel_thickness+4, 0, 0]) rotate([0, 0, 90]) frame_cutout();
|
||||||
|
translate([frame_x/2-2.5, 0, 0]) rotate([0, 0, 90])
|
||||||
|
translate([-40, 0, 0]) rotate([90, 0, 0]) button_24mm_hole();
|
||||||
|
translate([-(frame_x/2)+neutrik_panel_thickness+4, -40, 0]) rotate([0, 0, 90]) frame_cutout();
|
||||||
|
translate([frame_x/2-2.5, 0, 0]) rotate([0, 0, 90])
|
||||||
|
translate([40, 0, 0]) rotate([90, 0, 0]) button_24mm_hole();
|
||||||
|
translate([-(frame_x/2)+neutrik_panel_thickness+4, 40, 0]) rotate([0, 0, 90]) frame_cutout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
solo_frame();
|
||||||
32
src/misc-decorative-plate-24mm-button.scad
Normal file
32
src/misc-decorative-plate-24mm-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 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);
|
||||||
|
// cut out the normal holes
|
||||||
|
translate([0, 0, -1]) button_24mm_hole();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
button_24mm_decorative_plate();
|
||||||
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();
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
/* 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_30mm_and_sega_2p_plus_one_decorative_plate() {
|
||||||
|
difference() {
|
||||||
|
// 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();
|
||||||
|
}
|
||||||
|
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([-top_plate_x/2, 0, -1]) dir_arc_w_30mm();
|
||||||
|
translate([top_plate_x/2, 0, -1]) sega_2p_plus_one();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate();
|
||||||
32
src/misc-decorative-plate-dir_arc-plus-w-30mm.scad
Normal file
32
src/misc-decorative-plate-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 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);
|
||||||
|
// cut out the normal holes
|
||||||
|
translate([0, 0, -1]) dir_arc_w_30mm();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_arc_plus_w_30mm_decorative_plate();
|
||||||
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();
|
||||||
32
src/misc-decorative-plate-sega-2p-plus-one.scad
Normal file
32
src/misc-decorative-plate-sega-2p-plus-one.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_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);
|
||||||
|
// cut out the normal holes
|
||||||
|
translate([0, 0, -1]) sega_2p_plus_one();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sega_2p_plus_one_decorative_plate();
|
||||||
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();
|
||||||
29
src/misc-dustwasher-lsx-nobi.scad
Normal file
29
src/misc-dustwasher-lsx-nobi.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 lsx_nobi_dustwasher() {
|
||||||
|
difference() {
|
||||||
|
cylinder(r=jumbo_decorative_radius+5+hole_tolerance, h=2, $fn=50, center=true);
|
||||||
|
// 5.25 = 5 (diameter of shaft is 10mm) + .25 to let it take an angle
|
||||||
|
cylinder(r=5.25+hole_tolerance, h=2.1, $fn=50, center=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lsx_nobi_dustwasher();
|
||||||
30
src/misc-neutrik-d-plate-20mm-hole.scad
Normal file
30
src/misc-neutrik-d-plate-20mm-hole.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>
|
||||||
|
use <misc-neutrik-d-plate.scad>
|
||||||
|
|
||||||
|
module neutrik_d_plate_20mm() {
|
||||||
|
difference() {
|
||||||
|
neutrik_d_plate();
|
||||||
|
cylinder(r=10+hole_tolerance, h=5, $fn=50, center=true);
|
||||||
|
cube([2.2, 22, 5], center=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
neutrik_d_plate_20mm();
|
||||||
29
src/misc-neutrik-d-plate-24mm-hole.scad
Normal file
29
src/misc-neutrik-d-plate-24mm-hole.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>
|
||||||
|
use <misc-neutrik-d-plate.scad>
|
||||||
|
|
||||||
|
module neutrik_d_plate_24mm() {
|
||||||
|
difference() {
|
||||||
|
neutrik_d_plate();
|
||||||
|
cylinder(r=12+hole_tolerance, h=5, $fn=50, center=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
neutrik_d_plate_24mm();
|
||||||
@@ -18,14 +18,12 @@
|
|||||||
|
|
||||||
include <components.scad>
|
include <components.scad>
|
||||||
|
|
||||||
module spdt_neutrik_d_plate() {
|
module neutrik_d_plate() {
|
||||||
difference() {
|
difference() {
|
||||||
cube([30, 35, 2], center=true);
|
cube([30, 35, 2], center=true);
|
||||||
translate([9.5, 12, 0]) neutrik_d_screw_hole();
|
translate([9.5, 12, 0]) neutrik_d_screw_hole();
|
||||||
translate([-9.5, -12, 0]) neutrik_d_screw_hole();
|
translate([-9.5, -12, 0]) neutrik_d_screw_hole();
|
||||||
cylinder(r=10+hole_tolerance, h=5, $fn=50, center=true);
|
|
||||||
cube([2.2, 22, 5], center=true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spdt_neutrik_d_plate();
|
neutrik_d_plate();
|
||||||
@@ -17,11 +17,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
include <components.scad>
|
include <components.scad>
|
||||||
use <top-panel-dir_arc-plus-w-30mm-plus-one.scad>
|
use <top-panel-inset-dir_arc-plus-w-30mm-plus-one.scad>
|
||||||
|
|
||||||
module dir_arc_w_30mm_plus_one_panel_with_mount() {
|
module dir_arc_w_30mm_plus_one_panel_with_mount() {
|
||||||
dir_arc_w_30mm_plus_one_panel();
|
dir_arc_w_30mm_plus_one_panel();
|
||||||
translate([65, 55, -(top_plate_z/2) - 3]) pcb_mount();
|
translate([-15, -40, -(top_plate_z/2) - 3]) rotate([0, 0, -15]) pcb_mount();
|
||||||
}
|
}
|
||||||
|
|
||||||
dir_arc_w_30mm_plus_one_panel_with_mount();
|
dir_arc_w_30mm_plus_one_panel_with_mount();
|
||||||
@@ -20,7 +20,7 @@ include <components.scad>
|
|||||||
|
|
||||||
module dir_arc_w_30mm_plus_one_panel() {
|
module dir_arc_w_30mm_plus_one_panel() {
|
||||||
difference() {
|
difference() {
|
||||||
translate([top_plate_x/2, top_plate_y/2, 0]) topplate();
|
topplate();
|
||||||
dir_arc_w_30mm_plus_one();
|
dir_arc_w_30mm_plus_one();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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();
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
include <components.scad>
|
include <components.scad>
|
||||||
use <top-panel-lever.scad>
|
use <top-panel-inset-lever.scad>
|
||||||
|
|
||||||
module lever_panel_with_mount() {
|
module lever_panel_with_mount() {
|
||||||
lever_panel();
|
lever_panel();
|
||||||
@@ -20,7 +20,7 @@ include <components.scad>
|
|||||||
|
|
||||||
module namco_noir_plus_one_panel() {
|
module namco_noir_plus_one_panel() {
|
||||||
difference() {
|
difference() {
|
||||||
translate([top_plate_x/2, top_plate_y/2, 0]) topplate();
|
topplate();
|
||||||
noir_plus_one();
|
noir_plus_one();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ include <components.scad>
|
|||||||
|
|
||||||
module namco_noir_plus_two_panel() {
|
module namco_noir_plus_two_panel() {
|
||||||
difference() {
|
difference() {
|
||||||
translate([top_plate_x/2, top_plate_y/2, 0]) topplate();
|
topplate();
|
||||||
noir_plus_one();
|
noir_plus_one();
|
||||||
translate([32.94-3.47-3.47, -78+7.37+4.49, 0]) noir_button_p1();
|
translate([32.94-3.47-3.47, -78+7.37+4.49, 0]) noir_button_p1();
|
||||||
}
|
}
|
||||||
@@ -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();
|
||||||
@@ -20,7 +20,7 @@ include <components.scad>
|
|||||||
|
|
||||||
module sega_2p_plus_one_panel() {
|
module sega_2p_plus_one_panel() {
|
||||||
difference() {
|
difference() {
|
||||||
translate([top_plate_x/2, top_plate_y/2, 0]) topplate();
|
topplate();
|
||||||
sega_2p_plus_one();
|
sega_2p_plus_one();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
33
src/top-panel-left-lever-and-dir_arc-plus-w-30mm.scad
Normal file
33
src/top-panel-left-lever-and-dir_arc-plus-w-30mm.scad
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/* 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_left_lever_and_dir_arc_w_30mm() {
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
top_plate_with_raised_overhang();
|
||||||
|
translate([(-top_plate_x/2)+55, (top_plate_y/2)-75, -((top_plate_z/2)+(lever_mount_z/2))]) levermountbase();
|
||||||
|
}
|
||||||
|
dir_arc_w_30mm();
|
||||||
|
side_chopper();
|
||||||
|
translate([(-top_plate_x/2)+55, (top_plate_y/2)-75, 0]) levermountholes();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
top_panel_left_lever_and_dir_arc_w_30mm();
|
||||||
@@ -19,22 +19,17 @@
|
|||||||
include <components.scad>
|
include <components.scad>
|
||||||
|
|
||||||
// combine the lever mount and generic plate, with mounting holes
|
// combine the lever mount and generic plate, with mounting holes
|
||||||
module left_lever_panel() {
|
module top_panel_left_lever() {
|
||||||
difference() {
|
difference() {
|
||||||
// base plate
|
// base plate
|
||||||
union() {
|
union() {
|
||||||
translate([20,-20,0])
|
translate([0,-20,0]) top_plate_with_raised_overhang();
|
||||||
topplate();
|
|
||||||
translate([0, 0, -((top_plate_z/2)+(lever_mount_z/2))]) levermountbase();
|
translate([0, 0, -((top_plate_z/2)+(lever_mount_z/2))]) levermountbase();
|
||||||
}
|
}
|
||||||
// holes to mount the lever
|
// holes to mount the lever
|
||||||
levermountholes();
|
levermountholes();
|
||||||
|
side_chopper();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module left_lever_panel_with_mount() {
|
top_panel_left_lever();
|
||||||
left_lever_panel();
|
|
||||||
translate([0, -top_plate_y/2+25, -(top_plate_z/2) - 3]) pcb_mount();
|
|
||||||
}
|
|
||||||
|
|
||||||
left_lever_panel_with_mount();
|
|
||||||
|
|||||||
27
src/top-panel-middle-dir_arc-plus-w-30mm-with-mount.scad
Normal file
27
src/top-panel-middle-dir_arc-plus-w-30mm-with-mount.scad
Normal 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-middle-dir_arc-plus-w-30mm.scad>
|
||||||
|
|
||||||
|
module top_panel_middle_dir_arc_w_30mm_with_mount() {
|
||||||
|
top_panel_middle_dir_arc_w_30mm();
|
||||||
|
translate([-15, -40, -(top_plate_z/2) - 3]) rotate([0, 0, -45]) pcb_mount();
|
||||||
|
}
|
||||||
|
|
||||||
|
top_panel_middle_dir_arc_w_30mm_with_mount();
|
||||||
30
src/top-panel-middle-dir_arc-plus-w-30mm.scad
Normal file
30
src/top-panel-middle-dir_arc-plus-w-30mm.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_middle_dir_arc_w_30mm() {
|
||||||
|
difference() {
|
||||||
|
top_plate_with_raised_overhang();
|
||||||
|
dir_arc_w_30mm();
|
||||||
|
rotate([0, 0, 180]) side_chopper();
|
||||||
|
side_chopper();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
top_panel_middle_dir_arc_w_30mm();
|
||||||
@@ -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();
|
||||||
@@ -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-right-sega-2p-plus-one-plus-control.scad>
|
||||||
|
|
||||||
|
module top_panel_right_sega_2p_plus_one_plus_control_with_mount() {
|
||||||
|
top_panel_right_sega_2p_plus_one_plus_control();
|
||||||
|
translate([30, -50, -(top_plate_z/2) - 3]) pcb_mount();
|
||||||
|
}
|
||||||
|
|
||||||
|
top_panel_right_sega_2p_plus_one_plus_control_with_mount();
|
||||||
30
src/top-panel-right-sega-2p-plus-one-plus-control.scad
Normal file
30
src/top-panel-right-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_right_sega_2p_plus_one_plus_control() {
|
||||||
|
difference() {
|
||||||
|
top_plate_with_raised_overhang();
|
||||||
|
sega_2p_plus_one();
|
||||||
|
rotate([0, 0, 180]) side_chopper();
|
||||||
|
translate([89, 30, 0]) button_24mm_hole();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
top_panel_right_sega_2p_plus_one_plus_control();
|
||||||
27
src/top-panel-right-sega-2p-plus-one-with-mount.scad
Normal file
27
src/top-panel-right-sega-2p-plus-one-with-mount.scad
Normal 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-right-sega-2p-plus-one.scad>
|
||||||
|
|
||||||
|
module top_panel_right_sega_2p_plus_one_with_mount() {
|
||||||
|
top_panel_right_sega_2p_plus_one();
|
||||||
|
translate([30, -50, -(top_plate_z/2) - 3]) pcb_mount();
|
||||||
|
}
|
||||||
|
|
||||||
|
top_panel_right_sega_2p_plus_one_with_mount();
|
||||||
29
src/top-panel-right-sega-2p-plus-one.scad
Normal file
29
src/top-panel-right-sega-2p-plus-one.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 top_panel_right_sega_2p_plus_one() {
|
||||||
|
difference() {
|
||||||
|
top_plate_with_raised_overhang();
|
||||||
|
sega_2p_plus_one();
|
||||||
|
rotate([0, 0, 180]) side_chopper();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
top_panel_right_sega_2p_plus_one();
|
||||||
28
src/top-panel-solo-dir_arc-24mm-6-button.scad
Normal file
28
src/top-panel-solo-dir_arc-24mm-6-button.scad
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/* 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_24mm_6_button_panel() {
|
||||||
|
difference() {
|
||||||
|
top_plate_with_raised_overhang();
|
||||||
|
translate([-71.5, -top_plate_y/2+122.5, 0]) dir_arc_24mm_6_button();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_arc_24mm_6_button_panel();
|
||||||
28
src/top-panel-solo-dir_arc-plus-w-24mm-8-button.scad
Normal file
28
src/top-panel-solo-dir_arc-plus-w-24mm-8-button.scad
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/* 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_panel() {
|
||||||
|
difference() {
|
||||||
|
top_plate_with_raised_overhang();
|
||||||
|
translate([-80.5, top_plate_y/6, 0]) dir_arc_plus_w_24mm_8_button();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_arc_plus_w_24mm_8_button_panel();
|
||||||
33
src/top-panel-solo-lever-and-sega-2p-6-button.scad
Normal file
33
src/top-panel-solo-lever-and-sega-2p-6-button.scad
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/* 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_solo_lever_and_sega_2p_6_button() {
|
||||||
|
difference() {
|
||||||
|
// base plate
|
||||||
|
union() {
|
||||||
|
top_plate_with_raised_overhang();
|
||||||
|
translate([-60, 18, -((top_plate_z/2)+(lever_mount_z/2))]) levermountbase();
|
||||||
|
}
|
||||||
|
translate([95, -20, 0]) sega_2p_6_button();
|
||||||
|
translate([-60, 18, 0]) levermountholes();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
top_panel_solo_lever_and_sega_2p_6_button();
|
||||||
Reference in New Issue
Block a user