Initial Commit
This commit is contained in:
commit
886933f8b8
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*.stl
|
||||||
|
*.blend[0-9]
|
BIN
bathroomSign/doorSign.cdr
Normal file
BIN
bathroomSign/doorSign.cdr
Normal file
Binary file not shown.
12
bearingSleeve.scad
Normal file
12
bearingSleeve.scad
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
bearingRadius = 22/2;
|
||||||
|
bearingBottomThickness = 5;
|
||||||
|
desiredBottomThickness = 11;
|
||||||
|
thickness = 7;
|
||||||
|
tolerance = .1;
|
||||||
|
|
||||||
|
linear_extrude(thickness) {
|
||||||
|
difference() {
|
||||||
|
circle(bearingRadius + desiredBottomThickness - bearingBottomThickness);
|
||||||
|
circle(bearingRadius + tolerance);
|
||||||
|
}
|
||||||
|
}
|
BIN
dell_e6440_hdd_caddy/dell_e6440_hdd_caddy.blend
Normal file
BIN
dell_e6440_hdd_caddy/dell_e6440_hdd_caddy.blend
Normal file
Binary file not shown.
2761
ecobee_box_plate.slvs
Normal file
2761
ecobee_box_plate.slvs
Normal file
File diff suppressed because it is too large
Load Diff
63
oscilloscopeKnobs.scad
Normal file
63
oscilloscopeKnobs.scad
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
height = 13.25;
|
||||||
|
topDiameter =9.75;
|
||||||
|
lowerDiameter = 10.85;
|
||||||
|
stepDiameter = 9;
|
||||||
|
stepDepth = 1.5;
|
||||||
|
|
||||||
|
crossDepth = .75; // original mesurement ~0.25
|
||||||
|
crossWidth = 2.25;
|
||||||
|
crossStartHeight = 2;
|
||||||
|
|
||||||
|
// mostly not really measured
|
||||||
|
chamferHeight = 10;
|
||||||
|
chamferDiameter = topDiameter-crossDepth*2;
|
||||||
|
|
||||||
|
// measured from metal pole, not plastic knob
|
||||||
|
knobDepth = 7;
|
||||||
|
knobDiameter = 4.75;
|
||||||
|
knobFlatDiameter = 4;
|
||||||
|
knobTolerance = 0.1;
|
||||||
|
|
||||||
|
$fn = 100;
|
||||||
|
|
||||||
|
difference () {
|
||||||
|
union() {
|
||||||
|
translate([0,0,stepDepth]) {
|
||||||
|
difference() {
|
||||||
|
// main exterior
|
||||||
|
intersection() {
|
||||||
|
cylinder(r1=lowerDiameter/2, r2=topDiameter/2, h=height-stepDepth);
|
||||||
|
// chamfer
|
||||||
|
union() {
|
||||||
|
translate([0,0,chamferHeight])
|
||||||
|
cylinder(r1=lowerDiameter/2, r2=chamferDiameter/2, h=height-stepDepth-chamferHeight);
|
||||||
|
cylinder(r=lowerDiameter/2, h=chamferHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// cross
|
||||||
|
difference() {
|
||||||
|
union() translate([0, 0, height/2 - .01]) {
|
||||||
|
cube([lowerDiameter, crossWidth, height], center=true);
|
||||||
|
cube([crossWidth, lowerDiameter, height], center=true);
|
||||||
|
}
|
||||||
|
// put back the middle
|
||||||
|
cylinder(r1=lowerDiameter/2 - crossDepth,
|
||||||
|
r2=topDiameter/2 - crossDepth, h=height-stepDepth);
|
||||||
|
// put back the bottom
|
||||||
|
cylinder(r=lowerDiameter, h=crossStartHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//bottom step
|
||||||
|
cylinder(r=stepDiameter/2, h=stepDepth+0.01);
|
||||||
|
}
|
||||||
|
|
||||||
|
//inner concavity
|
||||||
|
difference() {
|
||||||
|
translate([0,0,-0.01]) cylinder(d=knobDiameter + knobTolerance*4, h=knobDepth + 0.01);
|
||||||
|
#translate([-stepDiameter/2, knobFlatDiameter - knobDiameter/2 + knobTolerance*5, 0])
|
||||||
|
cube([stepDiameter, stepDiameter, height]);
|
||||||
|
}
|
||||||
|
}
|
107
relay_enclosure/enclosure.py
Normal file
107
relay_enclosure/enclosure.py
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
import cadquery as cq
|
||||||
|
|
||||||
|
# parameter definitions
|
||||||
|
p_outerWidth = 100.0 # Outer width of box enclosure
|
||||||
|
p_outerLength = 150.0 # Outer length of box enclosure
|
||||||
|
p_outerHeight = 50.0 # Outer height of box enclosure
|
||||||
|
|
||||||
|
p_thickness = 3.0 # Thickness of the box walls
|
||||||
|
p_sideRadius = 10.0 # Radius for the curves around the sides of the box
|
||||||
|
p_topAndBottomRadius = (
|
||||||
|
2.0 # Radius for the curves on the top and bottom edges of the box
|
||||||
|
)
|
||||||
|
|
||||||
|
p_screwpostInset = 12.0 # How far in from the edges the screw posts should be place.
|
||||||
|
p_screwpostID = 4.0 # Inner Diameter of the screw post holes, should be roughly screw diameter not including threads
|
||||||
|
p_screwpostOD = 10.0 # Outer Diameter of the screw posts.\nDetermines overall thickness of the posts
|
||||||
|
|
||||||
|
p_boreDiameter = 8.0 # Diameter of the counterbore hole, if any
|
||||||
|
p_boreDepth = 1.0 # Depth of the counterbore hole, if
|
||||||
|
p_countersinkDiameter = 0.0 # Outer diameter of countersink. Should roughly match the outer diameter of the screw head
|
||||||
|
p_countersinkAngle = 90.0 # Countersink angle (complete angle between opposite sides, not from center to one side)
|
||||||
|
p_flipLid = True # Whether to place the lid with the top facing down or not.
|
||||||
|
p_lipHeight = 1.0 # Height of lip on the underside of the lid.\nSits inside the box body for a snug fit.
|
||||||
|
|
||||||
|
# outer shell
|
||||||
|
oshell = (
|
||||||
|
cq.Workplane("XY")
|
||||||
|
.rect(p_outerWidth, p_outerLength)
|
||||||
|
.extrude(p_outerHeight + p_lipHeight)
|
||||||
|
)
|
||||||
|
|
||||||
|
# weird geometry happens if we make the fillets in the wrong order
|
||||||
|
if p_sideRadius > p_topAndBottomRadius:
|
||||||
|
oshell = oshell.edges("|Z").fillet(p_sideRadius)
|
||||||
|
oshell = oshell.edges("#Z").fillet(p_topAndBottomRadius)
|
||||||
|
else:
|
||||||
|
oshell = oshell.edges("#Z").fillet(p_topAndBottomRadius)
|
||||||
|
oshell = oshell.edges("|Z").fillet(p_sideRadius)
|
||||||
|
|
||||||
|
# inner shell
|
||||||
|
ishell = (
|
||||||
|
oshell.faces("<Z")
|
||||||
|
.workplane(p_thickness, True)
|
||||||
|
.rect((p_outerWidth - 2.0 * p_thickness), (p_outerLength - 2.0 * p_thickness))
|
||||||
|
.extrude(
|
||||||
|
(p_outerHeight - 2.0 * p_thickness), False
|
||||||
|
) # set combine false to produce just the new boss
|
||||||
|
)
|
||||||
|
ishell = ishell.edges("|Z").fillet(p_sideRadius - p_thickness)
|
||||||
|
|
||||||
|
# make the box outer box
|
||||||
|
box = oshell.cut(ishell)
|
||||||
|
|
||||||
|
# make the screw posts
|
||||||
|
POSTWIDTH = p_outerWidth - 2.0 * p_screwpostInset
|
||||||
|
POSTLENGTH = p_outerLength - 2.0 * p_screwpostInset
|
||||||
|
|
||||||
|
box = (
|
||||||
|
box.faces(">Z")
|
||||||
|
.workplane(-p_thickness)
|
||||||
|
.rect(POSTWIDTH, POSTLENGTH, forConstruction=True)
|
||||||
|
.vertices()
|
||||||
|
.circle(p_screwpostOD / 2.0)
|
||||||
|
.circle(p_screwpostID / 2.0)
|
||||||
|
.extrude(-1.0 * (p_outerHeight + p_lipHeight - p_thickness), True)
|
||||||
|
)
|
||||||
|
|
||||||
|
# split lid into top and bottom parts
|
||||||
|
(lid, bottom) = (
|
||||||
|
box.faces(">Z")
|
||||||
|
.workplane(-p_thickness - p_lipHeight)
|
||||||
|
.split(keepTop=True, keepBottom=True)
|
||||||
|
.all()
|
||||||
|
) # splits into two solids
|
||||||
|
|
||||||
|
# translate the lid, and subtract the bottom from it to produce the lid inset
|
||||||
|
lowerLid = lid.translate((0, 0, -p_lipHeight))
|
||||||
|
cutlip = lowerLid.cut(bottom).translate(
|
||||||
|
(p_outerWidth + p_thickness, 0, p_thickness - p_outerHeight + p_lipHeight)
|
||||||
|
)
|
||||||
|
|
||||||
|
# compute centers for screw holes
|
||||||
|
topOfLidCenters = (
|
||||||
|
cutlip.faces(">Z")
|
||||||
|
.workplane(centerOption="CenterOfMass")
|
||||||
|
.rect(POSTWIDTH, POSTLENGTH, forConstruction=True)
|
||||||
|
.vertices()
|
||||||
|
)
|
||||||
|
|
||||||
|
# add holes of the desired type
|
||||||
|
if p_boreDiameter > 0 and p_boreDepth > 0:
|
||||||
|
topOfLid = topOfLidCenters.cboreHole(
|
||||||
|
p_screwpostID, p_boreDiameter, p_boreDepth, 2.0 * p_thickness
|
||||||
|
)
|
||||||
|
elif p_countersinkDiameter > 0 and p_countersinkAngle > 0:
|
||||||
|
topOfLid = topOfLidCenters.cskHole(
|
||||||
|
p_screwpostID, p_countersinkDiameter, p_countersinkAngle, 2.0 * p_thickness
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
topOfLid = topOfLidCenters.hole(p_screwpostID, 2.0 * p_thickness)
|
||||||
|
|
||||||
|
# flip lid upside down if desired
|
||||||
|
if p_flipLid:
|
||||||
|
topOfLid = topOfLid.rotateAboutCenter((1, 0, 0), 180)
|
||||||
|
|
||||||
|
# return the combined result
|
||||||
|
result = topOfLid.union(bottom)
|
33
rotaryAttachmentCone.scad
Normal file
33
rotaryAttachmentCone.scad
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
tipR = 70/2; // 95/2
|
||||||
|
baseR = 10;
|
||||||
|
length = 20;
|
||||||
|
thickness = 3;
|
||||||
|
|
||||||
|
connectorInnerR = 6/2;
|
||||||
|
connectorOuterR = 18/2;
|
||||||
|
connectorLength = 8;
|
||||||
|
connectorScrewD = 3.75; //4mm screws
|
||||||
|
|
||||||
|
shaftLength = 11.5;
|
||||||
|
shaftBaseToFlat = 1;
|
||||||
|
shaftFlat = 4;
|
||||||
|
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
cylinder(r=connectorOuterR, h=connectorLength); // connector outer
|
||||||
|
translate([0,0,-0.01]) // connector inner
|
||||||
|
cylinder(r=connectorInnerR, h=shaftLength); // axel hole
|
||||||
|
translate([0,0,shaftBaseToFlat + shaftFlat/2]) { // screw holes
|
||||||
|
rotate(90, [1,0,0])
|
||||||
|
cylinder(d=connectorScrewD, h=connectorOuterR + 0.1);
|
||||||
|
rotate(90, [0,1,0])
|
||||||
|
cylinder(d=connectorScrewD, h=connectorOuterR + 0.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
difference() { //cone
|
||||||
|
translate([0,0,connectorLength]) // outer
|
||||||
|
cylinder(r1=connectorOuterR, r2=tipR+thickness, h=length + (shaftLength - connectorLength));
|
||||||
|
translate([0,0,shaftLength]) // inner
|
||||||
|
cylinder(r1=baseR, r2=tipR, h=length + 0.01);
|
||||||
|
}
|
29
sharpieHolder.scad
Normal file
29
sharpieHolder.scad
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
sharpieRadius = 12/2;
|
||||||
|
thickness = 2;
|
||||||
|
|
||||||
|
magnetThickness = 1.67;
|
||||||
|
magnetHeight = 19;
|
||||||
|
magnetWidth = 9.5;
|
||||||
|
magnetBaseThickness = 1;
|
||||||
|
|
||||||
|
wallWidth = 0.6; // for single back wall
|
||||||
|
magnetPlay = 0.4;
|
||||||
|
|
||||||
|
backThickness = thickness + magnetThickness + wallWidth + magnetPlay;
|
||||||
|
height = magnetBaseThickness*2 + magnetHeight + magnetPlay;
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
linear_extrude(height) {
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
circle(sharpieRadius + thickness);
|
||||||
|
translate([-sharpieRadius - thickness, 0])
|
||||||
|
square([(sharpieRadius + thickness)*2, sharpieRadius + backThickness]);
|
||||||
|
}
|
||||||
|
circle(sharpieRadius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([-magnetWidth/2, sharpieRadius + thickness, magnetBaseThickness])
|
||||||
|
cube([magnetWidth*2, magnetThickness + magnetPlay, magnetHeight + magnetPlay]);
|
||||||
|
}
|
37
taz-6-camera/camera-bracket.py
Normal file
37
taz-6-camera/camera-bracket.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import cadquery as cq
|
||||||
|
from cadquery import exporters
|
||||||
|
|
||||||
|
|
||||||
|
camera_width = 36 + 1
|
||||||
|
camera_height = 5.5 + 1
|
||||||
|
|
||||||
|
bracket_width = 10
|
||||||
|
bracket_thickness = 3
|
||||||
|
|
||||||
|
bolt_hole_diameter = 3.4
|
||||||
|
|
||||||
|
corner_radius = 1
|
||||||
|
|
||||||
|
|
||||||
|
result = (
|
||||||
|
cq
|
||||||
|
.Workplane("front")
|
||||||
|
.box(camera_width + bracket_thickness * 2, bracket_width, camera_height + bracket_thickness)
|
||||||
|
.faces(">Y")
|
||||||
|
.workplane()
|
||||||
|
.move(yDist=-bracket_thickness/2)
|
||||||
|
.rect(camera_width, camera_height, True)
|
||||||
|
.cutThruAll()
|
||||||
|
.faces(">X")
|
||||||
|
.vertices("<Y and <Z")
|
||||||
|
.workplane(centerOption="CenterOfMass")
|
||||||
|
.rect(bracket_width, bracket_thickness, centered=False)
|
||||||
|
.extrude(bracket_width)
|
||||||
|
.faces(">Z[1]").workplane(centerOption="CenterOfMass").hole(bolt_hole_diameter)
|
||||||
|
.mirror("YZ", union=True)
|
||||||
|
.edges("%Line").edges("not <Z").fillet(corner_radius)
|
||||||
|
)
|
||||||
|
|
||||||
|
exporters.export(result, 'camera-bracket.stl')
|
BIN
taz-6-camera/drop-in_5mm_t-nut.blend
Normal file
BIN
taz-6-camera/drop-in_5mm_t-nut.blend
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user