From 4be6fef5f30dec73766777f1d9a3a2cb2d2858e6 Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Wed, 28 Aug 2024 15:53:00 +0200 Subject: [PATCH] Back works, front needs iteration --- latch.scad | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ latch.stl | Bin 0 -> 82884 bytes 2 files changed, 53 insertions(+) create mode 100644 latch.scad create mode 100644 latch.stl diff --git a/latch.scad b/latch.scad new file mode 100644 index 0000000..51462a1 --- /dev/null +++ b/latch.scad @@ -0,0 +1,53 @@ +/* + * Latch + * + * Copyright (C) 2024 Matthias Neeracher + */ + +$fn = $preview ? 32 : 64; + +module _top_post(thickness, axis, ridge, funnel, tol) { + overlap = ridge+tol; + dia = 2*thickness+axis; + f_diag = (axis+2*funnel)/sqrt(2); + difference() { + union() { + translate([0, -dia/2, 0]) cube([thickness, dia, dia/2+overlap]); + translate([thickness, 0, dia/2+overlap]) rotate([0, -90, 0]) cylinder(h=thickness, d=dia); + } + translate([thickness, 0, dia/2+overlap]) rotate([0, -90, 0]) cylinder(h=thickness, d=axis+tol); + translate([0, 0, dia/2-axis/2+overlap]) cube([thickness, dia/2, axis]); + translate([0, dia/2, dia/2+overlap+tol]) rotate([-45, 0, 0]) translate([0, -f_diag/2, -f_diag/2]) cube([thickness, f_diag, f_diag]); + } +} + +module latch_top(spacing=10, thickness=3, axis=2.5, ridge=.5, funnel=.7, tol=.2) { + translate([spacing/2, 0, 0]) _top_post(thickness, axis, ridge, funnel, tol); + translate([-spacing/2-thickness, 0, 0]) _top_post(thickness, axis, ridge, funnel, tol); +} + +module latch_tongue(length=20, width=10, thickness=3, axis=2.5, ridge=.5, tol=.2) { + overlap = ridge; + translate([width+thickness, 0, thickness/2]) rotate([0, -90, 0]) cylinder(h=width+2*thickness, d=axis); + hull() { + translate([width-tol, 0, thickness/2]) rotate([0, -90, 0]) cylinder(h=width-tol, d=thickness); + translate([width-tol, length+thickness-.5, .5]) rotate([0, -90, 0]) cylinder(h=width-tol, d=1); + translate([0, thickness/2, thickness/2]) cube([width-tol, length+thickness/2, thickness/2]); + } + translate([0, length, thickness]) cube([width-tol, thickness, overlap+ridge-.5]); + hull() { + translate([width-tol, length, thickness+overlap+ridge/2]) rotate([0, -90, 0]) cylinder(h=width-tol, d=ridge); + translate([width-tol, length+thickness-.5, thickness+overlap+ridge-.5]) rotate([0, -90, 0]) cylinder(h=width-tol, d=1); + } +} + +module latch_catch(width=10, thickness=3, axis=2.5, ridge=.5, tol=.2) { + overlap = ridge; + translate([-width/2, 0, 0]) cube([width-tol, thickness, (thickness+ridge)/2+overlap]); + translate([width/2-tol, 0, thickness/2+overlap]) rotate([0, -90, 0]) cylinder(h=width-tol, d=ridge); +} + +translate([-8, -20, 0]) cube([16, 24.25, 3]); +translate([0, 0, 3]) latch_top(); +translate([20, 0, 0]) mirror([0, 1, 0]) latch_tongue(); +translate([0, -20, 3]) latch_catch(); diff --git a/latch.stl b/latch.stl new file mode 100644 index 0000000000000000000000000000000000000000..462f7a628b79f0760080c6f7bfa5e73480efd357 GIT binary patch literal 82884 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 b-dnakSRqw-V}BOz&r5w2Dx; literal 0 HcmV?d00001