Initial commit

This commit is contained in:
Will Bradley 2024-04-03 16:04:36 -07:00
commit 08d340d4ea
Signed by: will
GPG Key ID: 1159B930701263F3
27 changed files with 291921 additions and 0 deletions

9
10mm-block.scad Normal file
View File

@ -0,0 +1,9 @@
$fn=12;
difference(){
cube([20,80,10]);
translate([20/2,80/4,50/2])
#cylinder(h=51,r=1.5,center=true);
translate([20/2,80/4*3,50/2])
#cylinder(h=51,r=1.5,center=true);
}

BIN
10mm-block.stl Normal file

Binary file not shown.

9
40mm-block.scad Normal file
View File

@ -0,0 +1,9 @@
$fn=12;
difference(){
cube([20,80,40]);
translate([20/2,80/4,40/2])
#cylinder(h=46,r=3,center=true);
translate([20/2,80/4*3,40/2])
#cylinder(h=46,r=3,center=true);
}

BIN
40mm-block.stl Normal file

Binary file not shown.

9
45mm-block.scad Normal file
View File

@ -0,0 +1,9 @@
$fn=12;
difference(){
cube([20,80,45]);
translate([20/2,80/4,45/2])
#cylinder(h=46,r=3,center=true);
translate([20/2,80/4*3,45/2])
#cylinder(h=46,r=3,center=true);
}

BIN
45mm-block.stl Normal file

Binary file not shown.

9
50mm-block.scad Normal file
View File

@ -0,0 +1,9 @@
$fn=12;
difference(){
cube([20,80,50]);
translate([20/2,80/4,50/2])
#cylinder(h=51,r=3,center=true);
translate([20/2,80/4*3,50/2])
#cylinder(h=51,r=3,center=true);
}

BIN
50mm-block.stl Normal file

Binary file not shown.

BIN
BOSL2-master.zip Normal file

Binary file not shown.

BIN
Futaba_3001_Servo_Mount.stl Normal file

Binary file not shown.

View File

@ -0,0 +1,254 @@
//Parametric L Bracket
//You can make this any length, Width, Height & Thickness you want
//You can also have 1, 2 or 4 screws on each leg of the L
//8/19/2015 By: David Bunch
//
//Revised 8/20/2015 to make rounded ends instead of chamfers
// and more flexibility on screws
//CUSTOMIZER VARIABLES
/* [Basic Dimensions] */
//1. Length of Part along 1st L
Len = 1.75*25.4; //[25:1:75]
//2. Width of L along 2nd L
Wid = 0.65*25.4; //[25:1:75]
//3. Height of L Bracket
Ht = 1*25.4; //[20:1:75]
//4. Thickness of Leg along X-Axis
Thk_X = 0.25*25.4; //[2:.5:12]
//5. Thickness of Leg along Y-axis
Thk_Y = 0.5*25.4; //[2:.5:12]
//6. Weld Diameter at L junction
WeldDia = 0.5*25.4; //[2:.5:12]
//7. Round Corners (0 = No, 1 = Yes)
RndON = 1; //[0:No, 1:Yes]
//8. # of parts to make (1,2,3 or 4)
Parts = 1; //[1:1:4]
/* [Hole Sizes] */
//9. Hole Diameter for Screws (#8 screw default)
HoleSize = 3; //[0:#6, 1:#8, 2:#10, 3:3mm, 4:4mm, 5:5mm, 6:6mm]
//#10 Screws are 4.5 measured
//#8 Screws are 4.2 measured
//#6 Screws are 3.4 measured
//10. Taper or Countersink Hole
Tap_CnkSnk = 1; //[0:None, 1:Tapered, 2:Counter Sink]
//11. Drill Hole Tolerance
Tolerance = .1; //[0:.05:.8]
/* [Hole Offsets] */
//12. 1st Hole Offset distance from end of X-Axis
HoleOffset_X1 = 10; //[6:.5:30]
//13. 2nd Hole Offset distance from 1st Hole of X-Axis
HoleOffset_X2 = 10; //[6:.5:30]
//14. 1st Hole Offset distance from end of Y-Axis
HoleOffset_Y1 = 0.5*25.4; //[6:.5:30]
//15. 2nd Hole Offset distance from 1st Hole of Y-Axis
HoleOffset_Y2 = 10; //[6:.5:30]
/* [Number of Holes] */
//16. # of Screws on each side of L (1 or 2)
Screws_X = 2; //[1:One Screw, 2:Two Screws]
//17. # of Screws on each side of L (1 or 2)
Screws_Y = 1; //[1:One Screw, 2:Two Screws]
//18. # of Screws along Height of L on X-Axis (1 or 2)
Screws_ZX = 1; //[1:One Screw, 2:Two Screws]
//19. # of Screws along Height of L on Y-Axis (1 or 2)
Screws_ZY = 1; //[1:One Screw, 2:Two Screws]
//20. Screw Height (I use 3/4" screws for default)
ScrewHt = 19.0; //[9.5:.5:38]
//CUSTOMIZER VARIABLES END
//HoleSize = 4.2; //[#6:3.4, #8:4.2, #10:4.5, 3mm:3, 4mm:4, 5mm:5, 6mm:6]
// //#10 Screws are 4.5 measured
// //#8 Screws are 4.2 measured
// //#6 Screws are 3.4 measured
//
////10. Taper or Countersink Hole
//Tap_CnkSnk = 1; //[0:None, 1:Tapered, 2:Counter Sink]
//
////11. Dia. of Taper Head of Screw (#8 used for default)
//TaperDia = 7.9; //[6.45:#6, 7.95:#8, 9.0:#10, 6:3mm, 4mm:8, 5mm:10, 6mm:12]
A_Hole_OD = [3.4,4.2,4.5,3,4,5,6];
A_Head_OD = [6.45,7.95,9,6,8,10,12];
A_TaperLen = [2.66,3.5,3.9,3,4.2,5.5,6.5];
HoleOD = A_Hole_OD[HoleSize] + Tolerance; //Calculated Hole Diameter
TapOD = A_Head_OD[HoleSize] + Tolerance; //Calculated Tapered Head Diameter
TaperLen = A_TaperLen[HoleSize];
WeldRad = WeldDia / 2; //Radius of Weld
//Calcs for Hole(s) along X axis
Ht2ZX = Ht / (Screws_ZX + 1); //Half Height or 1/3 height if 2 screws are used
echo("Ht2ZX = ", Ht2ZX);
H_X = (Len - Thk_Y - WeldRad) / (Screws_X + 1);
echo("H_X = ",H_X);
//Hole_X = H_X + Thk_Y + WeldRad;
Hole_X1 = Len - HoleOffset_X1;
Hole_X2 = Hole_X1 - HoleOffset_X2;
echo("Hole_X1 = ",Hole_X1);
//Hole_X2 = Hole_X1 + H_X;
echo("Hole_X2 = ",Hole_X2);
//
//Calcs for Hole(s) along Y axis
Ht2ZY = Ht / (Screws_ZY + 1); //Half Height or 1/3 height if 2 screws are used
echo("Ht2ZY = ", Ht2ZY);
H_Y = (Wid - Thk_X - WeldRad) / (Screws_Y + 1);
echo("H_Y = ",H_Y);
//Hole_Y = H_Y + Thk_X + WeldRad;
Hole_Y1 = Wid - HoleOffset_Y1;
Hole_Y2 = Hole_Y1 - HoleOffset_Y2;
echo("Hole_Y = ",Hole_Y1);
//Hole_Y2 = Hole_Y + H_Y;
echo("Hole_Y2 = ",Hole_Y2);
//
ScrewThreadHt = ScrewHt - TaperLen;
Ht2x = Ht * 2;
Ht_Half = Ht / 2;
Ires = round(((Ht * 3.14) / 4) / .8) * 4;
Hole_Res = round(((TapOD * 3.14) / 4) / 1) * 4;
echo(Hole_Res = Hole_Res);
module DrawSrewCut()
{
//This combines the head to the screw
if (Tap_CnkSnk == 0)
{
cylinder(d=HoleOD,h=ScrewThreadHt,$fn=Hole_Res);
} else if (Tap_CnkSnk == 1)
{
union()
{
cylinder(d1=TapOD,d2=HoleOD,h=TaperLen,$fn=Hole_Res);
cylinder(d=HoleOD,h=ScrewThreadHt,$fn=Hole_Res);
}
} else if (Tap_CnkSnk == 2)
{
union()
{
cylinder(d=TapOD,h=TaperLen,$fn=Hole_Res);
cylinder(d=HoleOD,h=ScrewThreadHt,$fn=Hole_Res);
}
}
}
module LBracket()
{
union()
{
cube([Len,Thk_X,Ht]); //Draw the X axis side
cube([Thk_Y,Wid,Ht]); //Draw the Y axis side
translate([Thk_Y,Thk_X,0])
cylinder(d=WeldDia,h=Ht,$fn=4); //Add the Weld
}
}
module RndCorner_XY()
{
difference()
{
cylinder(d=Ht2x,h=Thk_X+Thk_Y,$fn=Ires);
translate([0,0,-1])
cylinder(d=Ht,h=Thk_X+Thk_Y+2,$fn=Ires);
translate([-(Ht2x+2),-(Ht+1),-1])
cube([Ht2x+2,Ht2x+2,Thk_X+Thk_Y+2]);
}
}
module Screws_X()
{
//Drill holes for Screws along the X axis
translate([Hole_X1,Thk_X+.02,Ht2ZX])
rotate([90,0,0])
DrawSrewCut();
if (Screws_X == 2)
{
translate([Hole_X2,Thk_X+.02,Ht2ZX])
rotate([90,0,0])
DrawSrewCut();
}
}
module Screws_Y()
{
//Drill holes for Screws along the Y axis
translate([Thk_Y+.02,Hole_Y1,Ht2ZY])
rotate([0,-90,0])
DrawSrewCut();
if (Screws_Y == 2)
{
translate([Thk_Y+.02,Hole_Y2,Ht2ZY])
rotate([0,-90,0])
DrawSrewCut();
}
}
module DrawL()
{
rotate([90,0,0])
difference()
{
LBracket();
Screws_X();
if (Screws_ZX == 2)
{
translate([0,0,Ht2ZX])
Screws_X();
}
Screws_Y();
if (Screws_ZY == 2)
{
translate([0,0,Ht2ZY])
Screws_Y();
}
if (RndON == 1)
{
//Round the X-Axis Corner
translate([Len-Ht_Half,-1,Ht_Half])
rotate([-90,0,0])
RndCorner_XY();
//Round the Y-Axis Corner
translate([-1,Wid-Ht_Half,Ht_Half])
rotate([90,0,90])
RndCorner_XY();
}
//The following section is only for visual checks of how far screws go into wood
//These will not draw on final render
translate([0,-12.7,0])
%cube([Hole_X1,12.7,38.1]); //Check how far screw goes into 1/2" wood
translate([-19.02,0,0])
%cube([19.02,Hole_Y1,38.1]); //Check how far screw goes into 3/4" wood
if (Tap_CnkSnk != 0)
{
translate([Hole_X1,Thk_X + 2 + TaperLen,Ht2ZX])
rotate([90,0,0])
color("red")
%DrawSrewCut();
translate([Thk_Y+2+TaperLen,Hole_Y1,Ht2ZY])
rotate([0,-90,0])
color("red")
%DrawSrewCut();
}
}
}
//Draw how ever many parts user wants along the Y-Axis
for ( i = [1 : Parts] )
{
translate([0,(Ht+6) * i,0])
DrawL();
}

Binary file not shown.

154
doggie-door.scad Normal file
View File

@ -0,0 +1,154 @@
include <BOSL2/std.scad>
$fn=20;
showScan=0;
showAnchors=0;
showDoor=1;
showSeparateObjects=0;
// model sizes
panelThickness=3;
// door measurements
doorGutter=6;
doorToBolt=34;
if(showScan) {
// scan
// lay flat and set the bottom-right as origin
translate([-5,110,55]) rotate([-90,0,0])
#rotate([26.9,15,-1]) scale(450) import("scan.stl");
}
if(showAnchors) {
// scale measurement
/*
translate([-270,162,0])
cuboid([20,210,1], anchor=BOTTOM+LEFT);
translate([-250,47,0])
cuboid([305-20,20,1], anchor=BOTTOM+LEFT);
translate([-250,47+210+20,0])
cuboid([305-20,20,1], anchor=BOTTOM+LEFT);
*/
translate([35,47+10,0])
#cylinder(h=10, d=5, anchor=BOTTOM);
translate([-250,47+10,0])
#cylinder(h=10, d=5, anchor=BOTTOM);
translate([-250,47+210+10,0])
#cylinder(h=10, d=5, anchor=BOTTOM);
translate([35,47+210+10,0])
#cylinder(h=10, d=5, anchor=BOTTOM);
}
if(showDoor) {
if (showSeparateObjects) {
rotate([0,0,-90]) translate([-20,8,10])
color("orange") import("limit-switch-flag-and-chain-catch-assembled.stl");
}
}
module topPanel(){
translate([doorGutter,230,0]){
difference(){
cuboid([40,145,panelThickness], rounding=1, edges=["Y",BACK], anchor=FRONT+LEFT+BOTTOM) {
if (showSeparateObjects) {
// limit switch
translate([0,-12-65,0]) position(TOP+BACK) color("purple") rotate(90) import("limit-switch-mount-sideways.stl");
// servo mount
translate([17.8,-42,20]) position(TOP+BACK+LEFT) rotate([0,0,90]) color("teal") import("Futaba_3001_Servo_Mount.stl");
// servo
translate([44,-31.5,31]) position(TOP+BACK+LEFT) rotate([0,0,90]) color("gray") import("servo futaba s3003 v6.stl");
// top pulley
translate([-10,-21,31]) position(TOP+BACK+LEFT) rotate([0,90,0]) color("red") import("parametric_ball_pulley-improved-with-flares.stl");
}
// servo mount holes
difference(){
translate([0,-1,0]) position(TOP+BACK+LEFT) cuboid([40,61,19], rounding=1, anchor=BACK+LEFT+BOTTOM);
translate([26.6,-20.1,10]) position(TOP+BACK+LEFT)
cyl(h=10,d=2, anchor=BACK+LEFT+BOTTOM);
translate([26.6,-41.5,10]) position(TOP+BACK+LEFT)
cyl(h=10,d=2, anchor=BACK+LEFT+BOTTOM);
}
}
// mounting hole
translate([29,37,0]) {
cyl(h=panelThickness+1,d=5, anchor=BOTTOM);
translate([0,0,panelThickness-2])
cyl(h=3,d=15, chamfer1=0.5, anchor=BOTTOM);
}
// limit switch hole
translate([32,74.1,0]) {
cyl(h=panelThickness+1,d=2, anchor=BOTTOM);
}
}
}
}
module middlePanel(){
translate([doorGutter,85,0]) {
cuboid([40,145,panelThickness], rounding=1, edges=["Y"], anchor=FRONT+LEFT+BOTTOM) {
if (showSeparateObjects) {
//arduino
translate([20,0,0]) color("green") position(TOP) cuboid([2*INCH,2.5*INCH,1*INCH], anchor=BOTTOM);
}
}
}
}
module bottomPanel(){
translate([doorGutter,-60,0]) {
difference() {
cuboid([40,145,panelThickness], rounding=1, edges=["Y",FRONT], anchor=FRONT+LEFT+BOTTOM) {
if (showSeparateObjects) {
// limit switch
translate([0,60,0]) position(TOP+FRONT) rotate(90) color("purple") import("limit-switch-mount-sideways-right.stl");
// bottom pulley
translate([-3,-5,27.5]) position(TOP+FRONT+LEFT) color("teal") import("LBracket_Parametric_rev9.stl");
translate([-10,14,31]) position(TOP+FRONT+LEFT) rotate([0,90,0]) color("red") import("parametric_ball_pulley-improved-with-flares.stl");
}
// pulley mount
difference(){
translate([2,0,0]) position(TOP+FRONT+LEFT) cuboid([35,27.5,27.5], rounding=1, anchor=FRONT+LEFT+BOTTOM);
translate([20.7,12.9,20]) position(TOP+FRONT+LEFT)
cyl(h=10,d=2, anchor=FRONT+LEFT+BOTTOM);
translate([30.7,12.9,20]) position(TOP+FRONT+LEFT)
cyl(h=10,d=2, anchor=FRONT+LEFT+BOTTOM);
}
}
// mounting hole
translate([29,117,0]) {
cyl(h=panelThickness+1,d=5, anchor=BOTTOM);
translate([0,0,panelThickness-2])
cyl(h=3,d=15, chamfer1=0.5, anchor=BOTTOM);
}
// limit switch hole
translate([32,66,0]) {
cyl(h=panelThickness+1,d=2, anchor=BOTTOM);
}
}
}
}
difference(){
union(){
topPanel();
middlePanel();
bottomPanel();
}
translate([doorGutter+20,85,0]) scale(0.4) partition_cut_mask(gap=0, cutpath="dovetail", $slop=0.5);
translate([doorGutter+20,230,0]) scale(0.4) partition_cut_mask(gap=0, cutpath="dovetail", $slop=0.5);
}

BIN
doggie-door.stl Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,59 @@
showAssembled=1;
$fn=12;
flagHeight=15;
flagWidth=20;
flagDepth=10;
baseThickness=2;
chainHolderDiameter=3;
gutterHeight=5;
gutterWidth=4;
// slice it for printing
if (showAssembled) {
wholeModel();
} else {
difference(){
wholeModel();
translate([-50,-50,baseThickness]) cube(100);
}
translate([-50,0,0]) difference(){
wholeModel();
translate([-50,-50,-100+baseThickness]) cube(100);
}
}
module wholeModel(){
difference() {
union() {
translate([0,-gutterWidth/2,gutterHeight/2-(gutterHeight-1)]){
cube([flagDepth,flagWidth-gutterWidth,gutterHeight-2], center=true);
}
translate([0,-gutterWidth,(flagHeight-gutterHeight)/2]){
cube([flagDepth,flagWidth,flagHeight-gutterHeight], center=true);
}
translate([0,-(flagWidth+20)/2,2/2]){
difference(){
cube([flagDepth,20,baseThickness], center=true);
translate([0,0,0])
cylinder(h=4,r=2.5,center=true);
}
}
}
translate([0,0,baseThickness]){
chainHolder();
translate([0,chainHolderDiameter+.5,0]) chainHolder();
}
}
}
module chainHolder() {
translate([-flagDepth/3,-flagWidth/2+2,0]) rotate([0,90,0]) cylinder(h=flagDepth/2+1,d=chainHolderDiameter, center=true);
translate([flagDepth/3,-flagWidth/2+2,0]) rotate([0,90,0]) cylinder(h=flagDepth/2+1,d=chainHolderDiameter, center=true);
translate([0,-flagWidth/2+2,0]) rotate([0,90,0]) cylinder(h=flagDepth,d=0.7, center=true);
}

24
limit-switch-flag.scad Normal file
View File

@ -0,0 +1,24 @@
$fn=12;
flagHeight=35;
flagWidth=25;
baseThickness=2;
gutterHeight=5;
gutterWidth=4;
translate([0,-gutterWidth/2,gutterHeight/2-gutterHeight]){
cube([10,flagWidth-gutterWidth,gutterHeight], center=true);
}
translate([0,-gutterWidth,(flagHeight-gutterHeight)/2]){
#cube([10,flagWidth,flagHeight-gutterHeight], center=true);
}
translate([0,-(flagWidth+20)/2,2/2]){
difference(){
cube([10,20,baseThickness], center=true);
translate([0,0,0])
#cylinder(h=4,r=2.5,center=true);
}
}

BIN
limit-switch-flag.stl Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,52 @@
switchHeight = 5;
switchWidth = 12;
switchLength = 20;
switchHoleFromFront = 9; // we assume "front" is the left here, adjust for right
switchHoleFromSide = 5.5;
switchHoleSpacing = 9;
baseWidth = 12;
baseLength = 25;
baseThickness = 2;
slotWidth = 3;
slotLength = 15;
slotCenterFromBack = 11;
slotFromSide = 6;
slotSpacing = 9;
filletSize = 3;
$fn=10;
// switch mount
difference(){
cube([switchWidth,switchLength,switchHeight]);
translate([switchHoleFromFront, switchHoleFromSide, 10/2+switchHeight/2+0.1]) {
#cylinder(h=10, r=1, center=true);
}
translate([switchHoleFromFront, switchHoleFromSide+switchHoleSpacing, 10/2+switchHeight/2+0.1]) {
#cylinder(h=10, r=1, center=true);
}
}
// base
translate([0,-baseLength,0]){
difference(){
cube([baseWidth,baseLength,baseThickness]);
translate([slotFromSide,slotCenterFromBack,baseThickness/2]){
cube([slotWidth,slotLength,baseThickness+0.2], center=true);
}
}
}
// fillet
translate([0,-filletSize,baseThickness]) {
prism(baseWidth,filletSize,filletSize);
}
module prism(l, w, h){
polyhedron(//pt 0 1 2 3 4 5
points=[[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0,w,h], [l,w,h]],
faces=[[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]]
);
}

Binary file not shown.

56
limit-switch-mount.scad Normal file
View File

@ -0,0 +1,56 @@
switchHeight = 20;
switchWidth = 12;
switchLength = 20;
switchHoleFromFront = 9; // we assume "front" is the left here, adjust for right
switchHoleFromSide = 5.5;
switchHoleSpacing = 9;
baseWidth = 20;
baseLength = 25;
baseThickness = 2;
slotWidth = 2;
slotLength = 15;
slotCenterFromBack = 11;
slotFromSide = 5.5;
slotSpacing = 9;
filletSize = 5;
$fn=10;
// switch mount
difference(){
cube([switchWidth,switchLength,switchHeight]);
translate([switchHoleFromFront, switchHoleFromSide, 10/2+switchHeight/2+0.1]) {
#cylinder(h=10, r=1, center=true);
}
translate([switchHoleFromFront, switchHoleFromSide+switchHoleSpacing, 10/2+switchHeight/2+0.1]) {
#cylinder(h=10, r=1, center=true);
}
}
// base
translate([0,-baseLength,0]){
difference(){
cube([baseWidth,baseLength,baseThickness]);
translate([slotFromSide,slotCenterFromBack,baseThickness/2]){
cube([slotWidth,slotLength,baseThickness+0.2], center=true);
}
translate([slotFromSide+slotSpacing,slotCenterFromBack,baseThickness/2]){
cube([slotWidth,slotLength,baseThickness+0.2], center=true);
}
}
}
// fillet
translate([0,-filletSize,baseThickness]) {
prism(baseWidth,filletSize,filletSize);
}
module prism(l, w, h){
polyhedron(//pt 0 1 2 3 4 5
points=[[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0,w,h], [l,w,h]],
faces=[[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]]
);
}

BIN
limit-switch-mount.stl Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

BIN
scan.stl Normal file

Binary file not shown.

BIN
servo futaba s3003 v6.stl Normal file

Binary file not shown.