Compare commits

..

No commits in common. "facee903cf8b858d8478f7c35e8c09425052a844" and "42f417d86a3684dc78fa63500eee7f62afb2d6f2" have entirely different histories.

9 changed files with 34 additions and 223 deletions

10
TODO.md
View File

@ -1,10 +0,0 @@
# 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?

View File

@ -1,25 +0,0 @@
/* 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,16 +16,11 @@
* 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;
@ -37,15 +32,10 @@ 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 = 183; frame_x = 185;
frame_y = 208; frame_y = 210;
frame_z = 45; // reminder: inside (including mounts) is chopped by top_plate_z for plates frame_z = 45;
top_plate_x = 175; top_plate_x = 175;
top_plate_y = 200; top_plate_y = 200;
top_plate_z = 5; top_plate_z = 5;
@ -94,26 +84,12 @@ 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([lever_mount_x, lever_mount_y, lever_mount_z], center=true); cube([53,95,3], 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);
} }
@ -174,8 +150,8 @@ module topplate() {
module frame_box() { module frame_box() {
difference() { difference() {
roundedcube([frame_x, frame_y, frame_z], center=true, radius=3); cube([frame_x, frame_y, frame_z], center=true);
cube([frame_x-26, frame_y-26, frame_z+5], center=true); cube([160, 185, frame_z+5], center=true);
} }
} }
@ -183,8 +159,15 @@ 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([8, 2*(frame_y+top_plate_y), 2*(frame_z+top_plate_z)], center=true); translate([frame_x/2, 0, 0]) cube([10.001, 2*(frame_y+top_plate_y), 2*(frame_z+top_plate_z)], center=true);
} }
module frame_connection_holes() { module frame_connection_holes() {
@ -205,6 +188,8 @@ 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])
@ -218,7 +203,6 @@ 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])
@ -227,9 +211,6 @@ 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,15 +30,10 @@ module left_frame() {
difference() { difference() {
base_left_frame(); base_left_frame();
// connection holes to other frames // connection holes to other frames
translate([0, 0, -top_plate_z/2]) frame_connection_holes(); frame_connection_holes();
// cable routing hole // cable routing hole
translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole(); 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 base_middle_frame() { module middle_frame() {
difference() { difference() {
frame(); frame();
// chop the left and right edge off // chop the left and right edge off
@ -27,22 +27,18 @@ module base_middle_frame() {
} }
} }
module middle_frame() { difference() {
difference() { middle_frame();
base_middle_frame();
// connection holes to other frames // connection holes to other frames
translate([0, 0, -top_plate_z/2]) frame_connection_holes(); frame_connection_holes();
translate([0, 0, -top_plate_z/2]) mirror([1, 0, 0]) frame_connection_holes(); mirror([1, 0, 0]) frame_connection_holes();
// cable routing holes // cable routing holes
translate([0, 0, -top_plate_z/2]) frame_cable_routing_hole(); frame_cable_routing_hole();
translate([0, 0, -top_plate_z/2]) 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, 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();

View File

@ -1,26 +0,0 @@
/* 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();

View File

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

View File

@ -1,41 +0,0 @@
/* 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();