1 Commits

Author SHA1 Message Date
861a73708f 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-09 14:31:18 -06:00
25 changed files with 91 additions and 182 deletions

View File

@@ -1,5 +1,4 @@
SRC_FILES := $(wildcard ./src/*.scad) 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/blown-up-demo.scad, $(SRC_FILES))
SRC_FILES := $(filter-out ./src/components.scad, $(SRC_FILES)) SRC_FILES := $(filter-out ./src/components.scad, $(SRC_FILES))
SRC_FILES := $(filter-out ./src/roundedcube.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. Files for 3D printing an arcade stick.
![An example of stick components displayed in OpenSCAD](docs/blown-up-demo.png) ![An example of stick components displayed in OpenSCAD](docs/two-panel-example-v3.png)
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.] [OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
@@ -28,10 +28,6 @@ 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 OpenStickCommunity. Standard settings seem sufficiently sturdy for my purposes, though the slicer has done a couple
weird things, in my experience. 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 ## Assembling
What you'll need beyond these objects: What you'll need beyond these objects:
@@ -63,10 +59,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. 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. Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
* Left and right frame: **$10.42 USD** (208.50g each, as of 2024-02-22) * Left and right frame: **$7.08 USD** (141.84g each, as of 2023-09-12)
* Left and right (inset) top panels: **~$6.40 USD** (~128g each, as of 2024-02-22) * Left and right (overhang) top panels: **~$6.74 USD** (~135g each, as of 2023-09-12)
* Left and right (non-overhang) bottom panels: **$6.80 USD** (135.99g each, as of 2024-02-22) * Left and right (overhang) bottom panels: **$5.90 USD** (118.16g each, as of 2023-09-12)
* Miscellaneous mounting plates, decorative plates, etc.: **~$1.83 USD** (~73g, as of 2024-02-22) * Miscellaneous mounting plates, decorative plates, etc.: **~$1.00 USD** (~40g, as of 2023-09-12)
* 8 16mm M4 bolts to connect the frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of 2023-09-12) * 8 16mm M4 bolts to connect the frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of 2023-09-12)
* 8 M4 flange nuts to connect the frames: **$0.68 USD** (you can get a pack of 100 on Amazon for $8.50, as of 2023-09-12) * 8 M4 flange nuts to connect the frames: **$0.68 USD** (you can get a pack of 100 on Amazon for $8.50, as of 2023-09-12)
* 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 * 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
@@ -83,10 +79,9 @@ 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 * 8 12mm M4 bolts to connect bottom plates to frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of
2023-09-12) 2023-09-12)
With an enclosure coming in around $31, depending on your choices --- say, ~$30 for TheTrain's RP2040 Advanced Breakout With an enclosure coming in around $26, depending on your choices --- say, ~$30 for TheTrain's RP2040 Advanced Breakout
Board, ~$60 for Sanwa buttons and a lever, and ~$20 for miscellaneous connectors and wiring --- you can put a Board, ~$60 for Sanwa buttons and a lever, and ~$20 for miscellaneous connectors and wiring --- you can put a
full-featured controller with an open source foundation together for around $140. Reducing wall and infill settings full-featured controller with an open source foundation together for around $135.
will probably save you around $5 of material, and you can probably decide what you want to do from there.
## Miscellany ## Miscellany
@@ -104,13 +99,6 @@ 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 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. 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 ## Attribution
Inspired by the incredible work of [TheTrain](https://github.com/TheTrainGoes) on the [OpenStickCommunity Fightstick Inspired by the incredible work of [TheTrain](https://github.com/TheTrainGoes) on the [OpenStickCommunity Fightstick

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -7,10 +7,10 @@ include <parameters.scad>
include <components.scad> include <components.scad>
use <frame-left.scad> use <frame-left.scad>
use <frame-right.scad> use <frame-right.scad>
use <top-panel-overhang-left-lever-and-dir_arc-plus-w-30mm.scad> use <top-panel-left-lever-and-dir_arc-plus-w-30mm.scad>
use <top-panel-overhang-right-sega-2p-plus-one-plus-control-with-mount.scad> use <top-panel-right-sega-2p-plus-one-plus-control-with-mount.scad>
use <bottom-panel-overhang-left.scad> use <bottom-panel-left.scad>
use <bottom-panel-overhang-right.scad> use <bottom-panel-right.scad>
use <misc-decorative-plate-24mm-button.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-decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one.scad>
use <misc-dustwasher-lsx-nobi.scad> use <misc-dustwasher-lsx-nobi.scad>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,9 +0,0 @@
/*
* 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() { module button_24mm_hole() {
cylinder(r=small_button_radius, h=100, $fn=50, center=true); cylinder(r=small_button_radius, h=100, $fn=50, center=true);
// carve out space for snap-ins, leave 3mm // carve out space for snap-ins, leave 3mm
// slagcoin has screw-in nut diameter at 29.5mm, so radius+3 to leave some space // 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 // translation is to leave 3mm thickness in the plate without recentering anything
translate([0, 0, -25]) cylinder(r=small_button_radius+3, h=49, $fn=50, center=true); translate([0, 0, -25]) cylinder(r=small_button_radius+6, h=49, $fn=50, center=true);
// space for decorative button surround stuff // space for decorative button surround stuff
translate([0, 0, 50]) cylinder(r=small_button_radius*decorative_radius_scale, h=20, $fn=50, center=true); translate([0, 0, 50]) cylinder(r=small_button_radius*decorative_radius_scale, h=20, $fn=50, center=true);
translate([0, 0, 70]) cylinder(r=small_button_radius*jumbo_decorative_radius_scale, h=20, $fn=50, center=true); 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 // space for a neutrik D mount or 24mm button - Z is to cut the whole inside without affecting panel lip
module frame_cutout() { module frame_cutout() {
cube([30.5, 8, frame_z-(panel_z*2)-2], center=true); cube([36.5, 8, frame_z-(panel_z*2)], center=true);
} }
// bank of three 24mm buttons, commonly on a frame face // bank of three 24mm buttons, commonly on a frame face
module aux_control_three_button_cluster() { module aux_control_three_button_cluster() {
translate([-37, 0, 0]) button_24mm_hole(); translate([-40, 0, 0]) button_24mm_hole();
translate([0, 0, 0]) button_24mm_hole(); translate([0, 0, 0]) button_24mm_hole();
translate([37, 0, 0]) button_24mm_hole(); translate([40, 0, 0]) button_24mm_hole();
} }
module m2_mount_post() { module m2_mount_post() {
@@ -151,9 +151,6 @@ module levermountholes() {
m4_hole(); m4_hole();
translate([-20, -42.5, 0]) translate([-20, -42.5, 0])
m4_hole(); m4_hole();
}
module levermountcountersinks() {
// holes for joystick bolt countersinks // holes for joystick bolt countersinks
translate([20, 42.5, 2]) translate([20, 42.5, 2])
m4_hole_countersink(); m4_hole_countersink();
@@ -166,35 +163,6 @@ module levermountcountersinks() {
} }
module base_panel() { 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); cube([panel_x, panel_y, panel_z], center=true);
} }
@@ -205,13 +173,6 @@ module panel() {
} }
} }
module bottom_panel() {
difference() {
base_bottom_panel();
mirror([0, 0, 1]) panel_holes();
}
}
module overhang_plate() { module overhang_plate() {
roundedcube([overhang_panel_x, overhang_panel_y, panel_z], center=true, radius=1); roundedcube([overhang_panel_x, overhang_panel_y, panel_z], center=true, radius=1);
} }
@@ -221,16 +182,12 @@ module base_panel_with_raised_overhang() {
// make a frame out of the top plate (and keep the main plate on the center plane) // make a frame out of the top plate (and keep the main plate on the center plane)
translate([0, 0, -5]) difference() { translate([0, 0, -5]) difference() {
base_panel(); base_panel();
cube([panel_x-(panel_support_width*2), panel_y-(panel_support_width*2), panel_z], center=true); cube([panel_x-(panel_support_width*2), panel_y-(panel_support_width*2), panel_z*2], center=true);
} }
translate([panel_to_frame_point_x, panel_to_frame_point_y, -2.5]) resize([0, 0, 10]) translate([panel_to_frame_point_x, panel_to_frame_point_y, -2.5]) resize([0, 0, 10]) frame_mount_column();
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]) translate([panel_to_frame_point_x, -(panel_to_frame_point_y), -2.5]) resize([0, 0, 10]) frame_mount_column();
rotate([0, 0, 90]) 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, 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(); overhang_plate();
} }
@@ -243,18 +200,7 @@ module panel_with_raised_overhang() {
module frame_box() { module frame_box() {
difference() { difference() {
top_points = [ roundedcube([frame_x, frame_y, frame_z], center=true, radius=3);
// 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 // 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); cube([panel_x-(panel_support_width*2), panel_y-(panel_support_width*2), frame_z+5], center=true);
} }
@@ -262,9 +208,6 @@ module frame_box() {
module frame_mount_column() { module frame_mount_column() {
cube([20, 20, frame_z], center=true); 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() { module side_chopper() {
@@ -291,9 +234,9 @@ module frame_cable_routing_hole() {
module base_frame() { module base_frame() {
frame_box(); 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]) rotate([0, 0, 90]) 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, 180]) 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, 270]) frame_mount_column(); translate([-panel_to_frame_point_x, -(panel_to_frame_point_y), 0]) frame_mount_column();
} }
module frame() { module frame() {
@@ -305,22 +248,6 @@ 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(); 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(); frame_cable_routing_hole();
// aux button holes // aux button holes
translate([-35, 101.5, panel_z/2]) rotate([270, 0, 0]) aux_control_three_button_cluster(); translate([-30, 101.5, 0]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([-35, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout(); translate([-30, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-72, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout(); translate([-70, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([2, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout(); translate([10, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
// neutrix button hole // neutrix button hole
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, panel_z/2]) translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, 0])
rotate([90, 0, 0]) neutrik_d_mount(); rotate([90, 0, 0]) neutrik_d_mount();
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 1]) translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 0])
frame_cutout(); frame_cutout();
} }
} }

View File

@@ -27,15 +27,12 @@ module middle_frame() {
mirror([1, 0, 0]) frame_cable_routing_hole(); mirror([1, 0, 0]) frame_cable_routing_hole();
// neutrik mounts for connector, switches // neutrik mounts for connector, switches
translate([0, (frame_y/2)-neutrik_panel_thickness, panel_z/2]) translate([0, (frame_y/2)-neutrik_panel_thickness, 0]) rotate([90, 0, 0]) neutrik_d_mount();
rotate([90, 0, 0]) neutrik_d_mount(); translate([0, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 1]) 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, panel_z/2]) translate([-40, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
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, 1]) frame_cutout(); translate([40, (frame_y/2)-neutrik_panel_thickness-4, 0]) 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(); mirror([1, 0, 0]) frame_cable_routing_hole();
// aux button holes // aux button holes
translate([35, 101.5, panel_z/2]) rotate([270, 0, 0]) aux_control_three_button_cluster(); translate([30, 101.5, 0]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([35, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout(); translate([30, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([72, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout(); translate([70, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-2, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout(); translate([-10, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
// neutrix button hole // neutrix button hole
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, panel_z/2]) translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, 0])
rotate([90, 0, 0]) neutrik_d_mount(); rotate([90, 0, 0]) neutrik_d_mount();
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 1]) translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 0])
frame_cutout(); frame_cutout();
} }
} }

View File

@@ -11,25 +11,23 @@ module solo_frame() {
frame(); frame();
// neutrik mounts for connector, switches // neutrik mounts for connector, switches
translate([0, (frame_y/2)-2.5, panel_z/2]) rotate([90, 0, 0]) neutrik_d_mount(); translate([0, (frame_y/2)-2.5, 0]) rotate([90, 0, 0]) neutrik_d_mount();
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout(); translate([0, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-40, (frame_y/2)-2.5, panel_z/2]) rotate([90, 0, 0]) neutrik_d_mount(); translate([-40, (frame_y/2)-2.5, 0]) 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-4, 0]) frame_cutout();
translate([40, (frame_y/2)-2.5, panel_z/2]) rotate([90, 0, 0]) neutrik_d_mount(); translate([40, (frame_y/2)-2.5, 0]) 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-4, 0]) frame_cutout();
// aux button holes // aux button holes
translate([-frame_x/2+2.5, 0, panel_z/2]) rotate([90, 0, 270]) translate([-frame_x/2+2.5, 0, 0]) rotate([90, 0, 270]) aux_control_three_button_cluster();
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, 0, 1]) 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, -37, 1]) 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, 37, 1]) rotate([0, 0, 90]) frame_cutout();
translate([frame_x/2+2.5, 0, panel_z/2]) rotate([90, 0, 270]) translate([frame_x/2+2.5, 0, 0]) rotate([90, 0, 270]) aux_control_three_button_cluster();
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, 0, 1]) 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, -37, 1]) 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, 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() { module aux_control_three_button_cluster_decorative_plate() {
difference() { difference() {
hull() { hull() {
translate([-44, 0, 0]) neutrik_d_plate(); translate([-50, 0, 0]) neutrik_d_plate();
translate([44, 0, 0]) neutrik_d_plate(); translate([50, 0, 0]) neutrik_d_plate();
} }
translate([0, 0, -10]) aux_control_three_button_cluster(); translate([0, 0, -10]) aux_control_three_button_cluster();
} }

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 // base frame box. reminder: top of inside (including mounts) is chopped by panel_z for plates
frame_x = 233; frame_x = 233;
frame_y = 208; frame_y = 208;
frame_z = 57; frame_z = 55;
frame_center_to_neutrik = 70; frame_center_to_neutrik = 70;

View File

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

View File

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

View File

@@ -8,11 +8,13 @@ include <components.scad>
module top_panel_left_lever_and_dir_arc_w_30mm() { module top_panel_left_lever_and_dir_arc_w_30mm() {
difference() { difference() {
panel_with_raised_overhang(); 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(); dir_arc_w_30mm();
side_chopper(); side_chopper();
translate([(-panel_x/2)+55, (panel_y/2)-75, 0]) levermountholes(); 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,10 +10,12 @@ include <components.scad>
module top_panel_left_lever() { module top_panel_left_lever() {
difference() { difference() {
// base plate // base plate
panel_with_raised_overhang(); union() {
translate([0,-20,0]) panel_with_raised_overhang();
translate([0, 0, -((panel_z/2)+(lever_mount_z/2))]) levermountbase();
}
// holes to mount the lever // holes to mount the lever
translate([0, 20, 0]) levermountholes(); levermountholes();
translate([0, 20, 0]) levermountcountersinks();
side_chopper(); side_chopper();
} }
} }

View File

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

View File

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

View File

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

View File

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