Advertisement
Guest User

Untitled

a guest
Mar 4th, 2015
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.62 KB | None | 0 0
  1. // Compact direct drive bowden extruder for 1.75mm filament
  2. // Licence: CC BY-SA 3.0, http://creativecommons.org/licenses/by-sa/3.0/
  3. // Author: Dominik Scholz <schlotzz@schlotzz.com> and contributors
  4. // Using MK8 style hobbed pulley 13x8mm from: https://www.reprapsource.com/en/show/6889
  5. // visit: http://www.schlotzz.com
  6. // changed: 2014-04-04, added idler slot and funnel on bowden side for easier filament insertion
  7. // changed: 2014-04-27, placed base and idler "printer ready"
  8. // changed: 2014-09-22, fixed non-manifold vertexes between base and filament tunnel
  9. // changed: 2014-11-13, added bowden inlet
  10.  
  11.  
  12. /*
  13. design goals:
  14. - using 13x8mm hobbed pulley
  15. - filament diameter parametric (1.75mm or 3mm)
  16. - using 608zz bearing
  17. - using M5 push fit connector
  18. */
  19.  
  20. // avoid openscad artefacts in preview
  21. epsilon = 0.01;
  22.  
  23. // increase this if your slicer or printer make holes too tight
  24. extra_radius = 0.1;
  25.  
  26. // major diameter of metric 3mm thread
  27. m3_major = 2.85;
  28. m3_radius = m3_major / 2 + extra_radius;
  29. m3_wide_radius = m3_major / 2 + extra_radius + 0.2;
  30.  
  31. // diameter of metric 3mm hexnut screw head
  32. m3_head_radius = 3 + extra_radius;
  33.  
  34. // drive gear
  35. drive_gear_outer_radius = 12.00 / 2;
  36. drive_gear_hobbed_radius = 11 / 2;
  37. drive_gear_hobbed_offset = 3.2;
  38. drive_gear_length = 11;
  39. drive_gear_tooth_depth = .5;
  40.  
  41. // base width for frame plate
  42. base_width = 15;
  43. base_length = 60;
  44. base_height = 8;
  45.  
  46. // nema 17 dimensions
  47. nema17_width = 42.3;
  48. nema17_hole_offsets = [
  49. [-15.5, -15.5, 1.5],
  50. [-15.5, 15.5, 1.5],
  51. [ 15.5, -15.5, 1.5],
  52. [ 15.5, 15.5, 1.5 + base_height]
  53. ];
  54.  
  55. // inlet type
  56. inlet_type = 0; // 0:normal, 1:push-fit
  57.  
  58.  
  59. //// filament
  60. filament_diameter = 1.75; // 1.75, 3.00
  61. filament_offset = [
  62. drive_gear_hobbed_radius + filament_diameter / 2 - drive_gear_tooth_depth,
  63. 0,
  64. base_height + drive_gear_length - drive_gear_hobbed_offset - 2.5
  65. ];
  66.  
  67.  
  68.  
  69.  
  70.  
  71. // helper function to render a rounded slot
  72. module rounded_slot(r = 1, h = 1, l = 0, center = false)
  73. {
  74. hull()
  75. {
  76. translate([0, -l / 2, 0])
  77. cylinder(r = r, h = h, center = center);
  78. translate([0, l / 2, 0])
  79. cylinder(r = r, h = h, center = center);
  80. }
  81. }
  82.  
  83.  
  84.  
  85. // mounting plate for nema 17
  86. module nema17_mount()
  87. {
  88. // settings
  89. width = nema17_width;
  90. height = base_height;
  91. edge_radius = 27;
  92. axle_radius = drive_gear_outer_radius + 1 + extra_radius;
  93.  
  94. difference()
  95. {
  96. // base plate
  97. translate([0, 0, height / 2])
  98. intersection()
  99. {
  100. cube([width, width, height], center = true);
  101. cylinder(r = edge_radius, h = height + 2 * epsilon, $fn = 128, center = true);
  102. }
  103.  
  104. // center hole
  105. translate([0, 0, -epsilon] )
  106. cylinder(r = 11.25 + extra_radius, h = base_height + 2 * epsilon, $fn = 32);
  107.  
  108. // axle hole
  109. translate([0, 0, -epsilon])
  110. cylinder(r = axle_radius, h = height + 2 * epsilon, $fn = 32);
  111.  
  112. // mounting holes
  113. for (a = nema17_hole_offsets)
  114. translate(a)
  115. {
  116. cylinder(r = m3_radius, h = height * 4, center = true, $fn = 16);
  117. cylinder(r = m3_head_radius, h = height + epsilon, $fn = 16);
  118. }
  119. }
  120. }
  121.  
  122.  
  123. // plate for mounting extruder on frame
  124. module frame_mount()
  125. {
  126. // settings
  127. width = base_width;
  128. length = base_length;
  129. height = base_height;
  130. hole_offsets = [
  131. [0, length / 2 - 6, 2.5],
  132. [0, -length / 2 + 6, 2.5]
  133. ];
  134. corner_radius = 3;
  135.  
  136. difference()
  137. {
  138. // base plate
  139. intersection()
  140. {
  141. union()
  142. {
  143. translate([0, 0, height / 2])
  144. cube([width, length, height], center = true);
  145. translate([base_width / 2 - base_height / 2 - corner_radius / 2, 0, height + corner_radius / 2])
  146. cube([base_height + corner_radius, nema17_width, corner_radius], center = true);
  147. translate([base_width / 2 - base_height / 2, 0, 6])
  148. cube([base_height, nema17_width, 12], center = true);
  149. }
  150.  
  151. cylinder(r = base_length / 2, h = 100, $fn = 32);
  152. }
  153.  
  154. // rounded corner
  155. translate([base_width / 2 - base_height - corner_radius, 0, height + corner_radius])
  156. rotate([90, 0, 0])
  157. cylinder(r = corner_radius, h = nema17_width + 2 * epsilon, center = true, $fn = 32);
  158.  
  159. // mounting holes
  160. for (a = hole_offsets)
  161. translate(a)
  162. {
  163. cylinder(r = m3_wide_radius, h = height * 2 + 2 * epsilon, center = true, $fn = 16);
  164. cylinder(r = m3_head_radius, h = height + epsilon, $fn = 16);
  165. }
  166.  
  167. // nema17 mounting holes
  168. translate([base_width / 2, 0, nema17_width / 2 + base_height])
  169. rotate([0, -90, 0])
  170. for (a = nema17_hole_offsets)
  171. translate(a)
  172. {
  173. cylinder(r = m3_radius, h = height * 4, center = true, $fn = 16);
  174. cylinder(r = m3_head_radius, h = height + epsilon, $fn = 16);
  175. }
  176. }
  177. }
  178.  
  179.  
  180. // inlet for filament
  181. module filament_tunnel()
  182. {
  183.  
  184. width = 12;
  185. length = nema17_width;
  186. height = filament_offset[2] - base_height + 6;
  187.  
  188. translate([0, 0, height / 2])
  189. {
  190. difference()
  191. {
  192. union()
  193. {
  194. // base
  195. translate([-height / 2, 0, 0])
  196. cube([width + height, length, height], center = true);
  197.  
  198. // inlet strengthening
  199. translate([0, -length / 2, -height / 2 + filament_offset[2] - base_height])
  200. rotate([90, 0, 0])
  201. cylinder(r = 3.5, h = 1, center = true, $fn = 32);
  202.  
  203. // outlet strengthening
  204. translate([0, length / 2, -height / 2 + filament_offset[2] - base_height])
  205. rotate([90, 0, 0])
  206. cylinder(r = 3.5, h = 1, center = true, $fn = 32);
  207.  
  208. // idler tensioner
  209. intersection()
  210. {
  211. translate([5, -length / 2 + 8, 0])
  212. cube([width, 16, height], center = true);
  213. translate([-17.8, -20 ,0])
  214. cylinder(r = 27, h = height + 2 * epsilon, center = true, $fn = 32);
  215. }
  216.  
  217. }
  218.  
  219. // middle cutout for drive gear
  220. translate([-filament_offset[0], 0, 0])
  221. cylinder(r = 11.25 + extra_radius, h = height + 2 * epsilon, center = true, $fn = 32);
  222.  
  223. // middle cutout for idler
  224. translate([11 + filament_diameter / 2, 0, 0])
  225. cylinder(r = 12.5, h = height + 2 * epsilon, center = true, $fn = 32);
  226.  
  227. // idler mounting hexnut
  228. translate([filament_diameter + 1, -nema17_width / 2 + 4, .25])
  229. rotate([0, 90, 0])
  230. cylinder(r = m3_radius, h = 50, center = false, $fn = 32);
  231. translate([filament_diameter + 3, -nema17_width / 2 + 4, 5])
  232. cube([2.5 + 3 * extra_radius, 5.5 + 2.5 * extra_radius, 10], center = true);
  233. translate([filament_diameter + 3, -nema17_width / 2 + 4, 0])
  234. rotate([0, 90, 0])
  235. cylinder(r = 3.15 + 2.5 * extra_radius, h = 2.5 + 3 * extra_radius, center = true, $fn = 6);
  236.  
  237. // rounded corner
  238. translate([-height - width / 2, 0, height / 2])
  239. rotate([90, 0, 0])
  240. cylinder(r = height, h = length + 2 * epsilon, center = true, $fn = 32);
  241.  
  242. // funnnel inlet
  243. if (inlet_type == 0)
  244. {
  245. // normal type
  246. translate([0, -length / 2 + 1 - epsilon, -height / 2 + filament_offset[2] - base_height])
  247. rotate([90, 0, 0])
  248. cylinder(r1 = filament_diameter / 2, r2 = filament_diameter / 2 + 1 + epsilon / 1.554,
  249. h = 3 + epsilon, center = true, $fn = 16);
  250. }
  251. else
  252. {
  253. // inlet push fit connector m5 hole
  254. translate([0, -length / 2 - 1 + 2.5 + epsilon, -height / 2 + filament_offset[2] - base_height])
  255. rotate([90, 0, 0])
  256. cylinder(r = 2.25, h = 5 + 2 * epsilon, center = true, $fn = 16);
  257.  
  258. // funnel inlet outside
  259. translate([0, -length / 2 + 4, -height / 2 + filament_offset[2] - base_height])
  260. rotate([90, 0, 0])
  261. cylinder(r1 = filament_diameter / 2, r2 = filament_diameter / 2 + 1,
  262. h = 2, center = true, $fn = 16);
  263.  
  264. }
  265.  
  266. // funnnel outlet inside
  267. translate([0, 12, -height / 2 + filament_offset[2] - base_height])
  268. rotate([90, 0, 0])
  269. cylinder(r1 = filament_diameter / 2, r2 = filament_diameter / 2 + 1.25,
  270. h = 8, center = true, $fn = 16);
  271.  
  272. // outlet push fit connector m5 hole
  273. translate([0, length / 2 + 1 - 2.5 + epsilon, -height / 2 + filament_offset[2] - base_height])
  274. rotate([90, 0, 0])
  275. cylinder(r = 5, h = 15 + 2 * epsilon, center = true, $fn = 16);
  276.  
  277. // funnel outlet outside
  278. translate([0, length / 2 - 4, -height / 2 + filament_offset[2] - base_height])
  279. rotate([90, 0, 0])
  280. cylinder(r1 = filament_diameter / 2 + 1, r2 = filament_diameter / 2,
  281. h = 2, center = true, $fn = 16);
  282.  
  283. // filament path
  284. translate([0, 0, -height / 2 + filament_offset[2] - base_height])
  285. rotate([90, 0, 0])
  286. cylinder(r = filament_diameter / 2 + 2 * extra_radius,
  287. h = length + 2 * epsilon, center = true, $fn = 16);
  288.  
  289. }
  290. }
  291.  
  292. }
  293.  
  294.  
  295. // render drive gear
  296. module drive_gear()
  297. {
  298. r = drive_gear_outer_radius - drive_gear_hobbed_radius;
  299. rotate_extrude(convexity = 10)
  300. {
  301. difference()
  302. {
  303. square([drive_gear_outer_radius, drive_gear_length]);
  304. translate([drive_gear_hobbed_radius + r, drive_gear_length - drive_gear_hobbed_offset])
  305. circle(r = r, $fn = 16);
  306. }
  307. }
  308. }
  309.  
  310.  
  311. // render 608zz
  312. module bearing_608zz()
  313. {
  314. difference()
  315. {
  316. cylinder(r = 11, h = 7, center = true, $fn = 32);
  317. cylinder(r = 4, h = 7 + 2 * epsilon, center = true, $fn = 16);
  318. }
  319. }
  320.  
  321.  
  322. // render 624zz
  323. module bearing_624zz()
  324. {
  325. difference()
  326. {
  327. cylinder(r = 6.5, h = 5, center = true, $fn = 32);
  328. cylinder(r = 2, h = 5 + 2 * epsilon, center = true, $fn = 16);
  329. }
  330. }
  331.  
  332.  
  333. // idler with 608 bearing
  334. module idler_608()
  335. {
  336. width = nema17_width;
  337. height = filament_offset[2] - base_height + 4;
  338. edge_radius = 27;
  339. hole_offsets = [-width / 2 + 4, width / 2 - 4];
  340. bearing_bottom = filament_offset[2] / 2 - base_height / 2 - 6;
  341.  
  342. // base plate
  343. translate([0, 0, height / 2])
  344. difference()
  345. {
  346. union()
  347. {
  348. // base
  349. intersection()
  350. {
  351. cube([width, width, height], center = true);
  352. cylinder(r = edge_radius, h = height + 2 * epsilon, $fn = 128, center = true);
  353. translate([17, 0, 0])
  354. cube([15, nema17_width + epsilon, height], center = true);
  355. }
  356.  
  357. // spring base enforcement
  358. translate([17.15, -nema17_width / 2 + 4, .25])
  359. rotate([0, 90, 0])
  360. cylinder(r = 3.75, h = 4, $fn = 32);
  361. }
  362.  
  363. translate([drive_gear_hobbed_radius + 11 - 0.25 + filament_diameter, 0, bearing_bottom])
  364. difference()
  365. {
  366. // bearing spare out
  367. cylinder(r = 11.5, h = 60, $fn = 32);
  368.  
  369. // bearing mount
  370. cylinder(r = 4 - extra_radius, h = 7.5, $fn = 32);
  371.  
  372. // bearing mount base
  373. cylinder(r = 4 - extra_radius + 1, h = 0.5, $fn = 32);
  374. }
  375.  
  376. // bearing mount hole
  377. translate([drive_gear_hobbed_radius + 11 - 0.25 + filament_diameter, 0, 0])
  378. cylinder(r = 2.5, h = 50, center = true, $fn = 32);
  379.  
  380. // tensioner bolt slot
  381. translate([17.15, -nema17_width / 2 + 4, .25])
  382. rotate([0, 90, 0])
  383. rounded_slot(r = m3_wide_radius, h = 50, l = 1.5, center = true, $fn = 32);
  384.  
  385. translate([-12, -20 ,0])
  386. cylinder(r = 27, h = height + 2 * epsilon, center = true, $fn = 32);
  387.  
  388. // mounting hole
  389. translate([15.5, 15.5, 0])
  390. {
  391. cylinder(r = m3_wide_radius, h = height * 4, center = true, $fn = 16);
  392. cylinder(r = m3_head_radius, h = height + epsilon, $fn = 16);
  393. }
  394.  
  395. }
  396.  
  397. translate([drive_gear_hobbed_radius + 11 - 0.25 + filament_diameter, 0, filament_offset[2] - base_height])
  398. %bearing_608zz();
  399. }
  400.  
  401.  
  402.  
  403. module compact_extruder()
  404. {
  405. // motor plate
  406. nema17_mount();
  407.  
  408. // mounting plate
  409. translate([-nema17_width / 2 - base_height, 0, base_width / 2])
  410. rotate([0, 90, 0])
  411. frame_mount();
  412.  
  413. // filament inlet/outlet
  414. translate([filament_offset[0], 0, base_height - epsilon])
  415. filament_tunnel();
  416.  
  417. // drive gear
  418. color("grey")
  419. %translate([0, 0, base_height - 2.5])
  420. drive_gear();
  421.  
  422. // filament
  423. color("red")
  424. %translate(filament_offset - [0, 0, epsilon])
  425. rotate([90, 0, 0])
  426. cylinder(r = filament_diameter / 2, h = 100, $fn = 16, center = true);
  427.  
  428.  
  429. }
  430.  
  431. compact_extruder();
  432. translate([20, 0, 0])
  433. idler_608();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement