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.

flask-holder.scad 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. flask_dia = 88;
  2. flask_height = 150;
  3. flask_dist = 10;
  4. holder_dia = 90;
  5. holder_depth = holder_dia;
  6. holder_width_factor = 4;
  7. holder_width = flask_dist + holder_dia / holder_width_factor;
  8. holder_height = 5;
  9. rim_height = 20;
  10. rim_width = 3;
  11. rim_dia = holder_dia + (2 * rim_width);
  12. screw_dia = 4.3;
  13. head_dia = 8.0;
  14. bite = 3.0;
  15. single_screw_off = 10;
  16. double_screw_off = 10;
  17. tank_w = 25;
  18. tank_d = 35;
  19. tank_h = 60;
  20. tank_wall = 5;
  21. tank_prism = 15;
  22. tank_screw_off = (tank_d - tank_wall - tank_prism) / 2;
  23. $fn = 42;
  24. module prism(l, w, h) {
  25. polyhedron(
  26. points = [[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0,w,h], [l,w,h]],
  27. faces = [[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]]
  28. );
  29. }
  30. module screw(h = flask_height) {
  31. translate([0, 0, -1])
  32. cylinder(d = screw_dia, h = h + 1);
  33. translate([0, 0, bite])
  34. cylinder(d = head_dia, h = h - bite);
  35. }
  36. module tank_mount() {
  37. difference() {
  38. union() {
  39. cube([tank_w, tank_d, tank_wall]);
  40. translate([0, tank_d - tank_wall, 0])
  41. cube([tank_w, tank_wall, tank_h]);
  42. translate([0, tank_d - tank_wall - tank_prism, tank_wall])
  43. prism(tank_w, tank_prism, tank_prism);
  44. }
  45. translate([tank_w / 2, tank_screw_off, 0])
  46. screw(tank_h);
  47. }
  48. }
  49. module flasks() {
  50. translate([holder_dia / 2, holder_dia / 2, 0])
  51. cylinder(d = flask_dia, h = flask_height);
  52. translate([holder_dia * 3 / 2 + flask_dist, holder_dia / 2, 0])
  53. cylinder(d = flask_dia, h = flask_height);
  54. translate([holder_dia * 5 / 2 + flask_dist * 2, holder_dia / 2, 0])
  55. cylinder(d = flask_dia, h = flask_height);
  56. }
  57. module rim() {
  58. translate([rim_dia / 2, rim_dia / 2, 0])
  59. difference() {
  60. cylinder(d = rim_dia, h = rim_height);
  61. translate([0, 0, -1])
  62. cylinder(d = holder_dia, h = rim_height + 2);
  63. translate([-holder_dia / 2 + holder_dia / holder_width_factor, -rim_dia / 2 - 1, -1])
  64. cube([rim_dia, rim_dia + 2, rim_height + 2]);
  65. }
  66. }
  67. module single_holder(screws = true) {
  68. difference() {
  69. union() {
  70. hull() {
  71. cube([holder_width, holder_depth, holder_height]);
  72. translate([flask_dist - rim_width, -rim_width, holder_height])
  73. rim();
  74. }
  75. }
  76. translate([holder_dia / 2 + flask_dist, holder_dia / 2, -1])
  77. cylinder(d = holder_dia, h = holder_height + rim_height + 2);
  78. if (screws) {
  79. translate([single_screw_off, single_screw_off, 0])
  80. screw();
  81. translate([single_screw_off, holder_depth - single_screw_off, 0])
  82. screw();
  83. }
  84. }
  85. }
  86. module double_holder() {
  87. difference() {
  88. union() {
  89. translate([holder_width, holder_depth, 0])
  90. rotate([0, 0, 180])
  91. single_holder(false);
  92. translate([holder_width - flask_dist, 0, 0])
  93. single_holder(false);
  94. }
  95. translate([holder_width - flask_dist / 2, double_screw_off, 0])
  96. screw();
  97. translate([holder_width - flask_dist / 2, holder_depth - double_screw_off, 0])
  98. screw();
  99. }
  100. }
  101. module holders() {
  102. translate([flask_dist, 0, 0]) {
  103. %flasks();
  104. translate([-flask_dist, 0, 0])
  105. single_holder();
  106. translate([holder_dia - holder_width + flask_dist, 0, 0])
  107. double_holder();
  108. translate([2 * (holder_dia + flask_dist) - holder_width, 0, 0])
  109. double_holder();
  110. translate([3 * (holder_dia + flask_dist), holder_depth, 0])
  111. rotate([0, 0, 180])
  112. single_holder();
  113. }
  114. }
  115. //screw();
  116. //rim();
  117. //holders();
  118. //single_holder();
  119. //double_holder();
  120. tank_mount();