OSE CircularKnitic v18.03: Difference between revisions
Jump to navigation
Jump to search
| Line 1,045: | Line 1,045: | ||
//TO DO// | //TO DO// | ||
//*re do mounting tabs | //*re do mounting tabs | ||
//*add integrated yarn feeder based on needle height | //*add integrated yarn feeder based on needle height | ||
//*function func6 not right? working with 45 angle but not others | //*function func6 not right? working with 45 angle but not others | ||
//*pMd4 not placing groove properly when not at 45 degrees | //*pMd4 not placing groove properly when not at 45 degrees | ||
//* | //*make ends more square? | ||
/////// | /////// | ||
CKpM(); //render mountain | CKpM(); //render mountain | ||
module CKpM(){ | module CKpM(){ | ||
translate([0,-p3wallOD/2,0]){ //main translate | translate([0,-p3wallOD/2,0]){ //main translate | ||
union(){ | |||
difference(){ | difference(){ | ||
translate([0,0,pMH/2]) | translate([0,0,pMH/2]) | ||
| Line 1,168: | Line 1,063: | ||
//main ID cut | //main ID cut | ||
cylinder(d=pMID,h=pMH+1,$fn=rez); | cylinder(d=pMID,h=pMH+1,$fn=rez); | ||
// //c3 groove - add cut in center of mountain for a little tab 1" wide? | |||
// translate([0,0,pPspace2-cWiggle]) | |||
// difference(){ | |||
// cylinder(d=c3OD,h=c3H+cWiggle,$fn=rez); | |||
// cylinder(d=(c2ID+(pMgroove*2)+(pMwallT*2)),h=c3H+cWiggle,$fn=rez); | |||
// } | |||
////// | ////// | ||
//angled cut ends | //angled cut ends | ||
//*need to calc exactly so height of path entrance matches bottom of top plate | //*need to calc pMd0 exactly so height of path entrance matches bottom of top plate | ||
rotate([0,0,( | rotate([0,0,(pMd1e-pMd0)]) | ||
translate([-pMshelfX,0,0]) | |||
mirror([1,0,0]) | mirror([1,0,0]) | ||
cube([pMID*4,pMID*4,pMH]); | cube([pMID*4,pMID*4,pMH]); | ||
mirror([1,0,0]) | mirror([1,0,0]) | ||
rotate([0,0,( | rotate([0,0,(pMd1e-pMd0)]) | ||
translate([-pMshelfX,0,0]) | |||
mirror([1,0,0]) | mirror([1,0,0]) | ||
cube([pMID*4,pMID*4,pMH]); | cube([pMID*4,pMID*4,pMH]); | ||
| Line 1,184: | Line 1,089: | ||
////// | ////// | ||
//ends' angled cut with shelf | //ends' angled cut with shelf | ||
rotate([0,0,( | rotate([0,0,(pMd1e-pMd0)]) | ||
mirror([1,0,0]) | mirror([1,0,0]) | ||
cube([pMID*4,pMID*4,pPspace2+pPplate2]); | cube([pMID*4,pMID*4,pPspace2+pPplate2]); | ||
mirror([1,0,0]) | mirror([1,0,0]) | ||
rotate([0,0,( | rotate([0,0,(pMd1e-pMd0)]) | ||
mirror([1,0,0]) | mirror([1,0,0]) | ||
cube([pMID*4,pMID*4,pPspace2+pPplate2]); | cube([pMID*4,pMID*4,pPspace2+pPplate2]); | ||
// | |||
translate([0,0,pPspace2+pPplate2+pMshelfH]) | ////// | ||
mirror([ | ////// | ||
//90 degree end cut test | |||
translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,0]) | |||
cube([pMID*4,pMID*4,pPspace2+pPplate2]); //below shelf | |||
//translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,pPspace2+pPplate2+pMshelfH]) | |||
//cube([pMID*4,pMID*4,pMH]); //above shelf | |||
translate([(((sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)))+((cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)))+((pMshelfX-pMshelfchamfR)/2)),0,pPspace2+pPplate2]) | |||
cube([pMID*4,pMID*4,pMH]); //of shelf | |||
mirror([0,0,0]) | |||
translate([(sin(pMd1e-pMd0)*((pMID/2))),0,pPspace2+pPplate2+pMshelfH]) | |||
minkowski(){ | minkowski(){ | ||
translate([pMshelfchamfR,0,pMshelfchamfR]) | translate([pMshelfchamfR,0,pMshelfchamfR]) | ||
cube([pMID*4,pMID*4,pMH]); | cube([pMID*4,pMID*4,pMH]); | ||
sphere(r=pMshelfchamfR,$fn=100); | sphere(r=pMshelfchamfR,$fn=100); | ||
} | } //end minkowski | ||
mirror([1,0,0]) | mirror([1,0,0]) | ||
translate([-(cos(45)*((pMshelfX-pMshelfchamfR)/2)),sin(45)*((pMshelfX-pMshelfchamfR)/2),0]) | |||
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0]) | |||
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0]) | |||
translate([0,(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5),0]) | |||
rotate([0,0,-45]) | |||
translate([-pMID/2,0,0]) | |||
cube([pMID,pMID,pMH],center=true); | |||
//end 90 cut right | |||
/////// | |||
////// | |||
//90 degree end cut test 2 | |||
mirror([1,0,0]){ | |||
translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,0]) | |||
cube([pMID*4,pMID*4,pPspace2+pPplate2]); //below shelf | |||
//translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,pPspace2+pPplate2+pMshelfH]) | |||
//cube([pMID*4,pMID*4,pMH]); //above shelf | |||
translate([(((sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)))+((cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)))+((pMshelfX-pMshelfchamfR)/2)),0,pPspace2+pPplate2]) | |||
cube([pMID*4,pMID*4,pMH]); //of shelf | |||
mirror([0,0,0]) | |||
translate([(sin(pMd1e-pMd0)*((pMID/2))),0,pPspace2+pPplate2+pMshelfH]) | |||
minkowski(){ | minkowski(){ | ||
translate([pMshelfchamfR,0,pMshelfchamfR]) | translate([pMshelfchamfR,0,pMshelfchamfR]) | ||
cube([pMID*4,pMID*4,pMH]); | cube([pMID*4,pMID*4,pMH]); | ||
sphere(r=pMshelfchamfR,$fn=100); | sphere(r=pMshelfchamfR,$fn=100); | ||
} | } //end minkowski | ||
} | |||
// | mirror([1,0,0]) | ||
////// | translate([-(cos(45)*((pMshelfX-pMshelfchamfR)/2)),sin(45)*((pMshelfX-pMshelfchamfR)/2),0]) | ||
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0]) | |||
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0]) | |||
translate([0,(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5),0]) | |||
rotate([0,0,-45]) | |||
translate([-pMID/2,0,0]) | |||
cube([pMID,pMID,pMH],center=true); | |||
}//end mirror | |||
//end 90 cut | |||
/////// | |||
////// | |||
//try .... | |||
//from (pMd1e-pMd0) at min wall thickness, cut 45 degrees | |||
////// | |||
//45 shelf cut versions two | |||
/* | |||
rotate([0,0,(pMd1e-pMd0)]) | |||
translate([ | |||
-(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR), | |||
((pMID/2)+(pMshelfBoltD)+pMgroove)+(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5), | |||
(pMH/2)]) | |||
rotate([0,0,-(pMd1e-pMd0)]) | |||
translate([-cos(45)*(((pMshelfX-pMshelfchamfR-pMshelfBoltD)/2)+(pMshelfBoltD/2)),sin(45)*(((pMshelfX-pMshelfchamfR-pMshelfBoltD)/2)+(pMshelfBoltD/2)),0]) | |||
rotate([0,0,-45]) | |||
translate([-pMID/2,0,0]) | |||
rotate([0,0,0]) //45 | |||
cube([pMID,pMID,pMH],center=true); | |||
*/ | |||
//end left side 45 cut | |||
////// | |||
////// | ////// | ||
//mounting bolt holes | //mounting bolt holes | ||
//1 | |||
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0]) | |||
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0]) | |||
cylinder(d=pMshelfBoltD, h=pMH, $fn=36); | |||
//2 | |||
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0]) | |||
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0]) | |||
translate([0,(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5),0]) | |||
#cylinder(d=pMshelfBoltD, h=pMH, $fn=36); | |||
mirror([1,0,0]){ | mirror([1,0,0]){ | ||
//1 | |||
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0]) | |||
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0]) | |||
cylinder(d=pMshelfBoltD, h=pMH, $fn=36); | |||
//2 | |||
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0]) | |||
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0]) | |||
translate([0,(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5),0]) | |||
#cylinder(d=pMshelfBoltD, h=pMH, $fn=36); | |||
} //end mirror | } //end mirror | ||
//end of bolt holes | //end of bolt holes | ||
| Line 1,236: | Line 1,222: | ||
// } //end main body diffference | // } //end main body diffference | ||
///////////////////GROOVE PATH///////// | |||
needlepathLEFT(); | |||
//left needle path cut | |||
needlepathLEFT(); | |||
//right needle path cut | //right needle path cut | ||
mirror([1,0,0]) | mirror([1,0,0]) | ||
needlepathLEFT(); | needlepathLEFT(); | ||
} //end main body diffference //move line above grooves to see paths | } //end main body diffference //move line above grooves to see paths | ||
translate([0,0,pPspace2]){ | |||
difference(){ | |||
translate([0,(c2ID+(pMgroove*2)+(pMwallT*2))/4,(pPplate2/2)]) | |||
cube([c2ID+(pMgroove*2)+(pMwallT*2),(c2ID+(pMgroove*2)+(pMwallT*2))/2,pPplate2], center=true); | |||
cylinder(d=pMID,h=pPplate2,$fn=rez); | |||
//90 degree cut | |||
translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,0]) | |||
cube([pMID*4,pMID*4,pPplate2]); //below shelf | |||
mirror([1,0,0]) | |||
translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,0]) | |||
cube([pMID*4,pMID*4,pPplate2]); //below shelf | |||
//cut to end of groove flip 180 | |||
difference(){ | |||
rotate([0,0,(pMd1e-pMd0)]) | |||
mirror([0,0,0]) | |||
cube([pMID*4,pMID*4,pPplate2]); | |||
cube([pMID*4,pMID*4,pPplate2]); | |||
} | |||
difference(){ | |||
mirror([1,0,0]) | |||
rotate([0,0,(pMd1e-pMd0)]) | |||
mirror([0,0,0]) | |||
cube([pMID*4,pMID*4,pPplate2]); | |||
mirror([1,0,0]) | |||
cube([pMID*4,pMID*4,pPplate2]); | |||
} | |||
}//end diff | |||
} //end translate | |||
} //end main union | |||
} //end main translate | } //end main translate | ||
} //end CKpM module | } //end CKpM module | ||
| Line 1,349: | Line 1,377: | ||
}//end 1 for | }//end 1 for | ||
} | } //end left needle groove module | ||
</nowiki> | </nowiki> | ||
Revision as of 22:36, 29 December 2018
Overview
- OSE's Fork of CircularKnitic, the open source circulate knitting machine
- Code available on GitHub https://github.com/OpenSourceEcology/circular_knitic
Goals
Needle Accomidation
- Long tails
- Bent back tails
- Test 3D printed needles
Fabric Spool
- Apply constant tension on fabric
- Roll onto spool for easy handling and storage
Part Code
CKvars.scad
- Variables to be defined for all aspects of the specific machine to be built
- These variables should be set the same for each part that is rendered
- need to define nominal distance between top of needle to top of CKp4.
- need to increase number of p3 and p4 parts.
- calculate printer footprint for each part.
////MAIN SETTINGS////
//select needle size file that will be used
include <CKneedleVars-KH260.scad>;
//number of "p2" parts around circle
p2number=36;
//number of needles mounted on each "p2" part
p2needles=10;
//number of "p3" parts around circle
p3number=18;
//number of "p4" parts around circle
p4number=18;
//distance from the inside face of one needle to the next
needle2needle=8.414; //default=14.35615
//calculated diameter from inside edge of needles
p2needlegrooveID=((needle2needle*p2number*p2needles)/PI);
//number of sets of bearings mounted to geared plated
c2bmounts=p3number;
//number of plate connectors
c2connectors=c2bmounts*3;
//nnumber of Z bearing mounts
c1zmounts=p3number;
////MATERIALS////
upper_surfaceH=5; //thickness of upper rotating plate
bottom_surface_motor_gearsH=6; //thickness of geared rotating plate
table_surface=5; //thickness of plate of main table
////PART SETTINGS////
//plate
pPspace1=12; //? space from main table top to first plate
pPplate1=bottom_surface_motor_gearsH; //thickness of geared plated
pPspace2=12; //space between geared plate and mountain plate
pPplate2=upper_surfaceH;
//"connector0912" connects upper_surface plate to bottom_surface geared plate
connector0912H=12;
connector0912L=25;
connector0912W=8;
connector0912HoleOD=3; //hole diameter
connector0912HoleC2C=17; //center of hole to center of other hole
//p5 BearringSmall1312_x_4.stl
bearingholderSmallB2C=5.5; //from base of bearing holder to center of bearing
bearingholderSmallBOD=10; //Outside Diameter of bearing
bearingholderSmallBID=4.9; //Inside Diameter of bore hole of bearing
bearingholderSmallBW=4; //Width of bearing
//BearringZ
bearingholderZBOD=10; //Outside Diameter of bearing
bearingholderZBID=4.9; //Inside Diameter of bore hole of bearing
bearingholderZBW=4; //Width of bearing
bearingholderZB2C=(bearingholderZBOD/2)+upper_surfaceH+connector0912H+bottom_surface_motor_gearsH+bearingholderSmallB2C+(bearingholderSmallBOD/2); //from base of bearing holder to center of bearing
//p2
needleWidthslop=0.4; //exta thickness
needleWidth=nX+needleWidthslop;
p2needlegroovefromID=2.0;
p2ID=p2needlegrooveID-(p2needlegroovefromID*2);
p2needlegrooveDepthslop=0.4; //exta thickness
p2needlegrooveDepth=nY+p2needlegrooveDepthslop;
//p2H calculated below;
p2W=p2needlegroovefromID+p2needlegrooveDepth;
p2OD=p2ID+(p2W*2);
//p2holeH calculated below
p2holeD=2;
p2holeCSD=4.01726;
p2holeCSL=1.5;
p2clear=0.5; //distance above top of p4 from flipper in down position
//p3
p3wiggle=0.1;
p3baseH=3;
p3wallW=(nH-nY)/2; //half of needle butt
p3baseholeD=3;
p3baseholeScrewHeadD=5.68;
p3baseholefromODID=p3baseholeScrewHeadD/2;
p3baseholenumber=4;
p3ridgeW1=3;
p3ridgeW2=5;
p3ridgeH=5;
p3wallholefromtop=5;
p3wallchamfW=2;
p3wallchamfH=3;
//p3wallH in calculations below
//p3grooveH1 in calculations below
//p3grooveH2 in calculations below
p3grooveWslop=0.8; //extra Width in needle groove
p3grooveW=nX+p3grooveWslop;
p3clear=5; //distance from top of p3 to needle flipper in down position
p3baseID=p2ID-(p3wiggle*2)-(p3ridgeW2*2)-(p3baseholeScrewHeadD*2);
p3baseOD=p2OD+(p3wiggle*2)+(p3wallW*2)+(p3wallchamfW*2)+(p3baseholeScrewHeadD*2);
centerlineD=p2ID+(p2W+(p3wiggle*2));
p3wallOD=centerlineD+(p3wallW*2)+((p2W+(p3wiggle*2)/2));
p3wallID=centerlineD+((p2W+(p3wiggle*2)/2));
//p4
p4rampH=14.57;
p4rampfromID=2.5;
p4rampoverhangH=4;
p4rampfromOD=1.34;
p4rampC1=10;
p4rampC2=40;
p4rampC2transX=10;
p4rampC2transZ=3.82;
p4baseH=11;
p4basegapH=8;
p4baseW=11.2;
p4basegapW=p2W+0.2; //5.09
p4clawW=min((needle2needle-(nX*2)),9);
p4holesnumber=3;
p4holeH=5;
p4rampW=max(min(p4clawW-3,4),2.5);
echo("rampW", p4rampW);
//p5 small bearing holder
p5wingW=7;
p5wingL=27;
p5wingH=3;
p5bodyW=16;
p5bodyL=25;
p5bodyH=9.5;
p5wiggleL=0.4;
p5wiggleW=0.25;
p5bearingfromwall=4.25;
p5mountholeOD=3;
p5mounthole2front=7;
p5mounthole2back=5;
//p6 big bearing holder
p6wingW=30;
p6wingL=25;
p6wingH=3;
p6bodyW=16;
p6bodyL=25;
p6bodyH=9.5;
p6wiggleL=0.4;
p6wiggleW=0.6;
p6bearingfromwall=4.25;
p6mountholeOD=3;
p6mounthole2front=8;
p6mounthole2side=3;
//p7 Z bearing holder
p7baseW=16;
p7baseL=23;
p7baseH=4;
p7wallW=3;
p7braceW=3;
p7mountH=8;
p7mountL=13;
p7mountholeOD=3;
p7mounthole2edge=3.5;
p7bearingfromfront=3;
p7wiggleL=0.4;
p7wiggleW=0.25;
//p8 plate connector
p8baseW=8;
p8baseL=25;
p8holeD=3;
p8holeend2C=4;
//p9 outer connector
p9thickness=4;
p9H=10;
//mountain
pMwallT=7.5; //min thickness from groove to back wall
pMgroove=nH-nY-p3wallW+1; //depth of groove
pMgrooveAngle=45;
pMgrooveC1=pPspace2; //top of groove at position 1 "entrance"
pMgrooveC2=nC+2; //top of groove at position 2 "push down"
pMgrooveC3=44.25; //top of groove at position 3 "top center"
pMgrooveSlop=2;
pMwallHextra=5.75; //extra height above groove at heighest point
CKpMID=p2OD+2; //inside diameter of main wall
pMH=pMwallHextra+pMgrooveC3; //total height of mountain
echo((pMgroove*2)+CKpMID);
//c2 geared plate
c2t2t=6.858;
c2width=50;
c2gap=2;
c2OD=(c2width*2)+(c2gap*2)+p2OD+(p3wiggle*2)+(p3wallW*2);
c2ID=(c2gap*2)+p2OD+(p3wiggle*2)+(p3wallW*2);
c2teeth=((c2OD*PI)/c2t2t);
c2dipitch=c2teeth/(c2OD*PI);
//c1
c1H=table_surface;
c1width=c2width+91.36;
c1OD=c2OD+(c1width-c2width);
//calculated settings
centerlineD=p2ID+(p2W+(p3wiggle*2));
p3grooveH1=bottom_surface_motor_gearsH+bearingholderSmallB2C+(bearingholderSmallBOD/2)+(pMgrooveSlop/2);
p3grooveH2=p3grooveH1+pMgrooveC3+(pMgrooveSlop/2);
p4baseOD=centerlineD+p4baseW;
p4baseID=centerlineD-p4baseW;
p4basegapOD=centerlineD+p4basegapW;
p4basegapID=centerlineD-p4basegapW;
//firstcenter=(((((360/p2number/p2needles/2)/360*(p2OD*PI))-(needleWidth/2))/((360/p2number/p2needles/2)/360*(p2OD*PI)))*(360/p2number/p2needles/2))/2;
//doesnt work on narrow needle arrangement, moved to second gap
p2H=bottom_surface_motor_gearsH+bearingholderSmallB2C+(bearingholderSmallBOD/2)+pMgrooveC3+nA-nB-nC-nF-p3baseH-(p4rampH+p4baseH-p4basegapH)-p2clear;;
p3wallH=bottom_surface_motor_gearsH+bearingholderSmallB2C+(bearingholderSmallBOD/2)+pMgrooveC2+nA-nB-nC-nF-p3clear;
p2holeH=p3grooveH2+((p3wallH-p3grooveH2)/2);
//c3
c3ID=c2ID;
c3OD=(((((CKpMID/2)+(pMgroove)+(connector0912L/2))-(c3ID/2))*2)*2)+c3ID;
c3H=upper_surfaceH;
echo("c3OD=", c3OD);
pMID=c2ID;
pMOD=c3OD;
/////////////////////////////////
pMgrooveOR=pMgroove+(pMID/2); //center to OD of groove
// is this supposed to be the radius?
/////////////////////////////////
////SETTINGS OUTPUT ECHOS///
echo("Total Needles:", p2number*p2needles);
echo("Millimeters Between Needles:", PI*p2needlegrooveID/(p2number*p2needles));
echo("OD of p3:", p3baseOD);
echo("OD of c1:", c2OD+(c1width-c2width));
Needles
CKneedleVars-KH260.scad
- purchased here: http://shop.sckmcl.com.hk/product_info.php?products_id=136
//NEEDLE for Brother KH260 //measurements by dorkmo nX=1.4; //typical thickness from side to side nY=2.44; //typical thickness from front to back nA=157.9; //total length of needle nB=53; //distance from bottom of needle to bottom of bent tab. nC=4.82; //thickness of bent tab. top to bottom. nD=5.48; //hook front to back nE=4.10; //from top of loop to bottom of hook nF=22.0; //from top of loop to bottom of flipper in down position nG=1.10; //minimum thickness of hook. front to back. nH=17.03; //max distance from front to back nT=0; //0=straight tail 1=bent tail aka folded back. Y of tail = C if T=1.
CKneedleVars-SK120.scad
- difficult to find these exact needles for sale
//NEEDLE for SK120 //measured by original CircularKnitic team nX=1.4; //typical thickness from side to side nY=2.44; //typical thickness from front to back nA=97.73; //total length of needle nB=7.72; //distance from bottom of needle to bottom of bent tab. nC=4.92; //thickness of bent tab. top to bottom. nD=5.09; //hook front to back nE=4.62; //from top top loop to bottom of hook nF=19.94; //top to bottom of flipper in down position nG=1.04; //minimum thickness of hook. front to back. nH=16.4; //max distance from front to back nT=0; //0=straight tail 1=bent tail aka folded back. Y of tail = C of T=1.
3D Prints
- Parts to be printed on the 3D printer
CKp2.scad "inner"
include <CKvars.scad>;
CKp2();
module CKp2(){
rez=p2number*p2needles*2;
$fn=rez; //defines resolution of circles.
translate([p2OD/2,0,0]){
difference(){
cylinder(h=p2H,d=p2OD);
cylinder(h=p2H,d=p2ID);
translate([-p2OD/2,-p2OD/2,0]){
cube([p2OD,p2OD/2,p2H]);
}
rotate([0,0,-360/p2number]){
translate([-p2OD/2,0,0])
cube([p2OD,p2OD/2,p2H]);
}
for(i=[1:p2needles]){
rotate([0,0,(360/p2number/p2needles/2)-(360/p2number/p2needles*i)]){
translate([-p2OD/2-0.2,-needleWidth/2,0])
cube([p2needlegrooveDepth+0.2,needleWidth,p2H]);
}
}
rotate([0,0,-360/p2number/p2needles]){
translate([-p2OD/2-0.2,0,p2holeH])
rotate([0,90,0]){
union(){
cylinder(h=p2OD-p2ID+0.2, d=p2holeD);
translate([0,0,((p2OD-p2ID)/2)-p2holeCSL]){
cylinder(h=p2holeCSL+2, d=p2holeCSD);
}
} //end union
}
}
rotate([0,0,-360/p2number/p2needles*(p2needles-1)]){
translate([-p2OD/2-0.2,0,p2holeH])
rotate([0,90,0]){
union(){
cylinder(h=p2OD-p2ID+0.2, d=p2holeD);
translate([0,0,((p2OD-p2ID)/2)-p2holeCSL]){
cylinder(h=p2holeCSL+2, d=p2holeCSD);
}
} //end union
}
}
echo(((((360/p2number/p2needles/2)/360*(p2OD*PI))-(needleWidth/2))/((360/p2number/p2needles/2)/360*(p2OD*PI)))*(360/p2number/p2needles/2));
//firstcenter=(((((360/p2number/p2needles/2)/360*(p2OD*PI))-(needleWidth/2))/((360/p2number/p2needles/2)/360*(p2OD*PI)))*(360/p2number/p2needles/2))/2; not using
// 2nd hole
rotate([0,0,-(360/p2number/p2needles)*2]){
translate([-p2OD/2-0.2,0,p2holeH])
rotate([0,90,0]){
union(){
cylinder(h=p2OD-p2ID+0.2, d=p2holeD);
translate([0,0,((p2OD-p2ID)/2)-p2holeCSL]){
cylinder(h=p2holeCSL+2, d=p2holeCSD);
}
} //end union
}
}
//3rd hole
rotate([0,0,-360/p2number+((360/p2number/p2needles)*2)]){
translate([-p2OD/2-0.2,0,p2holeH])
rotate([0,90,0]){
union(){
cylinder(h=p2OD-p2ID+0.2, d=p2holeD);
translate([0,0,((p2OD-p2ID)/2)-p2holeCSL]){
cylinder(h=p2holeCSL+2, d=p2holeCSD);
}
} //end union
}
} //end rotate
//end hole
//p4 mount holes
// 1st p4 mount hole
rotate([0,0,-(360/p2number/p2needles)*2]){
translate([-p2OD/2-0.2,0,p2H-(p4basegapH-p4holeH)])
rotate([0,90,0]){
cylinder(h=p2OD-p2ID+0.2, d=p2holeD);
}
}
//2nd p4 mount hole
// 2nd hole
rotate([0,0,-(360/p2number/p2needles)*3]){
translate([-p2OD/2-0.2,0,p2H-(p4basegapH-p4holeH)])
rotate([0,90,0]){
cylinder(h=p2OD-p2ID+0.2, d=p2holeD);
}
}
//end p4 mount holes
}
}
} //end module
CKp3.scad "outer"
- Added holes in base for long tails
- does this need to be bigger to allow for some slop?
- what to do if needle has bent back tail?
include <CKvars.scad>;
CKp3();
module CKp3(){
rez=p2number*p2needles*2;
//p2number*p2needles*2
//p2number*2*2;
$fn=rez; //defines resolution of circles.
centerlineD=p2ID+(p2W+(p3wiggle*2));
echo(centerlineD);
translate([p3baseOD/2,0,0]){
difference(){
union(){
cylinder(h=p3baseH,d=p3baseOD);
difference(){
cylinder(h=p3ridgeH+p3baseH,d=centerlineD-((p2W+(p3wiggle*2)/2)));
translate([0,0,p3baseH])
cylinder(h=p3ridgeH,d1=centerlineD-(p3ridgeW2*2)-((p2W+(p3wiggle*2)/2)),d2=centerlineD-(p3ridgeW1*2)-((p2W+(p3wiggle*2)/2)));
}
difference(){
translate([0,0,p3baseH])
cylinder(h=p3wallchamfH,d1=centerlineD+((p3wallchamfW+p3wallW)*2)+((p2W+(p3wiggle*2)/2)),d2=centerlineD+(p3wallW*2)+((p2W+(p3wiggle*2)/2)));
cylinder(h=p3wallchamfH+p3baseH,d=centerlineD+((p2W+(p3wiggle*2)/2)));
}
difference(){
cylinder(h=p3wallH,d=centerlineD+(p3wallW*2)+((p2W+(p3wiggle*2)/2)));
cylinder(h=p3wallH,d=centerlineD+((p2W+(p3wiggle*2)/2)));
}
} //end main union
cylinder(h=p3wallH,d=p3baseID);
translate([-p3baseOD/2,-p3baseOD/2,0]){
cube([p3baseOD,p3baseOD/2,p3wallH]);
}
rotate([0,0,-360/p3number]){
translate([-p3baseOD/2,0,0])
cube([p3baseOD,p3baseOD/2,p3wallH]);
}
//slots
for(i=[1:p2needles*(p2number/p3number)]){
rotate([0,0,(360/p2number/p2needles/2)-(360/p2number/p2needles*i)]){
translate([((-centerlineD-(p3wallW*2)-((p2W+(p3wiggle*2)/2)))/2)-0.1,-p3grooveW/2,p3grooveH1])
cube([p3wallW+0.2,p3grooveW,p3grooveH2-p3grooveH1]);
}
}
//base needle holes
for(i=[1:p2needles*(p2number/p3number)]){
rotate([0,0,(360/p2number/p2needles/2)-(360/p2number/p2needles*i)]){
translate([-p2OD/2,-needleWidth/2,-0.01])
cube([p2needlegrooveDepth,needleWidth,p3wallH+0.02]);
}
}
//base mounting holes
for(i=[1:p3baseholenumber]){
rotate([0,0,(((360/p3number/p3baseholenumber))/2)-((360/p3number/p3baseholenumber)*i)]){
translate([-(p3baseID/2)-p3baseholefromODID,0,0])
cylinder(h=p3baseH,d=p3baseholeD,$fn=18);
}
}
for(i=[1:p3baseholenumber]){
rotate([0,0,(((360/p3number/p3baseholenumber))/2)-((360/p3number/p3baseholenumber)*i)]){
translate([-(p3baseOD/2)+p3baseholefromODID,0,0])
cylinder(h=p3baseH,d=p3baseholeD,$fn=18);
}
}
//first and last holes
rotate([0,0,-(360/p2number/p2needles)*2]){
translate([((-centerlineD-(p3wallW*2)-((p2W+(p3wiggle*2)/2)))/2)-0.1,0,p2holeH+p3baseH])
rotate([0,90,0]){
cylinder(h=p2OD-p2ID+0.2, d=p2holeD, $fn=18);
}
}
rotate([0,0,-(360/(p3number))+((360/p2number/p2needles)*2)]){
translate([((-centerlineD-(p3wallW*2)-((p2W+(p3wiggle*2)/2)))/2)-0.1,0,p2holeH+p3baseH])
rotate([0,90,0]){
#cylinder(h=p2OD-p2ID+0.2, d=p2holeD, $fn=18);
}
}
//middle holes
for(i=[0:(p2number/p3number)-1]){
rotate([0,0,(-360/p2number/p2needles)+(i*-360/p2number)]){
translate([((-centerlineD-(p3wallW*2)-((p2W+(p3wiggle*2)/2)))/2)-0.1,0,p2holeH+p3baseH])
rotate([0,90,0]){
cylinder(h=p2OD-p2ID+0.2, d=p2holeD,$fn=18);
}
}
} //end for
for(i=[0:(p2number/p3number)-1]){
rotate([0,0,(-360/p2number/p2needles*(p2needles-1))+(i*-360/p2number)]){
translate([((-centerlineD-(p3wallW*2)-((p2W+(p3wiggle*2)/2)))/2)-0.1,0,p2holeH+p3baseH])
rotate([0,90,0]){
cylinder(h=p2OD-p2ID+0.2, d=p2holeD, $fn=18);
}
}
}//end for
//end middle holes
}
}
} //end module
CKp4.scad "yard holder"
include <CKvars.scad>;
CKp4();
module CKp4(){
rez=p2number*p2needles*2;
$fn=rez; //defines resolution of circles.
translate([p4baseOD/2,0,0]){
difference(){
union(){
cylinder(h=p4baseH,d=p4baseOD-(p4basegapW*2)-((p4baseW-p4basegapW)/2*2));
//ramps
for(i=[1:p2needles*(p2number/p4number)]){
rotate([0,0,(360/p2number/p2needles)-(360/p2number/p2needles*i)-(((360/p2number/p2needles))/2)]){
difference(){
union(){
translate([-p4baseOD/2+p4rampfromOD,p4rampW/2,p4rampH+p4baseH-(p4rampC1/2)])
rotate([90,0,0])
cylinder(h=p4rampW,d=p4rampC1);
intersection(){
translate([-10,0,3.82])
translate([-p4baseOD/2+p4rampfromOD,p4rampW/2,p4rampH+p4baseH-(p4rampC2/2)])
rotate([90,0,0])
cylinder(h=p4rampW,d=p4rampC2);
translate([-7,0,-2.86/2])
translate([-p4baseOD/2+p4rampfromOD,p4rampW/2,p4rampH+p4baseH-(p4rampC2/2)])
cube([p4rampC2,p4rampC2,p4rampC2],center=true);
}
}//end union
translate([-p4rampC2/2,0,0])
translate([-p4baseOD/2+p4rampfromOD,p4rampW/2,p4rampH+p4baseH-(p4rampC2/2)])
cube([p4rampC2,p4rampC2,p4rampC2],center=true);
translate([0,0,0])
translate([-p4baseOD/2+p4rampfromOD,p4rampW/2,p4baseH-(p4rampC2/2)-0.1])
cube([p4rampC2,p4rampC2,p4rampC2],center=true);
translate([0,-p4clawW/2,0])
translate([-(p4baseID/2)-p4rampfromID,0,p4baseH])
cube([(p4baseID/2)+p4rampfromID,p4clawW,p4rampoverhangH]);
translate([-7,0,0])
translate([-p4baseOD/2+p4rampfromOD,(p4rampW/2)+(p4rampC2/2)-0.01,p4rampH+p4baseH-(p4rampC2/2)])
cube([p4rampC2,p4rampC2,p4rampC2],center=true);
translate([-7,0,0])
translate([-p4baseOD/2+p4rampfromOD,-(p4rampW/2)-(p4rampC2/2)+0.01,p4rampH+p4baseH-(p4rampC2/2)])
cube([p4rampC2,p4rampC2,p4rampC2],center=true);
}//end ramps difference
} //end for rotate
}//end for
//claws
for(i=[1:p2needles*(p2number/p4number)]){
rotate([0,0,(360/p2number/p2needles)-(360/p2number/p2needles*i)-(((360/p2number/p2needles))/2)]){
translate([-p4baseOD/2,-p4clawW/2,0])
cube([(p4baseOD-p4baseID)/2,p4clawW,p4baseH]);
}
}//end for
} //end main union
cylinder(h=p4baseH,d=p4baseID);
translate([-p4baseOD/2,-p4baseOD/2,0]){
cube([p4baseOD,p4baseOD/2,p4baseH]);
}
rotate([0,0,-360/p4number]){
translate([-p4baseOD/2,0,0])
cube([p4baseOD,p4baseOD/2,p4baseH]);
}
difference(){
cylinder(h=p4basegapH,d=p4basegapOD);
cylinder(h=p4basegapH,d=p4basegapID);
}
//holes
//middle holes
for(i=[0:(p2number/p4number)-1]){
rotate([0,0,(-360/p2number/p2needles*0.5)+(i*-360/p2number)]){
translate([-p4baseOD/2-0.2,0,p4holeH])
rotate([0,90,0]){
union(){
cylinder(h=p4baseOD-p4baseID+0.2, d=p2holeD);
translate([0,0,((p4baseOD-p4baseID)/2)-p2holeCSL]){
cylinder(h=p2holeCSL+2, d=p2holeCSD);
} //end translate
} //end union
} //end rotate
} // end rotate
} //end for
//second set
for(i=[0:(p2number/p3number)-1]){
rotate([0,0,-(360/p2number/p2needles*0.5)+(360/p2number/p2needles)+(i*-360/p2number)+(-360/p2number)]){
translate([-p4baseOD/2-0.2,0,p4holeH])
rotate([0,90,0]){
union(){
cylinder(h=p4baseOD-p4baseID+0.2, d=p2holeD);
translate([0,0,((p4baseOD-p4baseID)/2)-p2holeCSL]){
cylinder(h=p2holeCSL+2, d=p2holeCSD);
} //end translate
} //end union
} //end rotate
} // end rotate
} //end for
//end middle holes
} //end main difference
} //end main translate
} //end module
CKp5.scad "small bearing holder"
include <CKvars.scad>;
CKp5(); //small bearing holder
module CKp5(){
translate([-(p5wingW+p5bodyW+p5wingW)/2,0,0]){
//wing left
difference(){
cube([p5wingW,p5wingL,p5wingH]);
//wing right holes
translate([p5wingW/2,p5mounthole2front,0])
cylinder(d=p5mountholeOD,h=p5wingH+0.1,$fn=36);
translate([p5wingW/2,p5wingL-p5mounthole2back,0])
cylinder(d=p5mountholeOD,h=p5wingH+0.1,$fn=36);
} //end wing left difference
//body
translate([p5wingW,0,0]){
difference(){
cube([p5bodyW,p5bodyL,p5bodyH]);
// bearing cutout 1
translate([((p5bodyW)/2)-((bearingholderZBOD+p5wiggleW)/2),p5bearingfromwall,0])
cube([bearingholderZBOD+p5wiggleW,bearingholderSmallBW+p5wiggleL,p5bodyH+0.1]);
// bearing cutout 2
translate([((p5bodyW)/2)-((bearingholderZBOD+p5wiggleW)/2),p5bodyL-p5bearingfromwall-(bearingholderSmallBW+p5wiggleL),0])
cube([bearingholderZBOD+p5wiggleW,bearingholderSmallBW+p5wiggleL,p5bodyH+0.1]);
// bore hole cutout
translate([(p5bodyW)/2,-0.1,bearingholderSmallB2C])
rotate([270,0,0])
cylinder(d=bearingholderSmallBID,h=p5bodyL+0.2,$fn=36);
} //end body difference
} //end body translate
//wing right
translate([p5wingW+p5bodyW,0,0]){
difference(){
cube([p5wingW,p5wingL,p5wingH]);
//wing right holes
translate([p5wingW/2,p5mounthole2front,0])
cylinder(d=p5mountholeOD,h=p5wingH+0.1,$fn=36);
translate([p5wingW/2,p5wingL-p5mounthole2back,0])
cylinder(d=p5mountholeOD,h=p5wingH+0.1,$fn=36);
} //end wing right difference
} //end wing right translate
} //end main translate
} //end main module
CKp6.scad "big bearing holder"
include <CKvars.scad>;
CKp6(); //small bearing holder
module CKp6(){
translate([-(p6wingW+p6bodyW+p6wingW)/2,0,0]){
//wing left
difference(){
cube([p6wingW,p6wingL,p6wingH]);
//wing right holes
translate([p6mounthole2side,p6mounthole2front,0])
cylinder(d=p6mountholeOD,h=p6wingH+0.1,$fn=36);
} //end wing left difference
//body
translate([p6wingW,0,0]){
difference(){
cube([p6bodyW,p6bodyL,p6bodyH]);
// bearing cutout 1
translate([((p6bodyW)/2)-((bearingholderSmallBOD+p6wiggleW)/2),p6bearingfromwall,0])
cube([bearingholderSmallBOD+p6wiggleW,bearingholderSmallBW+p6wiggleL,p6bodyH+0.1]);
// bearing cutout 2
translate([((p6bodyW)/2)-((bearingholderSmallBOD+p6wiggleW)/2),p6bodyL-p6bearingfromwall-(bearingholderSmallBW+p6wiggleL),0])
cube([bearingholderSmallBOD+p6wiggleW,bearingholderSmallBW+p6wiggleL,p6bodyH+0.1]);
// bore hole cutout
translate([(p6bodyW)/2,-0.1,bearingholderSmallB2C])
rotate([270,0,0])
cylinder(d=bearingholderSmallBID,h=p6bodyL+0.2,$fn=36);
} //end body difference
} //end body translate
//wing right
translate([p6wingW+p6bodyW,0,0]){
difference(){
cube([p6wingW,p6wingL,p6wingH]);
//wing right holes
translate([p6wingW-p6mounthole2side,p6mounthole2front,0])
cylinder(d=p6mountholeOD,h=p6wingH+0.1,$fn=36);
} //end wing right difference
} //end wing right translate
} //end main translate
} //end main module
CKp7.scad "Z bearing holder"
- should a horizontal bearing be added to help keep plates aligned?
include <CKvars.scad>;
CKp7(); //small bearing holder
module CKp7(){
translate([-p7baseW/2,0,0]){
difference(){
union(){
cube([p7baseW,p7baseL,p7baseH]);
translate([0,(p7baseL/2)-(p7wallW/2),0])
cube([p7baseW,p7wallW,bearingholderZB2C+(p7mountH/2)]);
translate([0,(p7baseL/2)+(p7wallW/2)-p7mountL,bearingholderZB2C-(p7mountH/2)])
cube([p7baseW,p7mountL,p7mountH]);
//diagnal brace
translate([(p7baseW/2)-(p7braceW/2),((p7baseL-p7wallW)/2)+p7wallW,p7baseH]){
difference(){
cube([p7braceW,(p7baseL-p7wallW)/2,bearingholderZB2C*2/3]);
translate([0,(p7baseL-p7wallW)/2,0])
rotate([1/tan(((bearingholderZB2C*2/3))/((p7baseL-p7wallW)/2)),0,0])
cube([p7braceW,bearingholderZB2C*2,bearingholderZB2C*2]);
} //end brace translate
} //end brace difference
} //end main union
//bore hole
translate([(p7baseW)/2,((p7baseL/2)+(p7wallW/2)-p7mountL)-0.1,bearingholderZB2C])
rotate([270,0,0])
cylinder(d=bearingholderZBID,h=p7mountL+0.2,$fn=36);
//bearing cutout
translate([((p7baseW)/2)-((bearingholderZBOD+p7wiggleW)/2),p7bearingfromfront,bearingholderZB2C-(p7mountH/2)-0.1])
cube([bearingholderZBOD+p7wiggleW,bearingholderZBW+p7wiggleL,p7mountH+0.2]);
// hole 1
translate([p7mounthole2edge,p7mounthole2edge,0])
cylinder(d=p7mountholeOD,h=p7baseH+0.1,$fn=36);
// hole 2
translate([p7baseW-p7mounthole2edge,p7mounthole2edge,0])
cylinder(d=p7mountholeOD,h=p7baseH+0.1,$fn=36);
// hole 3
translate([p7mounthole2edge,p7baseL-p7mounthole2edge,0])
cylinder(d=p7mountholeOD,h=p7baseH+0.1,$fn=36);
// hole 4
translate([p7baseW-p7mounthole2edge,p7baseL-p7mounthole2edge,0])
cylinder(d=p7mountholeOD,h=p7baseH+0.1,$fn=36);
} //end main difference
} //end main translate
} //end main module
CKp8.scad "plate connector"
include <CKvars.scad>;
CKp8(); //small bearing holder
module CKp8(){
translate([-p8baseW/2,0,0]){
difference(){
cube([p8baseW,p8baseL,pPspace2]);
translate([p8baseW/2,p8holeend2C,-0.1])
cylinder(d=p8holeD,h=pPspace2+0.2,$fn=36);
translate([p8baseW/2,p8baseL-p8holeend2C,-0.1])
cylinder(d=p8holeD,h=pPspace2+0.2,$fn=36);
} //end main difference
} //end translate
} //end main module
CKp9.scad "outer connector"
include <CKvars.scad>;
CKp9(); //small bearing holder
module CKp9(){
rez=p2number*p2needles*2;
$fn=rez;
translate([-p3wallOD/2,0,0]){
difference(){
cylinder(h=p9H,d=p3wallOD+p9thickness);
cylinder(h=p9H,d=p3wallOD);
//first and last holes
rotate([0,0,-(360/p2number/p2needles)*2]){
translate([(p3wallOD/2)-0.1,0,p9H/2])
rotate([0,90,0]){
#cylinder(h=p9thickness+0.2, d=p2holeD, $fn=18);
}
}
rotate([0,0,((360/p2number/p2needles)*2)]){
translate([(p3wallOD/2)-0.1,0,p9H/2])
rotate([0,90,0]){
cylinder(h=p9thickness+0.2, d=p2holeD, $fn=18);
}
}
//end first and last holes
//outer holes
rotate([0,0,(-360/p2number/p2needles)]){
translate([(p3wallOD/2)-0.1,0,p9H/2])
rotate([0,90,0]){
cylinder(h=p9thickness+0.2, d=p2holeD, $fn=18);
}
}
rotate([0,0,(360/p2number/p2needles)]){
translate([(p3wallOD/2)-0.1,0,p9H/2])
rotate([0,90,0]){
cylinder(h=p9thickness+0.2, d=p2holeD, $fn=18);
}
}
//end outer holes
// cut off ends
rotate([0,0,-((-360/p2number/p2needles)+(1.4*-360/p2number/p2needles))]){
cube([(p3wallOD+p9thickness)*2,(p3wallOD+p9thickness)*2,(p3wallOD+p9thickness)*2]);
}
rotate([0,0,((-360/p2number/p2needles)+(1.4*-360/p2number/p2needles))]){
translate([0,-((p3wallOD+p9thickness)*2),0])
cube([(p3wallOD+p9thickness)*2,(p3wallOD+p9thickness)*2,(p3wallOD+p9thickness)*2]);
}
translate([-((p3wallOD+p9thickness)*2),-((p3wallOD+p9thickness)*2)/2,0])
#cube([(p3wallOD+p9thickness)*2,(p3wallOD+p9thickness)*2,(p3wallOD+p9thickness)*2]);
} //end main difference
} //end translate
} //end main module
CKpM.scad "mountain"
- need to test with different size needle and spaces between plates
- takes a long time to render, have to be patient
- need to up the resolution of circles at large diameter machine
- need to set a minimum thickness of the mountain.
- mounting brackets not rendering correctly on large diameter machine
- add inlay groove for middle plate to sit in. hold mountain in place.
- make shelf tab cut parallel to main body end cut
Rework in progress
include <CKvars.scad>;
//TO DO//
//*re do mounting tabs
//*add integrated yarn feeder based on needle height
//*function func6 not right? working with 45 angle but not others
//*pMd4 not placing groove properly when not at 45 degrees
//*make ends more square?
///////
CKpM(); //render mountain
module CKpM(){
translate([0,-p3wallOD/2,0]){ //main translate
union(){
difference(){
translate([0,0,pMH/2])
//main cube
translate([0,(c2ID+(pMgroove*2)+(pMwallT*2))/4,0])
cube([c2ID+(pMgroove*2)+(pMwallT*2),(c2ID+(pMgroove*2)+(pMwallT*2))/2,pMH], center=true);
//main ID cut
cylinder(d=pMID,h=pMH+1,$fn=rez);
// //c3 groove - add cut in center of mountain for a little tab 1" wide?
// translate([0,0,pPspace2-cWiggle])
// difference(){
// cylinder(d=c3OD,h=c3H+cWiggle,$fn=rez);
// cylinder(d=(c2ID+(pMgroove*2)+(pMwallT*2)),h=c3H+cWiggle,$fn=rez);
// }
//////
//angled cut ends
//*need to calc pMd0 exactly so height of path entrance matches bottom of top plate
rotate([0,0,(pMd1e-pMd0)])
translate([-pMshelfX,0,0])
mirror([1,0,0])
cube([pMID*4,pMID*4,pMH]);
mirror([1,0,0])
rotate([0,0,(pMd1e-pMd0)])
translate([-pMshelfX,0,0])
mirror([1,0,0])
cube([pMID*4,pMID*4,pMH]);
//
//////
//////
//ends' angled cut with shelf
rotate([0,0,(pMd1e-pMd0)])
mirror([1,0,0])
cube([pMID*4,pMID*4,pPspace2+pPplate2]);
mirror([1,0,0])
rotate([0,0,(pMd1e-pMd0)])
mirror([1,0,0])
cube([pMID*4,pMID*4,pPspace2+pPplate2]);
//
//////
//////
//90 degree end cut test
translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,0])
cube([pMID*4,pMID*4,pPspace2+pPplate2]); //below shelf
//translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,pPspace2+pPplate2+pMshelfH])
//cube([pMID*4,pMID*4,pMH]); //above shelf
translate([(((sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)))+((cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)))+((pMshelfX-pMshelfchamfR)/2)),0,pPspace2+pPplate2])
cube([pMID*4,pMID*4,pMH]); //of shelf
mirror([0,0,0])
translate([(sin(pMd1e-pMd0)*((pMID/2))),0,pPspace2+pPplate2+pMshelfH])
minkowski(){
translate([pMshelfchamfR,0,pMshelfchamfR])
cube([pMID*4,pMID*4,pMH]);
sphere(r=pMshelfchamfR,$fn=100);
} //end minkowski
mirror([1,0,0])
translate([-(cos(45)*((pMshelfX-pMshelfchamfR)/2)),sin(45)*((pMshelfX-pMshelfchamfR)/2),0])
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0])
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0])
translate([0,(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5),0])
rotate([0,0,-45])
translate([-pMID/2,0,0])
cube([pMID,pMID,pMH],center=true);
//end 90 cut right
///////
//////
//90 degree end cut test 2
mirror([1,0,0]){
translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,0])
cube([pMID*4,pMID*4,pPspace2+pPplate2]); //below shelf
//translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,pPspace2+pPplate2+pMshelfH])
//cube([pMID*4,pMID*4,pMH]); //above shelf
translate([(((sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)))+((cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)))+((pMshelfX-pMshelfchamfR)/2)),0,pPspace2+pPplate2])
cube([pMID*4,pMID*4,pMH]); //of shelf
mirror([0,0,0])
translate([(sin(pMd1e-pMd0)*((pMID/2))),0,pPspace2+pPplate2+pMshelfH])
minkowski(){
translate([pMshelfchamfR,0,pMshelfchamfR])
cube([pMID*4,pMID*4,pMH]);
sphere(r=pMshelfchamfR,$fn=100);
} //end minkowski
mirror([1,0,0])
translate([-(cos(45)*((pMshelfX-pMshelfchamfR)/2)),sin(45)*((pMshelfX-pMshelfchamfR)/2),0])
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0])
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0])
translate([0,(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5),0])
rotate([0,0,-45])
translate([-pMID/2,0,0])
cube([pMID,pMID,pMH],center=true);
}//end mirror
//end 90 cut
///////
//////
//try ....
//from (pMd1e-pMd0) at min wall thickness, cut 45 degrees
//////
//45 shelf cut versions two
/*
rotate([0,0,(pMd1e-pMd0)])
translate([
-(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR),
((pMID/2)+(pMshelfBoltD)+pMgroove)+(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5),
(pMH/2)])
rotate([0,0,-(pMd1e-pMd0)])
translate([-cos(45)*(((pMshelfX-pMshelfchamfR-pMshelfBoltD)/2)+(pMshelfBoltD/2)),sin(45)*(((pMshelfX-pMshelfchamfR-pMshelfBoltD)/2)+(pMshelfBoltD/2)),0])
rotate([0,0,-45])
translate([-pMID/2,0,0])
rotate([0,0,0]) //45
cube([pMID,pMID,pMH],center=true);
*/
//end left side 45 cut
//////
//////
//mounting bolt holes
//1
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0])
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0])
cylinder(d=pMshelfBoltD, h=pMH, $fn=36);
//2
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0])
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0])
translate([0,(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5),0])
#cylinder(d=pMshelfBoltD, h=pMH, $fn=36);
mirror([1,0,0]){
//1
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0])
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0])
cylinder(d=pMshelfBoltD, h=pMH, $fn=36);
//2
translate([-(sin(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),(cos(pMd1e-pMd0)*((pMID/2)+(pMshelfBoltD)+pMgroove)),0])
translate([-(cos(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),-(sin(pMd1e-pMd0)*(((pMshelfX-pMshelfchamfR)/2)+pMshelfchamfR)),0])
translate([0,(((((c2ID+(pMgroove*2)+(pMwallT*2))/2)/cos(pMd1e-pMd0))-((pMID/2)+(pMshelfBoltD)+pMgroove))/1.5),0])
#cylinder(d=pMshelfBoltD, h=pMH, $fn=36);
} //end mirror
//end of bolt holes
//////////////
// } //end main body diffference
///////////////////GROOVE PATH/////////
//left needle path cut
needlepathLEFT();
//right needle path cut
mirror([1,0,0])
needlepathLEFT();
} //end main body diffference //move line above grooves to see paths
translate([0,0,pPspace2]){
difference(){
translate([0,(c2ID+(pMgroove*2)+(pMwallT*2))/4,(pPplate2/2)])
cube([c2ID+(pMgroove*2)+(pMwallT*2),(c2ID+(pMgroove*2)+(pMwallT*2))/2,pPplate2], center=true);
cylinder(d=pMID,h=pPplate2,$fn=rez);
//90 degree cut
translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,0])
cube([pMID*4,pMID*4,pPplate2]); //below shelf
mirror([1,0,0])
translate([((c2ID+(pMgroove*2)+(pMwallT*2))/2)*cos(90-(pMd1e-pMd0)),0,0])
cube([pMID*4,pMID*4,pPplate2]); //below shelf
//cut to end of groove flip 180
difference(){
rotate([0,0,(pMd1e-pMd0)])
mirror([0,0,0])
cube([pMID*4,pMID*4,pPplate2]);
cube([pMID*4,pMID*4,pPplate2]);
}
difference(){
mirror([1,0,0])
rotate([0,0,(pMd1e-pMd0)])
mirror([0,0,0])
cube([pMID*4,pMID*4,pPplate2]);
mirror([1,0,0])
cube([pMID*4,pMID*4,pPplate2]);
}
}//end diff
} //end translate
} //end main union
} //end main translate
} //end CKpM module
module needlepathLEFT(){
/////START GROOVE CUTS/////
//7
for(i=[pMd7s:gdeg:pMd7e]){
translate([0,0,pMh7s])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
}//end 7 for
//6
for(i=[pMd6s:gdeg:pMd6e]){
translate([0,0,pMh7s+func6(i)])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
}//end 6 for
//5
for(i=[pMd5s:gdeg:pMd5e]){
translate([0,0,pMh7s+func6(pMd6e)-(tan(pMcutA)*(i-pMd5s)*glnd)]) /////needs work
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
}//end 5 for
//4
for(i=[pMd4s:gdeg:pMd4e]){
hull(){
translate([0,0,func4(i)+pMh4e])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
if(i<=pMd5e){
translate([0,0,pMh7s+func6(pMd6e)-(tan(pMcutA)*(i-pMd5s)*glnd)])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
}
else{
translate([0,0,0])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
}
} //end hull
}//end 4 for
//3
for(i=[pMd3s:gdeg:pMd3e]){
hull(){
translate([0,0,pMh4e])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
if(i<=pMd5e){
translate([0,0,pMh7s+func6(pMd6e)-(tan(pMcutA)*(i-pMd5s)*glnd)])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
}
else{
translate([0,0,0])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
}
} //end hull
}//end 3 for
//2
for(i=[pMd2s:gdeg:pMd2e]){
hull(){
translate([0,0,func2(i)+pMh2s])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
if(i<=pMd5e){
translate([0,0,pMh7s+func6(pMd6e)-(tan(pMcutA)*(i-pMd5s)*glnd)])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
} //end if
else{
translate([0,0,0])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
} //end else
} //end hull
}//end 2 for
//1
for(i=[pMd1s:gdeg:pMd1e]){
hull(){
translate([0,0,pMh2s+func2(pMd2e)+(tan(pMcutA)*(i-pMd1s)*glnd)]) /////needs work
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
if(i<=pMd5e){
translate([0,0,pMh7s+func6(pMd6e)-(tan(pMcutA)*(i-pMd5s)*glnd)])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
} //end if
else{
translate([0,0,0])
rotate([270,0,i])
cylinder($fn=pMcutcylRez,d=pMgrooveD,h=pMgrooveOR);
} //end else
}//end hull
}//end 1 for
} //end left needle groove module
2D Cuts
- Parts to be cut out using a CNC machine
CKc1.scad
- need to add Nema motor mount
- would idlers help keep cenetered?
include <CKvars.scad>;
CKc1();
module CKc1(){
rez=p2number*p2needles*2; //calculate desired rezolution
$fn=rez; //defines resolution of circles.
translate([c1OD/2,0,0]){
difference(){
union(){
cylinder(h=c1H,d=c1OD);
} //end main union
cylinder(h=c1H+2,d=p3baseID); // donut hole
//base needle holes
////should these be circles instead? easier to cut? slot with rounded ends?
for(i=[1:p2needles*p2number]){
rotate([0,0,(360/p2number/p2needles/2)-(360/p2number/p2needles*i)]){
translate([-p2OD/2,-needleWidth/2,-0.01])
cube([p2needlegrooveDepth,needleWidth,p3wallH+0.02]);
} //end rotate
} //end for
//base mounting holes
//inner holes
for(i=[1:p3baseholenumber*p3number]){
rotate([0,0,(((360/p3number/p3baseholenumber))/2)-((360/p3number/p3baseholenumber)*i)]){
translate([-(p3baseID/2)-p3baseholefromODID,0,0])
cylinder(h=c1H+2,d=p3baseholeD,$fn=18);
} //end rotate
} //end inner hole set for
//outer holes
for(i=[1:p3baseholenumber*p3number]){
rotate([0,0,(((360/p3number/p3baseholenumber))/2)-((360/p3number/p3baseholenumber)*i)]){
translate([-(p3baseOD/2)+p3baseholefromODID,0,0])
cylinder(h=c1H+2,d=p3baseholeD,$fn=18);
} //end rotate
} //end outer hole set for
} //end main difference
} //end main translate
} //end CKc1 module
CKc2.scad
- rotating plate with gears
- need to calculate teeth per distance around outer diameter
include <CKvars.scad>;
// Copyright 2010 D1plo1d
// LGPL 2.1
t2t=6.858;
c2width=50;
c2gap=2;
c2OD=(c2width*2)+(c2gap*2)+p2OD+(p3wiggle*2)+(p3wallW*2);
c2ID=(c2gap*2)+p2OD+(p3wiggle*2)+(p3wallW*2);
c2teeth=((c2OD*PI)/t2t)-1;
c2dipitch=c2teeth/(c2OD*PI);
gear(c2teeth,circular_pitch=false,diametral_pitch=c2dipitch,pressure_angle=87, clearance=0.01);
//test_involute_curve();
//test_gears();
//demo_3d_gears();
// Geometry Sources:
// http://www.cartertools.com/involute.html
// gears.py (inkscape extension: /usr/share/inkscape/extensions/gears.py)
// Usage:
// Diametral pitch: Number of teeth per unit length.
// Circular pitch: Length of the arc from one tooth to the next
// Clearance: Radial distance between top of tooth on one gear to bottom of gap on another.
module gear(number_of_teeth,
circular_pitch=false, diametral_pitch=false,
pressure_angle=20, clearance = 0)
{
if (circular_pitch==false && diametral_pitch==false) echo("MCAD ERROR: gear module needs either a diametral_pitch or circular_pitch");
//Convert diametrial pitch to our native circular pitch
circular_pitch = (circular_pitch!=false?circular_pitch:180/diametral_pitch);
// Pitch diameter: Diameter of pitch circle.
pitch_diameter = number_of_teeth * circular_pitch / 180;
pitch_radius = pitch_diameter/2;
// Base Circle
base_diameter = pitch_diameter*cos(pressure_angle);
base_radius = base_diameter/2;
// Diametrial pitch: Number of teeth per unit length.
pitch_diametrial = number_of_teeth / pitch_diameter;
// Addendum: Radial distance from pitch circle to outside circle.
addendum = 1/pitch_diametrial;
//Outer Circle
outer_radius = pitch_radius+addendum;
outer_diameter = outer_radius*2;
// Dedendum: Radial distance from pitch circle to root diameter
dedendum = addendum + clearance;
// Root diameter: Diameter of bottom of tooth spaces.
root_radius = pitch_radius-dedendum;
root_diameter = root_radius * 2;
half_thick_angle = 360 / (4 * number_of_teeth);
difference()
{
union()
{
rotate(half_thick_angle) circle($fn=number_of_teeth*2, r=root_radius*1.001);
for (i= [1:number_of_teeth])
//for (i = [0])
{
rotate([0,0,i*360/number_of_teeth])
{
involute_gear_tooth(
pitch_radius = pitch_radius,
root_radius = root_radius,
base_radius = base_radius,
outer_radius = outer_radius,
half_thick_angle = half_thick_angle);
}
}
}
projection(cut = true) //use projection to create 2D
{
cylinder(d=c2ID,h=100);
}
}
}
module involute_gear_tooth(
pitch_radius,
root_radius,
base_radius,
outer_radius,
half_thick_angle
)
{
pitch_to_base_angle = involute_intersect_angle( base_radius, pitch_radius );
outer_to_base_angle = involute_intersect_angle( base_radius, outer_radius );
base1 = 0 - pitch_to_base_angle - half_thick_angle;
pitch1 = 0 - half_thick_angle;
outer1 = outer_to_base_angle - pitch_to_base_angle - half_thick_angle;
b1 = polar_to_cartesian([ base1, base_radius ]);
p1 = polar_to_cartesian([ pitch1, pitch_radius ]);
o1 = polar_to_cartesian([ outer1, outer_radius ]);
b2 = polar_to_cartesian([ -base1, base_radius ]);
p2 = polar_to_cartesian([ -pitch1, pitch_radius ]);
o2 = polar_to_cartesian([ -outer1, outer_radius ]);
// ( root_radius > base_radius variables )
pitch_to_root_angle = pitch_to_base_angle - involute_intersect_angle(base_radius, root_radius );
root1 = pitch1 - pitch_to_root_angle;
root2 = -pitch1 + pitch_to_root_angle;
r1_t = polar_to_cartesian([ root1, root_radius ]);
r2_t = polar_to_cartesian([ -root1, root_radius ]);
// ( else )
r1_f = polar_to_cartesian([ base1, root_radius ]);
r2_f = polar_to_cartesian([ -base1, root_radius ]);
if (root_radius > base_radius)
{
//echo("true");
polygon( points = [
r1_t,p1,o1,o2,p2,r2_t
], convexity = 3);
}
else
{
polygon( points = [
r1_f, b1,p1,o1,o2,p2,b2,r2_f
], convexity = 3);
}
}
// Mathematical Functions
//===============
// Finds the angle of the involute about the base radius at the given distance (radius) from it's center.
//source: http://www.mathhelpforum.com/math-help/geometry/136011-circle-involute-solving-y-any-given-x.html
function involute_intersect_angle(base_radius, radius) = sqrt( pow(radius/base_radius,2) - 1);
// Polar coord [angle, radius] to cartesian coord [x,y]
function polar_to_cartesian(polar) = [
polar[1]*cos(polar[0]),
polar[1]*sin(polar[0])
];
// Test Cases
//===============
module test_gears()
{
gear(number_of_teeth=51,circular_pitch=200);
translate([0, 50])gear(number_of_teeth=17,circular_pitch=200);
translate([-50,0]) gear(number_of_teeth=17,diametral_pitch=1);
}
module demo_3d_gears()
{
//double helical gear
translate([50,0])
{
linear_extrude(height = 10, center = true, convexity = 10, twist = -45)
gear(number_of_teeth=17,diametral_pitch=1);
translate([0,0,10])
rotate([0,180,180/17])
linear_extrude(height = 10, center = true, convexity = 10, twist = 45)
gear(number_of_teeth=17,diametral_pitch=1);
}
//spur gear
translate([0,-50]) linear_extrude(height = 10, center = true, convexity = 10, twist = 0)
gear(number_of_teeth=17,diametral_pitch=1);
}
module test_involute_curve()
{
for (i=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
{
translate(polar_to_cartesian([involute_intersect_angle( 0.1,i) , i ])) circle($fn=15, r=0.5);
}
}
CKc3.sacd
- need to fix ID and OD
- formula from mountain groove OD has a bug?
include <CKvars.scad>;
CKc3();
module CKc3(){
rez=p2number*p2needles*2; //calculate desired rezolution
$fn=rez; //defines resolution of circles.
translate([c3OD/2,0,0]){
difference(){
union(){
cylinder(h=c3H,d=c3OD);
} //end main union
cylinder(h=c3H+2,d=c3ID); // donut hole
//plate connector holes
for(i=[1:c2connectors]){
rotate([0,0,((360/c2connectors)*i)]){
translate([0,(CKpMID/2)+(pMgroove),0]){
translate([-p8baseW/2,0,0]){
translate([p8baseW/2,p8holeend2C,-0.1])
cylinder(d=p8holeD,h=pPspace2+0.2,$fn=36);
translate([p8baseW/2,p8baseL-p8holeend2C,-0.1])
#cylinder(d=p8holeD,h=pPspace2+0.2,$fn=36);
} //end hole translate
} //end translate to ring
} //end rotate i
} //end for
//mountain cutout to do
//makerbeam holes to do
} //end main difference
} //end main translate
} //end CKc1 module
To Do
- upper plate - mountain holder
- plate connector holes
- gear plate tooth calculations
- bearing mount holes
- table plate w/nema etc
- table legs?
- weight holder plate
- update mountain for larger OD's. need to up rezolution
- maybe rewrite mountain from scratch
- create 3D printed electronics box?
- yarn stick holder etc
- tensioner etc
See Also
- Open Source Textile Construction Set
- Open Source Circular Knitting Machine
- CircularKnitic Parametric