Compare commits

...

6 Commits

Author SHA1 Message Date
bcf2adcaa2
add a short FAQ to answer a question on IRC
and maybe more questions in the future

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-06-20 08:11:34 -05:00
5e25a27d58
add a simple sleeve for a hex spacer that isn't wide enough
I got a bag of spacers that are not as wide as what I normally use, so
they rattle around in the post hole and obviously don't help with the
fit of the completed stick. this sleeve seems to be right for them to
fill the hole. provided in case it is useful in the future, for myself
or anyone else

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-06-08 10:06:58 -05:00
462b4d45e0
some fixes and updates to the extended demo
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-06-01 09:35:40 -05:00
b0e5082064
remove the decorative corners, I don't use them
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-05-31 20:58:22 -05:00
6df2d7a84f
remove test components that were commented out while testing
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-05-30 16:12:41 -05:00
ef32076d98
rename some "control-panel" panels that are just one aux button appropriately
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-05-30 14:32:01 -05:00
11 changed files with 63 additions and 46 deletions

View File

@ -135,6 +135,16 @@ Board, ~$60 for Sanwa buttons and a lever, and ~$20 for miscellaneous connectors
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 $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. will probably save you around $5 of material, and you can probably decide what you want to do from there.
## FAQ
### I get a bunch of warnings on not being able to include files when I open them in OpenSCAD, what do I do?
OpenSCAD pathing is relative to the current working directory by default, which is probably not the `src/` directory.
When you start OpenSCAD, you must either start it from inside the project's `src/` directory, or point it at the path to
the source files via e.g. `OPENSCADPATH=path/to/buildable-stick-system/src/` openscad`.
See https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement.
## Miscellany ## Miscellany
See the `/docs/` directory for more thoughts too scattered for this document. See the `/docs/` directory for more thoughts too scattered for this document.

View File

@ -9,7 +9,7 @@ use <frames/pieces/side-trapezoid.scad>
use <frames/pieces/front-or-back-aux-and-neutrik.scad> use <frames/pieces/front-or-back-aux-and-neutrik.scad>
use <frames/pieces/front-or-back-windowed-horiz-stripes.scad> use <frames/pieces/front-or-back-windowed-horiz-stripes.scad>
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad> use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
use <panels/inset/sega-2p-nine-plus-control-panel-with-mount.scad> use <panels/inset/sega-2p-nine-plus-aux-button-with-mount.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-nine.scad> use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
use <misc/dustwasher-lsx-nobi.scad> use <misc/dustwasher-lsx-nobi.scad>
@ -21,7 +21,7 @@ frame_side_color = "#8E9089";
top_deco_color = "#8E9089"; top_deco_color = "#8E9089";
color(top_panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z+0.01]) lever_and_dir_arc_w_30mm_panel(); color(top_panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z+0.01]) lever_and_dir_arc_w_30mm_panel();
color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_nine_plus_control_panel_with_mount(); color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_nine_plus_aux_button_with_mount();
color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) side_trapezoid_frame_piece(); color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) side_trapezoid_frame_piece();
color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) side_trapezoid_frame_piece(); color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) side_trapezoid_frame_piece();
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) horiz_striped_windowed_front_or_back_frame_piece(); color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) horiz_striped_windowed_front_or_back_frame_piece();

View File

@ -5,24 +5,24 @@
include <parameters.scad> include <parameters.scad>
include <components.scad> include <components.scad>
use <frames/pieces/front-or-back-aux-and-neutrik.scad>
use <frames/pieces/front-or-back-trapezoid.scad> use <frames/pieces/front-or-back-trapezoid.scad>
use <frames/pieces/side-trapezoid-extended-to-front-trapezoid.scad> use <frames/pieces/side-trapezoid-extended-to-front-trapezoid.scad>
use <frames/pieces/front-or-back-aux-and-neutrik.scad> use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel-with-oled.scad>
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad> use <panels/inset/sega-2p-nine-plus-aux-button-with-mount.scad>
use <panels/inset/sega-2p-nine-plus-control-panel-with-mount.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-nine.scad> use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
use <misc/dustwasher-lsx-nobi.scad> use <misc/dustwasher-lsx-nobi.scad>
top_panel_color = "purple"; top_panel_color = "#0086D6";
bottom_panel_color = "black"; bottom_panel_color = "white";
frame_front_color = "black"; frame_front_color = "white";
frame_back_color = "black"; frame_back_color = "white";
frame_side_color = "red"; frame_side_color = "yellow";
top_deco_color = "white"; top_deco_color = "white";
color(top_panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z+0.01]) lever_and_dir_arc_w_30mm_panel(); color(top_panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z+0.01]) lever_and_dir_arc_w_30mm_panel_with_oled();
color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_nine_plus_control_panel_with_mount(); color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_nine_plus_aux_button_with_mount();
color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) side_trapezoid_extended_to_front_frame_piece(); color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) side_trapezoid_extended_to_front_frame_piece();
color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) side_trapezoid_extended_to_front_frame_piece(); color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) side_trapezoid_extended_to_front_frame_piece();
color(frame_front_color) translate([-frame_x/2+4, 0, -2.5]) front_or_back_trapezoid_frame_piece(); color(frame_front_color) translate([-frame_x/2+4, 0, -2.5]) front_or_back_trapezoid_frame_piece();
@ -33,5 +33,5 @@ color(bottom_panel_color) translate([-panel_x/2, 0, -5-frame_z/2+5]) panel();
color(bottom_panel_color) translate([panel_x/2, 0, -5-frame_z/2+5]) panel(); color(bottom_panel_color) translate([panel_x/2, 0, -5-frame_z/2+5]) panel();
color(top_deco_color) translate([0, 0, 3+frame_z/2-panel_z]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate(); color(top_deco_color) translate([0, 0, 3+frame_z/2-panel_z]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate();
color(top_deco_color) translate([-170, 20, 3+frame_z/2-panel_z]) lsx_nobi_dustwasher(); color(top_deco_color) translate([-170, 20, 3+frame_z/2-panel_z]) rotate([180, 0, 0]) lsx_nobi_dustwasher();
color(top_deco_color) translate([panel_x-24, 30, 3+frame_z/2-panel_z]) button_24mm_decorative_plate(); color(top_deco_color) translate([panel_x-24, 30, 3+frame_z/2-panel_z]) button_24mm_decorative_plate();

View File

@ -9,11 +9,10 @@ use <frames/pieces/side.scad>
use <frames/pieces/front-or-back.scad> use <frames/pieces/front-or-back.scad>
use <frames/pieces/front-or-back-aux-and-neutrik.scad> use <frames/pieces/front-or-back-aux-and-neutrik.scad>
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad> use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
use <panels/inset/sega-2p-nine-plus-control-panel-with-mount.scad> use <panels/inset/sega-2p-nine-plus-aux-button-with-mount.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-nine.scad> use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
use <misc/dustwasher-lsx-nobi.scad> use <misc/dustwasher-lsx-nobi.scad>
use <misc/decorative-corner.scad>
panel_color = "red"; panel_color = "red";
base_color = "gray"; base_color = "gray";
@ -21,7 +20,7 @@ top_deco_color = "white";
brace_color = "gray"; brace_color = "gray";
color(panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z/2+0.001]) lever_and_dir_arc_w_30mm_panel(); color(panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z/2+0.001]) lever_and_dir_arc_w_30mm_panel();
color(panel_color) translate([panel_x/2, 0, frame_z/2-panel_z/2+0.001]) sega_2p_nine_plus_control_panel_with_mount(); color(panel_color) translate([panel_x/2, 0, frame_z/2-panel_z/2+0.001]) sega_2p_nine_plus_aux_button_with_mount();
color(base_color) translate([panel_x/2, 0, 0]) rotate([0, 180, 0]) side_frame_piece(); color(base_color) translate([panel_x/2, 0, 0]) rotate([0, 180, 0]) side_frame_piece();
color(base_color) translate([-panel_x/2, 0, 0]) side_frame_piece(); color(base_color) translate([-panel_x/2, 0, 0]) side_frame_piece();
color(base_color) translate([panel_x/2, 0, 0]) front_or_back_frame_piece(); color(base_color) translate([panel_x/2, 0, 0]) front_or_back_frame_piece();
@ -31,11 +30,6 @@ color(base_color) translate([-panel_x/2, 0, 0]) rotate([180, 0, 0]) front_or_bac
color(base_color) translate([-panel_x/2, 0, -frame_z/2+panel_z/2]) panel(); color(base_color) translate([-panel_x/2, 0, -frame_z/2+panel_z/2]) panel();
color(base_color) translate([panel_x/2, 0, -frame_z/2+panel_z/2]) panel(); color(base_color) translate([panel_x/2, 0, -frame_z/2+panel_z/2]) panel();
color(brace_color) translate([-panel_x/2, 0, 0]) decorative_corner();
color(brace_color) mirror([1, 0, 0]) translate([-panel_x/2, 0, 0]) decorative_corner();
color(brace_color) mirror([0, 1, 0]) translate([-panel_x/2, 0, 0]) decorative_corner();
color(brace_color) mirror([1, 0, 0]) mirror([0, 1, 0]) translate([-panel_x/2, 0, 0]) decorative_corner();
color(top_deco_color) translate([0, 0, 4+frame_z/2-panel_z/2+0.001]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate(); color(top_deco_color) translate([0, 0, 4+frame_z/2-panel_z/2+0.001]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate();
color(top_deco_color) translate([-170, 20, 4+frame_z/2-panel_z/2+0.001]) lsx_nobi_dustwasher(); color(top_deco_color) translate([-170, 20, 4+frame_z/2-panel_z/2+0.001]) lsx_nobi_dustwasher();
color(top_deco_color) translate([panel_x-24, 30, 4+frame_z/2-panel_z/2+0.001]) button_24mm_decorative_plate(); color(top_deco_color) translate([panel_x-24, 30, 4+frame_z/2-panel_z/2+0.001]) button_24mm_decorative_plate();

View File

@ -10,14 +10,14 @@ use <frames/pieces/side.scad>
use <frames/pieces/front-or-back.scad> use <frames/pieces/front-or-back.scad>
use <frames/pieces/front-or-back-aux-and-neutrik.scad> use <frames/pieces/front-or-back-aux-and-neutrik.scad>
use <panels/overhang/left-lever-and-dir_arc-plus-w-30mm-panel.scad> use <panels/overhang/left-lever-and-dir_arc-plus-w-30mm-panel.scad>
use <panels/overhang/right-sega-2p-nine-plus-control-panel-with-mount.scad> use <panels/overhang/right-sega-2p-nine-plus-aux-button-with-mount.scad>
use <panels/overhang/left-or-right-panel.scad> use <panels/overhang/left-or-right-panel.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-nine.scad> use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
use <misc/dustwasher-lsx-nobi.scad> use <misc/dustwasher-lsx-nobi.scad>
color("#C12E1F") translate([-panel_x/2-25, 0, frame_z/2+75]) lever_and_dir_arc_w_30mm_left_overhang_panel(); color("#C12E1F") translate([-panel_x/2-25, 0, frame_z/2+75]) lever_and_dir_arc_w_30mm_left_overhang_panel();
color("#C12E1F") translate([panel_x/2+25, 0, frame_z/2+75]) sega_2p_nine_plus_control_right_overhang_panel_with_mount(); color("#C12E1F") translate([panel_x/2+25, 0, frame_z/2+75]) sega_2p_nine_plus_aux_button_right_overhang_panel_with_mount();
color("black") translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_frame_piece(); color("black") translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_frame_piece();
color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_frame_piece(); color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_frame_piece();
color("black") translate([-frame_x/2+5-50, 0, -2.5]) side_frame_piece(); color("black") translate([-frame_x/2+5-50, 0, -2.5]) side_frame_piece();

View File

@ -0,0 +1,24 @@
/* Wrap a smaller width hex spacer with plastic to get it to fit in our standard post hole.
*
* Since the hex spacers can vary in width, you may have to adjust the inner dimensions
* to make this work right for your piece, but this worked right for mine. YMMV.
*
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <parameters.scad>
include <components.scad>
module small_m4_hole() {
scale([1, 1, 2]) cylinder(r=3.25, h=frame_z, $fn=6, center=true);
}
module m4_hex_spacer_sleeve() {
difference() {
resize([0, 0, 45]) frame_hex_bolt_hole();
small_m4_hole();
}
}
m4_hex_spacer_sleeve();

View File

@ -8,17 +8,6 @@ include <components.scad>
use <lever-and-dir_arc-plus-w-30mm-panel.scad> use <lever-and-dir_arc-plus-w-30mm-panel.scad>
module lever_and_dir_arc_w_30mm_panel_with_oled() { module lever_and_dir_arc_w_30mm_panel_with_oled() {
/* // TEMP FOR PRINTING JUST THE SECTION AS A TEST */
/* intersection() { */
/* union() { */
/* difference() { */
/* lever_and_dir_arc_w_30mm_panel(); */
/* translate([0, -(panel_y/2 - 30), 0]) adafruit_pid_326_oled_ssd1306_mount_cutout(); */
/* } */
/* translate([0, -(panel_y/2 - 30), 0]) adafruit_pid_326_oled_ssd1306_mount(); */
/* } */
/* translate([0, -(panel_y/2-30), 0]) cube([50, 40, 10], center=true); */
/* } */
difference() { difference() {
lever_and_dir_arc_w_30mm_panel(); lever_and_dir_arc_w_30mm_panel();
translate([0, -(panel_y/2 - 22), 0]) adafruit_pid_326_oled_ssd1306_mount_cutout(); translate([0, -(panel_y/2 - 22), 0]) adafruit_pid_326_oled_ssd1306_mount_cutout();

View File

@ -5,11 +5,11 @@
include <parameters.scad> include <parameters.scad>
include <components.scad> include <components.scad>
use <sega-2p-nine-plus-control-panel.scad> use <sega-2p-nine-plus-aux-button.scad>
module sega_2p_nine_plus_control_panel_with_mount() { module sega_2p_nine_plus_aux_button_with_mount() {
sega_2p_nine_plus_control_panel(); sega_2p_nine_plus_aux_button();
translate([30, -50, -(panel_z/2) - 3]) pcb_mount(); translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
} }
sega_2p_nine_plus_control_panel_with_mount(); sega_2p_nine_plus_aux_button_with_mount();

View File

@ -6,7 +6,7 @@
include <parameters.scad> include <parameters.scad>
include <components.scad> include <components.scad>
module sega_2p_nine_plus_control_panel() { module sega_2p_nine_plus_aux_button() {
difference() { difference() {
panel(); panel();
sega_2p_nine(); sega_2p_nine();
@ -14,4 +14,4 @@ module sega_2p_nine_plus_control_panel() {
} }
} }
sega_2p_nine_plus_control_panel(); sega_2p_nine_plus_aux_button();

View File

@ -5,11 +5,11 @@
include <parameters.scad> include <parameters.scad>
include <components.scad> include <components.scad>
use <right-sega-2p-nine-plus-control-panel.scad> use <right-sega-2p-nine-plus-aux-button.scad>
module sega_2p_nine_plus_control_right_overhang_panel_with_mount() { module sega_2p_nine_plus_aux_button_right_overhang_panel_with_mount() {
sega_2p_nine_plus_control_right_overhang_panel(); sega_2p_nine_plus_aux_button_right_overhang_panel();
translate([30, -50, -(panel_z/2) - 3]) pcb_mount(); translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
} }
sega_2p_nine_plus_control_right_overhang_panel_with_mount(); sega_2p_nine_plus_aux_button_right_overhang_panel_with_mount();

View File

@ -6,7 +6,7 @@
include <parameters.scad> include <parameters.scad>
include <components.scad> include <components.scad>
module sega_2p_nine_plus_control_right_overhang_panel() { module sega_2p_nine_plus_aux_button_right_overhang_panel() {
difference() { difference() {
panel_with_raised_overhang(); panel_with_raised_overhang();
sega_2p_nine(); sega_2p_nine();
@ -15,4 +15,4 @@ module sega_2p_nine_plus_control_right_overhang_panel() {
} }
} }
sega_2p_nine_plus_control_right_overhang_panel(); sega_2p_nine_plus_aux_button_right_overhang_panel();