My self designed awesome 3D printer
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.

linear_bearing.scad 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. include <bearing_idler.scad>
  2. // #######################################################
  3. // ################### Linear Bearings ###################
  4. // #######################################################
  5. lm8uu_outer = 15;
  6. lm8uu_inner = 8;
  7. lm8uu_height = 24;
  8. x_rail_dist = 60;
  9. lm8uu_dia_add = 0.5;
  10. lm8uu_len_add = 1.0;
  11. rail_dia_add = 3.0;
  12. y_carriage_wall = 10; // z-axis
  13. y_carriage_len_add = 15; // y-axis
  14. y_carriage_width = 25; // x-axis
  15. y_carriage_block_width = 10; // x-axis
  16. y_carriage_block_height = 10; // z-axis
  17. y_carriage_rail_support = 2; // dist between rail and edge
  18. y_carriage_length = x_rail_dist + (2 * y_carriage_len_add);
  19. rail_mount_dia_add = 0.4;
  20. x_rail_mount_width = 10;
  21. x_rail_cutout_z = 0.5; // in x-axis
  22. x_rail_cutout_x = 0.5; // in z-axis
  23. x_rail_cutout_y = x_rail_dist - (2 * y_carriage_len_add);
  24. x_rail_hole_off = 5;
  25. x_rail_block_len = (y_carriage_length - x_rail_cutout_y) / 2;
  26. x_carriage_width = 80;
  27. x_carriage_len_add = 10;
  28. x_carriage_wall = 10;
  29. x_carriage_bearing_off = 3;
  30. x_carriage_belt_off = 19;
  31. x_carriage_belt_block_width = 8;
  32. x_carriage_belt_block_length = 8;
  33. x_carriage_belt_block_height = 25;
  34. x_carriage_belt_block_height_b = x_carriage_belt_block_height - 7;
  35. x_carriage_block_hole_off = 4.5;
  36. x_carriage_block_length = 4;
  37. x_carriage_block_off = 2.5;
  38. x_carriage_block_add = 4.4;
  39. x_carriage_length = x_rail_dist + (2 * x_carriage_len_add);
  40. x_carriage_block_height = 2 * (x_carriage_block_hole_off + x_carriage_block_add);
  41. draw_x_carriage = false;
  42. draw_y_carriage = false;
  43. draw_y_carriage_idlers = true;
  44. draw_rail_len = 200;
  45. // y-carriage belt idlers
  46. idler_a_blue = [ 19, 15, 5.5];
  47. idler_a_red = [ 19, x_rail_dist + 15, 12.5];
  48. idler_b_blue = [30.3, x_rail_dist + 15, 12.5];
  49. idler_b_red = [30.3, 15, 5.5];
  50. module lm8uu() {
  51. $fn = 15;
  52. difference() {
  53. cylinder(d = lm8uu_outer, h = lm8uu_height);
  54. translate([0, 0, -1])
  55. cylinder(d = lm8uu_inner, h = lm8uu_height + 2);
  56. }
  57. }
  58. // TODO add cable tie canal for lm8uu mounting
  59. module generate_spacer(pos) {
  60. color("green")
  61. translate([pos[0], pos[1], -0.5])
  62. bearing_spacer(pos[2] + 0.5 + ((idler_outer_height - bearing_height) / 2), 2, 1, true, 3);
  63. }
  64. module y_carriage(idler_a = [0, 0, 0], idler_b = [0, 0, 0]) {
  65. $fn = 20;
  66. // attaching to x-rails
  67. color("green")
  68. translate([y_carriage_width, 0, -y_carriage_block_height])
  69. difference() {
  70. cube([x_rail_mount_width, y_carriage_length, y_carriage_block_height + y_carriage_wall]);
  71. translate([0, -1, y_carriage_block_height])
  72. cube([x_rail_cutout_z, y_carriage_length + 2, y_carriage_wall + 1]);
  73. translate([0, -1, y_carriage_block_height - (x_rail_cutout_x / 2)])
  74. cube([y_carriage_block_width + 1, y_carriage_length + 2, x_rail_cutout_x]);
  75. translate([0, (y_carriage_length - x_rail_cutout_y) / 2, y_carriage_block_height])
  76. cube([y_carriage_block_width + 1, x_rail_cutout_y, y_carriage_wall + 1]);
  77. for (i = [y_carriage_len_add : x_rail_dist : x_rail_dist + y_carriage_len_add]) {
  78. translate([0, i, y_carriage_block_height])
  79. rotate([0, 90, 0])
  80. cylinder(d = lm8uu_inner + rail_mount_dia_add, h = y_carriage_block_width + 1);
  81. }
  82. for (i = [0 : x_rail_block_len + x_rail_cutout_y : x_rail_block_len + x_rail_cutout_y]) {
  83. translate([y_carriage_block_width / 2, x_rail_hole_off + i, -1]) {
  84. cylinder(d = 3.2, h = y_carriage_wall + 2 + y_carriage_block_height);
  85. cylinder(d = 6.1, h = 3.8, $fn = 6);
  86. translate([0, 0, y_carriage_wall + y_carriage_block_height - 2.5])
  87. cylinder(d = 6.1, h = 3.8);
  88. }
  89. translate([y_carriage_block_width / 2, x_rail_block_len - x_rail_hole_off + i, -1]) {
  90. cylinder(d = 3.2, h = y_carriage_wall + 2 + y_carriage_block_height);
  91. cylinder(d = 6.1, h = 3.8, $fn = 6);
  92. translate([0, 0, y_carriage_wall + y_carriage_block_height - 2.5])
  93. cylinder(d = 6.1, h = 3.8);
  94. }
  95. }
  96. }
  97. // attaching to y-rail
  98. color("green")
  99. difference() {
  100. union() {
  101. cube([y_carriage_width, y_carriage_length, y_carriage_wall]);
  102. translate([y_carriage_width - y_carriage_block_width, 0, -y_carriage_block_height])
  103. cube([y_carriage_block_width, y_carriage_length, y_carriage_block_height]);
  104. }
  105. translate([(lm8uu_outer + lm8uu_dia_add) / 2 + y_carriage_rail_support, 0, 0])
  106. rotate([-90, 0, 0]) {
  107. translate([0, 0, -1])
  108. cylinder(d = lm8uu_inner + rail_dia_add, h = y_carriage_length + 2);
  109. translate([0, 0, y_carriage_rail_support - lm8uu_len_add / 2])
  110. cylinder(d = lm8uu_outer + lm8uu_dia_add, h = lm8uu_height + lm8uu_len_add);
  111. translate([0, 0, y_carriage_length - lm8uu_height - y_carriage_rail_support - lm8uu_len_add / 2])
  112. cylinder(d = lm8uu_outer + lm8uu_dia_add, h = lm8uu_height + lm8uu_len_add);
  113. }
  114. }
  115. color("magenta")
  116. translate([(lm8uu_outer + lm8uu_dia_add) / 2 + y_carriage_rail_support, 0, 0])
  117. rotate([-90, 0, 0]) {
  118. // y-bearings
  119. %translate([0, 0, y_carriage_rail_support])
  120. lm8uu();
  121. %translate([0, 0, y_carriage_length - lm8uu_height - y_carriage_rail_support])
  122. lm8uu();
  123. }
  124. // idlers for the corexy belts
  125. translate([0, 0, y_carriage_wall]) {
  126. if (draw_y_carriage_idlers) {
  127. translate(idler_a)
  128. bearing_idler();
  129. translate(idler_b)
  130. bearing_idler();
  131. }
  132. generate_spacer(idler_a);
  133. generate_spacer(idler_b);
  134. }
  135. }
  136. module belt_fix() {
  137. difference() {
  138. color("green")
  139. cube([x_carriage_belt_block_width, x_carriage_block_length, x_carriage_block_height]);
  140. translate([x_carriage_belt_block_width / 2, -1, x_carriage_block_hole_off - 0.2])
  141. rotate([-90, 0, 0]) {
  142. cylinder(d = 3.2, h = x_carriage_belt_block_length + 2);
  143. cylinder(d = 6.1, h = 3.8, $fn = 6);
  144. }
  145. translate([x_carriage_belt_block_width / 2, -1, x_carriage_block_hole_off + 8.8])
  146. rotate([-90, 0, 0]) {
  147. cylinder(d = 3.2, h = x_carriage_belt_block_length + 2);
  148. cylinder(d = 6.1, h = 3.8, $fn = 6);
  149. }
  150. }
  151. }
  152. module belt_mount(top, up) {
  153. $fn = 15;
  154. difference() {
  155. color("green")
  156. if (top) {
  157. cube([x_carriage_belt_block_width, x_carriage_belt_block_length, x_carriage_belt_block_height]);
  158. } else {
  159. cube([x_carriage_belt_block_width, x_carriage_belt_block_length, x_carriage_belt_block_height_b]);
  160. }
  161. if (top) {
  162. translate([-1, x_carriage_belt_block_length / 2, 16])
  163. rotate([0, 90, 0])
  164. cylinder(d = 2.6, h = x_carriage_belt_block_width + 2);
  165. translate([x_carriage_belt_block_width / 2, -1, 16 + x_carriage_block_hole_off])
  166. rotate([-90, 0, 0])
  167. cylinder(d = 3.2, h = x_carriage_belt_block_length + 2);
  168. translate([x_carriage_belt_block_width / 2, -1, 16 - x_carriage_block_hole_off])
  169. rotate([-90, 0, 0])
  170. cylinder(d = 3.2, h = x_carriage_belt_block_length + 2);
  171. } else {
  172. translate([-1, x_carriage_belt_block_length / 2, 9])
  173. rotate([0, 90, 0])
  174. cylinder(d = 2.7, h = x_carriage_belt_block_width + 2);
  175. translate([x_carriage_belt_block_width / 2, -1, 9 + x_carriage_block_hole_off])
  176. rotate([-90, 0, 0])
  177. cylinder(d = 3.2, h = x_carriage_belt_block_length + 2);
  178. translate([x_carriage_belt_block_width / 2, -1, 9 - x_carriage_block_hole_off])
  179. rotate([-90, 0, 0])
  180. cylinder(d = 3.2, h = x_carriage_belt_block_length + 2);
  181. }
  182. }
  183. if (up) {
  184. if (top) {
  185. translate([0, x_carriage_belt_block_length + x_carriage_block_off, x_carriage_belt_block_height - x_carriage_block_height])
  186. belt_fix();
  187. } else {
  188. translate([0, x_carriage_belt_block_length + x_carriage_block_off, x_carriage_belt_block_height_b - x_carriage_block_height])
  189. belt_fix();
  190. }
  191. } else {
  192. if (top) {
  193. translate([0, -x_carriage_block_length - x_carriage_block_off, x_carriage_belt_block_height - x_carriage_block_height])
  194. belt_fix();
  195. } else {
  196. translate([0, -x_carriage_block_length - x_carriage_block_off, x_carriage_belt_block_height_b - x_carriage_block_height])
  197. belt_fix();
  198. }
  199. }
  200. }
  201. module belt_mounts() {
  202. translate([0, x_carriage_belt_off, 0])
  203. belt_mount(false, true);
  204. translate([0, x_carriage_length - x_carriage_belt_off - x_carriage_belt_block_length, 0])
  205. belt_mount(true, false);
  206. translate([x_carriage_width - x_carriage_belt_block_width, x_carriage_belt_off, 0])
  207. belt_mount(true, true);
  208. translate([x_carriage_width - x_carriage_belt_block_width, x_carriage_length - x_carriage_belt_off - x_carriage_belt_block_length, 0])
  209. belt_mount(false, false);
  210. }
  211. module x_carriage() {
  212. //color("green")
  213. difference() {
  214. union() {
  215. color("green")
  216. cube([x_carriage_width, x_rail_dist + (2 * x_carriage_len_add), x_carriage_wall]);
  217. translate([0, 0, x_carriage_wall])
  218. belt_mounts();
  219. }
  220. // big center cutout
  221. translate([x_carriage_width / 2, x_carriage_length / 2, x_carriage_wall / 2])
  222. cube([x_carriage_width - (2 * x_carriage_belt_block_width) - 5, x_rail_dist - 25, x_carriage_wall + 2], center=true);
  223. for (i = [0 : 1 : 1]) {
  224. translate([lm8uu_height + x_carriage_bearing_off + (i * (x_carriage_width - (2 * x_carriage_bearing_off) - lm8uu_height)), 0, ])
  225. rotate([0, -90, 0]) {
  226. // x-bearings
  227. color("magenta")
  228. %translate([0, x_carriage_len_add, 0])
  229. lm8uu();
  230. color("magenta")
  231. %translate([0, x_rail_dist + x_carriage_len_add, 0])
  232. lm8uu();
  233. color("green")
  234. translate([0, x_carriage_len_add, 0])
  235. cylinder(d = lm8uu_outer + lm8uu_dia_add, h = lm8uu_height + lm8uu_len_add);
  236. color("green")
  237. translate([0, x_rail_dist + x_carriage_len_add, 0])
  238. cylinder(d = lm8uu_outer + lm8uu_dia_add, h = lm8uu_height + lm8uu_len_add);
  239. color("green")
  240. translate([0, x_carriage_len_add, -x_carriage_width])
  241. cylinder(d = lm8uu_inner + rail_dia_add, h = x_carriage_width * 2);
  242. color("green")
  243. translate([0, x_rail_dist + x_carriage_len_add, -x_carriage_width])
  244. cylinder(d = lm8uu_inner + rail_dia_add, h = x_carriage_width * 2);
  245. }
  246. }
  247. }
  248. }
  249. if (draw_y_carriage) {
  250. translate([(lm8uu_outer + lm8uu_dia_add) / 2 + y_carriage_rail_support, 0, 0])
  251. rotate([-90, 0, 0]) {
  252. // y-bearings
  253. %translate([0, 0, y_carriage_rail_support])
  254. lm8uu();
  255. %translate([0, 0, y_carriage_length - lm8uu_height - y_carriage_rail_support])
  256. lm8uu();
  257. }
  258. // x-rails
  259. for (i = [y_carriage_len_add : x_rail_dist : x_rail_dist + y_carriage_len_add]) {
  260. %translate([y_carriage_width + 1, i, 0])
  261. rotate([0, 90, 0])
  262. cylinder(d = lm8uu_inner, h = draw_rail_len);
  263. }
  264. y_carriage(idler_a_blue, idler_b_blue);
  265. translate([(2 * y_carriage_width + y_carriage_block_width) + draw_rail_len -5, y_carriage_length, 0])
  266. rotate([0, 0, 180])
  267. y_carriage(idler_a_red, idler_b_red);
  268. if (draw_x_carriage) {
  269. translate([y_carriage_width + y_carriage_block_width + ((draw_rail_len - x_carriage_width) / 2), y_carriage_len_add - x_carriage_len_add, 0])
  270. x_carriage();
  271. }
  272. } else if (draw_x_carriage) {
  273. x_carriage();
  274. }