10 Commits

Author SHA1 Message Date
7e67c15c13 updates for v4.4.3
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-14 23:21:44 -05:00
e426e15884 retain a bit of the inner wall on the outer piece for windowed pieces
the inner wall piece being the *whole* inner wall of the frame side
meant that the (now relatively thin) outer wall piece was not supported
by anything on the top and bottom, which combined with the already weak
piece because of the window, gave the edges a lot of give.

shrinking the inner wall piece slightly retains some of the material on
the outer piece, which should friction fit the top and bottom with both
the inner wall piece, and with the panels, leading to a lot more clamp
when everything is secured.

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-14 09:28:10 -05:00
ba3e77d0cd explain more about printing the parts, esp. patterns
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-13 23:41:12 -05:00
c0ae73b139 link to the IRC channel in the README
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-13 23:40:04 -05:00
b871963cf7 backslash and forwardslash front/back window pieces for extended
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-12 08:30:25 -05:00
2c62c9119b cut a bit more out of windowed frame walls, make inner wall larger
this makes the inner wall a bit easier to see, without hugely
compromising outer wall integrity

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-12 08:19:38 -05:00
b7910cdb44 add some windowed frame pieces to go with extended sides
also a demo for them, though I didn't add the inside walls to the demo

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-12 08:19:33 -05:00
0ac3e8433f properly name the horiz. stripe windowed frame pieces
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-10 13:16:47 -05:00
2bbf69d9a0 properly name the extended (not to bottom) side frame piece
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-10 11:12:36 -05:00
f4c9c91d91 fix an issue with frame wall + small button screw-in space
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-07 14:25:09 -05:00
16 changed files with 219 additions and 22 deletions

View File

@@ -2,6 +2,33 @@
Included is a summary of changes to the project, by version. Details can be found in the commit history.
## v4.4.3
### Features
* Windowed frame wall pieces were made for the "clean" front/back walls that line up with the extended sides.
### Improvements
* The inner wall piece has been thickened, bringing its surface closer to the end of the outer wall windowed frame
pieces, making the window less deep and the inner wall easier to see.
* The inner wall piece has been shrunken on the Z in order to leave some material on the outer wall and thus improve the
friction fit and clamp of the outer wall piece, which was too weakened by the unsupported top and bottom otherwise.
### Miscellaneous
* Documentation updates, especially around the printing of parts.
* Corrected the names of some pieces that were accidentally duplicated from the file they were copied from rather than
what they were, or otherwise didn't match the standard pattern (such as it is).
## v4.4.2
### Bugfixes
* Fix a regression with the small button screw-in space cutting into the frame wall supports. The screw-in space is
potentially more important for some nuts than the thickness of the frame wall supports, so the latter have been
thinned slightly.
## v4.4.1
### Features

View File

@@ -7,6 +7,9 @@ design before sending it to a custom builder? Do you just love having your space
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!
**Join the project IRC channel: [#buildable-stick-system @
Randomus](https://webirc.randomus.net/#buildable-stick-system)!**
![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.]

View File

@@ -0,0 +1,39 @@
/*
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <parameters.scad>
include <components.scad>
use <frames/pieces/extended/front-or-back.scad>
use <frames/pieces/extended/side.scad>
use <frames/pieces/extended/front-or-back-clean-for-extended-side-aux-and-neutrik.scad>
use <frames/pieces/extended/front-or-back-clean-for-extended-side-windowed-horiz-stripes.scad>
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
use <panels/inset/sega-2p-plus-one-plus-control-panel-with-mount.scad>
use <misc/decorative-plate-24mm-button.scad>
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one.scad>
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one-plates.scad>
use <misc/dustwasher-lsx-nobi.scad>
top_panel_color = "#5B6579";
bottom_panel_color = "#8E9089";
frame_top_bottom_color = "#8E9089";
frame_side_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]) sega_2p_plus_one_plus_control_panel_with_mount();
color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) extended_left_or_right_frame_piece();
color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) extended_left_or_right_frame_piece();
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side();
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side();
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
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_plus_one_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_plus_one_decorative_plate();
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();

View File

@@ -8,6 +8,15 @@ My preferred settings are 3 wall loops with 20% gyroid sparse infill. This gives
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.
### Supports and Positioning
All of the parts are designed to be printed outside-face-down. The bevels are at an angle (45 degrees) that should print
fine with no supports. Make sure everything is aligned properly on your plate so that the flat face you will look at the
most is on the bottom.
The only exception to this is the interconnect piece(s), which are not visible and need a support to print. Maybe one
day I'll rejigger these.
### 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
@@ -20,15 +29,36 @@ uniform lines that create reflection patterns on long, flat surfaces. This can b
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.
Some specific parts are worth some additional notes:
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.
* **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.
* **Avoid:** monotonic.
* **Good for the time:** Archimedean chords create the look of a circular ripple radiating out the center, and
depending on the material, you may not even notice it much, so it's a pretty good look/speed balance.
* **Great if you can wait:** hilbert curve leaves no discernable pattern on most materials, but some high gloss,
high contrast materials may show the winding pattern at some angles --- consider Archimedean chords for these.
* **Circle-centric decorative plates:** simple ones could be fine in whatever, but the ones for action buttons end up
having lots of weird interaction points.
* **Avoid:** none; monotonic doesn't look *good*, but the plates don't have enough surface area for the pattern to
stand out too much.
* **Decent:** concentric is generally good, but you can get some pitting when the pattern radiating away from
buttons collides with other patterns, because none of the geometry lines up well.
* **Great:** Archimedean chords, just crank up the infill/wall overlap to avoid pits on the edges.
* **Frame walls with Neutrik or aux button cutouts:** a reduced but similar problem with the action button decorative
plates, the circles near each other create weird interactions with the walls.
* **Avoid:** concentric, again, has problems with pitting where geometries clash.
* **Decent:** monotonic is pretty decent here, and you probably won't look at the sides too much, so maybe it
doesn't bother you.
* **Great:** Archimedean chords again, with the same infill/wall overlap as decorative plates.
* **Flush frame walls:** you can pretty much do whatever you like here.
* **Great:** concentric produces an interesting pattern and you won't have collision problems in a rectangle.
* **Essentially great:** Archimedean chords yet again, you may just not like the pattern as much as the end result
of concentric.
The Archimedean chord 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, though you may be happy enough with Archimedean
chord.
## Materials

View File

@@ -80,7 +80,7 @@ module rocker_20mm_mount() {
// space for a neutrik D mount or 24mm button --- Z is meant to leave some lip now that frames
// are primarily printed on their side
module frame_cutout() {
cube([30.5, 8, frame_z-(panel_z*3)], center=true);
cube([35, 8, frame_z-(panel_z*3)], center=true);
}
// bank of three 24mm buttons, commonly on a frame face

View File

@@ -15,9 +15,10 @@ module mount_column_cutout() {
}
}
module front_or_back_inner_wall_frame_piece() {
module front_or_back_inner_wall_frame_base_piece() {
difference() {
front_or_back_box_frame_piece();
// Z is scaled so that some part of the original part inner wall is retained
scale([1, 1, inner_frame_z_decorative_scale]) front_or_back_box_frame_piece();
// minus the outer wall
translate([0, -(frame_y-frame_wall)/2, 0]) cube([frame_x, frame_wall, frame_z], center=true);
// minus half of the mounting posts (the other half provided by the outer wall)
@@ -28,4 +29,11 @@ module front_or_back_inner_wall_frame_piece() {
}
}
module front_or_back_inner_wall_frame_piece() {
front_or_back_inner_wall_frame_base_piece();
// extend the outward face 2mm in order to have it cut deeper into the frame outer wall
translate([0, -(frame_y-frame_wall)/2, 0]) rotate([-90, 0, 0]) linear_extrude(height=2) projection()
translate([0, 0, 50]) rotate([90, 0, 0]) front_or_back_inner_wall_frame_base_piece();
}
front_or_back_inner_wall_frame_piece();

View File

@@ -12,7 +12,7 @@ module front_stripe() {
cube([frame_x-(frame_mount_column_width*1.75)*2, frame_wall, 6], center=true);
}
module windowed_front_or_back_box_frame_piece() {
module horiz_striped_windowed_front_or_back_box_frame_piece() {
difference() {
front_or_back_box_frame_piece();
// subtract frame wall windows
@@ -26,4 +26,4 @@ module windowed_front_or_back_box_frame_piece() {
}
}
windowed_front_or_back_box_frame_piece();
horiz_striped_windowed_front_or_back_box_frame_piece();

View File

@@ -8,13 +8,17 @@ include <components.scad>
use <front-or-back.scad>
use <front-or-back-inner-wall.scad>
module front_or_back_window() {
translate([0, -frame_y/2, 0])
cube([frame_x-frame_mount_column_width*3.5, (frame_wall+panel_support_width)*2,
frame_z-panel_z*3], center=true);
}
module windowed_front_or_back_box_frame_piece() {
difference() {
front_or_back_box_frame_piece();
// subtract frame wall window
translate([0, -frame_y/2, 0])
cube([frame_x-frame_mount_column_width*3.5, (frame_wall+panel_support_width)*2,
frame_z-panel_z*3], center=true);
front_or_back_window();
// subtract the inner wall area that will be provided by the other piece
front_or_back_inner_wall_frame_piece();
}

View File

@@ -15,9 +15,10 @@ module mount_column_cutout() {
}
}
module side_inner_wall_frame_piece() {
module side_inner_wall_frame_base_piece() {
difference() {
side_box_frame_piece();
// Z is scaled so that some part of the original part inner wall is retained
scale([1, 1, inner_frame_z_decorative_scale]) side_box_frame_piece();
// minus the outer wall
translate([-(frame_x-frame_wall)/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
// minus half of the mounting posts (the other half provided by the outer wall)
@@ -32,4 +33,11 @@ module side_inner_wall_frame_piece() {
}
}
module side_inner_wall_frame_piece() {
side_inner_wall_frame_base_piece();
// extend the outward face 2mm in order to have it cut deeper into the frame outer wall
translate([-(frame_x-frame_wall)/2, 0, 0]) rotate([0, 90, 0]) linear_extrude(height=2) projection()
translate([0, 0, 50]) rotate([0, -90, 0]) side_inner_wall_frame_base_piece();
}
side_inner_wall_frame_piece();

View File

@@ -12,7 +12,7 @@ module side_stripe() {
cube([frame_wall, frame_y-(frame_mount_column_width*1.75)*2, 6], center=true);
}
module windowed_side_box_frame_piece() {
module horiz_striped_windowed_side_box_frame_piece() {
difference() {
side_box_frame_piece();
// subtract frame wall windows
@@ -26,4 +26,4 @@ module windowed_side_box_frame_piece() {
}
}
windowed_side_box_frame_piece();
horiz_striped_windowed_side_box_frame_piece();

View File

@@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <parameters.scad>
include <components.scad>
use <frames/pieces/box/front-or-back-windowed-backslashes.scad>
module backslashes_windowed_front_or_back_box_frame_piece_for_extended_side() {
difference() {
backslashes_windowed_front_or_back_box_frame_piece();
// ...minus the frame wall and lip on the left
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
}
}
backslashes_windowed_front_or_back_box_frame_piece_for_extended_side();

View File

@@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <parameters.scad>
include <components.scad>
use <frames/pieces/box/front-or-back-windowed-forwardslashes.scad>
module forwardslashes_windowed_front_or_back_box_frame_piece_for_extended_side() {
difference() {
forwardslashes_windowed_front_or_back_box_frame_piece();
// ...minus the frame wall and lip on the left
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
}
}
forwardslashes_windowed_front_or_back_box_frame_piece_for_extended_side();

View File

@@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <parameters.scad>
include <components.scad>
use <frames/pieces/box/front-or-back-windowed-horiz-stripes.scad>
module horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side() {
difference() {
horiz_striped_windowed_front_or_back_box_frame_piece();
// ...minus the frame wall and lip on the left
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
}
}
horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side();

View File

@@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <parameters.scad>
include <components.scad>
use <frames/pieces/box/front-or-back-windowed.scad>
module windowed_front_or_back_box_frame_piece_for_extended_side() {
difference() {
windowed_front_or_back_box_frame_piece();
// ...minus the frame wall and lip on the left
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
}
}
windowed_front_or_back_box_frame_piece_for_extended_side();

View File

@@ -25,7 +25,7 @@ module side_frame_piece_extension() {
}
}
module extended_bottom_left_or_right_frame_piece() {
module extended_left_or_right_frame_piece() {
difference() {
side_box_frame_piece();
// chop off the old edge which is getting replaced with the extension
@@ -34,4 +34,4 @@ module extended_bottom_left_or_right_frame_piece() {
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();
extended_left_or_right_frame_piece();

View File

@@ -75,6 +75,12 @@ panel_z = 5;
// inside the frame
inner_frame_z = frame_z - (panel_z * 2);
// "windowed" pieces chop out the inner wall of the frame as a separate piece in order
// to print it a different color/way/style. to improve friction fit, it is only the below
// value scale of the whole wall, so that the rest of the wall is retained on the outer
// piece, which helps clamp the two together (and helps the panels clamp it all)
inner_frame_z_decorative_scale = 0.95;
// how much the top plate x/y is expanded to overhang the frame
// note that this is relative to the top plate (so the wall is added back)
panel_overhang_amount = 8.5;