My self-made 3D-printable designs, mainly in OpenSCAD
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Fan Holder.scad 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. /*
  2. * Based on "Y-Axis Bracket" by "daveth26":
  3. * http://www.thingiverse.com/thing:1104535
  4. *
  5. * Recreated and modified by:
  6. * Thomas Buck <xythobuz@xythobuz.de> in March 2016
  7. *
  8. * Licensed under the Creative Commons - Attribution license.
  9. *
  10. * This part has been modified to use a 25mm fan instead of
  11. * a 30mm fan. This can be set in the parameters, but beware
  12. * of any problems, I have not tested any other sizes.
  13. *
  14. * The Fabrikator Mini V1.5 include a new bracket that prevents
  15. * the old design from sliding fully onto the stepper motor.
  16. */
  17. // -----------------------------------------------------------
  18. height = 28.5; // [14:26]
  19. // default for 25mm fan: 23
  20. fan_hole_diameter = 23; // [26]
  21. // default for 25mm fan: 20
  22. fan_screw_distance = 20; // [22]
  23. // default for 25mm fan: 3
  24. fan_screw_diameter = 3; // [1:5]
  25. fan_hole_angled = "true"; // [true, false]
  26. arm_inward_angle_left = 4; // [0:5]
  27. // -----------------------------------------------------------
  28. /* [Hidden] */
  29. right_wall_size_modifier = 1.75; // [0:2]
  30. bottom_arm_height = 2;
  31. bottom_arm_gap = 8;
  32. back_support_depth = 2;
  33. mid_left_cutout = 9;
  34. wall_size = 4;
  35. fan_angle = 10;
  36. nub_size = 1;
  37. nub_depth = 2;
  38. motor_width = 28.3;
  39. motor_depth = 27;
  40. cut_out_depth = 10;
  41. cut_out_height = 5.5;
  42. $fn = 25;
  43. fan_screw_pos = fan_screw_distance / 2;
  44. fan_screw_neg = -fan_screw_pos;
  45. fabrikator_mini_v15_height = 20;
  46. mid_left_cutout_height = 6;
  47. base_height = 5;
  48. arm_inward_angle_right = 0;
  49. top_fan_extra_layer = 0.8;
  50. heat_sink_cutout = 24.4;
  51. // -----------------------------------------------------------
  52. module ellipse(w, l, d) {
  53. cube([d, l - w, w]);
  54. translate([0, 0, w / 2])
  55. rotate([0, 90, 0])
  56. cylinder(d = w, h = d);
  57. translate([0, l - w, w / 2])
  58. rotate([0, 90, 0])
  59. cylinder(d = w, h = d);
  60. }
  61. module left_arm() {
  62. // bottom left arm
  63. translate([0, 0, bottom_arm_gap])
  64. cube([motor_depth + nub_depth, wall_size, bottom_arm_height]);
  65. // bottom left nub
  66. translate([0, 0, bottom_arm_gap])
  67. cube([nub_depth, wall_size + nub_size, bottom_arm_height]);
  68. if (height > fabrikator_mini_v15_height) {
  69. // top left arm
  70. translate([0, 0, fabrikator_mini_v15_height + 1])
  71. cube([motor_depth + nub_depth, wall_size, height - fabrikator_mini_v15_height - 1]);
  72. // top left nub
  73. translate([0, 0, fabrikator_mini_v15_height + 1])
  74. cube([nub_depth, wall_size + nub_size, height - fabrikator_mini_v15_height - 1]);
  75. }
  76. // left back support
  77. translate([motor_depth + nub_depth - back_support_depth, 0, 0])
  78. cube([back_support_depth, wall_size, height]);
  79. // mid left support
  80. translate([nub_depth + mid_left_cutout, 0, 10])
  81. cube([motor_depth - back_support_depth - mid_left_cutout, wall_size, height - fabrikator_mini_v15_height + mid_left_cutout_height]);
  82. if (arm_inward_angle_left != 0) {
  83. // connecting piece for angled arm
  84. translate([motor_depth + nub_depth - back_support_depth, 0, 0])
  85. cube([1.5 * back_support_depth, wall_size, height]);
  86. }
  87. }
  88. module right_arm() {
  89. difference() {
  90. union() {
  91. // right wall
  92. translate([0, motor_width + wall_size, 0])
  93. cube([motor_depth + nub_depth, wall_size - right_wall_size_modifier, height]);
  94. // right nub
  95. translate([0, motor_width + wall_size - nub_size, 0])
  96. cube([nub_depth, wall_size + nub_size - right_wall_size_modifier, height]);
  97. }
  98. translate([24 - wall_size, 28, 3])
  99. rotate([0, 0, 90])
  100. ellipse(7, 20, 8);
  101. if (height > 23) {
  102. translate([24 - wall_size, 28, 13.5])
  103. rotate([0, 0, 90])
  104. ellipse(7, 20, 8);
  105. }
  106. // cut off a small nub at the top to fit the Z-axis rod holder
  107. translate([0, motor_width + wall_size - nub_size, height - cut_out_height])
  108. cube([cut_out_depth, wall_size + nub_size, cut_out_height]);
  109. }
  110. if (arm_inward_angle_right != 0) {
  111. // connecting piece for angled arm
  112. translate([motor_depth + nub_depth - back_support_depth, motor_width + wall_size, 0])
  113. cube([1.5 * back_support_depth, wall_size, height]);
  114. }
  115. }
  116. // -----------------------------------------------------------
  117. // stepper motor
  118. %translate([nub_depth, wall_size, 0])
  119. cube([motor_depth, motor_width, height + 1]);
  120. // heat sink
  121. %translate([nub_depth + motor_depth, ((2 * wall_size) + motor_width - heat_sink_cutout) / 2, 1.5 * top_fan_extra_layer])
  122. cube([10, heat_sink_cutout, heat_sink_cutout]);
  123. difference() {
  124. // left arm
  125. translate([0, 27 * sin(arm_inward_angle_left / 1.5), 0])
  126. rotate([0, 0, -(arm_inward_angle_left / 1.5)])
  127. left_arm();
  128. // cut off small ledge
  129. translate([0, -1, -base_height])
  130. cube([motor_depth + nub_depth + wall_size, 1, motor_width + base_height + wall_size]);
  131. }
  132. difference() {
  133. // right arm
  134. translate([35 * sin(arm_inward_angle_right / 1.5), -27 * sin(arm_inward_angle_right / 1.5), 0])
  135. rotate([0, 0, arm_inward_angle_right / 1.5])
  136. right_arm();
  137. if (arm_inward_angle_right != 0) {
  138. // cut off small ledge
  139. translate([0, motor_width + (2 * wall_size), -base_height])
  140. cube([motor_depth + nub_depth + wall_size, 1, motor_width + base_height + wall_size]);
  141. }
  142. }
  143. // back wall
  144. difference() {
  145. translate([motor_depth + nub_depth, 0, 0])
  146. cube([wall_size, motor_width + (2 * wall_size) - right_wall_size_modifier, height]);
  147. translate([25, 8 + wall_size, 4])
  148. ellipse(7, 20, 8);
  149. if (height > 23) {
  150. translate([25, 8 + wall_size, 15])
  151. ellipse(7, 20, 8);
  152. }
  153. translate([nub_depth + motor_depth, ((2 * wall_size) + motor_width - heat_sink_cutout) / 2, 1.5 * top_fan_extra_layer])
  154. cube([wall_size, heat_sink_cutout, heat_sink_cutout]);
  155. }
  156. // bottom part
  157. difference() {
  158. // base
  159. translate([0, 0, -base_height])
  160. cube([motor_depth + nub_depth + wall_size, motor_width + (2 * wall_size) - right_wall_size_modifier, base_height + top_fan_extra_layer]);
  161. // cut off angled bottom part
  162. rotate([0, -fan_angle, 0])
  163. translate([-base_height, -(base_height / 2), -(3 * base_height)])
  164. cube([motor_depth * 1.5, motor_width + (2 * wall_size) + base_height, (2 * base_height)]);
  165. // main fan hole
  166. if (fan_hole_angled == "true") {
  167. rotate([0, -fan_angle, 0])
  168. translate([nub_depth + (motor_depth / 2), wall_size + (motor_width / 2), -(base_height * 1.5)])
  169. cylinder(d = fan_hole_diameter, h = (2 * base_height));
  170. } else {
  171. translate([nub_depth + (motor_depth / 2), wall_size + (motor_width / 2), -(base_height * 1.5)])
  172. cylinder(d = fan_hole_diameter, h = (2 * base_height));
  173. }
  174. // fan screw holes
  175. for (i = [1 : 2]) {
  176. for (j = [1 : 2]) {
  177. rotate([0, -fan_angle, 0])
  178. translate([nub_depth + (motor_depth / 2), wall_size + (motor_width / 2), -(base_height * 1.5)])
  179. translate([(((i % 2) == 0) ? fan_screw_pos : fan_screw_neg),
  180. (((j % 2) == 0) ? fan_screw_pos : fan_screw_neg), 0])
  181. cylinder(d = fan_screw_diameter, h = (2 * base_height));
  182. }
  183. }
  184. // big air hole
  185. translate([8.5, 36, -1.3])
  186. rotate([90, 0, 0])
  187. cylinder(d = 2, h = 40);
  188. // small air hole
  189. translate([12.5, 36, -1])
  190. rotate([90, 0, 0])
  191. cylinder(d = 1.5, h = 40);
  192. // elliptical air hole
  193. translate([-1, 9 + wall_size, -3.5])
  194. ellipse(2, 12, 8);
  195. }