Skip to content

Commit ec40b60

Browse files
authored
ClickGroove (#34)
* ClickGroove * Docs
1 parent 6d350eb commit ec40b60

11 files changed

Lines changed: 212 additions & 52 deletions

README.md

Lines changed: 84 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,20 @@ For inserting magnets, check out [the jig](#jig).
3636
- [Rounded corner frame](#rounded-corner-frame)
3737
- [Solid frame](#solid-frame)
3838
- [Click Latch](#click-latch)
39-
- [Length](#length)
40-
- [Distance](#distance)
41-
- [Latch Strength](#latch-strength)
42-
- [Latch Wall Strength](#latch-wall-strength)
43-
- [Height](#height)
44-
- [Steepness](#steepness)
39+
- [ClickGroove](#clickgroove)
40+
- [Special Bins](#special-bins)
41+
- [Gap Length](#gap-length)
42+
- [Tab Length](#tab-length)
43+
- [Depth](#depth)
44+
- [Latch Strength](#latch-strength)
45+
- [Latch Wall Strength](#latch-wall-strength)
46+
- [Arc Style Latch](#arc-style-latch)
47+
- [Length](#length)
48+
- [Distance](#distance)
49+
- [Latch Strength](#latch-strength-1)
50+
- [Latch Wall Strength](#latch-wall-strength-1)
51+
- [Height](#height)
52+
- [Steepness](#steepness)
4553
- [Filler](#filler)
4654
- [None](#none)
4755
- [Integer Fraction](#integer-fraction)
@@ -246,71 +254,124 @@ If you do not wish to use magnets, but still want a more secure fit for your bin
246254
> [!WARNING]
247255
> When a bin is placed on the baseplate, the click latch is under constant mechanical stress. This causes the plastic to deform over time ("creep"), reducing the grip strength. _PLA is very susceptible to this._ PETG is more resistant, but long-term tests are still scarce, so _consider this feature experimental_.
248256
249-
<!-- openscad -o docs/images/click1.png --camera=0,0,0,40,0,10,200 -D plate_size='[105, 63]' -D click1=true -->
257+
### ClickGroove
258+
259+
Like other click latch designs, a ClickGroove baseplate works with standard Gridfinity bins, with similar creep problems. When used with a ClickGroove bin, however, a special notch in the bin's base allows the baseplate to grab on _without stress_, which reduces long term creep.
260+
261+
<!-- openscad -o docs/images/click2.png --camera=0,0,0,40,0,10,200 -D plate_size='[105, 63]' -D click=true -D click_style=1 -->
262+
<img src="docs/images/click2.png" alt="ClickGroove baseplate" />
263+
264+
#### Special Bins
265+
266+
To avoid creep and take full advantage of the ClickGroove system, your bins need a compatible groove. There is a template bin with this groove [on printables](https://www.printables.com/model/1579487-gridflock-gridfinity-baseplate-generator/files). To add it to a bin, use the [Gridfinity Rebase tool](https://gridfinity.tools/rebase/). The tool can modify community-created bins, or those created with a generator like [Gridfinity Extended](https://docs.ostat.com/docs/openscad/gridfinity-extended).
267+
268+
<!-- openscad -o docs/images/click2-bin.png --camera=0,0,3,80,0,20,50 clickgroove-base.scad -->
269+
<img src="docs/images/click2-bin.png" alt="ClickGroove bin template" />
270+
271+
#### Gap Length
272+
273+
The length of the gap behind the click latch can be configured with `clickgroove_gap_length`. A higher value will lead to less resistance when locking and unlocking.
274+
275+
<!-- openscad -o docs/images/click2-gap-length.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=1 -D clickgroove_gap_length=10 -->
276+
<img src="docs/images/click2-gap-length.png" alt="Click latch with clickgroove_gap_length=10" />
277+
278+
#### Tab Length
279+
280+
The length of the tab that engages with the bin groove can be configured with `clickgroove_tab_length`.
281+
282+
<!-- openscad -o docs/images/click2-tab-length.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=1 -D clickgroove_tab_length=5 -->
283+
<img src="docs/images/click2-tab-length.png" alt="Click latch with clickgroove_tab_length=5" />
284+
285+
#### Depth
286+
287+
The depth of the tab can be configured with `clickgroove_depth`. Changing this value has a big impact on latching strength, so be careful.
288+
289+
<!-- openscad -o docs/images/click2-depth.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=1 -D clickgroove_depth=2 -->
290+
<img src="docs/images/click2-depth.png" alt="Click latch with clickgroove_depth=2" />
291+
292+
#### Latch Strength
293+
294+
The `clickgroove_strength` property controls the thickness of the latch itself. This is measured from the very bottom of the latch which, if you look at the gridfinity specification, has a chamfer of 0.7mm, so the strength needs to be higher than this to get any reasonable latch height. Here's an example with `clickgroove_strength=2.5` (and `clickgroove_wall_strength=0`, or else there would not be enough space):
295+
296+
<!-- openscad -o docs/images/click1-strength-2.5.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=1 -D clickgroove_strength=2.5 -D clickgroove_wall_strength=0 -->
297+
<img src="docs/images/click1-strength-2.5.png" alt="Click latch with clickgroove_strength=2.5" />
298+
299+
#### Latch Wall Strength
300+
301+
The `clickgroove_wall_strength` property controls the thickness of the wall behind the latch. This wall serves two purposes: It adds rigidity to the baseplate, and it prevents the click latch from bending too far. Note that the wall is measured per cell, so if you have two neighbouring cells, the actual wall thickness will be double this value. An example with `clickgroove_wall_strength=2` (and reduced `clickgroove_strength`):
302+
303+
<!-- openscad -o docs/images/click1-wall-strength-2.png --camera=0,0,0,40,0,10,100 -D plate_size='[84, 42]' -D click=true -D click_style=1 -D clickgroove_strength=0.8 -D clickgroove_wall_strength=2 -->
304+
<img src="docs/images/click1-wall-strength-2.png" alt="Click latch with clickgroove_wall_strength=2" />
305+
306+
### Arc Style Latch
307+
308+
The arc-style latch is a more traditional and robust design. However it is very susceptible to creep.
309+
310+
<!-- openscad -o docs/images/click1.png --camera=0,0,0,40,0,10,200 -D plate_size='[105, 63]' -D click=true -D click_style=0 -->
250311
<img src="docs/images/click1.png" alt="Click latch" />
251312

252313
There are various parameters you can use to tune the click latch mechanism.
253314

254-
### Length
315+
#### Length
255316

256317
The latch is composed of two arcs at each end, and an optional middle straight section. The total length of the latch is configured using the `click1_outer_length` property:
257318

258-
<!-- openscad -o docs/images/click1-outer-length-20.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click1=true -D click1_outer_length=20 -->
319+
<!-- openscad -o docs/images/click1-outer-length-20.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=0 -D click1_outer_length=20 -->
259320
<img src="docs/images/click1-outer-length-20.png" alt="Click latch with click1_outer_length=20" />
260321

261322
The length of the straight section is configured using `click1_inner_length`, which is 0 by default (no straight section). Here is an example with a 20mm straight section:
262323

263-
<!-- openscad -o docs/images/click1-inner-length-20.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click1=true -D click1_inner_length=20 -->
324+
<!-- openscad -o docs/images/click1-inner-length-20.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=0 -D click1_inner_length=20 -->
264325
<img src="docs/images/click1-inner-length-20.png" alt="Click latch with click1_inner_length=20" />
265326

266-
### Distance
327+
#### Distance
267328

268329
The `click1_distance` property changes the distance that the latch protudes into the bin area. A larger distance can increase grip strength, but makes the bin more difficult to place into the baseplate. Zero distance:
269330

270-
<!-- openscad -o docs/images/click1-distance-0.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click1=true -D click1_distance=0 -->
331+
<!-- openscad -o docs/images/click1-distance-0.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=0 -D click1_distance=0 -->
271332
<img src="docs/images/click1-distance-0.png" alt="Click latch with click1_distance=0" />
272333

273334
5mm distance (don't do this):
274335

275-
<!-- openscad -o docs/images/click1-distance-5.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click1=true -D click1_distance=5 -->
336+
<!-- openscad -o docs/images/click1-distance-5.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=0 -D click1_distance=5 -->
276337
<img src="docs/images/click1-distance-5.png" alt="Click latch with click1_distance=5" />
277338

278-
### Latch Strength
339+
#### Latch Strength
279340

280341
The `click1_strength` property controls the thickness of the latch itself. This is measured from the very bottom of the latch which, if you look at the gridfinity specification, has a chamfer of 0.7mm, so the strength needs to be higher than this to get any reasonable latch height. Here's an example with `click1_strength=2.5` (and `click1_wall_strength=0`, or else there would not be enough space):
281342

282-
<!-- openscad -o docs/images/click1-strength-2.5.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click1=true -D click1_strength=2.5 -D click1_wall_strength=0 -->
343+
<!-- openscad -o docs/images/click1-strength-2.5.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=0 -D click1_strength=2.5 -D click1_wall_strength=0 -->
283344
<img src="docs/images/click1-strength-2.5.png" alt="Click latch with click1_strength=2.5" />
284345

285-
### Latch Wall Strength
346+
#### Latch Wall Strength
286347

287348
The `click1_wall_strength` property controls the thickness of the wall behind the latch. This wall serves two purposes: It adds rigidity to the baseplate, and it prevents the click latch from bending too far. Note that the wall is measured per cell, so if you have two neighbouring cells, the actual wall thickness will be double this value. An example with `click1_wall_strength=2` (and reduced `click1_strength`):
288349

289-
<!-- openscad -o docs/images/click1-wall-strength-2.png --camera=0,0,0,40,0,10,100 -D plate_size='[84, 42]' -D click1=true -D click1_strength=0.8 -D click1_wall_strength=2 -->
350+
<!-- openscad -o docs/images/click1-wall-strength-2.png --camera=0,0,0,40,0,10,100 -D plate_size='[84, 42]' -D click=true -D click_style=0 -D click1_strength=0.8 -D click1_wall_strength=2 -->
290351
<img src="docs/images/click1-wall-strength-2.png" alt="Click latch with click1_wall_strength=2" />
291352

292353
Setting the wall strength to 0 disables the backing wall entirely:
293354

294-
<!-- openscad -o docs/images/click1-wall-strength-0.png --camera=0,0,0,40,0,10,100 -D plate_size='[84, 42]' -D click1=true -D click1_wall_strength=0 -->
355+
<!-- openscad -o docs/images/click1-wall-strength-0.png --camera=0,0,0,40,0,10,100 -D plate_size='[84, 42]' -D click=true -D click_style=0 -D click1_wall_strength=0 -->
295356
<img src="docs/images/click1-wall-strength-0.png" alt="Click latch with click1_wall_strength=0" />
296357

297-
### Height
358+
#### Height
298359

299360
The `click1_height` property controls the height of the latch.
300361

301-
<!-- openscad -o docs/images/click1-height-0.5.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click1=true -D click1_height=0.5 -->
362+
<!-- openscad -o docs/images/click1-height-0.5.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=0 -D click1_height=0.5 -->
302363
<img src="docs/images/click1-height-0.5.png" alt="Click latch with click1_height=0" />
303364

304-
### Steepness
365+
#### Steepness
305366

306367
The arcs of the click latch follow a logistic curve, and `click1_steepness` changes the steepness of that curve. Steepness 0.1:
307368

308-
<!-- openscad -o docs/images/click1-steepness-0.1.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click1=true -D click1_steepness=0.1 -->
369+
<!-- openscad -o docs/images/click1-steepness-0.1.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=0 -D click1_steepness=0.1 -->
309370
<img src="docs/images/click1-steepness-0.1.png" alt="Click latch with click1_steepness=0.1" />
310371

311372
Steepness 5:
312373

313-
<!-- openscad -o docs/images/click1-steepness-5.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click1=true -D click1_steepness=5 -->
374+
<!-- openscad -o docs/images/click1-steepness-5.png --camera=0,0,0,40,0,10,100 -D plate_size='[42, 42]' -D click=true -D click_style=0 -D click1_steepness=5 -->
314375
<img src="docs/images/click1-steepness-5.png" alt="Click latch with click1_steepness=5" />
315376

316377
## Filler

clickgroove-base.scad

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
include <gridfinity-rebuilt-openscad/src/core/standard.scad>
2+
use <gridfinity-rebuilt-openscad/src/core/bin.scad>
3+
use <gridfinity-rebuilt-openscad/src/core/gridfinity-rebuilt-utility.scad>
4+
5+
$fn=50;
6+
7+
bin1 = new_bin(
8+
grid_size = [1, 1],
9+
height_mm = height(3, 0),
10+
);
11+
12+
module click_groove() {
13+
height = 1.5;
14+
depth = height/2;
15+
gap = 0.1;
16+
translate([0, 2.15+0.25/2, 2.6]) rotate([0, 90, 0]) linear_extrude(30, center=true) polygon([[(1.8-height)/2-gap, -gap], [0.9, depth], [1.8-(1.8-height)/2+gap, -gap]]);
17+
}
18+
19+
module draw_clickgroove_base() {
20+
difference() {
21+
bin_render(bin1);
22+
23+
translate([0, -GRID_DIMENSIONS_MM.y/2]) click_groove();
24+
translate([0, GRID_DIMENSIONS_MM.y/2]) rotate([0, 0, 180]) click_groove();
25+
translate([-GRID_DIMENSIONS_MM.x/2, 0]) rotate([0, 0, -90]) click_groove();
26+
translate([GRID_DIMENSIONS_MM.x/2, 0]) rotate([0, 0, 90]) click_groove();
27+
}
28+
}
29+
30+
draw_clickgroove_base();
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
include <../gridflock.scad>
2+
test_pattern = -1;
3+
plate_size = [42, 42];
4+
click = true;
5+
click_style = 1;
6+
use <../clickgroove-base.scad>
7+
8+
module proj() {
9+
rotate([0, 0, 90]) projection(cut=true) rotate([0, 90, 0]) children();
10+
}
11+
12+
color("#dd5c2b") translate([0.2, 0, 0]) proj() main();
13+
color("#3f5178") proj() draw_clickgroove_base();

docs/images/click2-bin.png

43.8 KB
Loading

docs/images/click2-depth.png

38 KB
Loading

docs/images/click2-gap-length.png

34.5 KB
Loading

docs/images/click2-tab-length.png

36.9 KB
Loading

docs/images/click2.png

61.6 KB
Loading

editor.toml

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ head-extra = '<script defer src="https://um.yawk.at/script.js" data-website-id="
99
file = "gridflock.scad"
1010
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."
1111
umami-track-render = []
12-
umami-track-export = ["magnets", "magnet_style", "connector_intersection_puzzle", "connector_edge_puzzle", "bed_size", "click1", "filler_x", "filler_y"]
12+
umami-track-export = ["magnets", "magnet_style", "connector_intersection_puzzle", "connector_edge_puzzle", "bed_size", "click", "click_style", "filler_x", "filler_y"]
1313

1414
[model.param-metadata.bed_size.presets]
1515
text = "Printer Presets"
@@ -169,31 +169,49 @@ display-condition = {js = "thumbscrews"}
169169

170170
[model.tab-metadata."Click Latch (Experimental)"]
171171
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#click-latch"
172-
control-boolean = "click1"
172+
control-boolean = "click"
173173
description-collapsible-html = "Enable the click latch. WARNING: The plastic can deform over time, do not use PLA! PETG might be fine, but there are no long-term tests yet"
174-
[model.param-metadata.click1]
174+
[model.param-metadata.click]
175175
display-condition = {fixed = false}
176+
[model.param-metadata.click_style]
177+
display-condition = {js = "click"}
176178
[model.param-metadata.click1_distance]
177-
display-condition = {js = "click1"}
179+
display-condition = {js = "click && click_style == 0"}
178180
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#distance"
179181
[model.param-metadata.click1_steepness]
180-
display-condition = {js = "click1"}
182+
display-condition = {js = "click && click_style == 0"}
181183
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#steepness"
182184
[model.param-metadata.click1_outer_length]
183-
display-condition = {js = "click1"}
185+
display-condition = {js = "click && click_style == 0"}
184186
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#length"
185187
[model.param-metadata.click1_inner_length]
186-
display-condition = {js = "click1"}
188+
display-condition = {js = "click && click_style == 0"}
187189
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#length"
188190
[model.param-metadata.click1_height]
189-
display-condition = {js = "click1"}
191+
display-condition = {js = "click && click_style == 0"}
190192
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#height"
191193
[model.param-metadata.click1_strength]
192-
display-condition = {js = "click1"}
193-
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#latch_strength"
194+
display-condition = {js = "click && click_style == 0"}
195+
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#latch-strength-1"
194196
[model.param-metadata.click1_wall_strength]
195-
display-condition = {js = "click1"}
196-
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#latch_wall_strength"
197+
display-condition = {js = "click && click_style == 0"}
198+
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#latch-wall-strength-1"
199+
200+
[model.param-metadata.clickgroove_gap_length]
201+
display-condition = {js = "click && click_style == 1"}
202+
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#gap-length"
203+
[model.param-metadata.clickgroove_tab_length]
204+
display-condition = {js = "click && click_style == 1"}
205+
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#tab-length"
206+
[model.param-metadata.clickgroove_strength]
207+
display-condition = {js = "click && click_style == 1"}
208+
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#latch-strength"
209+
[model.param-metadata.clickgroove_wall_strength]
210+
display-condition = {js = "click && click_style == 1"}
211+
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#latch-wall-strength"
212+
[model.param-metadata.clickgroove_depth]
213+
display-condition = {js = "click && click_style == 1"}
214+
help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#depth"
197215

198216
[model.tab-metadata."Segmentation"]
199217
collapsed = true

0 commit comments

Comments
 (0)