summaryrefslogtreecommitdiff
authorMichael Krelin <hacker@klever.net>2018-08-06 16:52:38 (UTC)
committer Michael Krelin <hacker@klever.net>2018-08-06 16:52:38 (UTC)
commit8efe8f057476efcaba06c6eac7d64792c53e442a (patch) (unidiff)
tree85f0aabee02edc88ee6836c51e21230d8c232259
parent1d8f93c354df4effca90d355841d189ecdec7a27 (diff)
downloadextrudery-8efe8f057476efcaba06c6eac7d64792c53e442a.zip
extrudery-8efe8f057476efcaba06c6eac7d64792c53e442a.tar.gz
extrudery-8efe8f057476efcaba06c6eac7d64792c53e442a.tar.bz2
introduce idler screw dimensions
which are, in fact, idler screw hole dimensions…
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--another.scad10
1 files changed, 6 insertions, 4 deletions
diff --git a/another.scad b/another.scad
index 03f3bf9..dbd20f3 100644
--- a/another.scad
+++ b/another.scad
@@ -1,423 +1,425 @@
1draft=true; 1draft=true;
2layer_height=0.2; extrusion_width=0.4; 2layer_height=0.2; extrusion_width=0.4;
3epsilon=0.01; 3epsilon=0.01;
4$fs=0.0125; 4$fs=0.0125;
5 5
6use <pushfittery.scad>; 6use <pushfittery.scad>;
7include <pushfit_data.scad>; 7include <pushfit_data.scad>;
8 8
9module the_extruder( 9module the_extruder(
10 // motor properties 10 // motor properties
11 gearbox_d = 36, 11 gearbox_d = 36,
12 mount_d = 28, // the distance between opposite mounting holes 12 mount_d = 28, // the distance between opposite mounting holes
13 mounthole_depth = 5, 13 mounthole_depth = 5,
14 protrusion_d = 22, protrusion_h = 2.2, // the dimensions of the protrusion on top of gearbox 14 protrusion_d = 22, protrusion_h = 2.2, // the dimensions of the protrusion on top of gearbox
15 bore_d = 8, bore_l = 17.6, 15 bore_d = 8, bore_l = 17.6,
16 bore_dd = 7, 16 bore_dd = 7,
17 // pulley properties 17 // pulley properties
18 pulley_d = 11.5, pulley_h=10, 18 pulley_d = 11.5, pulley_h=10,
19 pulley_elevation = 1, // pulley elevation above the protrusion 19 pulley_elevation = 1, // pulley elevation above the protrusion
20 teeth_elevation = 7.5, // distance from the bottom of the pulley to its teeth 20 teeth_elevation = 7.5, // distance from the bottom of the pulley to its teeth
21 // idler properties 21 // idler properties
22 idler_d = 9.5, idler_h = 4, idler_id = 3,// idler dimensions: outer and inner diameters and height 22 idler_d = 9.5, idler_h = 4, idler_id = 3,// idler dimensions: outer and inner diameters and height
23 // spring properties 23 // spring properties
24 spring_d = 10, spring_lc = 9.6, // spring diameter and compressed length 24 spring_d = 10, spring_lc = 9.6, // spring diameter and compressed length
25 // filament path properties 25 // filament path properties
26 filament_d = 1.75, 26 filament_d = 1.75,
27 filament_path_d = 2, 27 filament_path_d = 2,
28 filament_guide_d = 4, // PTFE filament guide diameter 28 filament_guide_d = 4, // PTFE filament guide diameter
29 // knob properties 29 // knob properties
30 knob_h = 10, 30 knob_h = 10,
31 knob_bore_l = 4, 31 knob_bore_l = 4,
32 knob_indent_d = 4, 32 knob_indent_d = 4,
33 knob_indents = 12, 33 knob_indents = 12,
34 // spring tensioner 34 // spring tensioner
35 st_nut_d = 9, st_nut_h = 4, 35 st_nut_d = 9, st_nut_h = 4,
36 st_screw_d = 5, 36 st_screw_d = 5,
37 st_thickshell = 8*extrusion_width, st_thinshell = 4*extrusion_width, 37 st_thickshell = 8*extrusion_width, st_thinshell = 4*extrusion_width,
38 38
39 // screw it 39 // screw it
40 mount_screw_d = 3.1, mount_screw_l = 20, 40 mount_screw_d = 3.1, mount_screw_l = 20,
41 mount_screwhead_d=6, mount_screwhead_h=3, 41 mount_screwhead_d=6, mount_screwhead_h=3,
42 idler_screw_d = 3,
43 idler_screwhead_d=6, idler_screwhead_h=3,
42 44
43 pf = pushfit_embeddest, 45 pf = pushfit_embeddest,
44 46
45 // empty spaces 47 // empty spaces
46 idler_travel = 3, // how far should idler travel when pressed 48 idler_travel = 3, // how far should idler travel when pressed
47 idler_clearance=1, 49 idler_clearance=1,
48 pulley_clearance=2, 50 pulley_clearance=2,
49 lever_v_clearance=.7, // vertical clearance for the lever 51 lever_v_clearance=.7, // vertical clearance for the lever
50 spring_d_clearance=1, 52 spring_d_clearance=1,
51 protrusion_tolerance_h=.5, // horizontal tolerance for the motor protrusion 53 protrusion_tolerance_h=.5, // horizontal tolerance for the motor protrusion
52 protrusion_tolerance_v=.5, // vertical tolerance for the motor protrusion 54 protrusion_tolerance_v=.5, // vertical tolerance for the motor protrusion
53 mount_screw_d_tolerance=.4, 55 mount_screw_d_tolerance=.4,
54 idler_v_tolerance=.5, 56 idler_v_tolerance=.5,
55 knob_bore_d_tolerance=.6, 57 knob_bore_d_tolerance=.6,
56 st_nut_h_tolerance=.2, 58 st_nut_h_tolerance=.2,
57 st_nut_d_tolerance=.2,/* TODO: make it st_nut_w_tolerance */ 59 st_nut_d_tolerance=.2,/* TODO: make it st_nut_w_tolerance */
58 60
59 what="lever", // lever|body|knob|springpad|* 61 what="lever", // lever|body|knob|springpad|*
60 left=false, 62 left=false,
61 vitamins = true, 63 vitamins = true,
62 supports = false, bridges = true, 64 supports = false, bridges = true,
63 tensioner = true, 65 tensioner = true,
64 debug = false 66 debug = false
65) { 67) {
66 fnd = 2*PI; fnr = 2*fnd; 68 fnd = 2*PI; fnr = 2*fnd;
67 69
68 lever_shell = mount_screwhead_h+0.5; 70 lever_shell = mount_screwhead_h+0.5;
69 lever_thickness=max(spring_d+spring_d_clearance+layer_height*8,idler_h+idler_v_tolerance+2*lever_shell); 71 lever_thickness=max(spring_d+spring_d_clearance+layer_height*8,idler_h+idler_v_tolerance+2*lever_shell);
70 lsd = idler_d-idler_clearance*2; 72 lsd = idler_d-idler_clearance*2;
71 longwing=gearbox_d/2+spring_d/2+lsd/2; 73 longwing=gearbox_d/2+spring_d/2+lsd/2;
72 h_ = (pulley_d+idler_d)/(2*sqrt(2)); 74 h_ = (pulley_d+idler_d)/(2*sqrt(2));
73 ri = sqrt( pow(h_,2) + pow(mount_d/2-h_,2) ); 75 ri = sqrt( pow(h_,2) + pow(mount_d/2-h_,2) );
74 spring_dl = idler_travel*longwing/ri; 76 spring_dl = idler_travel*longwing/ri;
75 77
76 filament_elevation=protrusion_h+pulley_elevation+teeth_elevation; 78 filament_elevation=protrusion_h+pulley_elevation+teeth_elevation;
77 ls_z = filament_elevation; // leverspace mid-z 79 ls_z = filament_elevation; // leverspace mid-z
78 body_h = max(protrusion_h+bore_l,mount_screw_l-mounthole_depth/2+mount_screwhead_h,ls_z*2); 80 body_h = max(protrusion_h+bore_l,mount_screw_l-mounthole_depth/2+mount_screwhead_h,ls_z*2);
79 ls_h = lever_thickness+lever_v_clearance; // leverspace height 81 ls_h = lever_thickness+lever_v_clearance; // leverspace height
80 82
81 module mirrorleft() { 83 module mirrorleft() {
82 mirror([left?0:1,0,0]) children(); 84 mirror([left?0:1,0,0]) children();
83 } 85 }
84 module place_idler() { 86 module place_idler() {
85 rotate([0,0,45]) 87 rotate([0,0,45])
86 translate([(pulley_d+idler_d)/2,0,0]) 88 translate([(pulley_d+idler_d)/2,0,0])
87 children(); 89 children();
88 } 90 }
89 module finger_indent(d=lever_thickness,depth/*=1*/,r/*=15*/) { 91 module finger_indent(d=lever_thickness,depth/*=1*/,r/*=15*/) {
90 if(depth) { 92 if(depth) {
91 hh = (-4*pow(depth,2)+pow(d,2))/(8*depth); 93 hh = (-4*pow(depth,2)+pow(d,2))/(8*depth);
92 rr = depth+hh; 94 rr = depth+hh;
93 translate([0,0,hh]) sphere(r=rr,$fn=fnr*rr); 95 translate([0,0,hh]) sphere(r=rr,$fn=fnr*rr);
94 }else if(r) { 96 }else if(r) {
95 hh=sqrt(pow(r,2)-pow(d,2)/4); 97 hh=sqrt(pow(r,2)-pow(d,2)/4);
96 translate([0,0,hh]) sphere(r=r,$fn=fnr*r); 98 translate([0,0,hh]) sphere(r=r,$fn=fnr*r);
97 } 99 }
98 } 100 }
99 101
100 % if(vitamins) mirrorleft() { 102 % if(vitamins) mirrorleft() {
101 translate([0,0,-epsilon]) mirror([0,0,1]) cylinder(d=gearbox_d,h=1,$fn=60); 103 translate([0,0,-epsilon]) mirror([0,0,1]) cylinder(d=gearbox_d,h=1,$fn=60);
102 for(zr=[0:90:359]) rotate([0,0,zr]) translate([mount_d/2,0,0]) 104 for(zr=[0:90:359]) rotate([0,0,zr]) translate([mount_d/2,0,0])
103 cylinder(d=mount_screw_d,h=20,$fn=30); 105 cylinder(d=mount_screw_d,h=20,$fn=30);
104 translate([0,0,-epsilon]) cylinder(d=protrusion_d,h=protrusion_h,$fn=30); 106 translate([0,0,-epsilon]) cylinder(d=protrusion_d,h=protrusion_h,$fn=30);
105 translate([0,0,protrusion_h]) { 107 translate([0,0,protrusion_h]) {
106 difference() { 108 difference() {
107 cylinder(d=bore_d,h=bore_l,$fn=30); 109 cylinder(d=bore_d,h=bore_l,$fn=30);
108 translate([-bore_d/2-1,bore_dd-bore_d/2,-1]) 110 translate([-bore_d/2-1,bore_dd-bore_d/2,-1])
109 cube([bore_d+2,bore_d/2,bore_l+2]); 111 cube([bore_d+2,bore_d/2,bore_l+2]);
110 } 112 }
111 translate([0,0,pulley_elevation]) { 113 translate([0,0,pulley_elevation]) {
112 cylinder(d=pulley_d,h=pulley_h,$fn=30); 114 cylinder(d=pulley_d,h=pulley_h,$fn=30);
113 translate([0,0,teeth_elevation]) { 115 translate([0,0,teeth_elevation]) {
114 place_idler() { 116 place_idler() {
115 cylinder(d=idler_d,h=idler_h,center=true,$fn=30); 117 cylinder(d=idler_d,h=idler_h,center=true,$fn=30);
116 cylinder(d=idler_id,h=lever_thickness+2,center=true,$fn=30); 118 cylinder(d=idler_screw_d,h=lever_thickness+2,center=true,$fn=30);
117 }//place idler 119 }//place idler
118 // filament path 120 // filament path
119 rotate([0,0,45]) translate([(pulley_d-filament_path_d)/2,0,0]) { 121 rotate([0,0,45]) translate([(pulley_d-filament_path_d)/2,0,0]) {
120 rotate([90,0,0]) cylinder(d=filament_d,h=gearbox_d*2,center=true,$fn=15); 122 rotate([90,0,0]) cylinder(d=filament_d,h=gearbox_d*2,center=true,$fn=15);
121 rotate([-90,0,0]) 123 rotate([-90,0,0])
122 translate([0,0,mount_d/sqrt(2)/2+mount_screw_d]) 124 translate([0,0,mount_d/sqrt(2)/2+mount_screw_d])
123 pushfit(pf); 125 pushfit(pf);
124 } 126 }
125 }//translate teeth 127 }//translate teeth
126 }//translate pulley 128 }//translate pulley
127 }//translate protrusion 129 }//translate protrusion
128 }//vitamins 130 }//vitamins
129 131
130 module lever() { 132 module lever() {
131 translate([0,0,protrusion_h+pulley_elevation+teeth_elevation]) { 133 translate([0,0,protrusion_h+pulley_elevation+teeth_elevation]) {
132 difference() { 134 difference() {
133 union() { 135 union() {
134 hull() { 136 hull() {
135 place_idler() 137 place_idler()
136 cylinder(d=lsd,h=lever_thickness,center=true,$fn=60); 138 cylinder(d=lsd,h=lever_thickness,center=true,$fn=60);
137 translate([mount_d/2,0,0]) 139 translate([mount_d/2,0,0])
138 cylinder(d=lsd,h=lever_thickness,center=true,$fn=60); 140 cylinder(d=lsd,h=lever_thickness,center=true,$fn=60);
139 }//hull 141 }//hull
140 hull() { 142 hull() {
141 translate([mount_d/2,0,0]) 143 translate([mount_d/2,0,0])
142 cylinder(d=lsd,h=lever_thickness,center=true,$fn=60); 144 cylinder(d=lsd,h=lever_thickness,center=true,$fn=60);
143 translate([mount_d/2,-longwing,0]) rotate([0,90,0]) 145 translate([mount_d/2,-longwing,0]) rotate([0,90,0])
144 cylinder(d=lever_thickness,h=lsd,center=true,$fn=60); 146 cylinder(d=lever_thickness,h=lsd,center=true,$fn=60);
145 }//hull 147 }//hull
146 }//union 148 }//union
147 149
148 // filament path 150 // filament path
149 place_idler() translate([-(idler_d+filament_path_d)/2,0,0]) rotate([90,0,0]) { 151 place_idler() translate([-(idler_d+filament_path_d)/2,0,0]) rotate([90,0,0]) {
150 cylinder(d=filament_path_d,h=3*gearbox_d,center=true,$fn=30); 152 cylinder(d=filament_path_d,h=3*gearbox_d,center=true,$fn=30);
151 translate([0,-filament_path_d/2/sqrt(2),0]) rotate([0,0,45]) 153 translate([0,-filament_path_d/2/sqrt(2),0]) rotate([0,0,45])
152 cube(size=[filament_path_d/2,filament_path_d/2,3*gearbox_d],center=true); 154 cube(size=[filament_path_d/2,filament_path_d/2,3*gearbox_d],center=true);
153 } 155 }
154 156
155 // idler space and mounting hole 157 // idler space and mounting hole
156 place_idler() { 158 place_idler() {
157 difference() { 159 difference() {
158 cylinder(d=idler_d+idler_clearance*2,h=idler_h+idler_v_tolerance,center=true,$fn=60); 160 cylinder(d=idler_d+idler_clearance*2,h=idler_h+idler_v_tolerance,center=true,$fn=60);
159 if(supports) for(y=[-lsd/2+extrusion_width:(lsd-2*extrusion_width)/3:lsd/2-extrusion_width]) 161 if(supports) for(y=[-lsd/2+extrusion_width:(lsd-2*extrusion_width)/3:lsd/2-extrusion_width])
160 translate([-lsd/2-1,y-extrusion_width/2,-idler_h/2-idler_v_tolerance/2-1]) 162 translate([-lsd/2-1,y-extrusion_width/2,-idler_h/2-idler_v_tolerance/2-1])
161 cube(size=[lsd+2,extrusion_width,idler_h+idler_v_tolerance+2]); 163 cube(size=[lsd+2,extrusion_width,idler_h+idler_v_tolerance+2]);
162 } 164 }
163 cylinder(d=mount_screw_d+mount_screw_d_tolerance,h=lever_thickness+2,center=true,$fn=30); 165 cylinder(d=idler_screw_d,h=lever_thickness+2,center=true,$fn=30);
164 translate([0,0,lever_thickness/2-mount_screwhead_h]) 166 translate([0,0,lever_thickness/2-idler_screwhead_h])
165 cylinder(d=mount_screwhead_d,h=mount_screwhead_h+1,$fn=fnd*mount_screwhead_d); 167 cylinder(d=idler_screwhead_d,h=idler_screwhead_h+1,$fn=fnd*idler_screwhead_d);
166 } 168 }
167 // mounting screw hole 169 // mounting screw hole
168 translate([mount_d/2,0,0]) 170 translate([mount_d/2,0,0])
169 cylinder(d=mount_screw_d+mount_screw_d_tolerance,h=lever_thickness+2,center=true,$fn=fnd*mount_screw_d); 171 cylinder(d=mount_screw_d+mount_screw_d_tolerance,h=lever_thickness+2,center=true,$fn=fnd*mount_screw_d);
170 172
171 // lever end 173 // lever end
172 translate([mount_d/2,0,0]) rotate([0,90,0]) { 174 translate([mount_d/2,0,0]) rotate([0,90,0]) {
173 translate([0,-longwing,lsd/2]) finger_indent(d=lever_thickness-1,r=15); 175 translate([0,-longwing,lsd/2]) finger_indent(d=lever_thickness-1,r=15);
174 translate([0,-longwing,0]) 176 translate([0,-longwing,0])
175 mirror([0,0,1]) 177 mirror([0,0,1])
176 difference() { 178 difference() {
177 cylinder(d=spring_d+spring_d_clearance,h=lsd,$fn=fnd*(spring_d+spring_d_clearance)); 179 cylinder(d=spring_d+spring_d_clearance,h=lsd,$fn=fnd*(spring_d+spring_d_clearance));
178 sphere(d=spring_d*3/4,$fn=fnd*spring_d*3/4); 180 sphere(d=spring_d*3/4,$fn=fnd*spring_d*3/4);
179 } 181 }
180 }//rotate-translate 182 }//rotate-translate
181 }//difference 183 }//difference
182 // bridging patch 184 // bridging patch
183 if(bridges) place_idler() 185 if(bridges) place_idler()
184 translate([0,0,lever_thickness/2-mount_screwhead_h]) 186 translate([0,0,lever_thickness/2-mount_screwhead_h])
185 mirror([0,0,1]) 187 mirror([0,0,1])
186 cylinder(d=mount_screwhead_d,h=layer_height); 188 cylinder(d=mount_screwhead_d,h=layer_height);
187 }//translate 189 }//translate
188 }//lever module 190 }//lever module
189 191
190 module body() { 192 module body() {
191 difference() { 193 difference() {
192 union() { 194 union() {
193 cylinder(d=gearbox_d,h=body_h,$fn=fnd*gearbox_d); 195 cylinder(d=gearbox_d,h=body_h,$fn=fnd*gearbox_d);
194 // finger and spring support 196 // finger and spring support
195 fsw = gearbox_d-(gearbox_d-mount_d)/2-spring_lc; 197 fsw = gearbox_d-(gearbox_d-mount_d)/2-spring_lc;
196 translate([-gearbox_d/2,0,0]) difference() { 198 translate([-gearbox_d/2,0,0]) difference() {
197 union() { 199 union() {
198 hull() { 200 hull() {
199 translate([0,-longwing,ls_z]) 201 translate([0,-longwing,ls_z])
200 rotate([0,90,0]) 202 rotate([0,90,0])
201 cylinder(d=lever_thickness,h=fsw,$fn=fnd*lever_thickness); 203 cylinder(d=lever_thickness,h=fsw,$fn=fnd*lever_thickness);
202 hh=body_h-ls_z; 204 hh=body_h-ls_z;
203 translate([0,0,ls_z-lever_thickness/2]) 205 translate([0,0,ls_z-lever_thickness/2])
204 mirror([0,1,0]) cube(size=[fsw,longwing-hh+lever_thickness/sqrt(2),hh+lever_thickness/2]); 206 mirror([0,1,0]) cube(size=[fsw,longwing-hh+lever_thickness/sqrt(2),hh+lever_thickness/2]);
205 hhh=ls_z; 207 hhh=ls_z;
206 translate([0,0,0]) 208 translate([0,0,0])
207 mirror([0,1,0]) cube(size=[fsw,longwing-hhh+lever_thickness/sqrt(2),hhh+lever_thickness/2]); 209 mirror([0,1,0]) cube(size=[fsw,longwing-hhh+lever_thickness/sqrt(2),hhh+lever_thickness/2]);
208 } 210 }
209 } 211 }
210 translate([0,-longwing,ls_z]) rotate([0,-90,0]) { 212 translate([0,-longwing,ls_z]) rotate([0,-90,0]) {
211 if(!tensioner) finger_indent(d=lever_thickness-1,r=15); else { 213 if(!tensioner) finger_indent(d=lever_thickness-1,r=15); else {
212 mirror([0,0,1]) { 214 mirror([0,0,1]) {
213 translate([0,0,st_thickshell]) 215 translate([0,0,st_thickshell])
214 hull() for(o=[0,spring_d]) translate([0,-o,0]) 216 hull() for(o=[0,spring_d]) translate([0,-o,0])
215 rotate([0,0,30]) 217 rotate([0,0,30])
216 cylinder(d=st_nut_d+st_nut_d_tolerance,h=st_nut_h+st_nut_h_tolerance,$fn=6); 218 cylinder(d=st_nut_d+st_nut_d_tolerance,h=st_nut_h+st_nut_h_tolerance,$fn=6);
217 translate([0,0,-1]) cylinder(d=st_screw_d,h=fsw+2,$fn=fnd*st_screw_d); 219 translate([0,0,-1]) cylinder(d=st_screw_d,h=fsw+2,$fn=fnd*st_screw_d);
218 bigd = spring_d+spring_d_clearance; 220 bigd = spring_d+spring_d_clearance;
219 hf = (bigd-st_screw_d)/2; 221 hf = (bigd-st_screw_d)/2;
220 translate([0,0,st_thickshell+st_nut_h+st_nut_h_tolerance+st_thinshell-epsilon]) 222 translate([0,0,st_thickshell+st_nut_h+st_nut_h_tolerance+st_thinshell-epsilon])
221 cylinder(d1=st_screw_d,d2=bigd, 223 cylinder(d1=st_screw_d,d2=bigd,
222 h=hf+epsilon, $fn=fnd*bigd); 224 h=hf+epsilon, $fn=fnd*bigd);
223 translate([0,0,st_thickshell+st_nut_h+st_nut_h_tolerance+st_thinshell+hf-epsilon]) 225 translate([0,0,st_thickshell+st_nut_h+st_nut_h_tolerance+st_thinshell+hf-epsilon])
224 cylinder(d=bigd,h=fsw+1,$fn=fnd*bigd); 226 cylinder(d=bigd,h=fsw+1,$fn=fnd*bigd);
225 } 227 }
226 } 228 }
227 } 229 }
228 } // translate 230 } // translate
229 231
230 // pushfit bracket 232 // pushfit bracket
231 translate([0,0,filament_elevation]) 233 translate([0,0,filament_elevation])
232 rotate([0,0,45]) translate([pulley_d/2,0,0]) 234 rotate([0,0,45]) translate([pulley_d/2,0,0])
233 rotate([-90,0,0]) 235 rotate([-90,0,0])
234 translate([0,0,mount_d/sqrt(2)/2+mount_screw_d-gearbox_d/2/*TODO:*/]) 236 translate([0,0,mount_d/sqrt(2)/2+mount_screw_d-gearbox_d/2/*TODO:*/])
235 cylinder(r=min(body_h-filament_elevation,filament_elevation)/sin(60)-epsilon,h=pf_h(pf)+gearbox_d/2/*TODO:*/,$fn=6); 237 cylinder(r=min(body_h-filament_elevation,filament_elevation)/sin(60)-epsilon,h=pf_h(pf)+gearbox_d/2/*TODO:*/,$fn=6);
236 }//union (first child of difference) 238 }//union (first child of difference)
237 239
238 // protrusion 240 // protrusion
239 translate([0,0,-1]) 241 translate([0,0,-1])
240 cylinder(d=protrusion_d+protrusion_tolerance_h,h=protrusion_h+protrusion_tolerance_v+1,$fn=fnd*(protrusion_d+protrusion_tolerance_h)); 242 cylinder(d=protrusion_d+protrusion_tolerance_h,h=protrusion_h+protrusion_tolerance_v+1,$fn=fnd*(protrusion_d+protrusion_tolerance_h));
241 // mount screw holes 243 // mount screw holes
242 for(zr=[0:90:359]) rotate([0,0,zr]) translate([mount_d/2,0,0]) { 244 for(zr=[0:90:359]) rotate([0,0,zr]) translate([mount_d/2,0,0]) {
243 translate([0,0,mount_screw_l-mounthole_depth/2-(bridges?layer_height:-epsilon)]) 245 translate([0,0,mount_screw_l-mounthole_depth/2-(bridges?layer_height:-epsilon)])
244 mirror([0,0,1]) 246 mirror([0,0,1])
245 cylinder(d=mount_screw_d+mount_screw_d_tolerance, 247 cylinder(d=mount_screw_d+mount_screw_d_tolerance,
246 h=mount_screw_l-mounthole_depth/2+1, 248 h=mount_screw_l-mounthole_depth/2+1,
247 $fn=fnd*(mount_screw_d+mount_screw_d_tolerance)); 249 $fn=fnd*(mount_screw_d+mount_screw_d_tolerance));
248 translate([0,0,mount_screw_l-mounthole_depth/2]) 250 translate([0,0,mount_screw_l-mounthole_depth/2])
249 cylinder(d=mount_screwhead_d,h=body_h+1,$fn=fnd*mount_screwhead_d); 251 cylinder(d=mount_screwhead_d,h=body_h+1,$fn=fnd*mount_screwhead_d);
250 }//for 252 }//for
251 // pushfit 253 // pushfit
252 translate([0,0,filament_elevation]) 254 translate([0,0,filament_elevation])
253 rotate([0,0,45]) translate([pulley_d/2,0,0]) 255 rotate([0,0,45]) translate([pulley_d/2,0,0])
254 rotate([-90,0,0]) 256 rotate([-90,0,0])
255 translate([0,0,mount_d/sqrt(2)/2+mount_screw_d+epsilon]) 257 translate([0,0,mount_d/sqrt(2)/2+mount_screw_d+epsilon])
256 rotate([0,0,180]) { 258 rotate([0,0,180]) {
257 pushfit(pf); 259 pushfit(pf);
258 cylinder(d=filament_guide_d,h=gearbox_d,center=true,$fn=fnd*filament_guide_d); 260 cylinder(d=filament_guide_d,h=gearbox_d,center=true,$fn=fnd*filament_guide_d);
259 translate([0,-filament_guide_d/2/sqrt(2),0]) 261 translate([0,-filament_guide_d/2/sqrt(2),0])
260 rotate([0,0,45]) 262 rotate([0,0,45])
261 cube(size=[filament_guide_d/2,filament_guide_d/2,gearbox_d],center=true); 263 cube(size=[filament_guide_d/2,filament_guide_d/2,gearbox_d],center=true);
262 }//rotate translate rotate translate rotate translate 264 }//rotate translate rotate translate rotate translate
263 // pulley 265 // pulley
264 cylinder(d=pulley_d+pulley_clearance,h=body_h+1,$fn=fnd*(pulley_d+pulley_clearance)); 266 cylinder(d=pulley_d+pulley_clearance,h=body_h+1,$fn=fnd*(pulley_d+pulley_clearance));
265 // leverspace 267 // leverspace
266 hull() for(x=[0,gearbox_d]) 268 hull() for(x=[0,gearbox_d])
267 rotate([0,0,45]) 269 rotate([0,0,45])
268 translate([x,0,ls_z-ls_h/2]) 270 translate([x,0,ls_z-ls_h/2])
269 cylinder(d=idler_d+idler_clearance,h=ls_h,$fn=fnd*(idler_d+idler_clearance)); 271 cylinder(d=idler_d+idler_clearance,h=ls_h,$fn=fnd*(idler_d+idler_clearance));
270 272
271 // idler clearance 273 // idler clearance
272 a=cos(45)*(pulley_d+idler_d)/2; 274 a=cos(45)*(pulley_d+idler_d)/2;
273 b=mount_d/2-a; 275 b=mount_d/2-a;
274 x=sqrt(pow(a,2)+pow(b,2)); 276 x=sqrt(pow(a,2)+pow(b,2));
275 translate([mount_d/2,0,ls_z]) 277 translate([mount_d/2,0,ls_z])
276 intersection() { 278 intersection() {
277 r = x+idler_d/2+idler_clearance; 279 r = x+idler_d/2+idler_clearance;
278 cylinder(r=r,h=ls_h,center=true); 280 cylinder(r=r,h=ls_h,center=true);
279 translate([-r-1,0,-ls_h/2-1]) cube(size=[2*r+2,r+1,ls_h+2]); 281 translate([-r-1,0,-ls_h/2-1]) cube(size=[2*r+2,r+1,ls_h+2]);
280 } 282 }
281 283
282 // back side cutout 284 // back side cutout
283 a0 = asin((mount_screwhead_d+2*extrusion_width)/mount_d); 285 a0 = asin((mount_screwhead_d+2*extrusion_width)/mount_d);
284 a1 = atan((longwing-lever_thickness/2)/(gearbox_d/2)); 286 a1 = atan((longwing-lever_thickness/2)/(gearbox_d/2));
285 translate([0,0,ls_z]) hull() { 287 translate([0,0,ls_z]) hull() {
286 rotate([0,0,-180+a0]) 288 rotate([0,0,-180+a0])
287 rotate_extrude(angle=a1-a0) 289 rotate_extrude(angle=a1-a0)
288 translate([0,-ls_h/2]) 290 translate([0,-ls_h/2])
289 square([sqrt(pow(gearbox_d/2,2)+pow(longwing-lever_thickness/2,2))+1, 291 square([sqrt(pow(gearbox_d/2,2)+pow(longwing-lever_thickness/2,2))+1,
290 ls_h]); 292 ls_h]);
291 cylinder(d=bore_d/2/*TODO:recalculate angles based on this, 293 cylinder(d=bore_d/2/*TODO:recalculate angles based on this,
292 too lazy to do that now*/, 294 too lazy to do that now*/,
293 h=ls_h,center=true); 295 h=ls_h,center=true);
294 } 296 }
295 297
296 rotate([0,0,-45]) 298 rotate([0,0,-45])
297 translate([0,0,ls_z-ls_h/2]) 299 translate([0,0,ls_z-ls_h/2])
298 cube(size=[gearbox_d,gearbox_d,lever_thickness+lever_v_clearance]); 300 cube(size=[gearbox_d,gearbox_d,lever_thickness+lever_v_clearance]);
299 translate([0,0,ls_z-ls_h/2]) { 301 translate([0,0,ls_z-ls_h/2]) {
300 translate([mount_screwhead_d/2,0,0]) 302 translate([mount_screwhead_d/2,0,0])
301 mirror([0,1,0]) 303 mirror([0,1,0])
302 cube(size=[gearbox_d,gearbox_d/2+1,lever_thickness+lever_v_clearance]); 304 cube(size=[gearbox_d,gearbox_d/2+1,lever_thickness+lever_v_clearance]);
303 } 305 }
304 //translate([-mount_d/2,-longwing,filament_elevation]) 306 //translate([-mount_d/2,-longwing,filament_elevation])
305 if(!tensioner) /* XXX: this seems to be bullshit, but it's so old, that it's historical bullshit */ 307 if(!tensioner) /* XXX: this seems to be bullshit, but it's so old, that it's historical bullshit */
306 translate([mount_d/2,-longwing,filament_elevation]) 308 translate([mount_d/2,-longwing,filament_elevation])
307 rotate([0,-90,0]) difference() { 309 rotate([0,-90,0]) difference() {
308 cylinder(d=spring_d+spring_d_clearance,h=spring_lc+spring_dl,$fn=fnd*(spring_d+spring_d_clearance)); 310 cylinder(d=spring_d+spring_d_clearance,h=spring_lc+spring_dl,$fn=fnd*(spring_d+spring_d_clearance));
309 translate([0,0,spring_lc+spring_dl]) sphere(d=spring_d*3/4,$fn=fnd*spring_d*3/4); 311 translate([0,0,spring_lc+spring_dl]) sphere(d=spring_d*3/4,$fn=fnd*spring_d*3/4);
310 } 312 }
311 313
312 }//difference 314 }//difference
313 315
314 if(supports) intersection() { 316 if(supports) intersection() {
315 difference() { 317 difference() {
316 translate([0,0,ls_z-ls_h/2-epsilon]) 318 translate([0,0,ls_z-ls_h/2-epsilon])
317 cylinder(d=gearbox_d,h=ls_h+2*epsilon,$fn=fnd*gearbox_d); 319 cylinder(d=gearbox_d,h=ls_h+2*epsilon,$fn=fnd*gearbox_d);
318 cylinder(d=pulley_d+pulley_clearance,h=body_h+1,$fn=fnd*(pulley_d+pulley_clearance)); 320 cylinder(d=pulley_d+pulley_clearance,h=body_h+1,$fn=fnd*(pulley_d+pulley_clearance));
319 } 321 }
320 // supports 322 // supports
321 // TODO: hardcoded stuff below… 323 // TODO: hardcoded stuff below…
322 if(false) { // parallel 324 if(false) { // parallel
323 for(y=[-gearbox_d:4:gearbox_d]) 325 for(y=[-gearbox_d:4:gearbox_d])
324 translate([0,y-extrusion_width/2,0]) 326 translate([0,y-extrusion_width/2,0])
325 cube(size=[gearbox_d,extrusion_width,body_h]); 327 cube(size=[gearbox_d,extrusion_width,body_h]);
326 }else{ // radial 328 }else{ // radial
327 for(zr=[-65:(65+50)/7:50]) 329 for(zr=[-65:(65+50)/7:50])
328 rotate([0,0,zr]) translate([0,-extrusion_width/2,0]) 330 rotate([0,0,zr]) translate([0,-extrusion_width/2,0])
329 cube(size=[gearbox_d,extrusion_width,body_h]); 331 cube(size=[gearbox_d,extrusion_width,body_h]);
330 } 332 }
331 } 333 }
332 334
333 }//body module 335 }//body module
334 336
335 module springpad() { 337 module springpad() {
336 smalld=st_screw_d+2*extrusion_width; 338 smalld=st_screw_d+2*extrusion_width;
337 bigd = spring_d+spring_d_clearance/2; 339 bigd = spring_d+spring_d_clearance/2;
338 hf = (bigd-smalld)/2; 340 hf = (bigd-smalld)/2;
339 translate([-gearbox_d/2+st_thickshell+st_nut_h+st_nut_h_tolerance+st_thinshell+1,-longwing,filament_elevation]) 341 translate([-gearbox_d/2+st_thickshell+st_nut_h+st_nut_h_tolerance+st_thinshell+1,-longwing,filament_elevation])
340 rotate([0,90,0]) difference() { 342 rotate([0,90,0]) difference() {
341 union() { 343 union() {
342 cylinder(d1=smalld,d2=bigd,h=hf,$fn=fnd*bigd); 344 cylinder(d1=smalld,d2=bigd,h=hf,$fn=fnd*bigd);
343 translate([0,0,hf-epsilon]) 345 translate([0,0,hf-epsilon])
344 cylinder(d=bigd,h=hf*2,$fn=fnd*bigd); 346 cylinder(d=bigd,h=hf*2,$fn=fnd*bigd);
345 translate([0,0,3*hf]) 347 translate([0,0,3*hf])
346 sphere(d=spring_d*3/4,$fn=fnd*spring_d*3/4); 348 sphere(d=spring_d*3/4,$fn=fnd*spring_d*3/4);
347 } 349 }
348 translate([0,0,-epsilon]) 350 translate([0,0,-epsilon])
349 cylinder(d=st_screw_d,h=2*hf+epsilon,$fn=fnd*st_screw_d); 351 cylinder(d=st_screw_d,h=2*hf+epsilon,$fn=fnd*st_screw_d);
350 } 352 }
351 } 353 }
352 354
353 module knob() { 355 module knob() {
354 ch = knob_indent_d/2; 356 ch = knob_indent_d/2;
355 translate([0,0,body_h+epsilon]) { 357 translate([0,0,body_h+epsilon]) {
356 mirror([0,0,1]) translate([0,0,-epsilon]) { 358 mirror([0,0,1]) translate([0,0,-epsilon]) {
357 difference() { 359 difference() {
358 cylinder(d=pulley_d,h=knob_bore_l,$fn=fnd*pulley_d); 360 cylinder(d=pulley_d,h=knob_bore_l,$fn=fnd*pulley_d);
359 translate([0,0,-1]) difference() { 361 translate([0,0,-1]) difference() {
360 cylinder(d=bore_d+knob_bore_d_tolerance,h=knob_bore_l+2); 362 cylinder(d=bore_d+knob_bore_d_tolerance,h=knob_bore_l+2);
361 translate([-bore_d/2-1,bore_dd-bore_d/2+knob_bore_d_tolerance/2,-1]) 363 translate([-bore_d/2-1,bore_dd-bore_d/2+knob_bore_d_tolerance/2,-1])
362 cube([bore_d+2,bore_d/2,knob_bore_l+4]); 364 cube([bore_d+2,bore_d/2,knob_bore_l+4]);
363 } 365 }
364 } 366 }
365 } 367 }
366 difference() { 368 difference() {
367 union() { 369 union() {
368 cylinder(d1=gearbox_d-2*ch,d2=gearbox_d,h=ch+epsilon,$fn=fnd*gearbox_d); 370 cylinder(d1=gearbox_d-2*ch,d2=gearbox_d,h=ch+epsilon,$fn=fnd*gearbox_d);
369 translate([0,0,ch]) 371 translate([0,0,ch])
370 cylinder(d=gearbox_d,h=knob_h-2*ch+epsilon,$fn=fnd*gearbox_d); 372 cylinder(d=gearbox_d,h=knob_h-2*ch+epsilon,$fn=fnd*gearbox_d);
371 translate([0,0,knob_h-ch]) 373 translate([0,0,knob_h-ch])
372 cylinder(d1=gearbox_d,d2=gearbox_d-2*ch,h=ch,$fn=fnd*gearbox_d); 374 cylinder(d1=gearbox_d,d2=gearbox_d-2*ch,h=ch,$fn=fnd*gearbox_d);
373 } 375 }
374 for(a=[0:360/knob_indents:359]) rotate([0,0,a]) 376 for(a=[0:360/knob_indents:359]) rotate([0,0,a])
375 translate([0,gearbox_d/2,-1]) 377 translate([0,gearbox_d/2,-1])
376 cylinder(d=knob_indent_d,h=knob_h+2,$fn=fnd*knob_indent_d); 378 cylinder(d=knob_indent_d,h=knob_h+2,$fn=fnd*knob_indent_d);
377 } 379 }
378 } 380 }
379 }//knob module 381 }//knob module
380 382
381 module debug() { 383 module debug() {
382 difference() { 384 difference() {
383 children(); 385 children();
384 if(debug) { 386 if(debug) {
385 // spring tensioner debug cutout 387 // spring tensioner debug cutout
386 if(tensioner) // TODO: collaps copypasted transformations 388 if(tensioner) // TODO: collaps copypasted transformations
387 translate([-gearbox_d/2,0,0]) 389 translate([-gearbox_d/2,0,0])
388 translate([0,-longwing,ls_z]) rotate([0,-90,0]) 390 translate([0,-longwing,ls_z]) rotate([0,-90,0])
389 translate([0,-lever_thickness/2-1,-gearbox_d]) 391 translate([0,-lever_thickness/2-1,-gearbox_d])
390 cube(size=[body_h/2+1,lever_thickness/2+1,gearbox_d+2]); 392 cube(size=[body_h/2+1,lever_thickness/2+1,gearbox_d+2]);
391 // lever axis debug cutout 393 // lever axis debug cutout
392 translate([mount_d/2,0,-1]) 394 translate([mount_d/2,0,-1])
393 rotate([0,0,-45]) 395 rotate([0,0,-45])
394 cube(size=[gearbox_d-mount_d,gearbox_d-mount_d,body_h+knob_h+2]); 396 cube(size=[gearbox_d-mount_d,gearbox_d-mount_d,body_h+knob_h+2]);
395 // idler debug cutout 397 // idler debug cutout
396 translate([0,0,ls_z]) 398 translate([0,0,ls_z])
397 place_idler() 399 place_idler()
398 rotate([0,0,-45]) 400 rotate([0,0,-45])
399 translate([0,0,-lever_thickness/2-epsilon]) 401 translate([0,0,-lever_thickness/2-epsilon])
400 cube(size=[(idler_d+idler_clearance)/2,(idler_d+idler_clearance)/2, 402 cube(size=[(idler_d+idler_clearance)/2,(idler_d+idler_clearance)/2,
401 lever_thickness+2*epsilon]); 403 lever_thickness+2*epsilon]);
402 }//if debug 404 }//if debug
403 }//difference 405 }//difference
404 } 406 }
405 407
406 debug() 408 debug()
407 mirrorleft() 409 mirrorleft()
408 if(what=="lever") color("green",0.7) lever(); 410 if(what=="lever") color("green",0.7) lever();
409 else if(what=="body") color("yellow",0.7) body(); 411 else if(what=="body") color("yellow",0.7) body();
410 else if(what=="knob") color("red",0.7) knob(); 412 else if(what=="knob") color("red",0.7) knob();
411 else if(what=="springpad") color("blue",0.7) springpad(); 413 else if(what=="springpad") color("blue",0.7) springpad();
412 else if(what=="both") { 414 else if(what=="both") {
413 color("green",0.7) lever(); 415 color("green",0.7) lever();
414 color("yellow",0.7) body(); 416 color("yellow",0.7) body();
415 }else{ 417 }else{
416 color("green",0.7) lever(); 418 color("green",0.7) lever();
417 color("yellow",0.7) body(); 419 color("yellow",0.7) body();
418 color("red",0.7) knob(); 420 color("red",0.7) knob();
419 color("blue",0.7) springpad(); 421 color("blue",0.7) springpad();
420 } 422 }
421} 423}
422 424
423the_extruder(what="both",left=false); 425the_extruder(what="both",left=false);