From d0381ed1d26aa67ffaf0536355b8b371ab324abc Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Mon, 18 Dec 2023 01:13:34 +0100 Subject: [PATCH] Version 1.0 --- README.md | 4 +- twist-stem.scad | 44 + twist-stem.stl | Bin 0 -> 32484 bytes twist-stem_0.6n_0.3mm_PLA_MK3S_7m.gcode | 9850 +++++++++++++++++++++++ 4 files changed, 9896 insertions(+), 2 deletions(-) create mode 100644 twist-stem.scad create mode 100644 twist-stem.stl create mode 100644 twist-stem_0.6n_0.3mm_PLA_MK3S_7m.gcode diff --git a/README.md b/README.md index 4d879c9..f947122 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# twist-stem +# Twist Stem -OpenSCAD library to design stems to be inserted into bases and locked through a 90 degree clockwise turn. +OpenSCAD library to design stems to be inserted into bases and locked through a 90 degree clockwise turn. diff --git a/twist-stem.scad b/twist-stem.scad new file mode 100644 index 0000000..eb77b6d --- /dev/null +++ b/twist-stem.scad @@ -0,0 +1,44 @@ +/* + * Twist-Stem twisting interlocking mechanism + * + * Copyright (C) 2023 Matthias Neeracher + */ + +$fn = $preview ? 32 : 64; + +module _twist_stem_funnel(width, height, stem, wedge, wall, htol, vtol, pinch) { + r = 0.5*(stem+htol); + pd = stem-pinch; + h = sqrt(r*r-0.25*pd*pd); + v = (0.5*width-wall)*sin(0.5*wedge)+0.5*htol; + o = (0.5*width-wall)*cos(0.5*wedge); + translate([0, 0, wall]) linear_extrude(height+vtol-2*wall) polygon([[-0.5*width, -v], [-o, -v], [-h, -0.5*pd], [-h, 0.5*pd], [-o, v], [-0.5*width, v]]); + translate([0, 0, height+vtol-wall]) linear_extrude(wall) polygon([[-0.5*width, -r], [-h, -0.5*pd], [-h, 0.5*pd], [-0.5*width, r]]); +} + +module twist_stem_base(width, height, stem, wedge=90, wall=2.0, htol=0.5, vtol=0.5, pinch=0.5) { + difference() { + translate([-0.5*width, -0.5*width, 0]) cube([width, width, height]); + translate([0, 0, wall]) cylinder(height, d=stem+htol); + translate([0, 0, wall]) rotate([0, 0, 90-0.5*wedge]) rotate_extrude(angle=90+wedge+2.5) square([0.5*(width+htol)-wall, height+vtol-2*wall]); + _twist_stem_funnel(width, height, stem, wedge, wall, htol, vtol, pinch); + } +} + +module twist_stem_insert(width, height, stem, wedge=90, wall=2.0, vtol=0.5) { + cylinder(height-wall+vtol, d=stem); + rotate([0, 0, 180-0.5*wedge]) rotate_extrude(angle=wedge) square([0.5*width-wall, height-2*wall]); +} + +function twist_stem_insert_height(height, wall=2.0, vtol=0.5) = height-wall+vtol; + +module twist_stem_demo_project(width, height, stem) { + insert_width=stem+3; + twist_stem_base(width, height, stem); + translate([width+5, 0, 0]) { + twist_stem_insert(width, height, stem); + translate([-0.5*insert_width, -0.5*insert_width, twist_stem_insert_height(height)]) cube([insert_width, insert_width, 5]); + } +} + +twist_stem_demo_project(width=15, height=8, stem=5); diff --git a/twist-stem.stl b/twist-stem.stl new file mode 100644 index 0000000000000000000000000000000000000000..587c202eefa80d6c3dd23c72ec3d53c04f68723a GIT binary patch literal 32484 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