Compare commits

...

12 Commits
v4.2.1 ... main

Author SHA1 Message Date
Brian S. Stephan b43b79ce19
commit the frame_box component necessary for the abandoned mount
so, that mount wouldn't have even been printable for anyone else anyway,
that's good, but this breaking out of a piece might as well be committed

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-05-11 09:44:41 -05:00
Brian S. Stephan f93f20997a
move the fancy mount into the attic
the friction fit is too unreliable, and it took minimal kid aura to have
the whole thing toppling over. I will make a more stable mount at a
minimum later, so this thing goes into the TODO pile for now

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-05-11 09:43:17 -05:00
Brian S. Stephan 70b45fa18b
make a fancy mount for showing off sticks
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-05-01 08:11:40 -05:00
Brian S. Stephan e50629d372
make the frame routing hole a semicircle on one side
this is still a very solid piece compared to the old method of a diamond
through the middle, and comes with two benefits:

1. semicircle cut out of the bottom (or top) means that wiring can be
   run over rather than through, simplifying some (dis)assembly, and...
2. semicircle on the bottom, and offset from the center, should allow
   for designs with a button in the center of the x-axis, rather than
   having to leave room for the frame wall. this might facilitate
   directional arc layouts where the buttons are combined in one shape

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-23 17:15:03 -05:00
Brian S. Stephan 01d4d95f24
update the blown up demo, now with frame pieces
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-22 12:40:24 -05:00
Brian S. Stephan 4cefdfa26b
move the DCO into CONTRIBUTING.md
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-12 00:56:49 -05:00
Brian S. Stephan 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
Brian S. Stephan a7206add7c
updated assembly instructions, simpler without posts
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-04-05 10:25:44 -05:00
Brian S. Stephan 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
Brian S. Stephan 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
Brian S. Stephan 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
Brian S. Stephan 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
12 changed files with 153 additions and 148 deletions

View File

@ -9,11 +9,47 @@ I do not request the copyright of contributions be assigned to me or to the proj
be allowed to relicense your contributions. My personal oath is to maintain inbound=outbound in my open source projects,
and the expectation is authors are responsible for their contributions.
I am following the the [Developer Certificate of Origin (DCO)](https://developercertificate.org/), also available at
`DCO.txt`. The DCO is a way for contributors to certify that they wrote or otherwise have the right to license their
code contributions to the project. Contributors must sign-off that they adhere to these requirements by adding a
`Signed-off-by` line to their commit message, and/or, for frequent contributors, by signing off on their entry in
`MAINTAINERS.md`.
I am following the [Developer Certificate of Origin (DCO)](https://developercertificate.org/), reproduced below. The DCO
is a way for contributors to certify that they wrote or otherwise have the right to license their code contributions to
the project. Contributors must sign-off that they adhere to these requirements by adding a `Signed-off-by` line to their
commit message, and/or, for frequent contributors, by signing off on their entry in `MAINTAINERS.md`.
```
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
```
This process is followed by a number of open source projects, most notably the Linux kernel. Here's the gist of it:

34
DCO.txt
View File

@ -1,34 +0,0 @@
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.

4
attic/README.md Normal file
View File

@ -0,0 +1,4 @@
# The Attic
This directory includes abandoned pieces that I'd like to revisit some time, but I cannot support or recommend using
as-is. Print at your own caution, or better yet, maybe fix them!

View File

@ -0,0 +1,68 @@
/*
* A stick mount that fits rectangular (non-extended) BSS sticks.
*
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <../parameters.scad>
include <../components.scad>
holder_x = 114;
holder_y = 60;
holder_z = 45;
tall_holder_post = frame_y-10;
module stick_holder() {
difference() {
cube([holder_x, holder_y, holder_z], center=true);
translate([14, 0, 132]) rotate([90, -40, 0]) frame_solid();
}
}
module mount() {
difference() {
union() {
// lowest post
translate([62, -frame_z-25, holder_z/2]) stick_holder(); // top = 45
// middle post
translate([0, 0, ((tall_holder_post)/2)/2])
cube([holder_x, holder_y, (tall_holder_post)/2], center=true);
translate([0, 0, ((tall_holder_post)/2)+holder_z/2]) stick_holder(); // top = 139
// highest post
translate([-62, frame_z+25, tall_holder_post/2])
cube([holder_x, holder_y, tall_holder_post], center=true);
translate([-62, frame_z+25, tall_holder_post+holder_z/2]) stick_holder(); // top = 233
// post stabilizers
translate([31, -41, holder_z/2]) cube([52, 23, holder_z], center=true);
translate([-31, 41, ((tall_holder_post/2)+holder_z)/2])
cube([52, 23, (tall_holder_post/2)+holder_z], center=true);
// base
hull() {
translate([110, 103, -2.5]) cylinder(r=15, h=5, center=true);
translate([110, -103, -2.5]) cylinder(r=15, h=5, center=true);
translate([-110, 103, -2.5]) cylinder(r=15, h=5, center=true);
translate([-110, -103, -2.5]) cylinder(r=15, h=5, center=true);
}
// placard
translate([0, -112, 15]) cube([frame_y, 5, 30], center=true);
/* // test */
/* translate([62+14, -frame_z-25, 132+holder_z/2]) rotate([90, -40, 0]) frame_solid(); */
/* translate([14, 0, 132+(frame_y/2)-20+holder_z/2]) rotate([90, -40, 0]) frame_solid(); */
/* translate([-62+14, frame_z+25, 132+tall_holder_post+holder_z/2]) rotate([90, -40, 0]) frame_solid(); */
}
// text on the placard
translate([-frame_z*3.3/2.5, -holder_x, 15]) rotate([90, 0, 0])
linear_extrude(1) text("Buildable Stick System", font="Noto Sans");
translate([-frame_z*3.3/2.5, -holder_x, 4]) rotate([90, 0, 0])
linear_extrude(1) text("v4 by bss", font="Noto Sans", size=6);
}
}
mount();

View File

@ -5,45 +5,32 @@ Just some miscellaneous notes for any dear reader, or more likely, my own forget
## 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.1 or beyond stick, with two
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,right}`: this is your best shot to get auxillary buttons,
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.
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` --- don't tighten the buttons all the way,
as you may need some wiggle to align the panels to the frame in a later step.
2. If the above isn't the case, you can tighten all your buttons now.
3. If using a lever, don't forget the lever mount spacer --- `src/misc-lever-mount-sanwa-seimitsu` --- if you want
`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.
5. Insert the top panels into the frame. The friction on this will probably be tight, and you may not be able to muscle
it in on your own. Get the panel posts at least partially into the frame columns, in any event. If you get all the
panels completely in, the next steps will be easier, but it's not imperative.
6. Start the bolts for the top panels. Get it so that the bolts catch the standoffs, but don't tighten them completely.
You will want some wiggle when connecting the bottom panels, which is maybe the hardest part. Depending on your bolts
and how deep into the frame you got the top panels, you might need to push the standoffs up the column in order to
catch them with the bolts.
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.
2. TEST YOUR BOARD AND COMPONENTS NOW! You don't want to have to undo the rest of the steps for something trivial,
trust me.
8. Insert the bottom panels into the frame. This may be difficult. If you got the top panels into the frame in step 4,
and left the bolts loose in step 5, you can make the standoffs rise outside of the frame column, which makes it
easier to line up the standoffs with the bottom panel posts.
9. Drive the bottom bolts into the standoffs. You probably don't have the panels all the way into the frame, but if you
can at least get the standoffs in the posts, you can catch them with the bottom bolts, and then let them guide the
panels into the frame.
10. Tighten all the bolts. If you didn't get the top panels flush in step 4, you can apply the same logic as in step 8
and tighten the bolts to guide the panels into the frame.
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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -27,17 +27,8 @@ perfect pattern, making the long lines stand out even more.
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.
Panels may have tiny gaps against the circular button cutouts; this is largely not a problem as buttom rims, decorative
plates, etc. will cover it up. However, I've had some interesting results with:
* Initial layer line width: 0.42mm (down .08mm)
* Initial layer height: 0.25mm (up .05mm)
* Initial layer nozzle temperature: 230°C (up 10°C)
* Initial layer bed temperature: 70°C (up 5°C)
* Initial layer pattern: concentric
These are good defaults and print awesome parts, with the only exception being the top panels, which benefit from using
a Hilbert curve initial layer pattern instead of concentric.
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

View File

@ -5,8 +5,10 @@
include <parameters.scad>
include <components.scad>
use <frame-left.scad>
use <frame-right.scad>
use <frame-piece-bottom-left-or-right.scad>
use <frame-piece-interconnect.scad>
use <frame-piece-side.scad>
use <frame-piece-top-left-or-right.scad>
use <top-panel-overhang-left-lever-and-dir_arc-plus-w-30mm.scad>
use <top-panel-overhang-right-sega-2p-plus-one-plus-control-with-mount.scad>
use <bottom-panel-overhang-left.scad>
@ -17,8 +19,13 @@ use <misc-dustwasher-lsx-nobi.scad>
color("#C12E1F") translate([-panel_x/2-25, 0, frame_z/2+75]) top_panel_left_lever_and_dir_arc_w_30mm();
color("#C12E1F") translate([panel_x/2+25, 0, frame_z/2+75]) top_panel_right_sega_2p_plus_one_plus_control_with_mount();
color("black") translate([-frame_x/2+5-25, 0, -2.5]) left_frame();
color("black") translate([frame_x/2+25, 0, -2.5]) right_frame();
color("black") translate([-frame_x/2+5-25, 35, -2.5]) top_left_or_right_frame_piece();
color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-25, 35, -2.5]) top_left_or_right_frame_piece();
color("black") translate([-frame_x/2+5-50, 0, -2.5]) side_frame_piece();
color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-50, 0, -2.5]) side_frame_piece();
color("black") translate([-frame_x/2+5-25, -35, -2.5]) bottom_left_or_right_frame_piece();
color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-25, -35, -2.5]) bottom_left_or_right_frame_piece();
color("black") interconnect_frame_piece();
color("#C12E1F") translate([-panel_x/2-25, 0, -5-frame_z/2-75]) bottom_panel_left();
color("#C12E1F") translate([panel_x/2+25, 0, -5-frame_z/2-75]) bottom_panel_right();

View File

@ -55,7 +55,7 @@ module frame_hex_bolt_hole() {
}
module frame_interchange_hole() {
cylinder(r=18, h=50, $fn=4, center=true);
cylinder(r=35, h=50, $fn=50, center=true);
}
module neutrik_d_hole() {
@ -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();
}
cube([panel_x, panel_y, panel_z], center=true);
}
module base_bottom_panel() {
@ -260,7 +235,7 @@ module panel_with_raised_overhang() {
}
}
module frame_box() {
module frame_solid() {
difference() {
top_points = [
// top bevel
@ -310,6 +285,12 @@ module frame_box() {
translate(p) cylinder(r=2, h=frame_bevel_height, center=true);
}
}
}
}
module frame_box() {
difference() {
frame_solid();
// cut out the middle to make it a box
cube([panel_x-(panel_support_width*2), panel_y-(panel_support_width*2), frame_z+5], center=true);
}
@ -340,7 +321,8 @@ module frame_connection_holes() {
}
module frame_cable_routing_hole() {
translate([frame_x/2, 0, 0]) rotate([0, 90, 0]) frame_interchange_hole();
// frame_y/12 is a hack for "kinda a bit above the center point"
translate([frame_x/2, frame_y/12, 25]) rotate([0, 90, 0]) frame_interchange_hole();
}
module base_frame() {
@ -360,16 +342,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

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