CircularKnitic Parametric

From Open Source Ecology
Revision as of 22:11, 11 February 2018 by Dorkmo (talk | contribs) (→‎CKvars.scad)
Jump to navigation Jump to search

Goal: Replicate CircularKnitic's designs with OpenScad to allow for larger machines to be built


Code

CKvars.scad




needleWidth=1.8;
p2needlegrooveID=274.4;
p2needlegrooveDepth=2.8;
p2H=104;
p2W=4.8;
p2ID=270;
p2OD=p2ID+(p2W*2);
p2holeH=75;
p2holeD=2;
p2holeCSD=4.01726;
p2holeCSL=1.5;
p2number=12; //number of sections around circle
p2needles=5; //needles mounted on each p2

p3wiggle=0.1;
p3number=4;
p3baseH=3;
p3baseID=p2ID-20-(p3wiggle*2);
p3baseOD=p2OD+20+(p3wiggle*2);
p3ridgeW1=3;
p3ridgeW2=5;
p3ridgeH=5;
p3wallW=3;
p3wallchamfW=2;
p3wallchamfH=3;
p3wallHaboveholesc=5;
p3grooveH1=18;
p3grooveH2=73;
p3grooveW=2.2;



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;
 

CKp2.scad

CKp2.png

include <CKvars.scad>;

CKp2();

module CKp2(){
    
    rez=360/p2number*2*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;        

        rotate([0,0,-firstcenter]){
        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+firstcenter]){
        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 module
 

CKp3.scad

  • need to add holes for screws/bolts

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]);
        }
    }
  //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
    
        
    
        
    }
}
    
    
} //end module

 

Original Files

Media:CircularKnitic.skp

github

Notes

  • all measurements in millimeters as used in original design