author | Michael Krelin <hacker@klever.net> | 2018-08-22 10:47:08 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2018-08-22 10:47:08 (UTC) |
commit | 4bb6687a7d733a947943b67cf77c3963041c6fb0 (patch) (unidiff) | |
tree | 67e1e7b383c289ad41865ccfcc85f0ce9e95717e | |
parent | 2bb1330fffd3b2c7d83361f536eb155640e4c867 (diff) | |
download | extrudery-4bb6687a7d733a947943b67cf77c3963041c6fb0.zip extrudery-4bb6687a7d733a947943b67cf77c3963041c6fb0.tar.gz extrudery-4bb6687a7d733a947943b67cf77c3963041c6fb0.tar.bz2 |
teardrop module
-rw-r--r-- | another.scad | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/another.scad b/another.scad index f4e8904..23243d9 100644 --- a/another.scad +++ b/another.scad | |||
@@ -71,48 +71,57 @@ module the_extruder( | |||
71 | supports = false, bridges = true, | 71 | supports = false, bridges = true, |
72 | tensioner = true, | 72 | tensioner = true, |
73 | debug = false | 73 | debug = false |
74 | ) { | 74 | ) { |
75 | fnd = 2*PI; fnr = 2*fnd; | 75 | fnd = 2*PI; fnr = 2*fnd; |
76 | 76 | ||
77 | idler_filament_offset = filament_path_d/2; // -filament_offset; | 77 | idler_filament_offset = filament_path_d/2; // -filament_offset; |
78 | lever_shell = mount_screwhead_h+0.5; | 78 | lever_shell = mount_screwhead_h+0.5; |
79 | lever_thickness=max(spring_d+spring_d_clearance+layer_height*8,idler_h+idler_v_tolerance+2*lever_shell); | 79 | lever_thickness=max(spring_d+spring_d_clearance+layer_height*8,idler_h+idler_v_tolerance+2*lever_shell); |
80 | lsd = idler_d-idler_clearance*2; | 80 | lsd = idler_d-idler_clearance*2; |
81 | longwing=gearbox_d/2+spring_d/2+lsd/2; | 81 | longwing=gearbox_d/2+spring_d/2+lsd/2; |
82 | h_ = (pulley_d+idler_d)/(2*sqrt(2)); | 82 | h_ = (pulley_d+idler_d)/(2*sqrt(2)); |
83 | ri = sqrt( pow(h_,2) + pow(mount_d/2-h_,2) ); | 83 | ri = sqrt( pow(h_,2) + pow(mount_d/2-h_,2) ); |
84 | spring_dl = idler_travel*longwing/ri; | 84 | spring_dl = idler_travel*longwing/ri; |
85 | 85 | ||
86 | mount_min_depth = mounthole_min_depth ? mounthole_min_depth : mounthole_depth-1; | 86 | mount_min_depth = mounthole_min_depth ? mounthole_min_depth : mounthole_depth-1; |
87 | mount_max_depth = mounthole_max_depth ? mounthole_max_depth : mounthole_depth+1; | 87 | mount_max_depth = mounthole_max_depth ? mounthole_max_depth : mounthole_depth+1; |
88 | filament_elevation=protrusion_h+pulley_elevation+teeth_elevation; | 88 | filament_elevation=protrusion_h+pulley_elevation+teeth_elevation; |
89 | ls_z = filament_elevation; // leverspace mid-z | 89 | ls_z = filament_elevation; // leverspace mid-z |
90 | ls_h = lever_thickness+lever_v_clearance; // leverspace height | 90 | ls_h = lever_thickness+lever_v_clearance; // leverspace height |
91 | mount_depth = mount_screw_l - (ls_z+ls_h/2+min_z_shell); | 91 | mount_depth = mount_screw_l - (ls_z+ls_h/2+min_z_shell); |
92 | body_h = max(protrusion_h+bore_l,mount_screw_l-mount_depth+mount_screwhead_h+min_z_shell,ls_z*2); | 92 | body_h = max(protrusion_h+bore_l,mount_screw_l-mount_depth+mount_screwhead_h+min_z_shell,ls_z*2); |
93 | echo("mount depth",mount_depth); | 93 | echo("mount depth",mount_depth); |
94 | 94 | ||
95 | module teardrop(r,d,h,center=false,angle=45) { | ||
96 | dd = d ? d : (2*r); | ||
97 | $fn = dd*fnd; | ||
98 | cylinder(d=dd,h=h,center=center); | ||
99 | if(angle>0) translate([0,0,center?-h/2:0]) | ||
100 | rotate([0,0,angle]) | ||
101 | cube(size=[d/2,d/2,h]); | ||
102 | } | ||
103 | |||
95 | module mirrorleft() { | 104 | module mirrorleft() { |
96 | mirror([left?0:1,0,0]) children(); | 105 | mirror([left?0:1,0,0]) children(); |
97 | } | 106 | } |
98 | module place_idler() { | 107 | module place_idler() { |
99 | rotate([0,0,45]) | 108 | rotate([0,0,45]) |
100 | translate([(pulley_d+idler_d)/2,0,0]) | 109 | translate([(pulley_d+idler_d)/2,0,0]) |
101 | children(); | 110 | children(); |
102 | } | 111 | } |
103 | module finger_indent(d=lever_thickness,depth/*=1*/,r/*=15*/) { | 112 | module finger_indent(d=lever_thickness,depth/*=1*/,r/*=15*/) { |
104 | if(depth) { | 113 | if(depth) { |
105 | hh = (-4*pow(depth,2)+pow(d,2))/(8*depth); | 114 | hh = (-4*pow(depth,2)+pow(d,2))/(8*depth); |
106 | rr = depth+hh; | 115 | rr = depth+hh; |
107 | translate([0,0,hh]) sphere(r=rr,$fn=fnr*rr); | 116 | translate([0,0,hh]) sphere(r=rr,$fn=fnr*rr); |
108 | }else if(r) { | 117 | }else if(r) { |
109 | hh=sqrt(pow(r,2)-pow(d,2)/4); | 118 | hh=sqrt(pow(r,2)-pow(d,2)/4); |
110 | translate([0,0,hh]) sphere(r=r,$fn=fnr*r); | 119 | translate([0,0,hh]) sphere(r=r,$fn=fnr*r); |
111 | } | 120 | } |
112 | } | 121 | } |
113 | 122 | ||
114 | % if(vitamins) mirrorleft() { | 123 | % if(vitamins) mirrorleft() { |
115 | translate([0,0,-epsilon]) mirror([0,0,1]) cylinder(d=gearbox_d,h=1,$fn=60); | 124 | translate([0,0,-epsilon]) mirror([0,0,1]) cylinder(d=gearbox_d,h=1,$fn=60); |
116 | for(zr=[0:90:359]) rotate([0,0,zr]) translate([mount_d/2,0,0]) | 125 | for(zr=[0:90:359]) rotate([0,0,zr]) translate([mount_d/2,0,0]) |
117 | cylinder(d=mount_screw_d,h=20,$fn=30); | 126 | cylinder(d=mount_screw_d,h=20,$fn=30); |
118 | translate([0,0,-epsilon]) cylinder(d=protrusion_d,h=protrusion_h,$fn=30); | 127 | translate([0,0,-epsilon]) cylinder(d=protrusion_d,h=protrusion_h,$fn=30); |
@@ -143,66 +152,63 @@ module the_extruder( | |||
143 | }//translate teeth | 152 | }//translate teeth |
144 | }//translate pulley | 153 | }//translate pulley |
145 | }//translate protrusion | 154 | }//translate protrusion |
146 | }//vitamins | 155 | }//vitamins |
147 | 156 | ||
148 | module lever() { | 157 | module lever() { |
149 | translate([0,0,protrusion_h+pulley_elevation+teeth_elevation]) { | 158 | translate([0,0,protrusion_h+pulley_elevation+teeth_elevation]) { |
150 | difference() { | 159 | difference() { |
151 | union() { | 160 | union() { |
152 | hull() { | 161 | hull() { |
153 | place_idler() | 162 | place_idler() |
154 | cylinder(d=lsd,h=lever_thickness,center=true,$fn=60); | 163 | cylinder(d=lsd,h=lever_thickness,center=true,$fn=60); |
155 | translate([mount_d/2,0,0]) | 164 | translate([mount_d/2,0,0]) |
156 | cylinder(d=lsd,h=lever_thickness,center=true,$fn=60); | 165 | cylinder(d=lsd,h=lever_thickness,center=true,$fn=60); |
157 | }//hull | 166 | }//hull |
158 | hull() { | 167 | hull() { |
159 | translate([mount_d/2,0,0]) | 168 | translate([mount_d/2,0,0]) |
160 | cylinder(d=lsd,h=lever_thickness,center=true,$fn=60); | 169 | cylinder(d=lsd,h=lever_thickness,center=true,$fn=60); |
161 | translate([mount_d/2,-longwing,0]) rotate([0,90,0]) | 170 | translate([mount_d/2,-longwing,0]) rotate([0,90,0]) |
162 | cylinder(d=lever_thickness,h=lsd,center=true,$fn=60); | 171 | cylinder(d=lever_thickness,h=lsd,center=true,$fn=60); |
163 | }//hull | 172 | }//hull |
164 | }//union | 173 | }//union |
165 | 174 | ||
166 | // filament path | 175 | // filament path |
167 | place_idler() { | 176 | place_idler() |
168 | translate([-idler_d/2-idler_filament_offset,0,0]) rotate([90,0,0]) { | 177 | translate([-idler_d/2-idler_filament_offset,0,0]) |
169 | cylinder(d=filament_path_d,h=3*gearbox_d,center=true,$fn=30); | 178 | rotate([90,0,0]) { |
170 | translate([0,-filament_path_d/2/sqrt(2),0]) rotate([0,0,45]) | 179 | mirror([0,1,0]) |
171 | cube(size=[filament_path_d/2,filament_path_d/2,3*gearbox_d],center=true); | 180 | teardrop(d=filament_path_d,h=3*gearbox_d,center=true); |
172 | }//rotate translate | ||
173 | translate([-idler_d/2-idler_filament_offset,0,0]) | ||
174 | rotate([90,0,0]) | ||
175 | translate([0,0, | 181 | translate([0,0, |
176 | sqrt(2)*(mount_d-pulley_d+lsd)/2 | 182 | sqrt(2)*(mount_d-pulley_d+lsd)/2 |
177 | ]) { | 183 | ]) { |
178 | cylinder(d1=filament_path_d,d2=2*filament_path_d, | 184 | cylinder(d1=filament_path_d,d2=2*filament_path_d, |
179 | h=filament_path_d,$fn=2*filament_path_d*fnd); | 185 | h=filament_path_d,$fn=2*filament_path_d*fnd); |
180 | translate([0,0,filament_path_d-epsilon]) | 186 | translate([0,0,filament_path_d-epsilon]) |
181 | cylinder(d=2*filament_path_d,h=lsd,$fn=2*filament_path_d*fnd); | 187 | cylinder(d=2*filament_path_d,h=lsd,$fn=2*filament_path_d*fnd); |
182 | } | 188 | }//translate |
183 | }//place_idler | 189 | }//rotate translate place_idler |
184 | 190 | ||
185 | // idler space and mounting hole | 191 | // idler space and mounting hole |
186 | place_idler() { | 192 | place_idler() { |
187 | difference() { | 193 | difference() { |
188 | cylinder(d=idler_d+idler_clearance*2,h=idler_h+idler_v_tolerance,center=true,$fn=60); | 194 | cylinder(d=idler_d+idler_clearance*2,h=idler_h+idler_v_tolerance,center=true,$fn=60); |
189 | if(supports) for(y=[-lsd/2+extrusion_width:(lsd-2*extrusion_width)/3:lsd/2-extrusion_width]) | 195 | if(supports) for(y=[-lsd/2+extrusion_width:(lsd-2*extrusion_width)/3:lsd/2-extrusion_width]) |
190 | translate([-lsd/2-1,y-extrusion_width/2,-idler_h/2-idler_v_tolerance/2-1]) | 196 | translate([-lsd/2-1,y-extrusion_width/2,-idler_h/2-idler_v_tolerance/2-1]) |
191 | cube(size=[lsd+2,extrusion_width,idler_h+idler_v_tolerance+2]); | 197 | cube(size=[lsd+2,extrusion_width,idler_h+idler_v_tolerance+2]); |
192 | } | 198 | } |
193 | cylinder(d=idler_screw_d,h=lever_thickness+2,center=true,$fn=30); | 199 | cylinder(d=idler_screw_d,h=lever_thickness+2,center=true,$fn=30); |
194 | translate([0,0,lever_thickness/2-idler_screwhead_h]) | 200 | translate([0,0,lever_thickness/2-idler_screwhead_h]) |
195 | cylinder(d=idler_screwhead_d,h=idler_screwhead_h+1,$fn=fnd*idler_screwhead_d); | 201 | cylinder(d=idler_screwhead_d,h=idler_screwhead_h+1,$fn=fnd*idler_screwhead_d); |
196 | } | 202 | } |
197 | // mounting screw hole | 203 | // mounting screw hole |
198 | translate([mount_d/2,0,0]) | 204 | translate([mount_d/2,0,0]) |
199 | cylinder(d=mount_screw_d+mount_screw_d_tolerance,h=lever_thickness+2,center=true,$fn=fnd*mount_screw_d); | 205 | cylinder(d=mount_screw_d+mount_screw_d_tolerance,h=lever_thickness+2,center=true,$fn=fnd*mount_screw_d); |
200 | 206 | ||
201 | // lever end | 207 | // lever end |
202 | translate([mount_d/2,0,0]) rotate([0,90,0]) { | 208 | translate([mount_d/2,0,0]) rotate([0,90,0]) { |
203 | translate([0,-longwing,lsd/2]) finger_indent(d=lever_thickness-1,r=15); | 209 | translate([0,-longwing,lsd/2]) finger_indent(d=lever_thickness-1,r=15); |
204 | translate([0,-longwing,0]) | 210 | translate([0,-longwing,0]) |
205 | mirror([0,0,1]) | 211 | mirror([0,0,1]) |
206 | difference() { | 212 | difference() { |
207 | cylinder(d=spring_d+spring_d_clearance,h=lsd,$fn=fnd*(spring_d+spring_d_clearance)); | 213 | cylinder(d=spring_d+spring_d_clearance,h=lsd,$fn=fnd*(spring_d+spring_d_clearance)); |
208 | sphere(d=spring_d*3/4,$fn=fnd*spring_d*3/4); | 214 | sphere(d=spring_d*3/4,$fn=fnd*spring_d*3/4); |
@@ -289,52 +295,49 @@ module the_extruder( | |||
289 | }//if(pf_smooth) | 295 | }//if(pf_smooth) |
290 | }//translate rotate translate rotate translate | 296 | }//translate rotate translate rotate translate |
291 | }//union (first child of difference) | 297 | }//union (first child of difference) |
292 | 298 | ||
293 | // protrusion | 299 | // protrusion |
294 | translate([0,0,-1]) | 300 | translate([0,0,-1]) |
295 | cylinder(d=protrusion_d+protrusion_tolerance_h,h=protrusion_h+protrusion_tolerance_v+1,$fn=fnd*(protrusion_d+protrusion_tolerance_h)); | 301 | cylinder(d=protrusion_d+protrusion_tolerance_h,h=protrusion_h+protrusion_tolerance_v+1,$fn=fnd*(protrusion_d+protrusion_tolerance_h)); |
296 | // mount screw holes | 302 | // mount screw holes |
297 | for(zr=[0:90:359]) rotate([0,0,zr]) translate([mount_d/2,0,0]) { | 303 | for(zr=[0:90:359]) rotate([0,0,zr]) translate([mount_d/2,0,0]) { |
298 | translate([0,0,mount_screw_l-mount_depth-(bridges?layer_height:-epsilon)]) | 304 | translate([0,0,mount_screw_l-mount_depth-(bridges?layer_height:-epsilon)]) |
299 | mirror([0,0,1]) | 305 | mirror([0,0,1]) |
300 | cylinder(d=mount_screw_d+mount_screw_d_tolerance, | 306 | cylinder(d=mount_screw_d+mount_screw_d_tolerance, |
301 | h=mount_screw_l-mount_depth+1, | 307 | h=mount_screw_l-mount_depth+1, |
302 | $fn=fnd*(mount_screw_d+mount_screw_d_tolerance)); | 308 | $fn=fnd*(mount_screw_d+mount_screw_d_tolerance)); |
303 | translate([0,0,mount_screw_l-mount_depth]) | 309 | translate([0,0,mount_screw_l-mount_depth]) |
304 | cylinder(d=mount_screwhead_d,h=body_h+1,$fn=fnd*mount_screwhead_d); | 310 | cylinder(d=mount_screwhead_d,h=body_h+1,$fn=fnd*mount_screwhead_d); |
305 | }//for | 311 | }//for |
306 | // pushfit | 312 | // pushfit |
307 | translate([0,0,filament_elevation]) | 313 | translate([0,0,filament_elevation]) |
308 | rotate([0,0,45]) translate([pulley_d/2+filament_offset,0,0]) | 314 | rotate([0,0,45]) translate([pulley_d/2+filament_offset,0,0]) |
309 | rotate([-90,0,0]) | 315 | rotate([-90,0,0]) |
310 | translate([0,0,mount_d/sqrt(2)/2+mount_screw_d+epsilon]) | 316 | translate([0,0,mount_d/sqrt(2)/2+mount_screw_d+epsilon]) |
311 | rotate([0,0,180]) { | 317 | rotate([0,0,180]) { |
312 | pushfit(pf); | 318 | pushfit(pf); |
313 | cylinder(d=filament_guide_d,h=gearbox_d,center=true,$fn=fnd*filament_guide_d); | 319 | mirror([0,1,0]) teardrop(d=filament_guide_d,h=gearbox_d,center=true); |
314 | translate([0,-filament_guide_d/2/sqrt(2),0]) | ||
315 | rotate([0,0,45]) | ||
316 | cube(size=[filament_guide_d/2,filament_guide_d/2,gearbox_d],center=true); | ||
317 | }//rotate translate rotate translate rotate translate | 320 | }//rotate translate rotate translate rotate translate |
318 | // pulley | 321 | // pulley |
319 | cylinder(d=pulley_d+pulley_d_clearance,h=body_h+1,$fn=fnd*(pulley_d+pulley_d_clearance)); | 322 | cylinder(d=pulley_d+pulley_d_clearance,h=body_h+1,$fn=fnd*(pulley_d+pulley_d_clearance)); |
320 | // leverspace | 323 | // leverspace |
321 | hull() for(x=[0,gearbox_d]) | 324 | hull() for(x=[0,gearbox_d]) |
322 | rotate([0,0,45]) | 325 | rotate([0,0,45]) |
323 | translate([x,0,ls_z-ls_h/2]) | 326 | translate([x,0,ls_z-ls_h/2]) |
324 | cylinder(d=idler_d+idler_clearance,h=ls_h,$fn=fnd*(idler_d+idler_clearance)); | 327 | cylinder(d=idler_d+idler_clearance,h=ls_h,$fn=fnd*(idler_d+idler_clearance)); |
325 | 328 | ||
326 | // idler clearance | 329 | // idler clearance |
327 | a=cos(45)*(pulley_d+idler_d)/2; | 330 | a=cos(45)*(pulley_d+idler_d)/2; |
328 | b=mount_d/2-a; | 331 | b=mount_d/2-a; |
329 | x=sqrt(pow(a,2)+pow(b,2)); | 332 | x=sqrt(pow(a,2)+pow(b,2)); |
330 | translate([mount_d/2,0,ls_z]) | 333 | translate([mount_d/2,0,ls_z]) |
331 | intersection() { | 334 | intersection() { |
332 | r = x+idler_d/2+idler_clearance; | 335 | r = x+idler_d/2+idler_clearance; |
333 | cylinder(r=r,h=ls_h,center=true); | 336 | cylinder(r=r,h=ls_h,center=true); |
334 | translate([-r-1,0,-ls_h/2-1]) cube(size=[2*r+2,r+1,ls_h+2]); | 337 | translate([-r-1,0,-ls_h/2-1]) cube(size=[2*r+2,r+1,ls_h+2]); |
335 | } | 338 | } |
336 | 339 | ||
337 | // back side cutout | 340 | // back side cutout |
338 | // XXX: this is somewhat ugly and potentially bugged, | 341 | // XXX: this is somewhat ugly and potentially bugged, |
339 | // but I want to sleep. | 342 | // but I want to sleep. |
340 | a0_ = atan( | 343 | a0_ = atan( |