SHARE
TWEET

Untitled

a guest Mar 4th, 2015 257 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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();
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top