Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
05dab45152
|
|||
|
180b7deb9e
|
|||
|
8987d403ce
|
|||
|
44a238f454
|
|||
|
ed031b9308
|
|||
|
296e6da14b
|
|||
|
c0c9b9e1dc
|
|||
|
b7af797349
|
|||
|
dd3d77ae90
|
|||
|
f90fc095e0
|
|||
|
f54aa989f7
|
|||
|
abc4577173
|
|||
|
7b2289624e
|
|||
|
15083f6787
|
|||
|
a5724209fe
|
|||
|
78a43e41bc
|
|||
|
370aeb56c6
|
|||
|
06c27bd4aa
|
|||
|
773433cd10
|
|||
|
bad3c7628f
|
|||
|
6a1e1cc1f3
|
1
Makefile
1
Makefile
@@ -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))
|
||||
|
||||
26
README.md
26
README.md
@@ -2,7 +2,7 @@
|
||||
|
||||
Files for 3D printing an arcade stick.
|
||||
|
||||

|
||||

|
||||
|
||||
[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
BIN
docs/blown-up-demo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
@@ -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>
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
9
src/bottom-panel.scad
Normal 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();
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
panel();
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
translate([0,-20,0]) panel();
|
||||
// holes to mount the lever
|
||||
levermountholes();
|
||||
levermountcountersinks();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
panel_with_raised_overhang();
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user