1 /* Makerbottable Filament Spool v2.0
2 by Randy Young <dadick83@hotmail.com>
3 2010, 2011. License, GPL v2 or later
4 **************************************************/
6 include <Libs.scad> // Libs.scad is @ http://www.thingiverse.com/thing:6021
8 displayMode = rezPrinter(); // (rezPrinter | rezScreen)
10 // *** Arm Assembly Plate ***
11 //translate([-5,-19,0])
13 //translate([0,-37,0])
15 //translate([30,-9,0]) rotate(loosen())
19 // *** Hub Assembly Plate ***
21 //translate([-45,45,0]) rotate(tighten())
23 //translate([45,35,0]) rotate(tighten(180))
25 //translate([35,15,0]) rotate(tighten())
26 // FilamentGuide(drop=6, outrigger=0);
29 //-------------------------------------------------
31 module Hub(holeRadius = 5.5, ringThickness = 4){
33 tube(holeRadius+ringThickness,ringThickness,10);
34 tube(28,ringThickness,10);
36 rotate (tighten(i*120+0))
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);
46 //-------------------------------------------------
48 module ExtensionArm (length=70,height=10){
52 cube([length,16,height], center=true);
53 translate(slide(length/2)) dovetail(height=height);
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);
59 //-------------------------------------------------
61 module ArmEnd(length=60){
65 rotate(tighten()) slot([16,length,10], endRound=false, centerXYZ=[1,1,1]);
66 translate(slide(length/2)) dovetail();
68 rotate(tighten()) slot([8,length-10,10.05], centerXYZ=[1,1,1]);
71 //-------------------------------------------------
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
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
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]]);
91 translate(lift(slotSize[0]/2-0.5)+push(slotSize[0]/2)){
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]))
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));
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]]);
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]);
115 //-------------------------------------------------
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
129 translate(lift(-0.75)) difference(){
131 cube([2*girth+plywood+outrigger, drop+girth, postDiameter]);
132 translate([2*girth+plywood+outrigger-ep,postDiameter/2+1,postDiameter/2])
134 cylinder(r=postDiameter/2, h=hubThickness*2);
135 translate(lift(hubThickness))
136 cylinder(r1=postDiameter/2+1.3, r2=postDiameter/2, h=hubThickness);
139 translate([2*girth+plywood+outrigger-springTab-1,ep-springSize[1],0.75]) {
141 cube([springTab+1,springTab*2,springSize[2]]);
142 translate([springTab+1,springTab,springSize[2]/2]) sphere(springTab);
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]]);
157 translate([-ep,-ep,-5]) cube([100,100,5]);
158 translate([-ep,-ep,postDiameter-1.5]) cube([100,100,5]);
162 //-------------------------------------------------
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
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);
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]);