Compare commits

..

No commits in common. "main" and "v4.7.0" have entirely different histories.
main ... v4.7.0

29 changed files with 106 additions and 175 deletions

View File

@ -2,20 +2,6 @@
Included is a summary of changes to the project, by version. Details can be found in the commit history. Included is a summary of changes to the project, by version. Details can be found in the commit history.
## v4.7.1
### Fixes
* Hull-based decorative plates were accidentally grown in v4.7.0 due to ye olde refactoring. They are back to the
dimensions they should be (give or take) because there was an underlying bug in how they were geometried pre-v4.7.1.
* The docs/ directory in the build now includes the images referred to, especially in the README.
### Miscellaneous
* Some README tweaks, including another demonstrative photo.
* The build creates both a ZIP of everything, including docs, for humans to download, and also a ZIP of *just* the STLs,
to ease uploading to Printables.
## v4.7.0 ## v4.7.0
### Features ### Features

View File

@ -3,11 +3,11 @@ all:
mkdir -p ./build/docs mkdir -p ./build/docs
cp ./README.md ./build/README.md cp ./README.md ./build/README.md
cp ./docs/README-objects.md ./build/README-objects.md cp ./docs/README-objects.md ./build/README-objects.md
cp ./docs/* ./build/docs/ cp ./docs/assembly-and-tips.md ./build/docs/assembly-and-tips.md
cp ./docs/printing-and-materials.md ./build/docs/printing-and-materials.md
cp ./LICENSE ./build/LICENSE cp ./LICENSE ./build/LICENSE
cp ./CHANGELOG.md ./build/CHANGELOG.md cp ./CHANGELOG.md ./build/CHANGELOG.md
pushd ./build; zip ./buildable-stick-system-`git describe --dirty`-stls-and-docs.zip . -r; popd pushd ./build; zip ./buildable-stick-system-`git describe --dirty`-stls.zip . -r; popd
pushd ./build; zip ./buildable-stick-system-`git describe --dirty`-stls.zip extras frames misc panels -r; popd
clean: clean:
rm -rf ./build rm -rf ./build

View File

@ -1,6 +1,6 @@
# The Buildable Stick System # The Buildable Stick System
Files for 3D printing and building an arcade stick enclosure. Files for 3D printing an arcade stick.
Have you ever wanted to conjure your own arcade stick out of the ether (well, plastic), or to prototype a new layout or Have you ever wanted to conjure your own arcade stick out of the ether (well, plastic), or to prototype a new layout or
design before sending it to a custom builder? Do you just love having your space filled with arcade stick enclosures, design before sending it to a custom builder? Do you just love having your space filled with arcade stick enclosures,
@ -135,16 +135,6 @@ 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.
@ -205,9 +195,3 @@ like the below should suffice in either electronic or printed form:
> This arcade stick is part of the Buildable Stick System, version X.Y.Z; the source code to this program is available > This arcade stick is part of the Buildable Stick System, version X.Y.Z; the source code to this program is available
> under the terms of the GNU General Public License, at [LINK]. > under the terms of the GNU General Public License, at [LINK].
## Gallery
More photos.
![A photo of three completed sticks](docs/finished-v4.7-x3.jpg)

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-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>
@ -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_aux_button_with_mount(); 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(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();
@ -31,6 +31,7 @@ color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) rotate([180, 180
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(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-4]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate_of_plates(); */
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]) 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

@ -5,33 +5,32 @@
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 <panels/inset/lever-and-dir_arc-plus-w-30mm-panel-with-oled.scad> use <frames/pieces/front-or-back-aux-and-neutrik.scad>
use <panels/inset/sega-2p-nine-plus-aux-button-with-mount.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 <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 = "#0086D6"; top_panel_color = "#5B6579";
bottom_panel_color = "white"; bottom_panel_color = "#8E9089";
frame_front_color = "white"; frame_top_bottom_color = "#8E9089";
frame_back_color = "white"; frame_side_color = "#8E9089";
frame_side_color = "yellow"; top_deco_color = "#8E9089";
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_with_oled(); 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_aux_button_with_mount(); 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(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_top_bottom_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(); color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) front_or_back_trapezoid_frame_piece();
color(frame_back_color) translate([-frame_x/2+4, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece(); color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
color(frame_back_color) translate([frame_x/2-4, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece(); color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
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(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]) rotate([180, 0, 0]) lsx_nobi_dustwasher(); color(top_deco_color) translate([-170, 20, 3+frame_z/2-panel_z]) 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,10 +9,11 @@ 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-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>
use <misc/decorative-corner.scad>
panel_color = "red"; panel_color = "red";
base_color = "gray"; base_color = "gray";
@ -20,7 +21,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_aux_button_with_mount(); 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(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();
@ -30,6 +31,11 @@ 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-aux-button-with-mount.scad> use <panels/overhang/right-sega-2p-nine-plus-control-panel-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_aux_button_right_overhang_panel_with_mount(); color("#C12E1F") translate([panel_x/2+25, 0, frame_z/2+75]) sega_2p_nine_plus_control_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();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 416 KiB

View File

@ -107,24 +107,16 @@ module m2_mount_post() {
} }
} }
module adafruit_pid_326_oled_ssd1306_mount_post() { module oled_ssd1306_mount() {
cylinder(r=2.25/2, h=8, $fn=50, center=true); translate([11.5, 12, 0]) m2_mount_post();
translate([11.5, -12, 0]) m2_mount_post();
translate([-11.5, 12, 0]) m2_mount_post();
translate([-11.5, -12, 0]) m2_mount_post();
} }
// aligned to the cutout below module oled_ssd1306_mount_cutout() {
module adafruit_pid_326_oled_ssd1306_mount() { translate([0, 1.9, 0]) cube([25, 14, 5], center=true);
translate([12, 13.25, -2]) adafruit_pid_326_oled_ssd1306_mount_post(); translate([0, 0, -1.0]) cube([35, 35, 4], center=true);
translate([12, -13.25, -2]) adafruit_pid_326_oled_ssd1306_mount_post();
translate([-12, 13.25, -2]) adafruit_pid_326_oled_ssd1306_mount_post();
translate([-12, -13.25, -2]) adafruit_pid_326_oled_ssd1306_mount_post();
}
module adafruit_pid_326_oled_ssd1306_mount_cutout() {
translate([0, 3.5, 0]) cube([ssd1306_x, ssd1306_y, panel_z+0.1], center=true);
translate([0, 0, -ssd1306_z/2]) cube([adafruit_pid_326_oled_ssd1306_cutout_x,
adafruit_pid_326_oled_ssd1306_cutout_y, panel_z-ssd1306_z+0.1], center=true);
translate([0, 0, -ssd1306_z/2-2]) cube([adafruit_pid_326_oled_ssd1306_cutout_x*3/2,
adafruit_pid_326_oled_ssd1306_cutout_y/2, panel_z/2+0.1], center=true);
} }
module m3_mount_post() { module m3_mount_post() {

View File

@ -10,13 +10,11 @@ include <components.scad>
module aux_control_three_button_tight_cluster_decorative_plate() { module aux_control_three_button_tight_cluster_decorative_plate() {
difference() { difference() {
hull() difference() { // get a 2mm slice of the bigger button cylinders
// get a 2mm slice of the decorative button cylinders translate([0, 0, -25]) hull() aux_control_three_button_tight_cluster();
translate([0, 0, -50]) aux_control_three_button_tight_cluster();
// keep a thin slice // keep a thin slice
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
}
// cut out the normal holes // cut out the normal holes
translate([0, 0, -1]) aux_control_three_button_tight_cluster(); translate([0, 0, -1]) aux_control_three_button_tight_cluster();
} }

View File

@ -9,8 +9,8 @@ include <components.scad>
module button_24mm_decorative_plate() { module button_24mm_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the decorative button cylinders // get a 2mm slice of the bigger button cylinders
translate([0, 0, -50]) button_24mm_hole(); translate([0, 0, -55]) button_24mm_hole();
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
// cut out the normal holes // cut out the normal holes

View File

@ -8,8 +8,8 @@ include <components.scad>
module dir_arc_plus_w_24mm_8_button_decorative_plate() { module dir_arc_plus_w_24mm_8_button_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the decorative button cylinders // get a 2mm slice of the bigger button cylinders
translate([0, 0, -50]) dir_arc_plus_w_24mm_8_button(); translate([0, 0, -55]) dir_arc_plus_w_24mm_8_button();
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
// cut out the normal holes // cut out the normal holes

View File

@ -12,7 +12,7 @@ module dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_superplate() {
difference() { difference() {
union() { union() {
hull() difference() { hull() difference() {
// get a 2mm slice of the decorative button cylinders // get a 2mm slice of the bigger button cylinders
union() { union() {
translate([-panel_x/2, 0, -50]) dir_arc_w_30mm(); translate([-panel_x/2, 0, -50]) dir_arc_w_30mm();
translate([panel_x/2, 0, -50]) sega_2p_nine(); translate([panel_x/2, 0, -50]) sega_2p_nine();

View File

@ -8,10 +8,10 @@ include <components.scad>
module dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate() { module dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the jumbo decorative button cylinders // get a 2mm slice of the bigger button cylinders
union() { union() {
translate([-panel_x/2, 0, -70]) dir_arc_w_30mm(); translate([-panel_x/2, 0, -65]) dir_arc_w_30mm();
translate([panel_x/2, 0, -70]) sega_2p_nine(); translate([panel_x/2, 0, -65]) sega_2p_nine();
} }
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);

View File

@ -10,12 +10,10 @@ include <components.scad>
module dir_arc_plus_w_30mm_plate_decorative_plate() { module dir_arc_plus_w_30mm_plate_decorative_plate() {
difference() { difference() {
hull() difference() { // get a 2mm slice of the bigger button cylinders
// get a 2mm slice of the decorative button cylinders translate([-panel_x/2, 0, -25]) hull() dir_arc_w_30mm();
translate([-panel_x/2, 0, -50]) dir_arc_w_30mm();
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
}
// cut out the normal holes // cut out the normal holes
translate([-panel_x/2, 0, -1]) dir_arc_w_30mm(); translate([-panel_x/2, 0, -1]) dir_arc_w_30mm();
} }

View File

@ -8,8 +8,8 @@ include <components.scad>
module dir_arc_plus_w_30mm_decorative_plate() { module dir_arc_plus_w_30mm_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the decorative button cylinders // get a 2mm slice of the bigger button cylinders
translate([0, 0, -50]) dir_arc_w_30mm(); translate([0, 0, -55]) dir_arc_w_30mm();
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
// cut out the normal holes // cut out the normal holes

View File

@ -8,8 +8,8 @@ include <components.scad>
module sega_2p_6_button_decorative_plate() { module sega_2p_6_button_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the decorative button cylinders // get a 2mm slice of the bigger button cylinders
translate([0, 0, -50]) sega_2p_6_button(); translate([0, 0, -55]) sega_2p_6_button();
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
// cut out the normal holes // cut out the normal holes

View File

@ -10,12 +10,10 @@ include <components.scad>
module sega_2p_eleven_plate_decorative_plate() { module sega_2p_eleven_plate_decorative_plate() {
difference() { difference() {
hull() difference() { // get a 2mm slice of the bigger button cylinders
// get a 2mm slice of the decorative button cylinders translate([panel_x/2, 0, -25]) hull() sega_2p_eleven();
translate([panel_x/2, 0, -50]) sega_2p_eleven();
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
}
// cut out the normal holes // cut out the normal holes
translate([panel_x/2, 0, -1]) sega_2p_eleven(); translate([panel_x/2, 0, -1]) sega_2p_eleven();
} }

View File

@ -8,17 +8,17 @@ include <parameters.scad>
decorative_radius_scale = 1.5; decorative_radius_scale = 1.5;
include <components.scad> include <components.scad>
module sega_2p_nine_decorative_plate() { module sega_2p_nine_decorative_plate_of_plates() {
difference() { difference() {
hull() difference() { // get a 2mm slice of the bigger button cylinders
// get a 2mm slice of the decorative button cylinders union() {
translate([panel_x/2, 0, -50]) sega_2p_nine(); translate([panel_x/2, 0, -25]) hull() sega_2p_nine();
}
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
}
// cut out the normal holes // cut out the normal holes
translate([panel_x/2, 0, -1]) sega_2p_nine(); translate([panel_x/2, 0, -1]) sega_2p_nine();
} }
} }
sega_2p_nine_decorative_plate(); sega_2p_nine_decorative_plate_of_plates();

View File

@ -8,8 +8,8 @@ include <components.scad>
module sega_2p_nine_decorative_plate() { module sega_2p_nine_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the decorative button cylinders // get a 2mm slice of the bigger button cylinders
translate([0, 0, -50]) sega_2p_nine(); translate([0, 0, -55]) sega_2p_nine();
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
// cut out the normal holes // cut out the normal holes

View File

@ -9,8 +9,8 @@ include <components.scad>
module sega_2p_decorative_plate() { module sega_2p_decorative_plate() {
difference() { difference() {
// get a 2mm slice of the decorative button cylinders // get a 2mm slice of the bigger button cylinders
translate([0, 0, -50]) sega_2p(); translate([0, 0, -55]) sega_2p();
translate([0, 0, -100]) cube([500, 500, 198], center=true); translate([0, 0, -100]) cube([500, 500, 198], center=true);
translate([0, 0, 100]) cube([500, 500, 198], center=true); translate([0, 0, 100]) cube([500, 500, 198], center=true);
// cut out the normal holes // cut out the normal holes

View File

@ -1,24 +0,0 @@
/* 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

@ -1,18 +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>
use <lever-and-dir_arc-plus-w-30mm-panel.scad>
module lever_and_dir_arc_w_30mm_panel_with_oled() {
difference() {
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();
}
lever_and_dir_arc_w_30mm_panel_with_oled();

View File

@ -5,11 +5,11 @@
include <parameters.scad> include <parameters.scad>
include <components.scad> include <components.scad>
use <sega-2p-nine-plus-aux-button.scad> use <sega-2p-nine-plus-control-panel.scad>
module sega_2p_nine_plus_aux_button_with_mount() { module sega_2p_nine_plus_control_panel_with_mount() {
sega_2p_nine_plus_aux_button(); sega_2p_nine_plus_control_panel();
translate([30, -50, -(panel_z/2) - 3]) pcb_mount(); translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
} }
sega_2p_nine_plus_aux_button_with_mount(); sega_2p_nine_plus_control_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_aux_button() { module sega_2p_nine_plus_control_panel() {
difference() { difference() {
panel(); panel();
sega_2p_nine(); sega_2p_nine();
@ -14,4 +14,4 @@ module sega_2p_nine_plus_aux_button() {
} }
} }
sega_2p_nine_plus_aux_button(); sega_2p_nine_plus_control_panel();

View File

@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <parameters.scad>
include <components.scad>
use <right-sega-2p-nine-plus-control-panel-with-mount.scad>
module sega_2p_nine_plus_control_right_overhang_panel_with_mount_with_oled() {
difference() {
sega_2p_nine_plus_control_right_overhang_panel_with_mount();
translate([75, 77.5, 0]) oled_ssd1306_mount_cutout();
}
translate([75, 77.5, 0.5]) oled_ssd1306_mount();
}
sega_2p_nine_plus_control_right_overhang_panel_with_mount_with_oled();

View File

@ -5,11 +5,11 @@
include <parameters.scad> include <parameters.scad>
include <components.scad> include <components.scad>
use <right-sega-2p-nine-plus-aux-button.scad> use <right-sega-2p-nine-plus-control-panel.scad>
module sega_2p_nine_plus_aux_button_right_overhang_panel_with_mount() { module sega_2p_nine_plus_control_right_overhang_panel_with_mount() {
sega_2p_nine_plus_aux_button_right_overhang_panel(); sega_2p_nine_plus_control_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_aux_button_right_overhang_panel_with_mount(); sega_2p_nine_plus_control_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_aux_button_right_overhang_panel() { module sega_2p_nine_plus_control_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_aux_button_right_overhang_panel() {
} }
} }
sega_2p_nine_plus_aux_button_right_overhang_panel(); sega_2p_nine_plus_control_right_overhang_panel();

View File

@ -134,13 +134,6 @@ stand_x = 5;
stand_y = frame_z; stand_y = frame_z;
stand_z = 15; stand_z = 15;
// oled cutout stuff
ssd1306_x = 23;
ssd1306_y = 12;
ssd1306_z = 1;
adafruit_pid_326_oled_ssd1306_cutout_x = 30;
adafruit_pid_326_oled_ssd1306_cutout_y = 32;
// LAYOUTS // LAYOUTS