// David Pilling //Disable $fn and $fa, do not change these $fn=0; $fa=0.01; $fs=0.5; epsilon=0.2; m3r=1.6; m3hr=3; m3hh=2; raild=3.1; psud=4; thickness=4; thicknessx=6; rail=30; side=20; step=4.0; points= [ [side,thickness,rail], [thickness,thickness,rail], [thickness,side,rail], [side,thickness,rail-thickness], [thickness,thickness,rail-thickness], [thickness,side,rail-thickness] ]; faces= [ [0,1,2], [3,5,4], [0,2,5,3], [0,3,4,1], [2,1,4,5] ]; module slot(h,dia,slot,angle) { translate([-slot/2,0,0])cylinder(h,d=dia); translate([slot/2,0,0])cylinder(h,d=dia); translate([-slot/2,-dia/2,0])cube([slot,dia,h]); } module base() { difference() { union() { cube([side,thickness,rail]); cube([thickness,side,rail]); polyhedron(points,faces); translate([0,0,-rail+thickness]) polyhedron(points,faces); } translate([side/2,thicknessx,5*rail/16])rotate([90,0,0])cylinder(thicknessx,d=raild); translate([side/2,thicknessx,11*rail/16])rotate([90,0,0])cylinder(thicknessx,d=raild); translate([0,side/2+step,5*rail/16])rotate([0,90,0])cylinder(thicknessx,d=raild); translate([0,side/2+step,11*rail/16])rotate([0,90,0])cylinder(thicknessx,d=raild); } } box1size=30; wall1=2; module box1() { difference() { cube([box1size,rail,side-step]); translate([wall1,wall1,thickness])cube([box1size-2*wall1,rail-2*wall1,side-step-thickness]); translate([0,5*rail/16,(side)/2])rotate([0,90,0])cylinder(thicknessx,d=raild); translate([0,11*rail/16,(side)/2])rotate([0,90,0])cylinder(thicknessx,d=raild); translate([box1size-thickness,5*rail/16,(side)/2])rotate([0,90,0])slot(thicknessx,raild,2.5,0); translate([box1size-thickness,11*rail/16,(side)/2])rotate([0,90,0])slot(thicknessx,raild,2.5,0); } } motorthrow=61; bearingdistance=80; //basey=motorthrow+bearingdistance; baset=2; basemidx=rail; basecornery=8; basecornert=8; basecornerfromtop=3; basecornerfromside=5; basey=100+basecornery*2; boltd=3; motorshift=32; motorsupportd=6; motorsupporth=10; motorholed=2; motorholeh=10; module motorbase(sd,sh,hole) { if(hole) { translate([14,-1,0])cube([5,12,baset]); translate([-5-2.5-4,-2.5,0])cube([6,5.5,5+baset]); } cylinder(d=sd,h=sh); translate([0.5,10,0])cylinder(d=sd,h=sh); translate([-5-0.5,10,0])cylinder(d=sd,h=sh); translate([-57,0,0])cylinder(d=sd,h=sh); translate([-57-5-0.5,0,0])cylinder(d=sd,h=sh); if(!hole) { translate([-47-5-14,8,0])cube([47,5,sh+1]); } } module motorbasemaker() { union() { difference() { union() { cube([basemidx,basey,baset]); translate([basemidx-8+1.5,basey-motorshift,0])rotate([0,0,90])motorbase(motorsupportd,motorsupporth,false); } translate([basemidx-8+1.5,basey-motorshift,0])rotate([0,0,90])motorbase(motorholed,motorholeh,true); // hole to hold together translate([(5*basemidx/16),basey-8*(side/2-step),0])cylinder(h=baset+basecornery,d=boltd); translate([(11*basemidx/16),basey-8*(side/2-step),0])cylinder(h=baset+basecornery,d=boltd); translate([(5*basemidx/16),(side/2-step),0])cylinder(h=baset+basecornery,d=boltd); translate([(11*basemidx/16),(side/2-step),0])cylinder(h=baset+basecornery,d=boltd); } } } module oneside() { motorbasemaker(); } //oneside(); //translate([0,0,basey])rotate([-90,0,0]) oneside(); bearingd=18.0; bearingwidth=45; bearingx=bearingwidth; bearingy=bearingd+5; bearingz=2; bearingplatey=2; bearingplatex=12; bearingplatez=18+1.5; bearingplatescrewx=2.75+0.5;//+0.15; bearingplatescrewd=2.5; bearingplateplus=18; bearingraildepthy=bearingy; bearingrailholedepthy=bearingy-2; bearingrailx=6; bearingrailz=26; bearingmountshift=5.0; bearingplatetabz=14; module bearingplate() { difference() { translate([(bearingx-bearingplatex)/2-bearingplateplus,bearingy-bearingplatey,-bearingplatez])cube([bearingplatex+bearingplateplus,bearingplatey,bearingplatez]); // plate screw 1 translate([(bearingx-bearingplatex)/2+bearingplatescrewx,bearingy,-bearingplatez/2+bearingmountshift])rotate([90,0,0])cylinder(h=bearingplatey,d=bearingplatescrewd); // plate screw 2 translate([(bearingx+bearingplatex)/2-bearingplatescrewx,bearingy,-bearingplatez/2+bearingmountshift])rotate([90,0,0])cylinder(h=bearingplatey,d=bearingplatescrewd); } } module bearing() { difference() { union() // block and plate { cube([bearingx,bearingy,bearingz]); // ears to hold rails translate([0,bearingy-bearingraildepthy,bearingz])cube([bearingrailx,bearingraildepthy,bearingrailz]); translate([bearingx-bearingrailx,bearingy-bearingraildepthy,bearingz])cube([bearingrailx,bearingraildepthy,bearingrailz]); } // bearing slot translate([0,(bearingy)/2,bearingd/2+bearingz+7])rotate([0,90,0])cylinder(h=bearingwidth,d=bearingd); translate([bearingx/2,bearingy-1.5*raild])rotate([0,0,90])cylinder(h=bearingz,d=raild); } } rotate([90,0,0])base(); translate([-40,-rail,step])box1(); translate([-60,0,-basey+side/2++step+8*(side/2-step)])rotate([90,0,-90])oneside(); translate([-90,-30,0])rotate([0,-90,0]) union() { bearing(); translate([bearingx,(bearingy-bearingplatez)/2,0])rotate([0,0,0])rotate([90,0,0])translate([-(bearingx-bearingplatex)/2+bearingplateplus,-(bearingy-bearingplatey),0])bearingplate(); }