added headlamp bracket
This commit is contained in:
parent
0dccf51391
commit
9c02c3a192
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.stl
|
Binary file not shown.
BIN
outdoor/cordHook_18cord.3mf
Normal file
BIN
outdoor/cordHook_18cord.3mf
Normal file
Binary file not shown.
55
outdoor/cordHook_18cord.scad
Normal file
55
outdoor/cordHook_18cord.scad
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Binary file not shown.
112
outdoor/headlampv1.scad
Normal file
112
outdoor/headlampv1.scad
Normal file
@ -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
|
109
outdoor/headlampv2.scad
Normal file
109
outdoor/headlampv2.scad
Normal file
@ -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
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user