Initial Commit

This commit is contained in:
Adam Goldsmith 2022-09-12 16:23:58 -04:00
commit 886933f8b8
11 changed files with 3044 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.stl
*.blend[0-9]

BIN
bathroomSign/doorSign.cdr Normal file

Binary file not shown.

12
bearingSleeve.scad Normal file
View 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);
}
}

Binary file not shown.

2761
ecobee_box_plate.slvs Normal file

File diff suppressed because it is too large Load Diff

63
oscilloscopeKnobs.scad Normal file
View 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]);
}
}

View 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
View 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
View 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]);
}

View 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')

Binary file not shown.