Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
edf5729a85
|
|||
|
3a1494c021
|
|||
|
9125105b42
|
|||
|
cadf2bf210
|
|||
|
0993c0f292
|
|||
|
954ce38f07
|
|||
|
832d5ede8b
|
19
README.md
19
README.md
@@ -2,11 +2,16 @@
|
|||||||
|
|
||||||
Files for 3D printing an arcade stick.
|
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
|
||||||
|
design before sending it to a custom builder? Do you just love having your space filled with arcade stick enclosures,
|
||||||
|
because you keep making different variants, colorways, and so on? Or do you simply want a good stick on the cheap, and
|
||||||
|
know someone or a library with a 3D printer? The Buildable Stick System may be the project for you!
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
|
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
[Photo of a completed inset panel-based stick.]
|
[Photo of a completed inset panel-based stick.]
|
||||||
|
|
||||||
@@ -27,14 +32,14 @@ starting with an existing object and constructing what you'd like with new or ex
|
|||||||
There are a lot of parts to pick from, but there are some structural variants to pay attention to; here's some help
|
There are a lot of parts to pick from, but there are some structural variants to pay attention to; here's some help
|
||||||
about when/how to use specific parts:
|
about when/how to use specific parts:
|
||||||
|
|
||||||
* `foo-panel-inset`s --- these fit flush into a frame, creating a closed box enclosure.
|
* `panel-inset` --- these fit flush into a frame, creating a closed box enclosure.
|
||||||
* `foo-panel-overhang`s --- these have a tray that fits into a frame with the actual face extending beyond the frame,
|
* `panel-overhang` --- these have a tray that fits into a frame with the actual face extending beyond the frame,
|
||||||
creating an ice cream sandwich enclosure.
|
creating an ice cream sandwich enclosure.
|
||||||
* These also yield a bit more space inside the box, for tall levers or whatever.
|
* These also yield a bit more space inside the box, for tall levers or whatever.
|
||||||
* `frame`s (non-pieces) --- these create the box of the enclosure, as one part. These can be hard to print well ---
|
* `frame` (non-pieces) --- these create the box of the enclosure, as one part. These can be hard to print well ---
|
||||||
shrinkage forces tend to curl up the corners no matter what you do, and some points need supports --- but if you don't
|
shrinkage forces tend to curl up the corners no matter what you do, and some points need supports --- but if you don't
|
||||||
care about that because you're printing an ice cream sandwich, they are simpler than...
|
care about that because you're printing an ice cream sandwich, they are simpler than...
|
||||||
* `frame-piece`s --- these break up the frame box into four faces, and are held together by friction fit and the hex
|
* `frame-piece` --- these break up the frame box into four faces, and are held together by friction fit and the hex
|
||||||
bolts. This is more stable than you might expect, but it does introduce some variability in the overall sturdiness of
|
bolts. This is more stable than you might expect, but it does introduce some variability in the overall sturdiness of
|
||||||
the enclosure compared with the frame as one box piece.
|
the enclosure compared with the frame as one box piece.
|
||||||
* The `interconnect` replaces the need to bolt multiple frames together.
|
* The `interconnect` replaces the need to bolt multiple frames together.
|
||||||
@@ -92,11 +97,11 @@ Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
|
|||||||
of 2023-09-12)
|
of 2023-09-12)
|
||||||
* 4 M3 flange nuts to connect Neutrik D plates to frames: **$0.34 USD** (you can get a pack of 100 on Amazon for $8.50,
|
* 4 M3 flange nuts to connect Neutrik D plates to frames: **$0.34 USD** (you can get a pack of 100 on Amazon for $8.50,
|
||||||
as of 2023-09-12)
|
as of 2023-09-12)
|
||||||
* 8 45mm M4 spacers to connect panels to frames: **$2.40 USD** (you can get a pack of 10 on AliExpress for $3, as of
|
* 8 45mm M4 standoffs to connect panels to frames: **$2.40 USD** (you can get a pack of 10 on AliExpress for $3, as of
|
||||||
2023-09-12)
|
2023-09-12)
|
||||||
* You could 3D print these too, but you're probably better off with brass ones as they give some weight to the
|
* You could 3D print these too, but you're probably better off with brass ones as they give some weight to the
|
||||||
stick anyway
|
stick anyway
|
||||||
* You can also use a shorter length with longer bolts, or combine multiple spacers, if either of those yield better
|
* You can also use a shorter length with longer bolts, or combine multiple standoffs, if either of those yield better
|
||||||
prices
|
prices
|
||||||
* 8 16mm M4 bolts to connect top plates to frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of
|
* 8 16mm M4 bolts to connect top plates to frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of
|
||||||
* 8 12mm M4 bolts to connect bottom plates to frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of
|
* 8 12mm M4 bolts to connect bottom plates to frames: **$0.72 USD** (you can get a pack of 100 on Amazon for $9, as of
|
||||||
|
|||||||
19
docs/assembly-and-tips.md
Normal file
19
docs/assembly-and-tips.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Assembly and Tips
|
||||||
|
|
||||||
|
Just some miscellaneous notes for any dear reader, or more likely, my own forgetful self.
|
||||||
|
|
||||||
|
## Removing Inset Panels
|
||||||
|
|
||||||
|
As of v4.1 (or in v3), the top and bottom inset panels both insert into the frame, inside the frame "lip", meaning that
|
||||||
|
when everything is put together, they create a flush surface (more or less). This can make them hard to get out, as you
|
||||||
|
can't grab anything to get any leverage, and especially with v4.1, the plastic posts to aid the friction fit make it
|
||||||
|
even harder to muscle out --- in fact, even if you could get an edge and start yanking, you'd probably just break some
|
||||||
|
of the plastic.
|
||||||
|
|
||||||
|
You can instead use the reverse side and the hex standoffs to push a panel out, as so:
|
||||||
|
|
||||||
|
1. Loosen, or completely remove, the hex bolts for the panel you would like to remove.
|
||||||
|
2. Flip the stick over, and remove the hex bolts on the opposite side.
|
||||||
|
3. Screw in longer bolts, or anything else that'll fit into the hole without going flush against the panel.
|
||||||
|
4. Push the long bolts in, thus pushing the standoffs, thus pushing the desired panel out from within.
|
||||||
|
5. You may have to even get a mallet and tap on a bolt, occasionally, as everything can be *pretty* tight.
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 121 KiB |
BIN
docs/finished-v4.1.jpg
Normal file
BIN
docs/finished-v4.1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
29
src/frame-piece-bottom-left-or-right-extended.scad
Normal file
29
src/frame-piece-bottom-left-or-right-extended.scad
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
include <parameters.scad>
|
||||||
|
include <components.scad>
|
||||||
|
use <frame-piece-bottom-left-or-right.scad>
|
||||||
|
|
||||||
|
module bottom_piece_wall() {
|
||||||
|
// get a slice of the piece, to use it in extruding
|
||||||
|
projection(cut=true) rotate([-90, 0, 0]) translate([0, frame_y/2-frame_bevel_height, 0])
|
||||||
|
bottom_left_or_right_frame_piece();
|
||||||
|
}
|
||||||
|
|
||||||
|
module bottom_piece_extension() {
|
||||||
|
// combine the original with a shrunken piece to "pull" the wall out
|
||||||
|
hull() {
|
||||||
|
linear_extrude(height=frame_extension_y) scale([1, 0.5, 1]) bottom_piece_wall();
|
||||||
|
linear_extrude(height=frame_bevel_height) bottom_piece_wall();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module extended_bottom_left_or_right_frame_piece() {
|
||||||
|
bottom_left_or_right_frame_piece();
|
||||||
|
translate([0, -frame_y/2+frame_bevel_height*2, 0]) rotate([90, 0, 0]) bottom_piece_extension();
|
||||||
|
}
|
||||||
|
|
||||||
|
extended_bottom_left_or_right_frame_piece();
|
||||||
35
src/frame-piece-side-extended-to-bottom.scad
Normal file
35
src/frame-piece-side-extended-to-bottom.scad
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
include <parameters.scad>
|
||||||
|
include <components.scad>
|
||||||
|
use <frame-piece-bottom-left-or-right-extended.scad>
|
||||||
|
use <frame-piece-side.scad>
|
||||||
|
|
||||||
|
module side_and_bottom_frame_piece_wall() {
|
||||||
|
// get a slice of the pieces, to use it in extruding
|
||||||
|
projection(cut=true) rotate([0, 90, 0]) translate([frame_x/2-frame_bevel_height, 0, 0])
|
||||||
|
side_frame_piece();
|
||||||
|
projection(cut=true) translate([0, -frame_y/2+frame_wall, 0]) rotate([90, 90, 0]) bottom_piece_extension();
|
||||||
|
}
|
||||||
|
|
||||||
|
module side_and_bottom_frame_piece_extension() {
|
||||||
|
// combine the original with a shrunken piece to "pull" the wall out
|
||||||
|
hull() {
|
||||||
|
linear_extrude(height=frame_extension_y) scale([0.5, 0.90, 1]) side_and_bottom_frame_piece_wall();
|
||||||
|
linear_extrude(height=frame_bevel_height) side_and_bottom_frame_piece_wall();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module extra_extended_left_or_right_frame_piece() {
|
||||||
|
difference() {
|
||||||
|
side_frame_piece();
|
||||||
|
// chop off the old edge which is getting replaced with the extension
|
||||||
|
translate([-frame_x/2+frame_bevel_height/2, 0, 0]) cube([frame_bevel_height, frame_y, frame_z], center=true);
|
||||||
|
}
|
||||||
|
translate([-frame_x/2+frame_bevel_height*2, 0, 0]) rotate([0, -90, 0]) side_and_bottom_frame_piece_extension();
|
||||||
|
}
|
||||||
|
|
||||||
|
extra_extended_left_or_right_frame_piece();
|
||||||
33
src/frame-piece-side-extended.scad
Normal file
33
src/frame-piece-side-extended.scad
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
include <parameters.scad>
|
||||||
|
include <components.scad>
|
||||||
|
use <frame-piece-side.scad>
|
||||||
|
|
||||||
|
module side_frame_piece_wall() {
|
||||||
|
// get a slice of the piece, to use it in extruding
|
||||||
|
projection(cut=true) rotate([0, 90, 0]) translate([frame_x/2-frame_bevel_height, 0, 0])
|
||||||
|
side_frame_piece();
|
||||||
|
}
|
||||||
|
|
||||||
|
module side_frame_piece_extension() {
|
||||||
|
// combine the original with a shrunken piece to "pull" the wall out
|
||||||
|
hull() {
|
||||||
|
linear_extrude(height=frame_extension_y) scale([0.5, 0.85, 1]) side_frame_piece_wall();
|
||||||
|
linear_extrude(height=frame_bevel_height) side_frame_piece_wall();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module extended_bottom_left_or_right_frame_piece() {
|
||||||
|
difference() {
|
||||||
|
side_frame_piece();
|
||||||
|
// chop off the old edge which is getting replaced with the extension
|
||||||
|
translate([-frame_x/2+frame_bevel_height/2, 0, 0]) cube([frame_bevel_height, frame_y, frame_z], center=true);
|
||||||
|
}
|
||||||
|
translate([-frame_x/2+frame_bevel_height*2, 0, 0]) rotate([0, -90, 0]) side_frame_piece_extension();
|
||||||
|
}
|
||||||
|
|
||||||
|
extended_bottom_left_or_right_frame_piece();
|
||||||
@@ -37,6 +37,10 @@ frame_x = 233;
|
|||||||
frame_y = 208;
|
frame_y = 208;
|
||||||
frame_z = 57;
|
frame_z = 57;
|
||||||
|
|
||||||
|
// degree to which the extended frame pieces stick out from the end of the frame
|
||||||
|
frame_extension_x = 25;
|
||||||
|
frame_extension_y = 25;
|
||||||
|
|
||||||
// this sinks the bottom and top of the frame inward a bit, and is used to math out two shapes
|
// this sinks the bottom and top of the frame inward a bit, and is used to math out two shapes
|
||||||
// when creating the frame box / overhang panel
|
// when creating the frame box / overhang panel
|
||||||
frame_bevel_height = 2;
|
frame_bevel_height = 2;
|
||||||
|
|||||||
Reference in New Issue
Block a user