OSE CircularKnitic v18.03
Jump to navigation
Jump to search
Basics
- OSE's Fork of CircularKnitic
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
////MAIN SETTINGS////
//select needle size file that will be used
include <CKneedleVars-SK120.scad>;
//diameter from inside edge of needles
p2needlegrooveID=274.4;
//number of "p2" parts around circle
p2number=12;
//number of needles mounted on each "p2" part
p2needles=5;
//number of "p3" parts around circle
p3number=4;
//number of "p4" parts around circle
p4number=4;
////MATERIALS////
upper_surfaceH=5; //thickness of upper rotating plate
bottom_surface_motor_gearsH=6; //thickness of geared rotating plate
////PART SETTINGS////
//"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
//p2
needleWidth=1.8;
p2needlegroovefromID=2.2;
p2ID=p2needlegrooveID-(p2needlegroovefromID*2);
p2needlegrooveDepth=2.8;
p2H=104;
p2W=4.8;
p2OD=p2ID+(p2W*2);
p2holeH=75;
p2holeD=2;
p2holeCSD=4.01726;
p2holeCSL=1.5;
//p3
p3wiggle=0.1;
p3baseH=3;
p3wallW=(nH-nY)/2; //half of needle butt
p3baseID=p2ID-20-(p3wiggle*2); //need change to base on p3ridgeW2 p3baseholeD + some extra clearance
p3baseOD=p2OD+20+(p3wiggle*2)+p3wallW+3; //need change to base off of p3baseholeD and p3wallchamfW + some extra clearance
p3baseholefromODID=3;
p3baseholeD=3;
p3baseholenumber=4;
p3ridgeW1=3;
p3ridgeW2=5;
p3ridgeH=5;
p3wallchamfW=2;
p3wallchamfH=3;
p3wallHaboveholesc=5;
p3grooveH1=18;
p3grooveH2=73;
p3grooveW=2.2;
//p4
p4rampW=4;
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=5.09;
p4clawW=9;
p4holesnumber=3;
p4holeH=5;
//plate
pPspace1=12; //? space from main table top to first plate
pPplate1=6; //thickness of geared plated
pPspace2=12; //space between geared plate and mountain plate
pPplate2=5;
//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
//calculated settings
centerlineD=p2ID+(p2W+(p3wiggle*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;
p3wallH=p3wallHaboveholesc+p2holeH+p3baseH;
////SETTINGS OUTPUT ECHOS///
echo("Total Needles:", p2number*p2needles);
echo("Millimeters Between Needles:", PI*p2needlegrooveID/(p2number*p2needles));
CKp3.scad
- Added holes in base for long tails
- does this need to be bigger to allow for some slop?
- need to tweak CKvars.scad to make p3wall thicker
- need to optimize groove height to go as low as possible
- what to do if needle has bent back tail?
include <CKvars.scad>;
CKp3();
module CKp3(){
rez=360/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-0.2,-needleWidth/2,-0.01])
#cube([p2needlegrooveDepth+0.2,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);
}
}
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);
}
}
//first and last holes
rotate([0,0,-firstcenter]){
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);
}
}
rotate([0,0,-(360/p2number*(p3number-1))+firstcenter]){
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);
}
}
//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);
}
}
} //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);
}
}
}//end for
//end middle holes
}
}
} //end module
CKpM.scad "mountain"
- need to use a fancy "for" function to cut groove
- need to rotate and change Z height at same time
- this code is fighting me
- need to hull groove section 5
- need groove section 4,3,2,1
include <CKvars.scad>;
CKpM(); //mountain
module CKpM(){
CKpMgrooveturnR=15; //radius of upper curved path in groove
CKpMgrooveturnR2=4; //radius of lower curved path in groove
CKpMgrooveD=nC+pMgrooveSlop; //diamter of groove cut
CKpMID=p2OD+2; //inside diameter of main wall
CKpMgrooveOD=pMgroove+(CKpMID/2); //center to OD of groove
CKpMp7X=5; //half of length of plateu of groove. preferably whole number
CKpMcutRez=2; //cuts per degree
CKpMcutDeg=(((CKpMp7X/2)*360/(PI*CKpMID))/CKpMp7X); //degrees per unit diameter
CKpMcutcylRez=36; //number of sides on groove cutting clylinder
CKpMcutA=45; //angle of cut path
//calc'd
mi=(CKpMID*PI)/360; //degrees in mm at CKpMID
echo("mi=");
echo(mi);
CKpMd7=round((CKpMp7X)*360/(PI*CKpMID)*10)/10; //degrees around ID
echo(CKpMd7);
CKpMd6=round((cos(CKpMcutA)*CKpMgrooveturnR)*360/(PI*CKpMID)*10)/10;
echo(CKpMd6);
CKpMp6Y=0;
CKpMd5=round((tan(CKpMcutA)*(((pMgrooveC3-(CKpMgrooveD/2)+(CKpMgrooveturnR*cos(asin((((CKpMd7+CKpMd6)-CKpMd7)*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR))-(CKpMgrooveD+((sin(CKpMcutA)*CKpMgrooveturnR2)*360/(PI*CKpMID))))))*360/(PI*CKpMID)*10)/10;
// not good code CKpMd5=round((cos(CKpMcutA)*(pMgrooveC3+pMwallHextra+(CKpMgrooveD/2)))*360/(PI*CKpMID)*10)/10;
//height of center of circle at top of 5 //pMgrooveC3-(CKpMgrooveD/2)+(CKpMgrooveturnR*cos(asin((((CKpMd7+CKpMd6)-CKpMd7)*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR)
//height of center of circle at bottom of 5
//CKpMgrooveD+((sin(CKpMcutA)*CKpMgrooveturnR2)*360/(PI*CKpMID))
//total height of 5 //((pMgrooveC3-(CKpMgrooveD/2)+(CKpMgrooveturnR*cos(asin((((CKpMd7+CKpMd6)-CKpMd7)*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR))-(CKpMgrooveD+((sin(CKpMcutA)*CKpMgrooveturnR2)*360/(PI*CKpMID))))
echo(CKpMd5);
//center to center degrees in section 4
CKpMd4=round((cos(CKpMcutA)*CKpMgrooveturnR2)*360/(PI*CKpMID)*10)/10;
//old bad code CKpMd4=(cos(CKpMcutA)*((pMgrooveC3-(CKpMgrooveD/2)+(CKpMgrooveturnR*cos(asin(((((CKpMd7+(CKpMd6))-(0.1))-CKpMd7)*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR))-((cos(CKpMcutA)*CKpMgrooveturnR))));
echo(CKpMd4);
CKpMd3=round((cos(CKpMcutA)*CKpMgrooveturnR2)*360/(PI*CKpMID)*10)/10;
echo(CKpMd3);
pMH=pMgrooveC3+pMwallHextra;
difference(){
translate([-(p2OD+2),0,0])
cube([(p2OD+2)*2,((p2OD+2)/2)+pMwallT+pMgroove,pMH]);
cylinder($fn=180,d=CKpMID, h=pMH);
//////////////////////
//8 keystone
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)])
rotate([270,0,0])
cube([CKpMgrooveD,CKpMgrooveD,CKpMgrooveOD*2],center=true);
//7
for(i=[(0.1):(0.2):CKpMd7-(0.1)]){
hull(){
//even
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)])
rotate([270,0,i-(0.1)])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
//even
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)])
rotate([270,0,i])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
}//end hull 1
hull(){
//even
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)])
rotate([270,0,i])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
//odd
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)])
rotate([270,0,i+(0.1)])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
}//end hull 2
}//end fors
//6
for(i=[(CKpMd7)+(0.1):(0.2):(CKpMd7+(CKpMd6))-(0.1)]){
hull(){
//even
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)+(CKpMgrooveturnR*cos(asin(((i-CKpMd7-(0.1))*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR)])
rotate([270,0,i-(0.1)])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
//even
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)+(CKpMgrooveturnR*cos(asin(((i-CKpMd7)*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR)])
rotate([270,0,i])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
}//end hull 1
hull(){
//even
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)+(CKpMgrooveturnR*cos(asin(((i-CKpMd7)*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR)])
rotate([270,0,i])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
//odd
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)+(CKpMgrooveturnR*cos(asin(((i-CKpMd7+(0.1))*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR)])
rotate([270,0,i+(0.1)])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
}//end hull 2
}//end fors
//5
for(i=[(CKpMd7+CKpMd6)+(0.1):(0.2):(CKpMd7+CKpMd6+CKpMd5)-(0.1)]){
echo((sin(CKpMcutA)*((i-(CKpMd7+CKpMd6+0.1))*(PI*CKpMID)/360)));
echo(((i-(CKpMd7+CKpMd6+0.1))*(PI*CKpMID)/360));
echo(tan(CKpMcutA)*(i-(CKpMd7+CKpMd6))*mi);
//(sin(CKpMcutA)*((i-(CKpMd7+CKpMd6+0.1))*(PI*CKpMID)/360))
translate([0,0,pMgrooveC3-(CKpMgrooveD/2)+(CKpMgrooveturnR*cos(asin(((((CKpMd7+(CKpMd6))-(0.1))-CKpMd7)*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR)-((tan(CKpMcutA)*(i-(CKpMd7+CKpMd6-0.1))*mi))])
rotate([270,0,i])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
}
//4
for(i=[(CKpMd7+CKpMd6+CKpMd5)+(0.1):(0.2):(CKpMd7+CKpMd6+CKpMd5+CKpMd4)-(0.1)]){
//CKpMgrooveturnR2*cos(asin(((i-(CKpMd7+CKpMd6+CKpMd4))*(PI*CKpMID)/360)/CKpMgrooveturnR2))-CKpMgrooveturnR2
translate([0,0,(CKpMgrooveD/2)-(0)])
rotate([270,0,i])
cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
}
///3
//2
///////////////////////////
mirror([1,0,0]){ //once groove cutting code finished, paste in mirror section
//M7
} //end mirror
} //end main difference
} //end module
} //end module
Needles
CKneedleVars-SK120.scad
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.
See Also
- Open Source Textile Construction Set
- Open Source Circular Knitting Machine
- CircularKnitic Parametric