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.

double_capsule_caddy.scad 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. include <../../threads.scad>
  2. use <../../knurledFinishLib_v2_1.scad>
  3. di = 15.0;
  4. do = di + 5.0;
  5. h_capsules = 35.0;
  6. h_finger = 10.0;
  7. h_th_male = 5.0;
  8. h_th_male_add = 2.0;
  9. h_th_female = h_th_male + 2.0;
  10. th_p = 1.5;
  11. th_dia = di + ((do - di) / 2);
  12. h_o_ring = 1.25;
  13. wall_cap = 3.0;
  14. di_cap = di - 3.0;
  15. h_body = h_capsules + 2 * h_th_female;
  16. h_cap = h_finger + h_th_male + h_th_male_add;
  17. t_top = "FULL FULL ";
  18. t_bot = "EMPTY EMPTY ";
  19. t_len = max(len(t_bot), len(t_top));
  20. t_d = 1.0;
  21. t_off = 5.0;
  22. cut_for_visualization = true;
  23. $fn = 42;
  24. // https://openhome.cc/eGossip/OpenSCAD/TextCylinder.html
  25. module text_wrap(t, l) {
  26. for (i = [0 : l - 1])
  27. rotate([0, 0, i * 360 / l])
  28. translate([0, do / 2 - t_d, 0])
  29. rotate([90, 0, 180])
  30. linear_extrude(t_d + 2.0)
  31. text(t[i],
  32. font = "Liberation Sans Mono; Style = Bold",
  33. size = do * 3.141 / l,
  34. valign = "center", halign = "center");
  35. }
  36. module body() {
  37. color("green")
  38. difference() {
  39. cylinder(d = do, h = h_body);
  40. translate([0, 0, -1])
  41. cylinder(d = di, h = h_body + 2);
  42. translate([0, 0, h_capsules + h_th_female])
  43. metric_thread(diameter=th_dia, pitch=th_p, length=h_th_female, internal=true, leadin=1);
  44. metric_thread(diameter=th_dia, pitch=th_p, length=h_th_female, internal=true, leadin=3);
  45. translate([0, 0, h_body - t_off])
  46. text_wrap(t_top, len(t_top));
  47. translate([0, 0, t_off])
  48. rotate([180, 0, 0])
  49. text_wrap(t_bot, len(t_bot));
  50. }
  51. }
  52. module cap() {
  53. color("orange")
  54. difference() {
  55. union() {
  56. translate([0, 0, h_th_male + h_th_male_add])
  57. //cylinder(d = do, h = h_finger);
  58. knurl(k_cyl_hg = h_finger, k_cyl_od = do, knurl_wd = 1, knurl_hg = 1, knurl_dp = 1);
  59. translate([0, 0, h_th_male])
  60. cylinder(d = di, h = h_th_male_add);
  61. metric_thread(diameter=th_dia, pitch=th_p, length=h_th_male, internal=false);
  62. }
  63. translate([0, 0, -1])
  64. cylinder(d = di_cap, h = h_cap + 1 - wall_cap);
  65. }
  66. %color("blue")
  67. translate([0, 0, h_th_male + h_th_male_add - h_o_ring])
  68. difference() {
  69. cylinder(d = do, h = h_o_ring);
  70. translate([0, 0, -1])
  71. cylinder(d = di, h = h_o_ring + 2);
  72. }
  73. }
  74. module assembly() {
  75. difference() {
  76. union() {
  77. body();
  78. translate([0, 0, h_body - h_th_male - h_th_male_add + h_o_ring])
  79. cap();
  80. translate([0, 0, h_th_male + h_th_male_add - h_o_ring])
  81. rotate([180, 0, 0])
  82. cap();
  83. }
  84. if (cut_for_visualization)
  85. translate([-20, 0, -20])
  86. cube([40, 20, 100]);
  87. }
  88. }
  89. module print() {
  90. body();
  91. for (i = [0 : 1])
  92. translate([(do + 10) * (i + 1), 0, h_cap])
  93. rotate([180, 0, 0])
  94. cap();
  95. }
  96. //assembly();
  97. print();