Compare commits

...

10 Commits

Author SHA1 Message Date
facee903cf
add mount for a standard PS360+/RP2040ABB form factor PCB 2023-08-20 23:59:24 -05:00
f5ecdc9154
shrink the JLF mount panel height by 1mm
trying to shave a couple mm off the design to make room for this Seimitsu SEL-70X-F
2023-08-20 23:54:50 -05:00
80079a74a8
properly center frame mounting holes
noticed this after my first print, it's a fix for v1 but I don't think
I'll bother reprinting my stuff yet
2023-08-20 18:24:25 -05:00
40692bb6ff
bottom panel is just the base top panel 2023-08-20 09:56:47 -05:00
33271abef0
leaving some notes and comments for myself 2023-08-20 09:56:02 -05:00
f46500e941
start a TODO document for noticed future tweaks 2023-08-19 22:33:02 -05:00
6064884a89
account for 24mm buttons in the frame tops 2023-08-19 17:51:01 -05:00
7faa28b4b1
simplify the frame and use roundedcube for it 2023-08-19 08:59:41 -05:00
6c04c1b2f2
ethercon (and probably other neutrik Ds) need the wall thinner
to avoid overhang, this shrinks the overall case by 2mm on the x and y,
as this number was somewhat arbitrary
2023-08-18 13:18:38 -05:00
78ea95ecbd
moduleify middle_frame for testing purposes 2023-08-18 10:08:34 -05:00
9 changed files with 223 additions and 34 deletions

10
TODO.md Normal file
View File

@ -0,0 +1,10 @@
# TODO
Notes for "next time".
## v2
* I need at least 5mm, maybe 10mm, more height, to fit some of my levers like the Nobi Bullet
* 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?

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

@ -0,0 +1,25 @@
/* Copyright Brian Stephan 2023
*
* This file is part of bullet-system-stick.
*
* bullet-system-stick 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.
*
* bullet-system-stick 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
* bullet-system-stick. If not, see <https://www.gnu.org/licenses/>.
*/
include <components.scad>
module bottom_panel() {
mirror([0, 0, 1]) topplate();
}
bottom_panel();

View File

@ -16,11 +16,16 @@
* bullet-system-stick. If not, see <https://www.gnu.org/licenses/>. * bullet-system-stick. If not, see <https://www.gnu.org/licenses/>.
*/ */
include <roundedcube.scad>
/* QUASI-CONSTANTS */ /* QUASI-CONSTANTS */
// adjustments // adjustments
hole_tolerance = 0.15; hole_tolerance = 0.15;
// M3
m3_screw_selftap_radius = 1.3;
// M4 // M4
m4_bolt_radius = 2 + hole_tolerance; m4_bolt_radius = 2 + hole_tolerance;
m4_bolt_countersink_radius = 6.1 + hole_tolerance; m4_bolt_countersink_radius = 6.1 + hole_tolerance;
@ -32,10 +37,15 @@ small_button_radius = 12 + hole_tolerance;
// 30mm button // 30mm button
big_button_radius = 15 + hole_tolerance; big_button_radius = 15 + hole_tolerance;
// JLF mount dimensions
lever_mount_x = 53;
lever_mount_y = 95;
lever_mount_z = 2;
// case dimensions // case dimensions
frame_x = 185; frame_x = 183;
frame_y = 210; frame_y = 208;
frame_z = 45; frame_z = 45; // reminder: inside (including mounts) is chopped by top_plate_z for plates
top_plate_x = 175; top_plate_x = 175;
top_plate_y = 200; top_plate_y = 200;
top_plate_z = 5; top_plate_z = 5;
@ -84,12 +94,26 @@ module neutrik_d_mount() {
translate([-9.5, -12, 0]) neutrik_d_screw_hole(); translate([-9.5, -12, 0]) neutrik_d_screw_hole();
} }
module m3_mount_post() {
difference() {
cylinder(r=m3_screw_selftap_radius*4, h=8, $fn=6, center=true);
cylinder(r=m3_screw_selftap_radius, h=8*2, $fn=50, center=true);
}
}
module pcb_mount() {
translate([44, 18.5, 0]) m3_mount_post();
translate([44, -18.5, 0]) m3_mount_post();
translate([-44, 18.5, 0]) m3_mount_post();
translate([-44, -18.5, 0]) m3_mount_post();
}
/* PIECES */ /* PIECES */
module levermountbase() { module levermountbase() {
difference() { difference() {
// base plate // base plate
cube([53,95,3], center=true); cube([lever_mount_x, lever_mount_y, lever_mount_z], center=true);
// joystick hole // joystick hole
cylinder(r=21, h=3.1, $fn=50, center=true); cylinder(r=21, h=3.1, $fn=50, center=true);
} }
@ -150,8 +174,8 @@ module topplate() {
module frame_box() { module frame_box() {
difference() { difference() {
cube([frame_x, frame_y, frame_z], center=true); roundedcube([frame_x, frame_y, frame_z], center=true, radius=3);
cube([160, 185, frame_z+5], center=true); cube([frame_x-26, frame_y-26, frame_z+5], center=true);
} }
} }
@ -159,15 +183,8 @@ module frame_mount_column() {
cube([20, 20, frame_z], center=true); cube([20, 20, frame_z], center=true);
} }
module frame_panel_surround() {
difference() {
cube([frame_x, frame_y, top_plate_z], center=true);
scale([1, 1, 2]) base_topplate();
}
}
module frame_side_chopper() { module frame_side_chopper() {
translate([frame_x/2, 0, 0]) cube([10.001, 2*(frame_y+top_plate_y), 2*(frame_z+top_plate_z)], center=true); translate([frame_x/2, 0, 0]) cube([8, 2*(frame_y+top_plate_y), 2*(frame_z+top_plate_z)], center=true);
} }
module frame_connection_holes() { module frame_connection_holes() {
@ -188,8 +205,6 @@ module frame_cable_routing_hole() {
module base_frame() { module base_frame() {
frame_box(); frame_box();
translate([0, 0, frame_z/2 + top_plate_z/2])
frame_panel_surround();
translate([(top_plate_x/2)-10, (top_plate_y/2)-10, 0]) translate([(top_plate_x/2)-10, (top_plate_y/2)-10, 0])
frame_mount_column(); frame_mount_column();
translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0]) translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0])
@ -203,6 +218,7 @@ module base_frame() {
module frame() { module frame() {
difference() { difference() {
base_frame(); base_frame();
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([(top_plate_x/2)-10, (top_plate_y/2)-10, 0])
frame_hex_bolt_hole(); frame_hex_bolt_hole();
translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0]) translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0])
@ -211,6 +227,9 @@ module frame() {
frame_hex_bolt_hole(); frame_hex_bolt_hole();
translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0]) translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0])
frame_hex_bolt_hole(); 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);
} }
} }

View File

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

View File

@ -18,7 +18,7 @@
include <components.scad> include <components.scad>
module middle_frame() { module base_middle_frame() {
difference() { difference() {
frame(); frame();
// chop the left and right edge off // chop the left and right edge off
@ -27,18 +27,22 @@ module middle_frame() {
} }
} }
difference() { module middle_frame() {
middle_frame(); difference() {
// connection holes to other frames base_middle_frame();
frame_connection_holes(); // connection holes to other frames
mirror([1, 0, 0]) frame_connection_holes(); translate([0, 0, -top_plate_z/2]) frame_connection_holes();
translate([0, 0, -top_plate_z/2]) mirror([1, 0, 0]) frame_connection_holes();
// cable routing holes // cable routing holes
frame_cable_routing_hole(); translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole();
mirror([1, 0, 0]) frame_cable_routing_hole(); translate([0, 0, -top_plate_z/2]) 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, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount();
translate([-40, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount(); translate([-40, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount();
translate([40, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount(); translate([40, 100, 0]) rotate([90, 0, 0]) neutrik_d_mount();
}
} }
middle_frame();

26
src/frame-right.scad Normal file
View File

@ -0,0 +1,26 @@
/* Copyright Brian Stephan 2023
*
* This file is part of bullet-system-stick.
*
* bullet-system-stick 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.
*
* bullet-system-stick 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
* bullet-system-stick. If not, see <https://www.gnu.org/licenses/>.
*/
include <components.scad>
use <frame-left.scad>
module right_frame() {
mirror([1, 0, 0]) left_frame();
}
right_frame();

55
src/roundedcube.scad Normal file
View File

@ -0,0 +1,55 @@
// More information: https://danielupshaw.com/openscad-rounded-corners/
// Set to 0.01 for higher definition curves (renders slower)
$fs = 0.15;
module roundedcube(size = [1, 1, 1], center = false, radius = 0.5, apply_to = "all") {
// If single value, convert to [x, y, z] vector
size = (size[0] == undef) ? [size, size, size] : size;
translate_min = radius;
translate_xmax = size[0] - radius;
translate_ymax = size[1] - radius;
translate_zmax = size[2] - radius;
diameter = radius * 2;
obj_translate = (center == false) ?
[0, 0, 0] : [
-(size[0] / 2),
-(size[1] / 2),
-(size[2] / 2)
];
translate(v = obj_translate) {
hull() {
for (translate_x = [translate_min, translate_xmax]) {
x_at = (translate_x == translate_min) ? "min" : "max";
for (translate_y = [translate_min, translate_ymax]) {
y_at = (translate_y == translate_min) ? "min" : "max";
for (translate_z = [translate_min, translate_zmax]) {
z_at = (translate_z == translate_min) ? "min" : "max";
translate(v = [translate_x, translate_y, translate_z])
if (
(apply_to == "all") ||
(apply_to == "xmin" && x_at == "min") || (apply_to == "xmax" && x_at == "max") ||
(apply_to == "ymin" && y_at == "min") || (apply_to == "ymax" && y_at == "max") ||
(apply_to == "zmin" && z_at == "min") || (apply_to == "zmax" && z_at == "max")
) {
sphere(r = radius);
} else {
rotate =
(apply_to == "xmin" || apply_to == "xmax" || apply_to == "x") ? [0, 90, 0] : (
(apply_to == "ymin" || apply_to == "ymax" || apply_to == "y") ? [90, 90, 0] :
[0, 0, 0]
);
rotate(a = rotate)
cylinder(h = diameter, r = radius, center = true);
}
}
}
}
}
}
}

View File

@ -25,12 +25,16 @@ module left_lever_panel() {
union() { union() {
translate([20,-20,0]) translate([20,-20,0])
topplate(); topplate();
translate([0,0,-4]) translate([0, 0, -((top_plate_z/2)+(lever_mount_z/2))]) levermountbase();
levermountbase();
} }
// holes to mount the lever // holes to mount the lever
levermountholes(); levermountholes();
} }
} }
left_lever_panel(); module left_lever_panel_with_mount() {
left_lever_panel();
translate([0, -top_plate_y/2+25, -(top_plate_z/2) - 3]) pcb_mount();
}
left_lever_panel_with_mount();

41
src/top-panel-lever.scad Normal file
View File

@ -0,0 +1,41 @@
/* Copyright Brian Stephan 2023
*
* This file is part of bullet-system-stick.
*
* bullet-system-stick 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.
*
* bullet-system-stick 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
* bullet-system-stick. If not, see <https://www.gnu.org/licenses/>.
*/
include <components.scad>
// combine the lever mount and generic plate, with mounting holes
module lever_panel() {
difference() {
// base plate
union() {
translate([0,-20,0])
topplate();
translate([0, 0, -((top_plate_z/2)+(lever_mount_z/2))])
levermountbase();
}
// holes to mount the lever
levermountholes();
}
}
module lever_panel_with_mount() {
lever_panel();
translate([0, -top_plate_y/2+25, -(top_plate_z/2) - 3]) pcb_mount();
}
lever_panel_with_mount();