Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
a7206add7c
|
|||
|
d70a2f90c6
|
|||
|
0513da125f
|
|||
|
e7543dceb0
|
|||
|
45439cbf6d
|
|||
|
b21cb75816
|
|||
|
882a34db55
|
|||
|
90f5670c2a
|
|||
|
96342f1b16
|
|||
|
7bc6acfb93
|
|||
|
16f41fe245
|
|||
|
c8881fc172
|
|||
|
1f8b5d527b
|
|||
|
edf5729a85
|
|||
|
3a1494c021
|
|||
|
9125105b42
|
|||
|
cadf2bf210
|
|||
|
0993c0f292
|
|||
|
954ce38f07
|
|||
|
832d5ede8b
|
28
Makefile
28
Makefile
@@ -1,15 +1,19 @@
|
||||
SRC_FILES := $(wildcard ./src/*.scad)
|
||||
SRC_FILES := $(filter-out ./src/all-together-demo.scad, $(SRC_FILES))
|
||||
SRC_FILES := $(filter-out ./src/blown-up-demo.scad, $(SRC_FILES))
|
||||
SRC_FILES := $(filter-out ./src/components.scad, $(SRC_FILES))
|
||||
SRC_FILES := $(filter-out ./src/roundedcube.scad, $(SRC_FILES))
|
||||
all: $(SRC_FILES)
|
||||
mkdir -p ./build
|
||||
for file in $^ ; do \
|
||||
openscad -o $${file}.stl $${file} ; \
|
||||
mv $${file}.stl ./build/ ; \
|
||||
done
|
||||
zip ./build/buildable-stick-system-`git describe --dirty`-stls.zip ./build/*
|
||||
EXCLUDES = blown-up-demo components parameters
|
||||
OBJECTS := $(filter-out $(EXCLUDES),$(patsubst src/%.scad,%,$(wildcard src/*.scad)))
|
||||
dir_guard=@mkdir -p ./build
|
||||
|
||||
all: $(OBJECTS)
|
||||
$(dir_guard)
|
||||
mkdir -p ./build/docs
|
||||
cp ./docs/README-objects.md ./build/README.md
|
||||
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
|
||||
pushd ./build; zip ./buildable-stick-system-`git describe --dirty`-stls.zip . -r; popd
|
||||
|
||||
$(OBJECTS):
|
||||
$(dir_guard)
|
||||
openscad -o build/$@.stl src/$@.scad
|
||||
|
||||
clean:
|
||||
rm -rf ./build
|
||||
|
||||
58
README.md
58
README.md
@@ -2,11 +2,16 @@
|
||||
|
||||
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.]
|
||||
|
||||

|
||||

|
||||
|
||||
[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
|
||||
about when/how to use specific parts:
|
||||
|
||||
* `foo-panel-inset`s --- 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-inset` --- these fit flush into a frame, creating a closed box enclosure.
|
||||
* `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.
|
||||
* 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
|
||||
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
|
||||
the enclosure compared with the frame as one box piece.
|
||||
* The `interconnect` replaces the need to bolt multiple frames together.
|
||||
@@ -42,12 +47,8 @@ about when/how to use specific parts:
|
||||
## Printing
|
||||
|
||||
These items all fit on a 256mm^2 print bed; I use a Bambu Lab P1P based on what I've learned from the
|
||||
OpenStickCommunity. Standard settings seem sufficiently sturdy for my purposes, though the slicer has done a couple
|
||||
weird things, in my experience.
|
||||
|
||||
My preferred settings are 3 wall loops with 20% gyroid sparse infill. This gives the models a bit more weight and
|
||||
stability, but something like 2 wall loops, 15% grid sparse infill is fine and does not lead to a weak enclosure. The
|
||||
costs below have been made against my settings.
|
||||
OpenStickCommunity. Standard settings seem sufficiently sturdy, but see `docs/materials-and-printing.md` for more
|
||||
thoughts and settings based on my tinkering with prints.
|
||||
|
||||
## Assembling
|
||||
|
||||
@@ -78,7 +79,7 @@ What you'll need beyond these objects:
|
||||
## Rough Costs
|
||||
|
||||
This is a rough estimate of the cost to produce one of these sticks, assuming a usual 2-frame design and layout.
|
||||
Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
|
||||
Filament masses from Bambu Studio estimates, using Bambu PLA Basic, 20% gyroid infill and 3 wall loops.
|
||||
|
||||
* Left and right frame: **$10.42 USD** (208.50g each, as of 2024-02-22)
|
||||
* Left and right (inset) top panels: **~$6.40 USD** (~128g each, as of 2024-02-22)
|
||||
@@ -92,11 +93,11 @@ Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
|
||||
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,
|
||||
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)
|
||||
* You could 3D print these too, but you're probably better off with brass ones as they give some weight to the
|
||||
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
|
||||
* 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
|
||||
@@ -133,14 +134,7 @@ to hang out and discuss issues and features and whatnot.
|
||||
|
||||
## Attribution
|
||||
|
||||
Inspired by the incredible work of [TheTrain](https://github.com/TheTrainGoes) on the [OpenStickCommunity Fightstick
|
||||
Case](https://github.com/OpenStickCommunity/Hardware/tree/main/Fightstick%20Case), itself based on the incredible work
|
||||
by [Dash n'Mash](https://twitter.com/Dash_xx_Mash?s=20). Original work Copyright 2023 TheTrain, [licensed under CC BY
|
||||
4.0](https://creativecommons.org/licenses/by/4.0/).
|
||||
|
||||
Made possible by the amazing efforts of [slagcoin](https://www.slagcoin.com/).
|
||||
|
||||
## Author and Licensing
|
||||
### Author and Licensing
|
||||
|
||||
Written by and copyright Brian S. Stephan (<bss@incorporeal.org>).
|
||||
|
||||
@@ -153,3 +147,23 @@ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Gen
|
||||
|
||||
You should have received a copy of the GNU General Public License along with the Buildable Stick System. If not, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
### Lineage
|
||||
|
||||
Inspired by the incredible work of [TheTrain](https://github.com/TheTrainGoes) on the [OpenStickCommunity Fightstick
|
||||
Case](https://github.com/OpenStickCommunity/Hardware/tree/main/Fightstick%20Case), itself based on the incredible work
|
||||
by [Dash n'Mash](https://twitter.com/Dash_xx_Mash?s=20). Original work Copyright 2023 TheTrain, [licensed under CC BY
|
||||
4.0](https://creativecommons.org/licenses/by/4.0/).
|
||||
|
||||
Made possible by the amazing efforts of [slagcoin](https://www.slagcoin.com/).
|
||||
|
||||
### Distributing BSS Sticks
|
||||
|
||||
Under the terms of the GPLv3, you must inform the receiver of the "object code" of their rights under the GPLv3. This is
|
||||
a bit of a gray area for physical objects, but likely applies to distribution of modified or unmodified STL, STEP, etc.
|
||||
files at a minimum. The easiest way to satisfy the GPLv3 in either situation is to provide a link to the source code
|
||||
(either the unmodified mainline project, or your copy, with modifications listed in a "prominent notice"); something
|
||||
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
|
||||
> under the terms of the GNU General Public License, at [LINK].
|
||||
|
||||
65
docs/README-objects.md
Normal file
65
docs/README-objects.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# The Buildable Stick System
|
||||
|
||||
Files for 3D printing an arcade stick.
|
||||
|
||||
## Objects
|
||||
|
||||
The following notes document the objects in the Buildable Stick System and how you can use them:
|
||||
|
||||
* `bottom-panel-inset`: a simple solid panel that fits into the bottom of a frame box.
|
||||
* `bottom-panel-overhang-*`: solid panels whose base fits into the bottom of a frame box, but have a longer sheet that
|
||||
extends beyond the frame, creating a sandwich kind of look; the various forms hang over more or less of the frame,
|
||||
expecting it will be connected to other frames.
|
||||
* `frame-{left,middle,right,solo}`: the core frame of the stick, these are complete boxes; since they are long and
|
||||
narrow, and need supports to print the space for the insets, these may be difficult to print nicely.
|
||||
* `frame-piece-*`: the core frame broken up by individual faces, which are easier to print and essentially just as
|
||||
sturdy.
|
||||
* `frame-piece-*-extended*`: frame pieces that have been stretched out beyond the normal frame dimensions in order to
|
||||
make a nice bevel on the sides and/or bottom; this, interestingly, tends to make the stick look a bit thinner than if
|
||||
it was just a simple box.
|
||||
* `misc-decorative-plate-*`: things you can print to snazz up face buttons mounting, auxillary button points, etc..
|
||||
* `misc-dustwasher-*`: simple dustwashers for levers.
|
||||
* `misc-lever-mount-*`: lever mounts of various shapes and depths to get the desired lever height when mounting a lever
|
||||
to a panel (with the appropriate cutouts).
|
||||
* `misc-neutrik-*`: like the decorative plates, but these are a bit more necessary by their design.
|
||||
* `misc-rocker-*`: rocker SPDT switches don't have mounting holes, this allows you to attach them to the frame.
|
||||
* `top-panel-inset-*`: various lever and/or button layouts for using as the face(s) of a stick.
|
||||
* `top-panel-overhang-`: same idea as the inset top panels, but overhung over the frame to make the sandwich look; these
|
||||
also leave a bit more space inside the frame, which might accommodate a taller lever.
|
||||
|
||||
Feel free to request or contribute to more objects, see the links to Git repos below.
|
||||
|
||||
## Printing and Assembling
|
||||
|
||||
Additional documentation regarding printing the objects and assembling the stick are available in
|
||||
`docs/printing-and-materials.md` and `docs/assembly-and-tips.md`, respectively.
|
||||
|
||||
## Author and Licensing
|
||||
|
||||
Written by and copyright Brian S. Stephan (<bss@incorporeal.org>).
|
||||
|
||||
These arcade stick parts are from the Buildable Stick System; the source code to this program is available under the
|
||||
terms of the GNU General Public License, at:
|
||||
|
||||
* <https://github.com/bsstephan/buildable-stick-system>, or
|
||||
* <https://git.incorporeal.org/bss/buildable-stick-system>
|
||||
|
||||
See the tags/releases for the version of the source code corresponding to the STLs you received.
|
||||
|
||||
The Buildable Stick System 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.
|
||||
|
||||
The Buildable Stick System 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 the Buildable Stick System. If not, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
## Lineage
|
||||
|
||||
Inspired by the incredible work of [TheTrain](https://github.com/TheTrainGoes) on the [OpenStickCommunity Fightstick
|
||||
Case](https://github.com/OpenStickCommunity/Hardware/tree/main/Fightstick%20Case), itself based on the incredible work
|
||||
by [Dash n'Mash](https://twitter.com/Dash_xx_Mash?s=20). Original work Copyright 2023 TheTrain, [licensed under CC BY
|
||||
4.0](https://creativecommons.org/licenses/by/4.0/).
|
||||
52
docs/assembly-and-tips.md
Normal file
52
docs/assembly-and-tips.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# Assembly and Tips
|
||||
|
||||
Just some miscellaneous notes for any dear reader, or more likely, my own forgetful self.
|
||||
|
||||
## Putting a BSS Stick Together
|
||||
|
||||
Assembly of a stick is pretty straightforward, but there are some choices that can make it easier or harder. The
|
||||
following is the most consistent way I've found to put one together. This is assuming a v4.2 or beyond stick, with two
|
||||
panels to make a long standard stick, and the frame made of pieces.
|
||||
|
||||
1. Prepare the frame top pieces --- `frame-piece-top-left-or-right`: this is your best shot to get auxillary buttons,
|
||||
panel connectors, and the like installed, so do it now, and give them a good tighten. You shouldn't need to adjust
|
||||
these again, so finish their installation while the pieces are free.
|
||||
1. This of course includes decorative plates --- e.g. `misc-decorative-plate-aux-control-three-button-cluster` ---
|
||||
you may choose to use. These are held to the top pieces by the buttons or component mounting screws.
|
||||
2. Start the top panels --- `top-panel-(inset|overhang)-*`: you want both to get the components installed now
|
||||
when it's easy, and to make sure that the overall assembly works with your components, so again get your buttons,
|
||||
lever, etc., in place. You can secure them at this point.
|
||||
1. If you are using a button decorative plate that spans two panels --- e.g.
|
||||
`src/misc-decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one` --- take care to align the two panels as
|
||||
tightly as possible, and accurately, as they will be hard to adjust once everything is secured and in the frame.
|
||||
2. If using a lever, don't forget the lever mount spacer --- `src/misc-lever-mount-sanwa-seimitsu` --- if you want
|
||||
it, and tighten those mounting bolts now as well.
|
||||
3. Create the frame box by combining your `frame-piece-*` parts together. This will be relatively stable just via
|
||||
friction fit.
|
||||
4. Rest the frame top-up on a desk, and put the standoffs through the holes. This will probably be tight, and you may
|
||||
even need a rubber mallet or similar to drive the standoffs through the holes.
|
||||
5. Insert the top panels into the frame.
|
||||
6. Insert the bolts for the top panels, make any last adjustments, and tighten them.
|
||||
7. At this point you have an open box with access to all your components. Do all of your wiring.
|
||||
1. Tighten the buttons and etc. if you didn't in step 2.
|
||||
8. Insert the bottom panels into the frame.
|
||||
9. Insert the bottom bolts for the bottom panels, and tighten them.
|
||||
|
||||
In the end, this should be extremely sturdy. None of the frame or panels should be loose at all, and you should be able
|
||||
to move, flip, gently toss, etc. the stick without anything moving or feeling loose.
|
||||
|
||||
## 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 |
BIN
docs/finished-v4.2.jpg
Normal file
BIN
docs/finished-v4.2.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 277 KiB |
@@ -1,25 +0,0 @@
|
||||
# Materials
|
||||
|
||||
bss's random thoughts and notes on 3D printing materials.
|
||||
|
||||
## Bambu Lab PLA
|
||||
|
||||
### Basic
|
||||
|
||||
* In general, nice texture, but under direct light, you can see a bit of the infill pattern through the walls. Not super
|
||||
distracting, but it's there.
|
||||
|
||||
#### White
|
||||
|
||||
* Walls are practically translucent, you can almost always see the infill. Do not use for major components.
|
||||
* Looks perfectly good for thin things like the Neutrik plates, decorative pieces, that kind of thing.
|
||||
|
||||
### Matte
|
||||
|
||||
* I don't like the texture as much, but they do produce nice non-primary color colorways, and you don't see the infill.
|
||||
* Seems like their plastic treatment leaves some plate residue, so be better about cleaning it or you'll get ghosts.
|
||||
|
||||
## Hatchbox PLA
|
||||
|
||||
* **Blue:** very blue. Wife likes it.
|
||||
* **White:** more opaque than the Bambu PLA mentioned above, makes a pretty decent (still slightly translucent) frame.
|
||||
58
docs/printing-and-materials.md
Normal file
58
docs/printing-and-materials.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Printing and Materials
|
||||
|
||||
bss's random thoughts and notes on the actual printing of the Buildable Stick System.
|
||||
|
||||
## Printing Settings
|
||||
|
||||
My preferred settings are 3 wall loops with 20% gyroid sparse infill. This gives the models a bit more weight and
|
||||
strength against bowing forces, but something more default, like 2 wall loops, 15% grid sparse infill, is fine and does
|
||||
not lead to a weak enclosure.
|
||||
|
||||
### Working With Flatness
|
||||
|
||||
A lot of the pieces are long and flat, so I recommend really dialing in your printer settings. The frame pieces make
|
||||
corner curling of the frame less of a problem, but you may still get it on the panels and the beveled frame pieces.
|
||||
|
||||
#### Bottom Layer Notes
|
||||
|
||||
Considering the visible layer (usually, the bottom layer) pattern is ideal. Monotonic prints fast but creates long,
|
||||
uniform lines that create reflection patterns on long, flat surfaces. This can be especially distracting for the top
|
||||
panels and their decorative plates, since they're what you're looking at 90% of the time, and the holes break up a
|
||||
perfect pattern, making the long lines stand out even more.
|
||||
|
||||
* **Top panels:** using a non-uniform pattern reduces if not eliminates the problem of the surface catching the light,
|
||||
but for some patterns, it may come at the expense of time. Other patterns may improve beyond monotonic, but hilbert
|
||||
curve seems to be the gold standard.
|
||||
* **Circle-centric decorative plates:** don't use complex patterns like Archimedean chords on decorative plates, as they
|
||||
seem to have issues with filling curves and you still want to try to maximize contact with walls. Concentric is great
|
||||
here if you dial it in.
|
||||
|
||||
The concentric pattern is a good default and prints awesome parts, with the only exception being the top panels, which
|
||||
benefit from using a Hilbert curve initial layer pattern instead of concentric.
|
||||
|
||||
## Materials
|
||||
|
||||
Some notes on PLA brands, usages, etc.
|
||||
|
||||
### Bambu Lab PLA
|
||||
|
||||
#### Basic
|
||||
|
||||
* In general, nice texture, but under direct light, you can see a bit of the infill pattern through the walls. Not super
|
||||
distracting, but it's there.
|
||||
|
||||
##### White
|
||||
|
||||
* Walls are practically translucent, you can almost always see the infill. 3 wall loops and a varying infill pattern
|
||||
definitely help here.
|
||||
* Looks perfectly good for thin things like the Neutrik plates, decorative pieces, that kind of thing.
|
||||
|
||||
#### Matte
|
||||
|
||||
* I don't like the texture as much, but they do produce nice non-primary color colorways, and you don't see the infill.
|
||||
* Seems like their plastic treatment leaves some plate residue, so be better about cleaning it or you'll get ghosts.
|
||||
|
||||
### Hatchbox PLA
|
||||
|
||||
* **Blue:** very blue. Wife likes it.
|
||||
* **White:** more opaque than the Bambu PLA mentioned above, makes a pretty decent (still slightly translucent) frame.
|
||||
@@ -164,32 +164,7 @@ module levermountcountersinks() {
|
||||
}
|
||||
|
||||
module base_panel() {
|
||||
difference() {
|
||||
union() {
|
||||
cube([panel_x, panel_y, panel_z], center=true);
|
||||
// add posts that sink into the frame, just to give
|
||||
// a somewhat more sturdy/tight connection
|
||||
translate([panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
|
||||
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
|
||||
translate([-panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
|
||||
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
|
||||
translate([panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
|
||||
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
|
||||
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
|
||||
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
|
||||
}
|
||||
// the posts mentioned above need space for the actual hex bolts
|
||||
// used in connecting to the frame
|
||||
translate([panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
|
||||
scale([1, 1, 0.1]) frame_hex_bolt_hole();
|
||||
translate([-panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
|
||||
scale([1, 1, 0.1]) frame_hex_bolt_hole();
|
||||
translate([panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
|
||||
scale([1, 1, 0.1]) frame_hex_bolt_hole();
|
||||
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
|
||||
scale([1, 1, 0.1]) frame_hex_bolt_hole();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module base_bottom_panel() {
|
||||
@@ -360,16 +335,6 @@ module frame() {
|
||||
translate([-panel_to_frame_point_x, panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||
translate([panel_to_frame_point_x, -panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||
|
||||
// slightly larger holes than the posts in the base_panel
|
||||
translate([panel_to_frame_point_x, panel_to_frame_point_y, frame_z/2-panel_z-5])
|
||||
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
|
||||
translate([-panel_to_frame_point_x, panel_to_frame_point_y, frame_z/2-panel_z-5])
|
||||
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
|
||||
translate([panel_to_frame_point_x, -panel_to_frame_point_y, frame_z/2-panel_z-5])
|
||||
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
|
||||
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, frame_z/2-panel_z-5])
|
||||
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
@@ -7,7 +7,7 @@ include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frame-left.scad>
|
||||
|
||||
module top_left_frame_piece() {
|
||||
module top_left_or_right_frame_piece() {
|
||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
||||
intersection() {
|
||||
left_frame();
|
||||
@@ -23,4 +23,4 @@ module top_left_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
top_left_frame_piece();
|
||||
top_left_or_right_frame_piece();
|
||||
@@ -1,26 +0,0 @@
|
||||
/*
|
||||
* 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-right.scad>
|
||||
|
||||
module top_right_frame_piece() {
|
||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
||||
intersection() {
|
||||
right_frame();
|
||||
difference() {
|
||||
// include the whole top wall (including mount columns)
|
||||
translate([0, (frame_y/2)-(piece_width/2), 0]) cube([frame_x, piece_width, frame_z], center=true);
|
||||
// ...minus the frame wall and lip on the right
|
||||
translate([frame_x/2-frame_wall/2, 0, 0])
|
||||
cube([frame_wall, frame_y, frame_z], center=true);
|
||||
// ...minus a slot for the combining piece to go into
|
||||
cube([frame_x, frame_y-(panel_support_width+frame_wall)*2, frame_z/4], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
top_right_frame_piece();
|
||||
@@ -37,6 +37,10 @@ frame_x = 233;
|
||||
frame_y = 208;
|
||||
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
|
||||
// when creating the frame box / overhang panel
|
||||
frame_bevel_height = 2;
|
||||
|
||||
Reference in New Issue
Block a user