My self-made 3D-printable designs, mainly in OpenSCAD
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

Solder Holder.scad 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*
  2. * Created by:
  3. * Thomas Buck <xythobuz@xythobuz.de> in April 2016
  4. *
  5. * Licensed under the Creative Commons - Attribution license.
  6. */
  7. // -----------------------------------------------------------
  8. spoolWidth = 65; // [20:70]
  9. spoolDiameter = 65; // [20:70]
  10. spoolHoleDiameter = 10; // [10:30]
  11. part = "base"; // [base, holder]
  12. cutout = "true"; // [true, false]
  13. // -----------------------------------------------------------
  14. /* [Hidden] */
  15. armWidth = 10;
  16. wallSize = 4;
  17. baseHeight = 2;
  18. bottomGapDivisor = 10; // spoolDiameter / bottomGapDivisor
  19. holderHeightDivisor = 2; // spoolHoleDiameter / holderHeightDivisor
  20. holderWidth = 2.5;
  21. holderExtraLength = 2;
  22. extraGap = 0.2;
  23. feedWidth = 14;
  24. feedHeight = 8;
  25. feedDiameter = 2;
  26. $fn = 15;
  27. // -----------------------------------------------------------
  28. module spool() {
  29. translate([0, spoolDiameter / 2, spoolDiameter / 2])
  30. rotate([0, 90, 0])
  31. difference() {
  32. cylinder(d = spoolDiameter, h = spoolWidth);
  33. translate([0, 0, -1])
  34. cylinder(d = spoolHoleDiameter, h = spoolWidth + 2);
  35. }
  36. }
  37. module arm() {
  38. difference() {
  39. cube([wallSize, armWidth, (spoolDiameter / bottomGapDivisor) + ((spoolDiameter + spoolHoleDiameter) / 2)]);
  40. translate([-1, (armWidth - holderWidth) / 2, (spoolDiameter / bottomGapDivisor) + ((spoolDiameter + spoolHoleDiameter) / 2) - (spoolHoleDiameter / holderHeightDivisor)])
  41. cube([wallSize + 2, holderWidth + extraGap, (spoolHoleDiameter / holderHeightDivisor) + 1]);
  42. }
  43. }
  44. module feed() {
  45. difference() {
  46. cube([feedWidth, wallSize, feedHeight]);
  47. translate([feedWidth / 2, wallSize + 1, feedHeight / 2])
  48. rotate([90, 0, 0])
  49. cylinder(d = feedDiameter, h = wallSize + 2);
  50. }
  51. }
  52. module base() {
  53. difference() {
  54. union() {
  55. cube([spoolWidth + (2 * wallSize), spoolDiameter + wallSize, baseHeight]);
  56. translate([0, wallSize + ((spoolDiameter - armWidth) / 2), baseHeight])
  57. arm();
  58. translate([spoolWidth + wallSize, wallSize + ((spoolDiameter - armWidth) / 2), baseHeight])
  59. arm();
  60. translate([wallSize + (spoolWidth - feedWidth) / 2, 0, baseHeight])
  61. feed();
  62. }
  63. if (cutout == "true") {
  64. translate([wallSize * 2, wallSize * 2, -1])
  65. cube([spoolWidth - (wallSize * 2), spoolDiameter - (wallSize * 3), baseHeight + 2]);
  66. }
  67. }
  68. if (cutout == "true") {
  69. translate([wallSize * 2, wallSize * 2, 0])
  70. rotate([0, 0, atan((spoolDiameter - (wallSize * 3)) / (spoolWidth - (wallSize * 2)))])
  71. translate([0, -wallSize, 0])
  72. cube([sqrt(((spoolWidth - (wallSize * 2)) * (spoolWidth - (wallSize * 2))) + ((spoolDiameter - (wallSize * 3)) * (spoolDiameter - (wallSize * 3)))), wallSize * 2, baseHeight]);
  73. translate([wallSize * 2 + (spoolWidth - (wallSize * 2)), wallSize * 2, 0])
  74. rotate([0, 0, 180 - atan((spoolDiameter - (wallSize * 3)) / (spoolWidth - (wallSize * 2)))])
  75. translate([0, -wallSize, 0])
  76. cube([sqrt(((spoolWidth - (wallSize * 2)) * (spoolWidth - (wallSize * 2))) + ((spoolDiameter - (wallSize * 3)) * (spoolDiameter - (wallSize * 3)))), wallSize * 2, baseHeight]);
  77. }
  78. }
  79. module holder() {
  80. translate([0, wallSize + ((spoolDiameter - armWidth) / 2) + (armWidth - holderWidth) / 2 + (extraGap / 2), baseHeight + (spoolDiameter / bottomGapDivisor) + ((spoolDiameter + spoolHoleDiameter) / 2) - (spoolHoleDiameter / holderHeightDivisor)])
  81. union() {
  82. translate([wallSize + (holderExtraLength / 2), holderWidth / 2, (spoolHoleDiameter / holderHeightDivisor) / 2])
  83. rotate([0, 90, 0])
  84. cylinder(d = spoolHoleDiameter / holderHeightDivisor, h = spoolWidth - holderExtraLength);
  85. cube([wallSize + (holderExtraLength / 2), holderWidth, spoolHoleDiameter / holderHeightDivisor]);
  86. translate([wallSize + (holderExtraLength / 2) + spoolWidth - holderExtraLength, 0, 0])
  87. cube([wallSize + (holderExtraLength / 2), holderWidth, spoolHoleDiameter / holderHeightDivisor]);
  88. }
  89. }
  90. // -----------------------------------------------------------
  91. %translate([wallSize, wallSize, baseHeight + (spoolDiameter / bottomGapDivisor)])
  92. spool();
  93. if (part == "base") {
  94. base();
  95. } else {
  96. %base();
  97. }
  98. if (part == "holder") {
  99. holder();
  100. } else {
  101. %holder();
  102. }