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.

psu_mount.scad 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. psu_width = 112.7;
  2. psu_height = 49.8;
  3. psu_length = 216;
  4. psu_screw = 4.2;
  5. psu_screw_off_x = 29.5 + 3.2 / 2;
  6. psu_screw_off_y = 29.35 + 3.2 / 2;
  7. psu_screw_dist_x = 53.3 - 3.2;
  8. psu_screw_dist_y = 154.3 - 3.2;
  9. psu_wall_dist = 10;
  10. mount_wall = 5.0;
  11. mount_width = 12.0;
  12. mount_height = 70;
  13. mount_screw = 4.2;
  14. $fn = 42;
  15. module prism(l, w, h) {
  16. polyhedron(
  17. points = [[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0,w,h], [l,w,h]],
  18. faces = [[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]]
  19. );
  20. }
  21. module psu() {
  22. cube([psu_width, psu_height, psu_length]);
  23. for (x = [0, psu_screw_dist_x])
  24. for (y = [0, psu_screw_dist_y])
  25. translate([psu_screw_off_x + x, 0, psu_screw_off_y + y])
  26. rotate([90, 0, 0])
  27. cylinder(d = psu_screw - 1.0, h = 10.0);
  28. }
  29. module mount_geo() {
  30. difference() {
  31. union() {
  32. hull() {
  33. translate([psu_width - psu_screw_off_x - psu_screw_dist_x - mount_width, -mount_wall, -mount_width / 2])
  34. cube([psu_screw_dist_x + psu_screw_off_x + psu_wall_dist + mount_width, mount_wall, mount_width]);
  35. translate([psu_width + psu_wall_dist, -mount_wall, -mount_width / 2])
  36. cube([20, mount_wall, mount_height]);
  37. }
  38. translate([psu_width + psu_wall_dist + 7.5, 0, -mount_width / 2])
  39. cube([5, 1, mount_height]);
  40. }
  41. translate([psu_screw_off_x + 8, 1, mount_width / 2])
  42. rotate([0, 0, -90])
  43. prism(mount_wall + 2, psu_width - psu_screw_off_x + psu_wall_dist - 8, mount_height - mount_width - mount_wall - 8);
  44. for (x = [0, psu_screw_dist_x])
  45. translate([psu_screw_off_x + x, 1, 0])
  46. rotate([90, 0, 0])
  47. cylinder(d = psu_screw, h = mount_wall + 2);
  48. for (y = [0, (mount_height - mount_width) / 2, mount_height - mount_width])
  49. translate([psu_width + psu_wall_dist + 10, 2, y])
  50. rotate([90, 0, 0])
  51. cylinder(d = mount_screw, h = mount_wall + 3);
  52. }
  53. }
  54. module mount(type) {
  55. scale([1, 1, -1 * (type * 2 - 1)])
  56. mount_geo();
  57. }
  58. relais_width = 50;
  59. relais_height = 26;
  60. relais_depth = 17;
  61. relais_screw = 3.2;
  62. relais_screw_dist_x = 44.8;
  63. relais_screw_dist_y = 21.1;
  64. relais_mount_off_y = 30;
  65. relais_wall_dist = relais_mount_off_y;
  66. mount_relais_wall = 5.0;
  67. mount_relais_screw = 4.2;
  68. relais_screw_off_x = (relais_width - relais_screw_dist_x) / 2;
  69. relais_screw_off_y = (relais_height - relais_screw_dist_y) / 2;
  70. mount_relais_width = relais_width + 2 * mount_relais_wall;
  71. mount_relais_width_add = (psu_width - relais_width) / 2 + mount_relais_wall + 20;
  72. mount_relais_height = relais_height + 2 * mount_relais_wall;
  73. module relais() {
  74. cube([relais_width, 5, relais_height]);
  75. translate([relais_width / 2 - 5, 5, relais_height / 2 - 5])
  76. cube([10, relais_depth - 5, 10]);
  77. for (x = [-1, 1])
  78. for (y = [-1, 1])
  79. translate([relais_width / 2 + x * relais_screw_dist_x / 2, 0, relais_height / 2 + y * relais_screw_dist_y / 2])
  80. rotate([90, 0, 0])
  81. cylinder(d = relais_screw, h = 10);
  82. }
  83. module cutout(l, o) {
  84. for (r = [0, 90, 180, 270])
  85. rotate([r + 45, 0, -90])
  86. translate([0, -l - o, o])
  87. prism(mount_relais_wall + 2, l, l);
  88. }
  89. module mount_relais() {
  90. difference() {
  91. union() {
  92. translate([-mount_relais_wall, -mount_relais_wall, -mount_relais_wall])
  93. cube([mount_relais_width + mount_relais_width_add, mount_relais_wall, mount_relais_height]);
  94. translate([mount_relais_width + mount_relais_width_add - mount_relais_wall - 12.5, 0, -mount_relais_wall])
  95. cube([5, 1, mount_relais_height]);
  96. }
  97. for (x = [-1, 1])
  98. for (y = [-1, 1])
  99. translate([relais_width / 2 + x * relais_screw_dist_x / 2, 1, relais_height / 2 + y * relais_screw_dist_y / 2])
  100. rotate([90, 0, 0])
  101. cylinder(d = relais_screw, h = 10);
  102. for (y = [0, mount_relais_height - mount_relais_wall * 2])
  103. translate([mount_relais_width + mount_relais_width_add - mount_relais_wall - 10, 2, y])
  104. rotate([90, 0, 0])
  105. cylinder(d = mount_relais_screw, h = mount_relais_wall + 3);
  106. translate([24, 1, 13])
  107. cutout(15, 2);
  108. translate([70, 1, 13])
  109. cutout(15, 2);
  110. }
  111. }
  112. psu2_width = 70.25;
  113. psu2_height = 31.2;
  114. psu2_length = 39.0;
  115. psu2_screw = 3.2;
  116. psu2_screw_off_x = 5.0 - 3.2 / 2;
  117. psu2_screw_off_y = 11.6 + 3.2 / 2;
  118. psu2_screw_dist_x = 59.6 + 3.2;
  119. psu2_screw_dist_y = 0;
  120. module psu2() {
  121. cube([psu2_width, psu2_height, psu2_length]);
  122. for (x = [0, psu2_screw_dist_x])
  123. for (y = [0, psu2_screw_dist_y])
  124. translate([psu2_screw_off_x + x, 0, psu2_screw_off_y + y])
  125. rotate([90, 0, 0])
  126. cylinder(d = psu2_screw - 1.0, h = 10.0);
  127. }
  128. psu2_mount_off_y = relais_mount_off_y;
  129. psu2_wall_dist = (psu_width - psu2_width) / 2 + psu_wall_dist;
  130. mount2_wall = 5.0;
  131. mount2_width = 8.0;
  132. mount2_height = 50;
  133. mount2_screw = 4.2;
  134. module mount2() {
  135. difference() {
  136. union() {
  137. hull() {
  138. translate([psu2_width - psu2_screw_off_x - psu2_screw_dist_x - mount2_width, -mount2_wall, -mount2_width / 2])
  139. cube([psu2_screw_dist_x + psu2_screw_off_x + psu2_wall_dist + mount2_width, mount2_wall, mount2_width]);
  140. translate([psu2_width + psu2_wall_dist, -mount2_wall, -mount2_width / 2])
  141. cube([20, mount2_wall, mount2_height]);
  142. }
  143. translate([psu2_width + psu2_wall_dist + 7.5, 0, -mount2_width / 2])
  144. cube([5, 1, mount2_height]);
  145. }
  146. translate([psu2_screw_off_x + 8, 1, mount2_width / 2])
  147. rotate([0, 0, -90])
  148. prism(mount2_wall + 2, psu2_width - psu2_screw_off_x + psu2_wall_dist - 8, mount2_height - mount2_width - mount2_wall - 8 + 5);
  149. for (x = [0, psu2_screw_dist_x])
  150. translate([psu2_screw_off_x + x, 1, 0])
  151. rotate([90, 0, 0])
  152. cylinder(d = psu2_screw, h = mount2_wall + 2);
  153. for (y = [0, mount2_height - mount2_width])
  154. translate([psu2_width + psu2_wall_dist + 10, 2, y])
  155. rotate([90, 0, 0])
  156. cylinder(d = mount2_screw, h = mount2_wall + 3);
  157. }
  158. }
  159. module assembly() {
  160. %psu();
  161. %translate([psu_width + psu_wall_dist, 0, 0])
  162. cube([20, 40, 400]);
  163. for (i = [0, 1])
  164. translate([0, 0, psu_screw_off_y + i * psu_screw_dist_y])
  165. mount(i);
  166. %translate([(psu_width - relais_width) / 2, 0, psu_length + relais_mount_off_y])
  167. relais();
  168. %translate([(psu_width - psu2_width) / 2, 0, psu_length + relais_mount_off_y + relais_height + psu2_mount_off_y])
  169. psu2();
  170. translate([(psu_width - psu2_width) / 2, 0, psu_length + relais_mount_off_y + relais_height + psu2_mount_off_y + psu2_screw_off_y])
  171. mount2();
  172. translate([(psu_width - relais_width) / 2, 0, psu_length + relais_mount_off_y])
  173. mount_relais();
  174. }
  175. module print() {
  176. translate([0, 0, mount_wall])
  177. rotate([90, 0, 0])
  178. mount(0);
  179. translate([0, 40, mount_wall])
  180. rotate([90, 0, 0])
  181. mount(1);
  182. translate([-150, 40, mount2_wall])
  183. rotate([90, 0, 0])
  184. mount2();
  185. translate([-150, -30, mount_relais_wall])
  186. rotate([90, 0, 0])
  187. mount_relais();
  188. }
  189. //assembly();
  190. //print();
  191. mount_relais();