diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1567411 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.stl diff --git a/outdoor/cordHook.stl b/outdoor/cordHook.stl deleted file mode 100644 index 9b7d336..0000000 Binary files a/outdoor/cordHook.stl and /dev/null differ diff --git a/outdoor/cordHook_18cord.3mf b/outdoor/cordHook_18cord.3mf new file mode 100644 index 0000000..f6efa27 Binary files /dev/null and b/outdoor/cordHook_18cord.3mf differ diff --git a/outdoor/cordHook_18cord.scad b/outdoor/cordHook_18cord.scad new file mode 100644 index 0000000..4768706 --- /dev/null +++ b/outdoor/cordHook_18cord.scad @@ -0,0 +1,55 @@ +// hook designed to hook knots on small diameter cord and be as snagless as possible + +// closed hole diameter +cdLoop = 2.9; +// hook slot width +cdHook = 1.5; +// slot section od +bigD = 17; +// closed hole section od +smallD = 8; +// slot angle +degSlot = 40; +// thickness +thick = 4; +// minkowski sphere radius, fillet rad sort of +filletRad = 2; +// sets side bulge. adds strength and beauty. low value will cause failed print. tested at 0.4 +bulbousness = 0.3; +// 40+ faces for print but it makes minkowski very slow in editing +$fn = 35; + +// diff for slicing off top bottom and loop hole +difference(){ + //trace sphere for chamfering around union of two cylinders with slot + minkowski(){ + //two cylinders with a slot cut at around ? degrees + difference(){ + union(){ + cylinder(d = bigD, thick * bulbousness, center = true); + // center starts origin, so translate up sin30 and right cos30 + translate([cos(degSlot) * bigD/2, sin(degSlot) * bigD/2, 0]){ + cylinder(d = smallD, thick * bulbousness, center = true); + } + } + // slot: + translate([50, 0, 0]){ + cube([100, cdHook + 2 * filletRad, 2], center = true); + } + // rounded slot pocket: + cylinder(d = cdHook + 2 * filletRad, 2, center = true); + } // diff + + sphere(r = filletRad); + + } + + // minus: + translate([cos(degSlot) * bigD/2, sin(degSlot) * bigD/2, 0]){ + cylinder(d = cdLoop, 55, center = true); + } + for (dir = [-1, 1]) translate([0, 0, dir * (thick / 2 + 1)]){ + cube([99, 99, 2], center = true); + } + } + diff --git a/outdoor/dromToggle.stl b/outdoor/dromToggle.stl deleted file mode 100644 index 61042b5..0000000 Binary files a/outdoor/dromToggle.stl and /dev/null differ diff --git a/outdoor/headlampv1.scad b/outdoor/headlampv1.scad new file mode 100644 index 0000000..d85ed7b --- /dev/null +++ b/outdoor/headlampv1.scad @@ -0,0 +1,112 @@ +// Headlamp bracket to mount lamp to nylon strap v1 +// requires tweaking of plateScale when changing strap width +// v2 TODO: +// autoscale plate geometry with strapwidth, light cant +// headcurve is janky + +// downward light angle +lCant = 20; +// clipin angle +clipRot = -30; +// clip length: +clipLength = 29; +// light diametewr +lDiam = 22; +// clip tightness, use 0.8 (tight) to 0.99 (no retention) +clippiness = 0.85; + +// plate thick +plateThick = 7; +// plate scale - how many times cliplength, affected by strap and cant +// 2.7 seems right for 25mm strap, 1.9 for 20mm strap +plateScale = 2.2; + +// strap width +strapWide = 21; +// strap thickness try 3mm +strapThick = 2.1; + +// head curve, puts slight curve in head side +hcRad = 550; +hcDepth = 4.2; + +minkRad = 2; +$fn = 20; +// mechanical interface facets should be high when printing +interfaceFacets = 35; + +// lop off several things, each gets comment +difference(){ + +minkowski(){ + // union of plate and clip + union(){ + //clip + // translate so back hits yz plane + translate([ (1.2 * lDiam / 2), 0, 0]){ + // rotate for cant + rotate([lCant, 0, 0]){ + // rotate clip entry + rotate([0, 0, clipRot]){ + color("Green"){ + difference(){ + // outer clip diameter account mink + cylinder(d = 1.2 * lDiam, 2 * clipLength, center = true); + + // minus light diam account mink + cylinder(d = lDiam + minkRad, 99, center = true, $fn = interfaceFacets); + // minus clip entry account mink, the cube y dimension coefficient is clip clippiness, try 0.8-0.95 + translate([44, 0, 0]){ + cube([88, clippiness * (lDiam + minkRad), 99], center = true); + } + } // end diff + } + } // rot clip + } // rot cant + } // trans in xy + + // begin plate: + rotate([0, -90, 0]){ + linear_extrude(plateThick - minkRad - plateThick / 2, scale = 1.15){ + // this polygon adjusts to cant angle and clip length + polygon([ [0, 0], [clipLength * cos(lCant), -1 * clipLength * sin(lCant)], [plateScale * clipLength, strapWide + 7] , [0, strapWide + 7] ]); + } + } + + + } // un + +// this does the fillets +sphere(r = minkRad); + +} + +// cut off below xy plane +translate([0, 0, -22]){ + cube([99, 99, 44], center = true); + } +// cut off back of plate slot for strap +translate([-44 - minkRad, strapWide / 2 + 5, 0]){ + cube([88, strapWide, 222], center = true); + } +// add top slot +translate([-40, strapWide / 2 + 5, (plateScale + 1) / 1.8 * clipLength * cos(lCant)]){ + rotate([45, 0, 0]){ + cube([88, 1.414 * strapWide, strapThick], center = true); + } + } +// add bottom slot +translate([-40, strapWide / 2 + 5, strapWide * 1.414 / 2]){ + rotate([-45, 0, 0]){ + cube([88, 1.414 * strapWide, strapThick], center = true); + } + } +// head curve +translate([-1 * hcRad - plateThick + hcDepth, 0, (strapWide * 1.414 / 2 + (plateScale + 1) / 1.8 * clipLength * cos(lCant)) / 2 ]){ + rotate([90, 0, 0]){ + cylinder(r = hcRad, 99, center = true, $fn = 300); + } + } + + +} // plane diff diff --git a/outdoor/headlampv2.scad b/outdoor/headlampv2.scad new file mode 100644 index 0000000..9c50319 --- /dev/null +++ b/outdoor/headlampv2.scad @@ -0,0 +1,109 @@ +// Headlamp bracket to mount lamp to nylon strap v1 +// requires tweaking of plateScale when changing strap width +// v2 TODO: +// autoscale plate geometry with strapwidth, light cant +// headcurve is janky + +// downward light angle +lCant = 20; +// clipin angle +clipRot = -30; +// clip length: +clipLength = 29; +// light diameter, testing at 0.25 below measured for tightness? +lDiam = 20.75; +// clip tightness, use 0.8 (tight) to 0.99 (no retention) +clippiness = 0.85; + +// plate thick +plateThick = 7; +// plate scale - how many times cliplength, affected by strap and cant +// 2.7 seems right for 25mm strap, 1.9 for 20mm strap +plateScale = 1.5; + +// strap width +strapWide = 21; +// strap thickness try 3mm +strapThick = 2.1; + +// head curve, puts slight curve in head side +hcRad = 400; +hcDepth = 4.8; + +minkRad = 2; +$fn = 20; +// mechanical interface facets should be high when printing +interfaceFacets = 35; + +// lop off several things, each gets comment +difference(){ + +minkowski(){ + // union of plate and clip + union(){ + //clip + // translate so back hits yz plane + translate([ (1.2 * lDiam / 2), -5, 0]){ + // rotate for cant + rotate([lCant, 0, 0]){ + // rotate clip entry + rotate([0, 0, clipRot]){ + color("Green"){ + difference(){ + // outer clip diameter account mink + cylinder(d = 1.2 * lDiam, 2 * clipLength, center = true); + + // minus light diam account mink + cylinder(d = lDiam + minkRad, 99, center = true, $fn = interfaceFacets); + // minus clip entry account mink, the cube y dimension coefficient is clip clippiness, try 0.8-0.95 + translate([44, 0, 0]){ + cube([88, clippiness * (lDiam + minkRad), 99], center = true); + } + } // end diff + } + } // rot clip + } // rot cant + } // trans in xy + + // begin plate: + rotate([0, -90, 0]){ + linear_extrude(plateThick - minkRad - plateThick / 2, scale = 1.15){ + // this polygon adjusts to cant angle and clip length + polygon([ [0, 0], [clipLength * cos(lCant), -1 * clipLength * sin(lCant)], [plateScale * clipLength, strapWide + 7] , [0, strapWide + 7] ]); + } + } + + } // un + +// this does the fillets +sphere(r = minkRad); +} + +// cut off below xy plane +translate([0, 0, -22]){ + cube([99, 99, 44], center = true); + } +// cut off back of plate channel for strap +translate([-43.5 - minkRad, strapWide / 2 + 8, 0]){ + cube([88, strapWide, 222], center = true); + } +// add top slot +translate([-2, strapWide / 2 + 8, (plateScale + 1) / 1.95 * clipLength * cos(lCant)]){ + rotate([0, 45, 0]){ + cube([16, strapWide, strapThick], center = true); + } + } +// add bottom slot +translate([-2, strapWide / 2 + 8, strapWide / 2]){ + rotate([0, -45, 0]){ + cube([16, strapWide, strapThick], center = true); + } + } +// head curve +translate([-1 * hcRad - plateThick + hcDepth, 0, (strapWide / 2 + (plateScale + 1) / 1.95 * clipLength * cos(lCant)) / 2 ]){ + rotate([90, 0, 0]){ + cylinder(r = hcRad, 99, center = true, $fn = 300); + } + } + +} // plane diff diff --git a/outdoor/metcalfEclip.stl b/outdoor/metcalfEclip.stl deleted file mode 100644 index 9f5423f..0000000 Binary files a/outdoor/metcalfEclip.stl and /dev/null differ