21 Commits

Author SHA1 Message Date
dabfc4258b include the right file following its rename
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-05 18:49:09 -05:00
a7206add7c updated assembly instructions, simpler without posts
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-05 10:25:44 -05:00
d70a2f90c6 remove the frame posts from panels, more trouble than they're worth
the panels had posts that would drive into the frame column (the frame
column needing to be a bit wider at the top and bottom accodringly).
this was an attempt to assist the friction fit of the whole stick in
tandem by having the panels contribute to the position and rigidity of
the frame pieces. in practice I think this didn't really contribute
anything major to that problem, and instead made the panels hard to
connect, and way harder to remove, while also having a visual defect in
that the panels were usually separated slightly due to having to fit
exactly in the frame columns.

this goes back to the old design where the base panel is a flat sheet
and the frame column holes are uniform. everything seems nicer this way,
and the overall build is simpler.

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-04 16:33:29 -05:00
0513da125f don't recommend fiddling with the initial layer height/width
doesn't seem to be any real gain in changing them, having done more
prints with those settings and with stock settings.

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-04 14:17:34 -05:00
e7543dceb0 dedupe top left and right frame pieces, they're the same shape
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-03 18:00:58 -05:00
45439cbf6d things might have actually been warping a bit more with the higher temps
at least it's seeming that way with some Bambu matte PLA

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-01 16:11:43 -05:00
b21cb75816 add some documentation to the built STLs .zip
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-21 19:07:29 -05:00
882a34db55 rewrite Makefile to allow parallelization
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-21 18:15:10 -05:00
90f5670c2a more notes on printing settings for the parts
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-21 17:36:03 -05:00
96342f1b16 general assembly instructions
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-18 18:15:52 -05:00
7bc6acfb93 updated photo for the README, showing the large bevels
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-18 18:15:52 -05:00
16f41fe245 more notes on printing and bottom layer patterns
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-18 18:15:48 -05:00
c8881fc172 document observations on printing settings
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-16 11:28:25 -05:00
1f8b5d527b reorder the attribution section a bit
also add a blurb about what I believe satisfies the GPLv3 in any
distribution of the object files and/or objects themselves, since I'm
beginning to think about how to send sticks to other people

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-15 09:48:52 -05:00
edf5729a85 document a trick for getting panels out in this frictioned world
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-14 18:59:27 -05:00
3a1494c021 s/spacer/standoff/
I honestly never remember the difference, but might as well be
consistent

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-14 18:52:25 -05:00
9125105b42 correct name of the extra extended side piece
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-09 12:49:49 -06:00
cadf2bf210 add pieces vaguely like the TE1 sides as alternative frame sides
still playing with these a bit, but test prints yields some promising
shapes, just need to do a build with them to confirm I like it

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-07 19:15:31 -06:00
0993c0f292 sales pitch (tongue in cheek) preamble in the README
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-06 14:11:20 -06:00
954ce38f07 clean up the part descriptions slightly in the README
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-06 13:31:15 -06:00
832d5ede8b update example images in the README
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-03-06 13:30:02 -06:00
17 changed files with 333 additions and 125 deletions

View File

@@ -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

View File

@@ -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!
![An example of stick components displayed in OpenSCAD](docs/blown-up-demo.png)
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
![A photo of a completed stick](docs/finished-v3.1.jpg)
![A photo of a completed stick](docs/finished-v4.2.jpg)
[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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
docs/finished-v4.2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

View File

@@ -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.

View 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.

View File

@@ -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();
}
}

View 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();

View 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();

View 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();

View File

@@ -5,7 +5,7 @@
include <parameters.scad>
include <components.scad>
use <frame-piece-top-left.scad>
use <frame-piece-top-left-or-right.scad>
use <frame-piece-bottom-left-or-right.scad>
module side_frame_piece() {
@@ -14,7 +14,7 @@ module side_frame_piece() {
// side piece is left/right agnostic
frame();
// minus the top and bottom
top_left_frame_piece();
top_left_or_right_frame_piece();
bottom_left_or_right_frame_piece();
// and just chop out the rest of the frame
translate([piece_width, 0, 0]) cube([frame_x, frame_y+1, frame_z+1], center=true);

View File

@@ -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();

View File

@@ -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();

View File

@@ -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;