Compare commits
10 Commits
42f417d86a
...
facee903cf
Author | SHA1 | Date | |
---|---|---|---|
facee903cf | |||
f5ecdc9154 | |||
80079a74a8 | |||
40692bb6ff | |||
33271abef0 | |||
f46500e941 | |||
6064884a89 | |||
7faa28b4b1 | |||
6c04c1b2f2 | |||
78ea95ecbd |
10
TODO.md
Normal file
10
TODO.md
Normal 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
25
src/bottom-panel.scad
Normal 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();
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
26
src/frame-right.scad
Normal 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
55
src/roundedcube.scad
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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
41
src/top-panel-lever.scad
Normal 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();
|
Loading…
x
Reference in New Issue
Block a user