OSE CircularKnitic v18.03

From Open Source Ecology
Jump to navigation Jump to search

Basics

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;


////PART SETTINGS////

//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"

  • this code is fighting me
include <CKvars.scad>;

CKpM(); //mountain

module CKpM(){
    
    CKpMgrooveturnR=15; //radius of 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
    
    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((cos(CKpMcutA)*(pMgrooveC3-pMgrooveC2))*360/(PI*CKpMID)*10)/10;
    
    echo(CKpMd5);
    
    
    
    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)]){

        echo((CKpMgrooveturnR*cos(asin(((i-CKpMd7-(0.1))*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR));
            
            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)]){     
        
        translate([0,0,pMgrooveC3-(CKpMgrooveD/2)+((CKpMgrooveturnR*cos(asin(((((CKpMd7+CKpMd6))-CKpMd7)*(PI*CKpMID)/360)/CKpMgrooveturnR))-CKpMgrooveturnR))-(sin(CKpMcutA)*(i-(CKpMd7+CKpMd6))*(PI*CKpMID)/360)])
        rotate([270,0,i])
        cylinder($fn=CKpMcutcylRez,d=CKpMgrooveD,h=CKpMgrooveOD);
          }

       /////////////////////////// 
        mirror([1,0,0]){ //once groove cutting code finished, paste in mirror section
           
        //M7

        
    } //end mirror
    } //end main difference
    
    
    
} //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

Useful Links