chiark / gitweb /
8317 ExtensionArm has height parameter for testing
[dl-things.git] / th-8317 / FilamentSpool.scad
1 /*      Makerbottable Filament Spool v2.0
2                 by Randy Young <dadick83@hotmail.com>
3                 2010, 2011.   License, GPL v2 or later
4 **************************************************/
5
6 include <Libs.scad> //  Libs.scad is @ http://www.thingiverse.com/thing:6021
7
8 displayMode = rezPrinter();  // (rezPrinter | rezScreen)
9
10 // *** Arm Assembly Plate ***
11 //translate([-5,-19,0])
12 //      ExtensionArm();
13 //translate([0,-37,0])
14 //      ArmEnd();
15 //translate([30,-9,0]) rotate(loosen())
16 //      ForkClip();
17
18
19 // *** Hub Assembly Plate ***
20 //Hub();
21 //translate([-45,45,0]) rotate(tighten())
22 //      Spindle();
23 //translate([45,35,0]) rotate(tighten(180))
24 //      FilamentGuide();
25 //translate([35,15,0]) rotate(tighten())
26 //      FilamentGuide(drop=6, outrigger=0);
27
28
29 //-------------------------------------------------
30
31 module Hub(holeRadius =         5.5, ringThickness =    4){
32         union(){
33                 tube(holeRadius+ringThickness,ringThickness,10);
34                 tube(28,ringThickness,10);              
35                 for (i= [0:2])
36                         rotate (tighten(i*120+0))
37                         difference(){
38                                 translate(push (20+holeRadius/2)+lift(5))
39                                         cube([16,40-holeRadius,10], center=true);
40                                 translate(push((30+holeRadius)/2)+lift(10))
41                                         roundRect (size=[7.5,30-holeRadius-2*ringThickness,10], round=2, center=true);
42                                 translate(push(40)+lift(5)) rotate(tighten())
43                                         dovetail(height=10.1);
44 }       }       }
45
46 //-------------------------------------------------
47
48 module ExtensionArm (length=70,height=10){
49         translate(lift(5))
50         difference(){
51                 union(){
52                         cube([length,16,height], center=true);
53                         translate(slide(length/2)) dovetail(height=height);
54                 }
55                 translate(slide(2)) rotate(tighten())   slot([8,length-16,height+0.05], centerXYZ=[1,1,1]);
56                 translate(slide(-length/2-0.01)) dovetail(height=height+0.1,male=false);
57 }       }
58
59 //-------------------------------------------------
60
61 module ArmEnd(length=60){
62         translate(lift(5))
63                 difference(){
64                 union(){
65                         rotate(tighten()) slot([16,length,10], endRound=false, centerXYZ=[1,1,1]);
66                         translate(slide(length/2)) dovetail();
67                 }
68                  rotate(tighten())      slot([8,length-10,10.05], centerXYZ=[1,1,1]);
69 }       }
70
71 //-------------------------------------------------
72
73 // Note: the ForkClip press fits into the slots on the ArmEnds.  Default settings match
74 //              the sizes of old MBI and Ultimaker (spoolless) 1lb rolls
75
76
77
78 module ForkClip(
79                         forkSize = [40,50,5],   // width, length, thickness
80                         armLength = 60,                 // This should be same as the ArmEnd length you chose
81                         filamentSize = 3,               // for filament holding tabs
82                         slotSize = [8,10],              // width, depth.  length derived from armLength
83                         forkOffset = 6.5)               // moves the fork up on the clip to fine tune filament diameter 
84
85         difference() {
86                 union(){
87                         translate(slide(slotSize[1]+1)+push(slotSize[0]+4.5+forkOffset)){
88                                 slot(forkSize, endRound=false,centerXYZ=0);
89                                 cube([forkSize[0]/2,forkSize[1],forkSize[2]]);
90                         }
91                         translate(lift(slotSize[0]/2-0.5)+push(slotSize[0]/2)){
92                                 rotate(righty()) 
93                                         cylinder(r1=slotSize[0]/2-0.5, r2=slotSize[0]/2+0.5, h=slotSize[1]-0.5, 
94                                                 $fn=resolution(slotSize[0]/2));
95                                 translate(push(armLength-10-slotSize[0]))
96                                         rotate(righty()) 
97                                         cylinder(r1=slotSize[0]/2-0.5, r2=slotSize[0]/2+0.5, h=slotSize[1]-0.5, 
98                                                 $fn=resolution(slotSize[0]/2));
99                         }
100                         translate(push(slotSize[0]/2))
101                                 cube([slotSize[1]-0.5,armLength-10-slotSize[0],1.51]); // spring
102                         translate(push(slotSize[0]+2.5)) 
103                                 cube([slotSize[1]+forkSize[2],armLength-15-2*slotSize[0],forkSize[2]]);
104                 }
105                 translate(slide(slotSize[1]+1+forkSize[2])+push(slotSize[0]+4.5+forkOffset+forkSize[2]))
106                                 slot([forkSize[0]-2*forkSize[2],forkSize[1],forkSize[2]*2.1], endRound=false,centerXYZ=[0,0,1]);
107                 translate([-ep,0,-5]) 
108                         cube([slotSize[1]+2*ep,armLength-10,5+ep]);
109                 translate([slotSize[1]+forkSize[2]-1.1,slotSize[0]+3.5+filamentSize*0.33,-ep]) 
110                         cube([1.2,filamentSize*0.77,forkSize[2]+1]);
111                 translate([slotSize[1],slotSize[0]+3.5,-0.01]) rotate(tighten())
112                         slot([filamentSize*1.1,forkSize[2]-1,forkSize[2]+0.1], endRound=false, centerXYZ=[2,0,0]);
113         }
114
115 //-------------------------------------------------
116
117 module Spindle(
118         postDiameter =  10.5,                           // matched to size of hole in hub
119         hubThickness =  11,                             // length of post before flange
120         drop =                  30,                             // distance hook hangs down from edge it's clipped to
121         overhang =              6,                              // length hook overlaps edge
122         plywood =               5,                              // thickness of wall hook is attached to
123         outrigger =             8,                              // standoff distance from hook
124         girth =                         5,                              // beefiness, thickness of hook (width governed by postDiameter)
125         springTab =             0,                              // use 0 for none.  tensioner that presses against hub to provide friction
126         springSize =            [1.5,18,5])             // if springTab is used.  Only needed if you're using a hub with bearing
127
128         difference(){
129                 translate(lift(-0.75)) difference(){
130                         union(){
131                                 cube([2*girth+plywood+outrigger, drop+girth, postDiameter]);
132                                 translate([2*girth+plywood+outrigger-ep,postDiameter/2+1,postDiameter/2])
133                                 rotate(righty()){ 
134                                         cylinder(r=postDiameter/2, h=hubThickness*2);
135                                         translate(lift(hubThickness))
136                                                 cylinder(r1=postDiameter/2+1.3, r2=postDiameter/2, h=hubThickness);
137                                 }
138                                 if (springTab>0){
139                                         translate([2*girth+plywood+outrigger-springTab-1,ep-springSize[1],0.75]) {
140                                                 cube(springSize);
141                                                 cube([springTab+1,springTab*2,springSize[2]]);
142                                                 translate([springTab+1,springTab,springSize[2]/2]) sphere(springTab);
143                                 }       }
144                         }
145                         translate([-ep,-ep,-ep]){
146                                 cube([girth+plywood,drop-overhang,postDiameter+1]);
147                                 translate([2*girth+plywood+ep,postDiameter+2,0])
148                                         cube([outrigger+ep,drop,postDiameter+1]);
149                                 translate([girth,0,0])
150                                         cube([plywood,drop,postDiameter+1]);
151                                 translate([2*girth+plywood+outrigger+ep,postDiameter/2+1,0])    linear_extrude(2)
152                                         polygon(points=[        [-outrigger/2,0],
153                                                                         [hubThickness*2,postDiameter/4],
154                                                                         [hubThickness*2,-postDiameter/4]]);
155                         }
156                 }
157                 translate([-ep,-ep,-5]) cube([100,100,5]);
158                 translate([-ep,-ep,postDiameter-1.5]) cube([100,100,5]);
159 }
160
161
162 //-------------------------------------------------
163
164 module FilamentGuide(
165         tubeDiameter =  0.25*in,                        // size of filament hole
166         tubeThickness = 1.5,                            // thickness of gude tube
167         drop =                  10,                             // distance hook hangs down from edge it's clipped to
168         overhang =              6,                              // length hook overlaps edge
169         plywood =               5,                              // thickness of wall hook is attached to
170         outrigger =             15,                             // standoff distance from hook
171         girth =                         4)                              // beefiness, thickness/width of hook
172
173         difference(){
174                 union(){
175                         cube([2*girth+plywood, drop+girth, girth]);
176                         cube([2*girth+plywood+outrigger, girth, girth]);
177                         translate([girth*2+plywood+outrigger+tubeDiameter/2,girth/2,0])
178                                 tube(tubeDiameter/2+tubeThickness,tubeThickness,girth);
179
180                 }
181                 translate([-ep,-ep,-ep]){
182                         cube([girth+plywood,drop-overhang,girth+2*ep]);
183                 translate([girth,0,0])
184                         cube([plywood,drop+ep,girth+2*ep]);
185                 translate([girth*2+plywood+outrigger+tubeDiameter/1.5,girth/2-tubeDiameter/4,0])
186                         cube([plywood,tubeDiameter/2,girth+2*ep]);
187                 }
188 }
189
190
191