Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ For inserting magnets, check out [the jig](#jig).
- [No Magnets](#no-magnets)
- [Press-Fit magnets](#press-fit-magnets)
- [Jig](#jig)
- [Release slot](#release-slot)
- [Glued magnets](#glued-magnets)
- [Rounded corner frame](#rounded-corner-frame)
- [Magnet border](#magnet-border)
- [Solid frame](#solid-frame)
- [Click Latch](#click-latch)
- [ClickGroove](#clickgroove)
Expand Down Expand Up @@ -185,11 +187,6 @@ Press-fit magnets require no glue. The magnets are simply pressed into the pocke
<!-- openscad -o docs/images/magnets-press-fit.png --camera=0,0,0,40,0,10,200 -D plate_size='[105, 63]' -D magnets=true -->
<img src="docs/images/magnets-press-fit.png" alt="Press-fit magnets" />

On the bottom side of the plate there is a slot so you can push out any inserted magnet with a screwdriver.

<!-- openscad -o docs/images/magnets-press-fit-below.png --camera=0,0,0,140,0,10,200 -D plate_size='[105, 63]' -D magnets=true -->
<img src="docs/images/magnets-press-fit-below.png" alt="Press-fit magnets from below" />

The layers above and below the magnet can be configured using the `magnet_top` and `magnet_bottom` options.

Because the distance to the bin magnets is larger, press-fit magnets make for a weaker connection than glue-in magnets.
Expand Down Expand Up @@ -230,6 +227,17 @@ Pull the pusher back into its original position to release the baseplate. You ca
<!-- openscad -o docs/images/jig-main-below.png --camera=0,0,0,140,0,10,200 -D part='"jig"' mag_insert_jig.scad -->
<!-- openscad -o docs/images/jig-pusher-below.png --camera=0,0,0,140,0,10,200 -D part='"pusher"' mag_insert_jig.scad -->

### Release slot

On the bottom side of the plate there is a slot so you can push out any inserted magnet with a screwdriver.

<!-- openscad -o docs/images/magnets-press-fit-below.png --camera=0,0,0,140,0,10,200 -D plate_size='[105, 63]' -D magnets=true -->
<img src="docs/images/magnets-press-fit-below.png" alt="Press-fit magnets from below" />

The width of this slot can be adjusted with the `magnet_release_width` setting. Setting this to 0 disables the release slot.

For glue-in magnets, there is a hole instead of a slot. The diameter of the hole is also controlled by `magnet_release_width`.

### Glued magnets

Magnets can also be glued in from the top:
Expand All @@ -252,6 +260,13 @@ By default, the vertical space for the magnet is not fully filled in to save fil

<img src="docs/images/magnets-press-fit.png" alt="Press-fit magnets" />

#### Magnet border

To save filament, you can set a lower `magnet_border`:

<!-- openscad -o docs/images/magnet-border-1.png --camera=0,0,0,40,0,10,200 -D plate_size='[105, 63]' -D magnets=true -D magnet_border=1 -D magnet_style=1 -->
<img src="docs/images/magnet-border-1.png" alt="Magnet border" />

### Solid frame

Using the `magnet_frame_style` option, you can change the magnet layer to be fully filled in.
Expand Down
Binary file modified docs/images/edge-puzzle-full-height.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/edge-puzzle-multi.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/magnet-border-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/magnets-glue-in-bottom.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/magnets-glue-in.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/magnets-press-fit-below.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/magnets-solid.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/thumb-screw-base-magnet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/thumb-screw-magnet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions editor.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ description-extra-html = """
<br>For detailed documentation, check the <a href='https://github.com/yawkat/GridFlock/blob/main/README.md'>README</a>.
<br><b>Feb 16: I've turned off magnets by default because most people don't use them.</b> If you've saved a design with magnets, you will have to manually turn them on again below.
<br>Feb 21: The do_half parameters have been superseded by the filler parameters.
<br>Apr 8: Glue-in magnets now have a release slot, which can be disabled by setting magnet_release_width to 0.
<span style="display: none" class="alert alert-warning" data-display-condition="click && click_style == 0">The click latch can deform over time, especially if made of PLA. Prefer other materials like PETG.</span>
<span style="display: none" class="alert alert-warning" data-display-condition="click && click_style == 1">The click latch can deform over time if used with non-ClickGroove bins, especially if made of PLA. Prefer other materials like PETG if you plan to use such bins.</span>
<span style="display: none" class="alert alert-warning" data-display-condition="connector_intersection_puzzle && connector_edge_puzzle">You have enabled both the edge and intersection puzzle connectors. While technically possible, it is better to focus on and tune one connector type.</span>
Expand Down Expand Up @@ -72,6 +73,12 @@ display-condition = {js = "magnets"}
display-condition = {js = "magnets"}
[model.param-metadata.magnet_bottom]
display-condition = {js = "magnets"}
[model.param-metadata.magnet_border]
display-condition = {js = "magnets"}
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#rounded-corner-frame"
[model.param-metadata.magnet_release_width]
display-condition = {js = "magnets"}
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#release-slot"

[model.tab-metadata."Intersection Puzzle Connector"]
control-boolean = "connector_intersection_puzzle"
Expand Down
35 changes: 23 additions & 12 deletions gridflock.scad
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ magnet_height = 2.25; // 0.25
magnet_top = 0.5; // 0.25
// Floor below the magnet. Not structurally important, should be small to minimize filament use
magnet_bottom = 0.75; // 0.25
// Horizontal strength of the frame holding the magnet in place
magnet_border = 2; // 0.5
// Width of the magnet release slot
magnet_release_width = 3; // 0.5

/* [Click Latch (Experimental)] */

Expand Down Expand Up @@ -217,9 +221,9 @@ assert(!thumbscrews || solid_base > 0 || (magnets && magnet_frame_style == _MAGN
$fn=40;

// dimensions of the magnet extraction slot
_magnet_extraction_dim = [magnet_diameter/2, magnet_diameter/2+2];
_magnet_extraction_dim = [magnet_release_width, magnet_diameter/2+2];
// dimensions of the magnet extraction slot in negative mode. This is used to cut out slots out of the edge puzzle connector. This is a bit smaller to make the edge puzzle connector less frail
_magnet_extraction_dim_negative = [magnet_diameter/2, magnet_diameter/2];
_magnet_extraction_dim_negative = [magnet_release_width, magnet_diameter/2];

// actual height of a gridfinity profile with no extra clearance.
// gridfinity rebuilt adds extra clearance at the bottom, we cut that out. This is the height for z>0
Expand All @@ -243,7 +247,6 @@ _WEST = 3;

// distance of each magnet from the side of the base plate grid cell
_magnet_location = 0.25 + 2.15 + 0.8 + 4.8;
_magnet_border = 2;

// Distance between edge connector pieces, if multiple configured
_edge_puzzle_stagger = edge_puzzle_dim.x + 2;
Expand Down Expand Up @@ -371,10 +374,10 @@ module cell(unit_size=[1, 1], connector=[false, false, false, false], bottom_cha
// round corners
if (magnet_frame_style == _MAGNET_ROUND_CORNERS) {
each_cell_corner(unit_size) {
total_bounds = _magnet_location + magnet_diameter/2 + _magnet_border;
total_bounds = _magnet_location + magnet_diameter/2 + magnet_border;
square([_magnet_location, total_bounds]);
square([total_bounds, _magnet_location]);
translate([_magnet_location, _magnet_location]) circle(r=magnet_diameter/2+_magnet_border);
translate([_magnet_location, _magnet_location]) circle(r=magnet_diameter/2+magnet_border);
}
}
// if we have a female edge connector here, add a bar for stability (edge_puzzle_magnet_border)
Expand Down Expand Up @@ -405,16 +408,24 @@ module cell(unit_size=[1, 1], connector=[false, false, false, false], bottom_cha
} else {
translate([0, 0, -_magnet_level_height + magnet_bottom]) linear_extrude(magnet_height) {
circle(d=magnet_diameter);
if (magnet_style == _MAGNET_PRESS_FIT) rotate([0, 0, rot_slot]) translate([-magnet_diameter/2, 0]) square([magnet_diameter, magnet_diameter/2 + _magnet_border]);
if (magnet_style == _MAGNET_PRESS_FIT) rotate([0, 0, rot_slot]) translate([-magnet_diameter/2, 0]) square([magnet_diameter, magnet_diameter/2 + magnet_border]);
}
}
// magnet extraction slot
if (magnet_style == _MAGNET_PRESS_FIT) {
// magnet extraction slot
rotate([0, 0, rot_slot]) translate([0, 0, -_extra_height]) linear_extrude(_extra_height - _magnet_level_height + magnet_bottom + magnet_height) {
extraction_dim = positive ? _magnet_extraction_dim : _magnet_extraction_dim_negative;
translate([-extraction_dim.x/2, -extraction_dim.y]) square(extraction_dim);
translate([0, -extraction_dim.y]) circle(extraction_dim.x/2);
circle(extraction_dim.x/2);
// horizontal slot
extraction_dim = positive ? _magnet_extraction_dim : _magnet_extraction_dim_negative;
if (extraction_dim.x > 0 && extraction_dim.y > 0) {
rotate([0, 0, rot_slot]) translate([0, 0, -_extra_height]) linear_extrude(_extra_height - _magnet_level_height + magnet_bottom + magnet_height) {
translate([-extraction_dim.x/2, -extraction_dim.y]) square(extraction_dim);
translate([0, -extraction_dim.y]) circle(extraction_dim.x/2);
circle(extraction_dim.x/2);
}
}
} else {
// vertical slot
if (magnet_release_width > 0) {
translate([0, 0, -_extra_height]) cylinder(d=magnet_release_width, h=_extra_height);
}
}
}
Expand Down
Loading