silica-holder.scad 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. use <threads.scad>;
  2. /* [Teil] */
  3. Teil = 1; // [1:Behälter, 2:Deckel, 3:Trennplatte]
  4. Debug = true;
  5. /* [Hidden] */
  6. $fn = 180;
  7. D=54;
  8. H=1.5;
  9. FaseOben=43.5;
  10. function durchmesser(Innengewinde) = (Innengewinde)?1:0;
  11. module gewinde(L, Innengewinde) {
  12. metric_thread(diameter=50+durchmesser(Innengewinde), pitch=5, thread_size=2, length=L, internal=Innengewinde, leadin=(Innengewinde)?0:2, test=false);
  13. }
  14. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  15. module behaelter() {
  16. union() {
  17. difference() {
  18. union() {
  19. // Aussenform mit Gewinde
  20. cylinder(d1=D-1, d2=D, h=H);
  21. translate([0,0,1.5]) cylinder(d=D, h=50);
  22. translate([0,0,51.5]) cylinder(d1=D, d2=D-1, h=H);
  23. translate([0,0,52]) gewinde(L=15, Innengewinde=false);
  24. }
  25. // gesamte Innenbohrung
  26. translate([0,0,0]) cylinder(d=D-2.5, h=52);
  27. // "Kernloch" im Gewinde
  28. translate([0,0,52]) cylinder(d=FaseOben, h=20);
  29. // Ovale Schlitze in der Seitenwand
  30. for(z=[4:3:45]) {
  31. translate([0,0,z])
  32. for(r=[0:360/40:359]) {
  33. rotate([0,90,r]) hull() {
  34. translate([0,1.15,0]) cylinder(d=1, h=80, center=true);
  35. translate([0,-1.15,0]) cylinder(d=1, h=80, center=true);
  36. }
  37. }
  38. }
  39. }
  40. // Fase innen am Übergang zum Gewinde (wegen Support)
  41. translate([0,0,46.5]) difference() {
  42. cylinder(d=D-2.5, h=5.5);
  43. cylinder(d1=D-2.5, d2=FaseOben, h=5.5);
  44. }
  45. // Unten Mitte fester Boden
  46. cylinder(d=16, h=H);
  47. // 20 Speichen (Tortenstücke) im Boden
  48. for(r=[0:360/20:359]) {
  49. rotate([0,0,r]) hull() {
  50. rotate([0,0,+3]) cube([(D-2)/2,0.001,H]);
  51. rotate([0,0,-3]) cube([(D-2)/2,0.001,H]);
  52. }
  53. }
  54. // Kreisringe im Boden
  55. for(i=[16:3.5:D-3]) difference() {
  56. cylinder(d=i+2, h=H);
  57. cylinder(d=i, h=H);
  58. }
  59. // Boden Abschluss zum Rand
  60. difference() {
  61. cylinder(d=D-2.5, h=H);
  62. cylinder(d=D-2.5-2, h=H);
  63. }
  64. }
  65. }
  66. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  67. module deckel() {
  68. difference() {
  69. union() {
  70. cylinder(d=70, h=2.5);
  71. translate([0,0,2]) cylinder(d=D, h=17);
  72. translate([0,0,2+17]) cylinder(d1=D, d2=D-2, h=1);
  73. }
  74. translate([0,0,2.5]) gewinde(L=18, Innengewinde=true);
  75. cylinder(d=42, h=4);
  76. cube([6,44,10], center=true);
  77. }
  78. }
  79. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  80. module trennplatte() {
  81. H=1;
  82. D_trennplatte=FaseOben-1.25;
  83. // Unten Mitte fester Boden
  84. difference() {
  85. cylinder(d=16, h=H);
  86. for(r=[0:360/4:359]) rotate([0,0,r]) scale([1,2,1]) translate([4,0,0]) cylinder(d=1.25, h=10, center=true);
  87. }
  88. // 20 Speichen (Tortenstücke) im Boden mit Abstandshalter (H+1)
  89. for(r=[0:360/20:359]) {
  90. rotate([0,0,r]) {
  91. hull() intersection() {
  92. translate([25,0,0]) cube(40, center=true);
  93. union() {
  94. rotate([0,0,+3]) cube([(D_trennplatte-2)/2,0.001,H]);
  95. rotate([0,0,-3]) cube([(D_trennplatte-2)/2,0.001,H]);
  96. }
  97. }
  98. translate([18,0,0]) cylinder(d=1.5, h=H+1);
  99. }
  100. }
  101. // Kreisringe im Boden
  102. for(i=[16:3.5:FaseOben]) difference() {
  103. cylinder(d=i+2, h=H);
  104. cylinder(d=i, h=H);
  105. }
  106. // Boden Abschluss zum Rand
  107. difference() {
  108. cylinder(d=D_trennplatte, h=H);
  109. cylinder(d=D_trennplatte-2, h=H);
  110. }
  111. }
  112. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  113. intersection() {
  114. union() {
  115. if (Teil == 1) {
  116. intersection() {
  117. behaelter();
  118. //translate([0,0,52]) cylinder(d=82, h=20);
  119. }
  120. }
  121. if (Teil == 2) {
  122. deckel();
  123. }
  124. if (Teil == 3) {
  125. trennplatte();
  126. }
  127. }
  128. if (Debug) rotate([0,0,45]) cube(100);
  129. }