CircularKnitic Parametric: Difference between revisions
Jump to navigation
Jump to search
(Added a Category to the Page) |
|||
(43 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
=Basics= | |||
Goal: Replicate [[Knitting_Machine|CircularKnitic]]'s designs with OpenScad to allow for larger machines to be built | Goal: Replicate [[Knitting_Machine|CircularKnitic]]'s designs with OpenScad to allow for larger machines to be built | ||
Note: Design changes for OSE's fork found here: [[OSE CircularKnitic v18.03]] | |||
=Code= | =Code= | ||
==CKvars.scad== | ==CKvars.scad== | ||
<html> | |||
<img src="https://docs.google.com/drawings/d/e/2PACX-1vSi5lIaK-dwO559k6kWaYspWdvvspj6b-vr358_aYM-AdU00GR4bm3ikpzS_Rg3PFWmiuYuZpd0C6hu/pub?h=400"> | |||
</html> | |||
[https://docs.google.com/drawings/d/1gQg21-4yBpBythhAY__qi30Ap8RPRDDI07-t4Q87_oU/edit edit image] | |||
*need to overhaul to pull in needle variables | |||
*bearingholder-small is 5.5 from base to center of bearing. with total heigh of 10.5 with bearing mounted. | |||
**need tweak so that it is only 10. or lower bottom of needle groove in part p3 by 0.5. | |||
*can lower p3's needle groove's max height to 60.5. | |||
<nowiki> | <nowiki> | ||
include <CKneedleVars-SK120.scad>; //select needle size file that will be used | |||
////MAIN SETTINGS//// | |||
//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; | needleWidth=1.8; | ||
p2needlegroovefromID=2.2; | |||
p2ID=p2needlegrooveID-(p2needlegroovefromID*2); | |||
p2needlegrooveDepth=2.8; | p2needlegrooveDepth=2.8; | ||
p2H=104; | p2H=104; | ||
p2W=4.8; | p2W=4.8; | ||
p2OD=p2ID+(p2W*2); | p2OD=p2ID+(p2W*2); | ||
p2holeH=75; | p2holeH=75; | ||
Line 21: | Line 55: | ||
p2holeCSD=4.01726; | p2holeCSD=4.01726; | ||
p2holeCSL=1.5; | p2holeCSL=1.5; | ||
//p3 | |||
p3wiggle=0.1; | p3wiggle=0.1; | ||
p3baseH=3; | p3baseH=3; | ||
p3baseID=p2ID-20-(p3wiggle*2); | p3baseID=p2ID-20-(p3wiggle*2); | ||
Line 39: | Line 71: | ||
p3wallchamfH=3; | p3wallchamfH=3; | ||
p3wallHaboveholesc=5; | p3wallHaboveholesc=5; | ||
p3grooveH1=18; | p3grooveH1=18; ///greater of: height of gear plate OR needle's nB dimension | ||
p3grooveH2=73; | p3grooveH2=73; | ||
p3grooveW=2.2; | p3grooveW=2.2; | ||
//p4 | |||
p4rampW=4; | p4rampW=4; | ||
p4rampH=14.57; | p4rampH=14.57; | ||
Line 63: | Line 94: | ||
// | //calculated settings | ||
centerlineD=p2ID+(p2W+(p3wiggle*2)); | centerlineD=p2ID+(p2W+(p3wiggle*2)); | ||
Line 75: | Line 106: | ||
p3wallH=p3wallHaboveholesc+p2holeH+p3baseH; | p3wallH=p3wallHaboveholesc+p2holeH+p3baseH; | ||
////SETTINGS OUTPUT ECHOS/// | |||
echo("Total Needles:", p2number*p2needles); | |||
echo("Millimeters Between Needles:", PI*p2needlegrooveID/(p2number*p2needles)); | |||
</nowiki> | </nowiki> | ||
Line 314: | Line 351: | ||
==CKp4.scad== | ==CKp4.scad== | ||
*Curve of ramp not exactly the same as the original. | |||
**I think its close enough until proven otherwise :D | |||
[[Image:CKp4.png|200px]] | |||
<nowiki> | <nowiki> | ||
Line 367: | Line 409: | ||
translate([-(p4baseID/2)-p4rampfromID,0,p4baseH]) | translate([-(p4baseID/2)-p4rampfromID,0,p4baseH]) | ||
cube([(p4baseID/2)+p4rampfromID,p4clawW,p4rampoverhangH]); | 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); | |||
Line 421: | Line 471: | ||
} //end module | } //end module | ||
</nowiki> | |||
==CKmountain.scad== | |||
*50mm tall | |||
*5.75mm from top of path to top of part | |||
*37.2mm from bottom of path to bottom of part | |||
*groove 7mm high at top | |||
**width of flat part of path at highest point in X 15mm | |||
*groove 9.5mm high in Z on incline | |||
*groove entrance 11.8 from bottom | |||
*groovy top at lowest point 6.8mm from base | |||
**center of lowest point from side in X ~8mm | |||
*path angle ~45 degrees | |||
*thickness at thinnest section 19.5 | |||
**relates to butt of needle nH | |||
*groove depth 12mm | |||
==Needle Files== | |||
[[Image:CKneedle-dimensions.png|200px]] | |||
===CKneedleVars-SK120.scad=== | |||
[[Image:CK-needle-scad.png|400px]] | |||
*estimated "H" value using mountain stl file | |||
<nowiki> | |||
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. | |||
</nowiki> | |||
===CKneedle.scad=== | |||
used to render needle | |||
<nowiki> | |||
//needle variable file you want to use | |||
include <CKneedleVars-SK120.scad>; | |||
needle(); | |||
module needle(){ | |||
mH=0.00001; | |||
bP=1.6; | |||
bN=0.6; | |||
$fn=36; | |||
translate([nX/2,0,(nX/2)]){ | |||
//flipper cut diff | |||
difference(){ | |||
union(){ | |||
minkowski(){ | |||
union(){ | |||
//tail | |||
translate([0,nX/2,0]) | |||
cube([nY-nX,nB-(nY*bN),mH]); | |||
//bottom curve of butt | |||
translate([-(nY*bP)+nY,nB-(nY*bN)+nX/2,0]){ | |||
intersection(){ | |||
difference(){ | |||
cylinder(r=(nY*bP)-nX,h=mH); | |||
cylinder(r=(nY*bN),h=mH); | |||
}//end diff | |||
cube([(nY*bP)-nX,(nY*bP)-nX,mH]); | |||
} //end inters | |||
} //end bottom curve of butt translate | |||
translate([-(nH-(nC/2)-(nY*1.4))-(nY*1.4)+nY,nB+(nC/2)-((nC-nX)/2),0]) | |||
cube([nH-(nC/2)-(nY*bP),nY-nX,mH]); | |||
//C curve | |||
translate([-(nH-(nC/2)-(nY*bP))-(nY*bP)+nY,nB+(nC/2),0]){ | |||
difference(){ | |||
cylinder(d=nC-nX,h=mH); | |||
cylinder(d=(nC-nX)-((nY-nX)*2),h=mH); | |||
translate([0,-nC/2,0]) | |||
cube([nC,nC,mH]); | |||
}//end diff | |||
} //end C curve translate | |||
//second horz | |||
translate([-(nH-(nC/2)-(nY*bP))-(nY*bP)+nY,nB+(nC/2)+(((nC-nX)-((nY-nX)*2))/2),0]) | |||
cube([nH-(nC/2)-(nY*bP),nY-nX,mH]); | |||
//end second horz | |||
//upper curve of butt | |||
translate([-(nY*bP)+nY,nB+nC+(nY*bN)-(nX/2),0]){ | |||
intersection(){ | |||
difference(){ | |||
cylinder(r=(nY*bP)-nX,h=mH); | |||
cylinder(r=(nY*bN),h=mH); | |||
}//end diff | |||
translate([0,-((nY*bP)-nX),0]) | |||
cube([(nY*bP)-nX,(nY*bP)-nX,mH]); | |||
} //end inters | |||
} //end upper curve of butt translate | |||
//mid section | |||
translate([0,nB+(nC/2)+(((nC-nX)-((nY-nX)*2))/2)+(nY*bP)-nX,0]) | |||
cube([nY-nX,nA-(nE*2)-(nB+(nC/2)+(((nC-nX)-((nY-nX)*2))/2)+(nY*bP)-nX),mH]); | |||
//end mid section | |||
} //end union | |||
//traveling minkowski shape | |||
sphere(d=nX); | |||
} //end minkowski | |||
//transition to hook | |||
hull(){ | |||
minkowski(){ | |||
translate([0,nA-(nE*2),0]) | |||
cube([nY-nX,mH,mH]); | |||
sphere(d=nX); | |||
} | |||
translate([nY-(nG/2)-(nX/2),nA-(nD/2),0]) | |||
sphere(d=nG); | |||
} | |||
//end transition to hook | |||
//hook body | |||
minkowski(){ | |||
difference(){ | |||
translate([nY-(nD/2)-(nX/2),nA-(nD/2),0]) | |||
cylinder($fn=36,d=nD-nG,h=mH); | |||
translate([nY-(nD/2)-(nX/2),nA-(nD/2),0]) | |||
cylinder($fn=36,d=nD-nG-0.001,h=mH); | |||
translate([(nY-(nD/2)-(nX/2))-(nD/2),(nA-(nD/2))-nD,0]) | |||
cube([nD,nD,mH]); | |||
} | |||
sphere(d=nG); | |||
} | |||
//end hook body | |||
//hook tip | |||
hull(){ | |||
translate([nY-(nG/2)-(nX/2)-nD+nG,nA-(nD/2),0]) | |||
sphere(d=nG); | |||
translate([nY-nD-(nG/4),nA-nE+(nG/4),0]) | |||
sphere(d=nG/2); | |||
} | |||
//end hook tip | |||
} //end union | |||
translate([-15-(nX/2)+(nY/3),nA-nF+(nY/2),-(nX/2)]) | |||
cylinder($fn=360,d=30,h=nX); | |||
} //end flipper cut difference | |||
//flipper | |||
hull(){ | |||
minkowski(){ | |||
translate([-nX/3,nA-(nF/2)-(nD/3),0]) | |||
cube([nY-nX,mH,mH]); | |||
sphere(d=nX/3); | |||
} | |||
translate([-(nY/2),nA-nF+(nX/3),0]) | |||
sphere(d=nX/3); | |||
} | |||
//end flipper | |||
} //end main translate | |||
} //end module | |||
</nowiki> | </nowiki> | ||
Line 431: | Line 678: | ||
=Notes= | =Notes= | ||
*all measurements in millimeters as used in original design | *all measurements in millimeters as used in original design | ||
==Needles== | |||
*I think original CircularKnitic uses needles from Brother brand knitting machines | |||
**These machines were last produced in 1996 [http://www.aboutknittingmachines.com/about-brother-machines.html] | |||
**Needles are different shapes/sizes for each model. | |||
**Brother needles are sometimes available from specialty stores online | |||
**Comments on the CircularKnitic Instructables comments section indicate people having trouble with sourcing same needles | |||
*Silver-Reed brand machines are still being produced | |||
**might be good to switch to needles are are being made for new machines | |||
**http://www.knitknackshop.com/silver-reed-acc.html | |||
*Need to change heights and depths based on different needle availabilty | |||
**Perhaps need to make needle dimensions as input variables to allow different needles to be used | |||
***would allow more flexibility in sourcing. | |||
[http://shop.sckmcl.com.hk/product_info.php?cPath=40&products_id=138] | |||
[https://www.dropbox.com/s/nrkddmp5kf053zp/pdf_circularknitic_version_dec16.pdf?dl=0] | |||
=Internal Links= | |||
*[[Open Source Textile Construction Set]] | |||
*[[Open Source Circular Knitting Machine]] | |||
=External Links= | |||
* | |||
[[Category: Textiles]] |
Latest revision as of 03:01, 29 November 2020
Basics
Goal: Replicate CircularKnitic's designs with OpenScad to allow for larger machines to be built
Note: Design changes for OSE's fork found here: OSE CircularKnitic v18.03
Code
CKvars.scad
- need to overhaul to pull in needle variables
- bearingholder-small is 5.5 from base to center of bearing. with total heigh of 10.5 with bearing mounted.
- need tweak so that it is only 10. or lower bottom of needle groove in part p3 by 0.5.
- can lower p3's needle groove's max height to 60.5.
include <CKneedleVars-SK120.scad>; //select needle size file that will be used ////MAIN SETTINGS//// //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; p3baseID=p2ID-20-(p3wiggle*2); p3baseOD=p2OD+20+(p3wiggle*2); p3baseholefromODID=3; p3baseholeD=3; p3baseholenumber=4; p3ridgeW1=3; p3ridgeW2=5; p3ridgeH=5; p3wallW=3; p3wallchamfW=2; p3wallchamfH=3; p3wallHaboveholesc=5; p3grooveH1=18; ///greater of: height of gear plate OR needle's nB dimension 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; //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));
CKp2.scad
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
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 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
CKp4.scad
- Curve of ramp not exactly the same as the original.
- I think its close enough until proven otherwise :D
include <CKvars.scad>; CKp4(); module CKp4(){ rez=360/p2number*2*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 for(i=[1:p2number/p4number]){ rotate([0,0,(360/p2number)-(360/p2number*i)-((360/p2number)/2)]){ 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 union } } } //end holes for } //end main difference } //end main translate } //end module
CKmountain.scad
- 50mm tall
- 5.75mm from top of path to top of part
- 37.2mm from bottom of path to bottom of part
- groove 7mm high at top
- width of flat part of path at highest point in X 15mm
- groove 9.5mm high in Z on incline
- groove entrance 11.8 from bottom
- groovy top at lowest point 6.8mm from base
- center of lowest point from side in X ~8mm
- path angle ~45 degrees
- thickness at thinnest section 19.5
- relates to butt of needle nH
- groove depth 12mm
Needle Files
CKneedleVars-SK120.scad
- estimated "H" value using mountain stl file
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.
CKneedle.scad
used to render needle
//needle variable file you want to use include <CKneedleVars-SK120.scad>; needle(); module needle(){ mH=0.00001; bP=1.6; bN=0.6; $fn=36; translate([nX/2,0,(nX/2)]){ //flipper cut diff difference(){ union(){ minkowski(){ union(){ //tail translate([0,nX/2,0]) cube([nY-nX,nB-(nY*bN),mH]); //bottom curve of butt translate([-(nY*bP)+nY,nB-(nY*bN)+nX/2,0]){ intersection(){ difference(){ cylinder(r=(nY*bP)-nX,h=mH); cylinder(r=(nY*bN),h=mH); }//end diff cube([(nY*bP)-nX,(nY*bP)-nX,mH]); } //end inters } //end bottom curve of butt translate translate([-(nH-(nC/2)-(nY*1.4))-(nY*1.4)+nY,nB+(nC/2)-((nC-nX)/2),0]) cube([nH-(nC/2)-(nY*bP),nY-nX,mH]); //C curve translate([-(nH-(nC/2)-(nY*bP))-(nY*bP)+nY,nB+(nC/2),0]){ difference(){ cylinder(d=nC-nX,h=mH); cylinder(d=(nC-nX)-((nY-nX)*2),h=mH); translate([0,-nC/2,0]) cube([nC,nC,mH]); }//end diff } //end C curve translate //second horz translate([-(nH-(nC/2)-(nY*bP))-(nY*bP)+nY,nB+(nC/2)+(((nC-nX)-((nY-nX)*2))/2),0]) cube([nH-(nC/2)-(nY*bP),nY-nX,mH]); //end second horz //upper curve of butt translate([-(nY*bP)+nY,nB+nC+(nY*bN)-(nX/2),0]){ intersection(){ difference(){ cylinder(r=(nY*bP)-nX,h=mH); cylinder(r=(nY*bN),h=mH); }//end diff translate([0,-((nY*bP)-nX),0]) cube([(nY*bP)-nX,(nY*bP)-nX,mH]); } //end inters } //end upper curve of butt translate //mid section translate([0,nB+(nC/2)+(((nC-nX)-((nY-nX)*2))/2)+(nY*bP)-nX,0]) cube([nY-nX,nA-(nE*2)-(nB+(nC/2)+(((nC-nX)-((nY-nX)*2))/2)+(nY*bP)-nX),mH]); //end mid section } //end union //traveling minkowski shape sphere(d=nX); } //end minkowski //transition to hook hull(){ minkowski(){ translate([0,nA-(nE*2),0]) cube([nY-nX,mH,mH]); sphere(d=nX); } translate([nY-(nG/2)-(nX/2),nA-(nD/2),0]) sphere(d=nG); } //end transition to hook //hook body minkowski(){ difference(){ translate([nY-(nD/2)-(nX/2),nA-(nD/2),0]) cylinder($fn=36,d=nD-nG,h=mH); translate([nY-(nD/2)-(nX/2),nA-(nD/2),0]) cylinder($fn=36,d=nD-nG-0.001,h=mH); translate([(nY-(nD/2)-(nX/2))-(nD/2),(nA-(nD/2))-nD,0]) cube([nD,nD,mH]); } sphere(d=nG); } //end hook body //hook tip hull(){ translate([nY-(nG/2)-(nX/2)-nD+nG,nA-(nD/2),0]) sphere(d=nG); translate([nY-nD-(nG/4),nA-nE+(nG/4),0]) sphere(d=nG/2); } //end hook tip } //end union translate([-15-(nX/2)+(nY/3),nA-nF+(nY/2),-(nX/2)]) cylinder($fn=360,d=30,h=nX); } //end flipper cut difference //flipper hull(){ minkowski(){ translate([-nX/3,nA-(nF/2)-(nD/3),0]) cube([nY-nX,mH,mH]); sphere(d=nX/3); } translate([-(nY/2),nA-nF+(nX/3),0]) sphere(d=nX/3); } //end flipper } //end main translate } //end module
Original Files
Notes
- all measurements in millimeters as used in original design
Needles
- I think original CircularKnitic uses needles from Brother brand knitting machines
- These machines were last produced in 1996 [1]
- Needles are different shapes/sizes for each model.
- Brother needles are sometimes available from specialty stores online
- Comments on the CircularKnitic Instructables comments section indicate people having trouble with sourcing same needles
- Silver-Reed brand machines are still being produced
- might be good to switch to needles are are being made for new machines
- http://www.knitknackshop.com/silver-reed-acc.html
- Need to change heights and depths based on different needle availabilty
- Perhaps need to make needle dimensions as input variables to allow different needles to be used
- would allow more flexibility in sourcing.
- Perhaps need to make needle dimensions as input variables to allow different needles to be used