Initial Commit
This commit is contained in:
commit
0bded6bb91
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
*.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.
BIN
dell_e6440_hdd_caddy/dell_e6440_hdd_caddy.stl
Normal file
BIN
dell_e6440_hdd_caddy/dell_e6440_hdd_caddy.stl
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]);
|
||||
}
|
||||
}
|
13274
oscilloscopeKnobs.stl
Normal file
13274
oscilloscopeKnobs.stl
Normal file
File diff suppressed because it is too large
Load Diff
42534
relay_enclosure/bottom.stl
Normal file
42534
relay_enclosure/bottom.stl
Normal file
File diff suppressed because it is too large
Load Diff
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)
|
85290
relay_enclosure/lid.stl
Normal file
85290
relay_enclosure/lid.stl
Normal file
File diff suppressed because it is too large
Load Diff
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);
|
||||
}
|
4398
rotaryAttachmentCone.stl
Normal file
4398
rotaryAttachmentCone.stl
Normal file
File diff suppressed because it is too large
Load Diff
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]);
|
||||
}
|
1094
sharpieHolder.stl
Normal file
1094
sharpieHolder.stl
Normal file
File diff suppressed because it is too large
Load Diff
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')
|
198998
taz-6-camera/camera-bracket.stl
Normal file
198998
taz-6-camera/camera-bracket.stl
Normal file
File diff suppressed because it is too large
Load Diff
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.
BIN
taz-6-camera/drop-in_5mm_t-nut.stl
Normal file
BIN
taz-6-camera/drop-in_5mm_t-nut.stl
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user