diff --git a/doggie-door.scad b/doggie-door.scad index 8ae18d6..958f439 100644 --- a/doggie-door.scad +++ b/doggie-door.scad @@ -1,3 +1,4 @@ + include $fn=20; @@ -7,8 +8,17 @@ showAnchors=0; showDoor=1; showSeparateObjects=0; +// split for smaller print beds +// will be automatically moved -60mm for the +// bottom offset (0 is modeled as where the door stops) +// ~490 is the total length +splitAt = [ + 490/3*1-20, + 490/3*2-20 +]; + // model sizes -panelThickness=3; +panelThickness=4.5; // door measurements doorGutter=6; @@ -47,39 +57,60 @@ if(showDoor) { } } +module limitSwitchMount(){ + switchHeight = 7; + switchWidth = 12; + switchLength = 20; + + switchHoleFromFront = 9; // we assume "front" is the left here, adjust for right + switchHoleFromSide = 5.5; + switchHoleSpacing = 9; + + // switch mount + difference(){ + cuboid([switchWidth,switchLength,switchHeight], rounding=1, anchor=FRONT+LEFT+BOTTOM); + translate([switchHoleFromFront, switchHoleFromSide, 10/2+switchHeight/2+0.1]) { + cylinder(h=10, r=1.2, center=true); + } + translate([switchHoleFromFront, switchHoleFromSide+switchHoleSpacing, 10/2+switchHeight/2+0.1]) { + cylinder(h=10, r=1.2, center=true); + } + } +} module topPanel(){ translate([doorGutter,230,0]){ + translate([15,-2,0]) cuboid([4,145+(2*INCH),10], rounding=1, edges=["Y"], anchor=FRONT+LEFT+BOTTOM); difference(){ - cuboid([40,145,panelThickness], rounding=1, edges=["Y",BACK], anchor=FRONT+LEFT+BOTTOM) { + cuboid([40,145+(2*INCH),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 + // limit switch mount + translate([6,-12-77.5,0]) position(TOP+BACK) color("pink") rotate(90) limitSwitchMount(); + // servo mount + translate([17.8,-42,20]) position(TOP+BACK+LEFT) rotate([0,0,90]) color("pink") import("Futaba_3001_Servo_Mount.stl"); 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) + $fn=40; + translate([2,-21,3]) position(TOP+BACK+LEFT) rotate([0,90,0]) cyl(h=5,d=55, anchor=RIGHT); + // servo mount holes + /*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); + cyl(h=10,d=2, anchor=BACK+LEFT+BOTTOM);*/ } } // mounting hole - translate([29,37,0]) { + translate([29,37,-0.1]) { 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); + translate([7,0,0]) + cuboid([15,5,panelThickness+1], anchor=BOTTOM); } } } @@ -87,10 +118,11 @@ module topPanel(){ module middlePanel(){ translate([doorGutter,85,0]) { + translate([15,0,0]) cuboid([4,145,10], rounding=1, edges=["Y"], anchor=FRONT+LEFT+BOTTOM); 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); + translate([25,0,0]) color("green") position(TOP) cuboid([2*INCH,2.5*INCH,1*INCH], anchor=BOTTOM); } } } @@ -98,11 +130,10 @@ module middlePanel(){ module bottomPanel(){ translate([doorGutter,-60,0]) { + translate([15,2,0]) cuboid([4,145,10], rounding=1, edges=["Y"], anchor=FRONT+LEFT+BOTTOM); 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"); @@ -115,16 +146,16 @@ module bottomPanel(){ translate([30.7,12.9,20]) position(TOP+FRONT+LEFT) cyl(h=10,d=2, anchor=FRONT+LEFT+BOTTOM); } + // limit switch mount + translate([6,72,0]) position(TOP+FRONT+LEFT) rotate(-90) color("pink") limitSwitchMount(); } // mounting hole - translate([29,117,0]) { + translate([29,117,-0.1]) { 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); + translate([7,0,0]) + cuboid([15,5,panelThickness+1], anchor=BOTTOM); } } } @@ -136,8 +167,9 @@ difference(){ 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); + for(i=[0: len(splitAt)-1]){ + translate([doorGutter+19.5,splitAt[i]-60,20]) scale([0.5,0.5,1]) partition_cut_mask(gap=0, cutpath="dovetail", $slop=0.5); + } } diff --git a/doggie-door.stl b/doggie-door.stl index 8cf35fd..5954910 100644 Binary files a/doggie-door.stl and b/doggie-door.stl differ diff --git a/limit-switch-flag-and-chain-catch-assembled.stl b/limit-switch-flag-and-chain-catch-assembled.stl index 2004ec5..e918558 100644 Binary files a/limit-switch-flag-and-chain-catch-assembled.stl and b/limit-switch-flag-and-chain-catch-assembled.stl differ diff --git a/limit-switch-flag-and-chain-catch-printable.stl b/limit-switch-flag-and-chain-catch-printable.stl index 4a1dff0..28d1897 100644 Binary files a/limit-switch-flag-and-chain-catch-printable.stl and b/limit-switch-flag-and-chain-catch-printable.stl differ diff --git a/limit-switch-flag-and-chain-catch.scad b/limit-switch-flag-and-chain-catch.scad index 846c67d..7ad5bfb 100644 --- a/limit-switch-flag-and-chain-catch.scad +++ b/limit-switch-flag-and-chain-catch.scad @@ -1,12 +1,12 @@ -showAssembled=1; +showAssembled=0; $fn=12; flagHeight=15; -flagWidth=20; +flagWidth=25; flagDepth=10; -baseThickness=2; -chainHolderDiameter=3; +baseThickness=4; +chainHolderDiameter=4; gutterHeight=5; gutterWidth=4; @@ -15,12 +15,13 @@ gutterWidth=4; if (showAssembled) { wholeModel(); } else { + translate([0,0,baseThickness]) rotate([180,0,180]) difference(){ wholeModel(); translate([-50,-50,baseThickness]) cube(100); } - translate([-50,0,0]) difference(){ + translate([-20,0,-baseThickness]) difference(){ wholeModel(); translate([-50,-50,-100+baseThickness]) cube(100); } @@ -37,15 +38,21 @@ module wholeModel(){ cube([flagDepth,flagWidth,flagHeight-gutterHeight], center=true); } - translate([0,-(flagWidth+20)/2,2/2]){ + translate([0,-(flagWidth+20)/2,baseThickness/2]){ difference(){ cube([flagDepth,20,baseThickness], center=true); translate([0,0,0]) - cylinder(h=4,r=2.5,center=true); + cylinder(h=baseThickness+1,r=2.5,center=true); } } } - translate([0,0,baseThickness]){ + // screw holes + translate([0,flagWidth*.12,flagHeight*.65]) rotate([0,0,0]) cylinder(h=flagHeight/4,d=4.5, center=true); + translate([0,flagWidth*.12,flagHeight/4]) rotate([0,0,0]) cylinder(h=flagHeight+1,d=1.5, center=true); + translate([0,-flagWidth*.45,flagHeight*.65]) rotate([0,0,0]) cylinder(h=flagHeight/4,d=4.5, center=true); + translate([0,-flagWidth*.45,flagHeight/4]) rotate([0,0,0]) cylinder(h=flagHeight+1,d=1.5, center=true); + + translate([0,2,baseThickness]){ chainHolder(); translate([0,chainHolderDiameter+.5,0]) chainHolder(); } @@ -55,5 +62,5 @@ module wholeModel(){ 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); + translate([0,-flagWidth/2+2,0]) rotate([0,90,0]) cylinder(h=flagDepth,d=1, center=true); } \ No newline at end of file diff --git a/photo.jpg b/photo.jpg new file mode 100644 index 0000000..5c7783b Binary files /dev/null and b/photo.jpg differ diff --git a/photo.png b/photo.png deleted file mode 100644 index 203239c..0000000 Binary files a/photo.png and /dev/null differ