X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=filamentspool.scad;h=eb6e65cb61eddb31e65dc8033d2886933ce8fd4a;hp=487d853b0645b524d5d6ca1f7dc8a0f8aa016b39;hb=627b8cd7c421163a99e75ab26853f51573633099;hpb=fcd425d28e0fd254673250e4c5d13db7b98aab48 diff --git a/filamentspool.scad b/filamentspool.scad index 487d853..eb6e65c 100644 --- a/filamentspool.scad +++ b/filamentspool.scad @@ -1,29 +1,35 @@ // -*- C -*- -fdia=1.75; +fdia=2.85; slop=0.5; bigslop=slop*2; -hubeffrad = 30; // + 55; +exteffrad = 70; +hubeffrad = 30; hubbigrad = 20; hublwidth = 3; hubstemwidth = 2; hublthick = 10; hubaxlelen = 25; hubaxlerad = 5; +totalheightfromtower = 240; +axletowerfudgebend = 0; +axleaxlefudgebend = 3; +axlepadlen = 1.0; -prongthick=5; -prongwidth=5; +function selsz(sm,lg) = fdia < 2 ? sm : lg; + +prongthick=selsz(5,7); +prongwidth=selsz(5,7); ratchetstep=15; ratchettooth=3; ratchettoothheight=5; ratchettoothsmoothr=1; ratchettoothslope=0.75; overlap=0.5; -cupbigrad=20; - -xstraightmul = 1.75; +cupwidth=selsz(40,60); +cupheight=selsz(55,75); propxshift = 0; @@ -34,11 +40,12 @@ teethgapx=4+fdia; prongstalkxwidth=3; -stalklength=35; +stalklength=selsz(35,55); overclipcupgap=5; overclipdepth=15; overcliproundr=2.0; overclipthick=0.5; +overclipcupnextgap=20; overclipsmaller=-2.5; overclipbigger=0.0; @@ -50,11 +57,28 @@ wingthick=3; armendwallthick=2.5; armendbasethick=1.2; +axlehorizoffset = 12.5; +axlevertheight = 100; +towercliph = 16; +towerclipcount = 3; +towerpillarw = 5; + +axlepinrad = 2; +axlepintabrad = 5; + +washerthick = 1.2; +washerthinthick = 0.8; +washerverythinthick = 0.4; +washerrad = hubaxlerad + 7.5; +frictionwasherarmwidth = 3; +frictionwasherextrapush = 1.0; + ratchetpawl=ratchetstep-ratchettooth-bigslop*2; include include include +include channelwidth = prongthick + slop; channeldepth = prongwidth + ratchettoothheight; @@ -112,43 +136,45 @@ module FilamentCupHandle(){ } module FilamentCupCup(){ - xstraight = cupbigrad * xstraightmul; - linear_extrude(height=prongthick) { - FlatArc(0,0, cupbigrad,cupbigrad+prongwidth, 89,271, $fn=80); - } for (my=[0,1]) mirror([0,my,0]) { - translate([0,cupbigrad,0]) - cube([xstraight, prongwidth, prongthick]); + translate([0,cupwidth/2,0]) + cube([cupheight + prongwidth, prongwidth, prongthick]); } } module FilamentCup() { ////toplevel FilamentCupHandle(); - dx = cupbigrad + prongwidth; gapy = prongwidth; - dy = cupbigrad + gapy + overclipcupgap; + dy = cupwidth/2 + gapy + overclipcupgap; - translate([dx, dy, 0]) + translate([0, dy, 0]) FilamentCupCup(); translate([0, -1, 0]); - cube([prongwidth, dy+1, prongthick]); + cube([prongwidth, dy+1+cupwidth/2, prongthick]); - midrad = cupbigrad + prongwidth/2; + midrad = cupwidth/2 + prongwidth/2; propshift = stalklength - overclipdepth - prongthick + propxshift; proptaken = propshift; - echo(cupbigrad, dx, midrad, propshift, proptaken); + echo(midrad, propshift, proptaken); translate([propshift, -1, 0]) { // something is wrong with the y calculation cube([prongwidth, - dy - sqrt(midrad*midrad - proptaken*proptaken) - prongwidth/2, + gapy+2, prongthick]); } - translate([0, overclipcupgap, 0]) - rotate([0,0, 102 + fdia]) - FilamentTeeth(fdia=fdia, h=teethh); + for (y = [overclipcupgap, overclipcupgap+overclipcupnextgap]) { + translate([0, y, 0]) + rotate([0,0, 102 + fdia]) + FilamentTeeth(fdia=fdia, h=teethh); + } + for (x = [-0.3, -1.3]) { + translate([cupheight + overclipcupnextgap*x, dy+cupwidth/2 + prongthick, 0]) + rotate([0,0, 12 + fdia]) + FilamentTeeth(fdia=fdia, h=teethh); + } } module CupSecuringClipSolid(w,d,h1,h2){ @@ -175,6 +201,8 @@ module CupSecuringClip(){ ////toplevel CupSecuringClipSolidSmooth(xrad=overclipthick, xdepth=0); translate([-wingswidth/2, -wingsize/2, 0]) cube([wingswidth, wingsize, wingthick]); + translate([-wingsize/2, -wingswidth/2, 0]) + cube([wingsize, wingswidth, wingthick]); } translate([0,0,-0.1]) CupSecuringClipSolidSmooth(xrad=0, xdepth=0.2); @@ -185,6 +213,10 @@ module ArmDoveClipPin(){ ////toplevel DoveClipPin(h=doveclipheight); } +module TowerDoveClipPin(){ ////toplevel + DoveClipPin(h=towercliph/2); +} + module Hub(){ ////toplevel difference(){ cylinder($fn=60, h=hublthick, r=hubbigrad); @@ -197,7 +229,7 @@ module Hub(){ ////toplevel translate([0,0,-1]) cylinder($fn=60, h=hubaxlelen+2, r=axlerad); } hole = hubeffrad - hubbigrad - DoveClip_depth() - hublwidth*2; - holewidth = DoveClip_width() - hubstemwidth*2; + holewidth = DoveClipPairSane_width() - hubstemwidth*2; for (ang=[0,120,240]) rotate([0,0,ang]) { difference() { @@ -222,7 +254,129 @@ module Hub(){ ////toplevel } } +module ArmExtender(){ ////toplevel + DoveClipExtender(length=exteffrad-hubeffrad, + ha=doveclipheight, + hb=doveclipheight); +} + +module FsAxlePin(){ ////toplevel + AxlePin(hubaxlerad, washerrad*2, axlepinrad, axlepintabrad, slop); +} + +module Axle(){ ////toplevel + pillarswidth = DoveClipPairSane_width(towerclipcount); + + rotate([0,0, -( axleaxlefudgebend + atan(slop/hubaxlelen) ) ]) + translate([-axlehorizoffset, -axlevertheight, 0]) { + rotate([0,0,-axletowerfudgebend]) + rotate([0,0,-90]) + DoveClipPairSane(h=towercliph, count=towerclipcount, baseextend=3); + translate([0, DoveClip_depth(), 0]) + rotate([0,0,90]) + ExtenderPillars(axlevertheight - DoveClip_depth(), + pillarswidth, towercliph, + pillarw=towerpillarw); + } + + axleclearlen = hubaxlelen + slop*4 + washerthick*2 + axlepadlen; + axlerad = hubaxlerad-slop; + bump = axlerad * 0.2; + shift = axlerad-bump; + joinbelowallow = 3; + + intersection(){ + translate([0, 0, shift]) { + difference() { + union(){ + translate([-1, 0, 0]) + rotate([0,90,0]) + cylinder($fn=60, + r = axlerad, + h = 1 + axleclearlen + axlepinrad*2 + 2); + mirror([1,0,0]) rotate([0,90,0]) + cylinder(r = axlerad*1.75, h = 3); + intersection(){ + mirror([1,0,0]) + translate([axlehorizoffset - pillarswidth/2, 0, 0]) + rotate([0,90,0]) + cylinder($fn=60, + r = towercliph - shift, + h = pillarswidth); + translate([-50, -joinbelowallow, -50]) + cube([100, joinbelowallow+50, 100]); + } + } + rotate([90,0,0]) + translate([axleclearlen + axlepinrad/2, 0, -25]) + cylinder(r = axlepinrad + slop, h=50); + } + } + translate([-50,-50,0]) cube([100,100,100]); + } +} + +module washer(thick){ + Washer(hubaxlerad, washerrad, thick, slop); +} + +module AxleWasher(){ ////toplevel + washer(thick=washerthick); +} + +module AxleThinWasher(){ ////toplevel + washer(thick=washerthinthick); +} + +module AxleVeryThinWasher(){ ////toplevel + washer(thick=washerverythinthick); +} + +module AxleFrictionWasher(){ ////toplevel + difference(){ + cylinder(h=washerthick, r=washerrad); + translate([0,0,-1]) cylinder(h=washerthick+2, r=hubaxlerad+slop); + } + frarmr = hubbigrad; + frarmw = frictionwasherarmwidth; + frarmpawlr = hublwidth; + frarmpawlpush = slop*4 + frictionwasherextrapush; + for (ang=[0,180]) rotate([0,0,ang]) { + translate([washerrad-1, -frarmw/2, 0]) + cube([frarmr - washerrad + 1, frarmw, washerthick]); + intersection(){ + translate([frarmr - frarmpawlr, -50, 0]) + cube([frarmpawlr, 100, 50]); + rotate([0,90,0]) + cylinder(h = 50, r = frarmpawlpush, $fn=36); + } + } +} + +module TowerExtender(){ ////toplevel + l = totalheightfromtower - axlevertheight; + echo("TowerExtender",l); + DoveClipExtender(length = l, + ha = towercliph, hb = towercliph, + counta = towerclipcount, countb = towerclipcount, + pillarw = towerpillarw); +} + +module FilamentCupPair(){ ////toplevel + FilamentCup(); + translate([cupheight + prongthick*3, + cupwidth/2*1.7, + 0]) + rotate([0,0,180]) FilamentCup(); +} + //ArmEnd(); //FilamentCup(); -//CupSecuringClip(); +//FilamentCupPair(); +CupSecuringClip(); //Hub(); +//ArmExtender(); +//Axle(); +//AxleWasher(); +//AxlePin(); +//AxleFrictionWasher();