21 Commits

Author SHA1 Message Date
05dab45152 fix the blown up demo and update it for the docs
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-22 13:40:01 -06:00
180b7deb9e update costs in the README based on new settings
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-22 13:40:01 -06:00
8987d403ce don't build another SCAD file I have locally for tinkering
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-22 13:40:01 -06:00
44a238f454 move the lever mount spacer out of the panels, into separate part
this has two effects:

1. thinner and thicker spacers could be printed to accommodate
   preferences without having to reprint panels
2. I'm still testing this a bit, but by not having the spacer and panel
   be the same (partially hollow) part, I think the lever clickiness is
   a bit more pleasing to the ear

the second point is entirely arbitrary, so the first point is the real
benefit, despite me trying this because of the second

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-22 13:40:01 -06:00
ed031b9308 create 2mm of additional frame bottom
this is for the bottom panels to go flush against; without it, there's a
visible gap between the panel edge and the wall cutout space

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-22 13:40:01 -06:00
296e6da14b link to a couple presences in the README
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-19 23:35:26 -06:00
c0c9b9e1dc adjust how the lever mount is aligned to do the chopper right
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-19 11:14:14 -06:00
b7af797349 un-inset the bottom panels, the bottom is now flush
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-19 10:41:59 -06:00
dd3d77ae90 correct the hole for the panel-to-frame post
made it too small accidentally, which explains why I got test prints
stuck :p

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-19 10:33:16 -06:00
f90fc095e0 remove the bottom bevel to try to simplify the print
this just chops off the bottom entirely, essentially. this could be done
cleaner but this is the least disruptive change until I'm certain of it

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-18 12:36:51 -06:00
f54aa989f7 bevel all the top edges of the frame
I didn't think I'd want this, but playing with it... yeah. it's a good
idea.

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-18 10:31:14 -06:00
abc4577173 bevel the bottom of the frame
mostly an aesthetic choice, but I think it helps mitigate the look of
the front relative to the need to have the case be deeper for some
levers, so (I believe) it's not an arbitrary aesthetic choice.

also maybe there's some benefit to have it be slightly less flush on the
surface, IDK

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-16 12:25:17 -06:00
7b2289624e fix an old math mistake with the spacing of 24mm aux buttons
their cutout for the screw nut was giving too much space, which spread
them out too much on the frame walls. this should fix it, the nuts for a
Crown SDB-202 or a Seimitsu PS-14 still fit anyway

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-15 15:32:02 -06:00
15083f6787 adjust the top panel post holes to fit appropriately
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-14 14:33:10 -06:00
a5724209fe restore space for the hex bolts in the base panel frame posts
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-14 14:04:24 -06:00
78a43e41bc fix imports of the overhang panels following renames
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-12 20:17:18 -06:00
370aeb56c6 add posts to the top panels
trying to add more friction fit to the panel to frame connection point

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-12 20:17:10 -06:00
06c27bd4aa only round the sides, not the top/bottom, of the frame
trying to simplify the print again a bit, I think the roundedness is one
of the causes of prints lifting

since the top is now "sharp" (not that sharp in my printing practice,
but whatever), I added a bevel to the front in an attempt to make it a
bit more comfortable

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-12 20:02:35 -06:00
773433cd10 add a chamfer to the frame mount columns
should add a bit of structural strength without compromising much

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-11 19:27:27 -06:00
bad3c7628f grow the frame, remove the bottom panel basin
the bottom panel had a basin or tray to make room for taller levers,
namely the Seimitsu LSX-NOBI that I really like. per its specs, the
lever needs 43.70mm internally, and the old values were too tight (55mm
- 19mm from panels - 2mm from lever plate = 43) so the bottom panel was
arbitrarily given a sunken portion (somewhat arbitrarily 2.5mm) to
compensate at the time, because I already had frames printed.

adding 2mm to the frame Z covers the difference (57mm - 10mm - 2mm =
45mm) and thus we don't need the bottom panel hack anymore. I also
suspect the bottom panel basin was slightly affecting it structurally,
so this may help that.

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-11 19:27:23 -06:00
6a1e1cc1f3 better component/parameter names to match panel naming
sed -i 's/top_plate/panel/g' *.scad
sed -i 's/plate_to_frame/panel_to_frame/g' *.scad

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-02-11 19:27:17 -06:00
25 changed files with 182 additions and 91 deletions

View File

@@ -1,4 +1,5 @@
SRC_FILES := $(wildcard ./src/*.scad)
SRC_FILES := $(filter-out ./src/all-together-demo.scad, $(SRC_FILES))
SRC_FILES := $(filter-out ./src/blown-up-demo.scad, $(SRC_FILES))
SRC_FILES := $(filter-out ./src/components.scad, $(SRC_FILES))
SRC_FILES := $(filter-out ./src/roundedcube.scad, $(SRC_FILES))

View File

@@ -2,7 +2,7 @@
Files for 3D printing an arcade stick.
![An example of stick components displayed in OpenSCAD](docs/two-panel-example-v3.png)
![An example of stick components displayed in OpenSCAD](docs/blown-up-demo.png)
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
@@ -28,6 +28,10 @@ These items all fit on a 256mm^2 print bed; I use a Bambu Lab P1P based on what
OpenStickCommunity. Standard settings seem sufficiently sturdy for my purposes, though the slicer has done a couple
weird things, in my experience.
My preferred settings are 3 wall loops with 20% gyroid sparse infill. This gives the models a bit more weight and
stability, but something like 2 wall loops, 15% grid sparse infill is fine and does not lead to a weak enclosure. The
costs below have been made against my settings.
## Assembling
What you'll need beyond these objects:
@@ -59,10 +63,10 @@ What you'll need beyond these objects:
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.
* Left and right frame: **$7.08 USD** (141.84g 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)
* Left and right frame: **$10.42 USD** (208.50g each, as of 2024-02-22)
* Left and right (inset) top panels: **~$6.40 USD** (~128g each, as of 2024-02-22)
* Left and right (non-overhang) bottom panels: **$6.80 USD** (135.99g each, as of 2024-02-22)
* Miscellaneous mounting plates, decorative plates, etc.: **~$1.83 USD** (~73g, as of 2024-02-22)
* 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)
* 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
@@ -79,9 +83,10 @@ Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
* 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
With an enclosure coming in around $31, 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.
full-featured controller with an open source foundation together for around $140. Reducing wall and infill settings
will probably save you around $5 of material, and you can probably decide what you want to do from there.
## Miscellany
@@ -99,6 +104,13 @@ Improvements, variants, new layouts, novel ideas, and etc. are all welcome.
These files are suitable for previewing and rendering in OpenSCAD. They may also work in FreeCAD and perhaps other
software, but they are developed in OpenSCAD, so YMMV otherwise.
This project is hosted at [my personal Git site](https://git.incorporeal.org/bss/buildable-stick-system), but people are
more likely to want to interact with [the GitHub mirror](https://github.com/bsstephan/buildable-stick-system). Feel free
to use either.
You may find me at a number of places; I maintain an IRC channel, `#buildable-stick-system`, on [my IRC network,
Randomus](https://randomus.net/).
## Attribution
Inspired by the incredible work of [TheTrain](https://github.com/TheTrainGoes) on the [OpenStickCommunity Fightstick

BIN
docs/blown-up-demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -7,10 +7,10 @@ include <parameters.scad>
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 <top-panel-overhang-left-lever-and-dir_arc-plus-w-30mm.scad>
use <top-panel-overhang-right-sega-2p-plus-one-plus-control-with-mount.scad>
use <bottom-panel-overhang-left.scad>
use <bottom-panel-overhang-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>

View File

@@ -5,7 +5,7 @@
include <parameters.scad>
include <components.scad>
use <bottom-panel-solo.scad>
use <bottom-panel-overhang-solo.scad>
module bottom_panel_left() {
difference() {

View File

@@ -5,8 +5,8 @@
include <parameters.scad>
include <components.scad>
use <bottom-panel-left.scad>
use <bottom-panel-right.scad>
use <bottom-panel-overhang-left.scad>
use <bottom-panel-overhang-right.scad>
module bottom_panel_middle() {
intersection() {

View File

@@ -5,7 +5,7 @@
include <parameters.scad>
include <components.scad>
use <bottom-panel-left.scad>
use <bottom-panel-overhang-left.scad>
module bottom_panel_right() {
rotate([0, 0, 180]) bottom_panel_left();

View File

@@ -8,7 +8,7 @@ include <components.scad>
module bottom_panel_solo() {
difference() {
rotate([180, 0, 0]) base_panel_with_raised_overhang();
overhang_plate();
rotate([180, 0, 0]) panel_holes();
}
}

9
src/bottom-panel.scad Normal file
View File

@@ -0,0 +1,9 @@
/*
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <parameters.scad>
include <components.scad>
bottom_panel();

View File

@@ -31,9 +31,9 @@ module panel_holes() {
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
// slagcoin has screw-in nut diameter at 29.5mm, so radius+3 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);
translate([0, 0, -25]) cylinder(r=small_button_radius+3, 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);
@@ -83,14 +83,14 @@ module rocker_20mm_mount() {
// space for a neutrik D mount or 24mm button - Z is to cut the whole inside without affecting panel lip
module frame_cutout() {
cube([36.5, 8, frame_z-(panel_z*2)], center=true);
cube([30.5, 8, frame_z-(panel_z*2)-2], center=true);
}
// bank of three 24mm buttons, commonly on a frame face
module aux_control_three_button_cluster() {
translate([-40, 0, 0]) button_24mm_hole();
translate([-37, 0, 0]) button_24mm_hole();
translate([0, 0, 0]) button_24mm_hole();
translate([40, 0, 0]) button_24mm_hole();
translate([37, 0, 0]) button_24mm_hole();
}
module m2_mount_post() {
@@ -151,6 +151,9 @@ module levermountholes() {
m4_hole();
translate([-20, -42.5, 0])
m4_hole();
}
module levermountcountersinks() {
// holes for joystick bolt countersinks
translate([20, 42.5, 2])
m4_hole_countersink();
@@ -163,6 +166,35 @@ module levermountholes() {
}
module base_panel() {
difference() {
union() {
cube([panel_x, panel_y, panel_z], center=true);
// add posts that sink into the frame, just to give
// a somewhat more sturdy/tight connection
translate([panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
translate([-panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
translate([panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
}
// the posts mentioned above need space for the actual hex bolts
// used in connecting to the frame
translate([panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
scale([1, 1, 0.1]) frame_hex_bolt_hole();
translate([-panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
scale([1, 1, 0.1]) frame_hex_bolt_hole();
translate([panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
scale([1, 1, 0.1]) frame_hex_bolt_hole();
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
scale([1, 1, 0.1]) frame_hex_bolt_hole();
}
}
module base_bottom_panel() {
cube([panel_x, panel_y, panel_z], center=true);
}
@@ -173,6 +205,13 @@ module panel() {
}
}
module bottom_panel() {
difference() {
base_bottom_panel();
mirror([0, 0, 1]) panel_holes();
}
}
module overhang_plate() {
roundedcube([overhang_panel_x, overhang_panel_y, panel_z], center=true, radius=1);
}
@@ -182,12 +221,16 @@ module base_panel_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_panel();
cube([panel_x-(panel_support_width*2), panel_y-(panel_support_width*2), panel_z*2], center=true);
cube([panel_x-(panel_support_width*2), panel_y-(panel_support_width*2), panel_z], center=true);
}
translate([panel_to_frame_point_x, panel_to_frame_point_y, -2.5]) resize([0, 0, 10]) frame_mount_column();
translate([-(panel_to_frame_point_x), panel_to_frame_point_y, -2.5]) resize([0, 0, 10]) frame_mount_column();
translate([panel_to_frame_point_x, -(panel_to_frame_point_y), -2.5]) resize([0, 0, 10]) frame_mount_column();
translate([-(panel_to_frame_point_x), -(panel_to_frame_point_y), -2.5]) resize([0, 0, 10]) frame_mount_column();
translate([panel_to_frame_point_x, panel_to_frame_point_y, -2.5]) resize([0, 0, 10])
frame_mount_column();
translate([-(panel_to_frame_point_x), panel_to_frame_point_y, -2.5]) resize([0, 0, 10])
rotate([0, 0, 90]) frame_mount_column();
translate([panel_to_frame_point_x, -(panel_to_frame_point_y), -2.5]) resize([0, 0, 10])
rotate([0, 0, 270]) frame_mount_column();
translate([-(panel_to_frame_point_x), -(panel_to_frame_point_y), -2.5]) resize([0, 0, 10])
rotate([0, 0, 180]) frame_mount_column();
overhang_plate();
}
@@ -200,7 +243,18 @@ module panel_with_raised_overhang() {
module frame_box() {
difference() {
roundedcube([frame_x, frame_y, frame_z], center=true, radius=3);
top_points = [
// top part, majority of shape
[(frame_x/2)-3, (frame_y/2)-3, panel_z/2],
[-(frame_x/2)+3, (frame_y/2)-3, panel_z/2],
[(frame_x/2)-3, -(frame_y/2)+3, panel_z/2],
[-(frame_x/2)+3, -(frame_y/2)+3, panel_z/2],
];
hull() {
for (p = top_points) {
translate(p) cylinder(r=3, h=frame_z-panel_z, center=true);
}
}
// cut out the middle to make it a box
cube([panel_x-(panel_support_width*2), panel_y-(panel_support_width*2), frame_z+5], center=true);
}
@@ -208,6 +262,9 @@ module frame_box() {
module frame_mount_column() {
cube([20, 20, frame_z], center=true);
// add some corners back to do a lame chamfer
linear_extrude(height=frame_z, center=true)
polygon([[10, 10], [-20, 10], [10, -20]]);
}
module side_chopper() {
@@ -234,9 +291,9 @@ module frame_cable_routing_hole() {
module base_frame() {
frame_box();
translate([panel_to_frame_point_x, panel_to_frame_point_y, 0]) frame_mount_column();
translate([-panel_to_frame_point_x, panel_to_frame_point_y, 0]) frame_mount_column();
translate([panel_to_frame_point_x, -(panel_to_frame_point_y), 0]) frame_mount_column();
translate([-panel_to_frame_point_x, -(panel_to_frame_point_y), 0]) frame_mount_column();
translate([-panel_to_frame_point_x, panel_to_frame_point_y, 0]) rotate([0, 0, 90]) frame_mount_column();
translate([-panel_to_frame_point_x, -(panel_to_frame_point_y), 0]) rotate([0, 0, 180]) frame_mount_column();
translate([panel_to_frame_point_x, -(panel_to_frame_point_y), 0]) rotate([0, 0, 270]) frame_mount_column();
}
module frame() {
@@ -248,6 +305,22 @@ module frame() {
translate([-panel_to_frame_point_x, panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
translate([panel_to_frame_point_x, -panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
// comfort bevel
translate([frame_x/2, 0, frame_z/2]) rotate([0, 45, 0]) cube([4, frame_y+0.01, 4], center=true);
translate([-frame_x/2, 0, frame_z/2]) rotate([0, 45, 0]) cube([4, frame_y+0.01, 4], center=true);
translate([0, frame_y/2, frame_z/2]) rotate([45, 0, 0]) cube([frame_x+0.01, 4, 4], center=true);
translate([0, -frame_y/2, frame_z/2]) rotate([45, 0, 0]) cube([frame_x+0.01, 4, 4], center=true);
// slightly larger holes than the posts in the base_panel
translate([panel_to_frame_point_x, panel_to_frame_point_y, frame_z/2-panel_z-5])
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
translate([-panel_to_frame_point_x, panel_to_frame_point_y, frame_z/2-panel_z-5])
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
translate([panel_to_frame_point_x, -panel_to_frame_point_y, frame_z/2-panel_z-5])
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, frame_z/2-panel_z-5])
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
}
}

View File

@@ -24,15 +24,15 @@ module left_frame() {
frame_cable_routing_hole();
// aux button holes
translate([-30, 101.5, 0]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([-30, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-70, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([10, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-35, 101.5, panel_z/2]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([-35, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([-72, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([2, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
// neutrix button hole
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, 0])
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 0])
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 1])
frame_cutout();
}
}

View File

@@ -27,12 +27,15 @@ module middle_frame() {
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();
translate([0, (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();
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([0, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([-40, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([-40, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([40, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([40, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
}
}

View File

@@ -24,15 +24,15 @@ module right_frame() {
mirror([1, 0, 0]) frame_cable_routing_hole();
// aux button holes
translate([30, 101.5, 0]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([30, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([70, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-10, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([35, 101.5, panel_z/2]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([35, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([72, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([-2, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
// neutrix button hole
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, 0])
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 0])
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 1])
frame_cutout();
}
}

View File

@@ -11,23 +11,25 @@ module solo_frame() {
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();
translate([0, (frame_y/2)-2.5, panel_z/2]) rotate([90, 0, 0]) neutrik_d_mount();
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([-40, (frame_y/2)-2.5, panel_z/2]) rotate([90, 0, 0]) neutrik_d_mount();
translate([-40, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([40, (frame_y/2)-2.5, panel_z/2]) rotate([90, 0, 0]) neutrik_d_mount();
translate([40, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
// aux button holes
translate([-frame_x/2+2.5, 0, 0]) rotate([90, 0, 270]) aux_control_three_button_cluster();
translate([(frame_x/2)-neutrik_panel_thickness-4, 0, 0]) rotate([0, 0, 90]) frame_cutout();
translate([(frame_x/2)-neutrik_panel_thickness-4, -40, 0]) rotate([0, 0, 90]) frame_cutout();
translate([(frame_x/2)-neutrik_panel_thickness-4, 40, 0]) rotate([0, 0, 90]) frame_cutout();
translate([-frame_x/2+2.5, 0, panel_z/2]) rotate([90, 0, 270])
aux_control_three_button_cluster();
translate([(frame_x/2)-neutrik_panel_thickness-4, 0, 1]) rotate([0, 0, 90]) frame_cutout();
translate([(frame_x/2)-neutrik_panel_thickness-4, -37, 1]) rotate([0, 0, 90]) frame_cutout();
translate([(frame_x/2)-neutrik_panel_thickness-4, 37, 1]) rotate([0, 0, 90]) frame_cutout();
translate([frame_x/2+2.5, 0, 0]) rotate([90, 0, 270]) aux_control_three_button_cluster();
translate([-(frame_x/2)+neutrik_panel_thickness+4, 0, 0]) rotate([0, 0, 90]) frame_cutout();
translate([-(frame_x/2)+neutrik_panel_thickness+4, -40, 0]) rotate([0, 0, 90]) frame_cutout();
translate([-(frame_x/2)+neutrik_panel_thickness+4, 40, 0]) rotate([0, 0, 90]) frame_cutout();
translate([frame_x/2+2.5, 0, panel_z/2]) rotate([90, 0, 270])
aux_control_three_button_cluster();
translate([-(frame_x/2)+neutrik_panel_thickness+4, 0, 1]) rotate([0, 0, 90]) frame_cutout();
translate([-(frame_x/2)+neutrik_panel_thickness+4, -37, 1]) rotate([0, 0, 90]) frame_cutout();
translate([-(frame_x/2)+neutrik_panel_thickness+4, 37, 1]) rotate([0, 0, 90]) frame_cutout();
}
}

View File

@@ -10,8 +10,8 @@ use <misc-neutrik-d-plate.scad>
module aux_control_three_button_cluster_decorative_plate() {
difference() {
hull() {
translate([-50, 0, 0]) neutrik_d_plate();
translate([50, 0, 0]) neutrik_d_plate();
translate([-44, 0, 0]) neutrik_d_plate();
translate([44, 0, 0]) neutrik_d_plate();
}
translate([0, 0, -10]) aux_control_three_button_cluster();
}

View File

@@ -6,11 +6,11 @@
include <parameters.scad>
include <components.scad>
module bottom_panel() {
module sanwa_seimitsu_lever_mount() {
difference() {
mirror([0, 0, 1]) panel();
translate([0, 0, panel_z/2]) cube([panel_x-40, panel_y-40, panel_z], center=true);
levermountbase();
levermountholes();
}
}
bottom_panel();
sanwa_seimitsu_lever_mount();

View File

@@ -35,7 +35,7 @@ lever_plate_hole = 12;
// base frame box. reminder: top of inside (including mounts) is chopped by panel_z for plates
frame_x = 233;
frame_y = 208;
frame_z = 55;
frame_z = 57;
frame_center_to_neutrik = 70;

View File

@@ -8,13 +8,10 @@ include <components.scad>
module top_panel_inset_lever_and_dir_arc_w_30mm() {
difference() {
union() {
panel();
translate([(-panel_x/2)+55, (panel_y/2)-75, -((panel_z/2)+(lever_mount_z/2))])
levermountbase();
}
dir_arc_w_30mm();
translate([(-panel_x/2)+55, (panel_y/2)-75, 0]) levermountholes();
translate([(-panel_x/2)+55, (panel_y/2)-75, 0]) levermountcountersinks();
}
}

View File

@@ -10,12 +10,10 @@ include <components.scad>
module lever_panel() {
difference() {
// base plate
union() {
translate([0,-20,0]) panel();
translate([0, 0, -((panel_z/2)+(lever_mount_z/2))]) levermountbase();
}
// holes to mount the lever
levermountholes();
levermountcountersinks();
}
}

View File

@@ -8,13 +8,11 @@ include <components.scad>
module top_panel_left_lever_and_dir_arc_w_30mm() {
difference() {
union() {
panel_with_raised_overhang();
translate([(-panel_x/2)+55, (panel_y/2)-75, -((panel_z/2)+(lever_mount_z/2))]) levermountbase();
}
dir_arc_w_30mm();
side_chopper();
translate([(-panel_x/2)+55, (panel_y/2)-75, 0]) levermountholes();
translate([(-panel_x/2)+55, (panel_y/2)-75, 0]) levermountcountersinks();
}
}

View File

@@ -10,12 +10,10 @@ include <components.scad>
module top_panel_left_lever() {
difference() {
// base plate
union() {
translate([0,-20,0]) panel_with_raised_overhang();
translate([0, 0, -((panel_z/2)+(lever_mount_z/2))]) levermountbase();
}
panel_with_raised_overhang();
// holes to mount the lever
levermountholes();
translate([0, 20, 0]) levermountholes();
translate([0, 20, 0]) levermountcountersinks();
side_chopper();
}
}

View File

@@ -5,7 +5,7 @@
include <parameters.scad>
include <components.scad>
use <top-panel-middle-dir_arc-plus-w-30mm.scad>
use <top-panel-overhang-middle-dir_arc-plus-w-30mm.scad>
module top_panel_middle_dir_arc_w_30mm_with_mount() {
top_panel_middle_dir_arc_w_30mm();

View File

@@ -5,7 +5,7 @@
include <parameters.scad>
include <components.scad>
use <top-panel-right-sega-2p-plus-one-plus-control-with-mount.scad>
use <top-panel-overhang-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() {

View File

@@ -5,7 +5,7 @@
include <parameters.scad>
include <components.scad>
use <top-panel-right-sega-2p-plus-one-plus-control.scad>
use <top-panel-overhang-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();

View File

@@ -5,7 +5,7 @@
include <parameters.scad>
include <components.scad>
use <top-panel-right-sega-2p-plus-one.scad>
use <top-panel-overhang-right-sega-2p-plus-one.scad>
module top_panel_right_sega_2p_plus_one_with_mount() {
top_panel_right_sega_2p_plus_one();