Advertisement
Guest User

Untitled

a guest
Oct 11th, 2023
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.83 KB | Source Code | 0 0
  1. // Snake Puzzle
  2. // Written by Marius Gheorghescu (@mgx3d)
  3.  
  4. // edge length in mm (15 .. 150mm)
  5. size = 20;
  6.  
  7. /* [Hidden] */
  8.  
  9. // depth of the coupler (1.0 .. 3.0mm)
  10. coupler_depth = min(5, size/10);
  11. clip_ring_depth = coupler_depth/1.5;
  12. connector_dia = size*0.95 - 6*clip_ring_depth - 1.0;
  13.  
  14. clearance = 0.25;
  15. epsilon = 0.01;
  16.  
  17. $fn = 50;
  18.  
  19. debug = 0;
  20.  
  21.  
  22.  
  23. module prism(size)
  24. {
  25. intersection() {
  26. translate([0,0, size])
  27. cube([size*2, size*2, size*2], center=true);
  28.  
  29. rotate([45, 0, 0])
  30. cube([size, size, size], center=true);
  31. }
  32. }
  33.  
  34.  
  35. module piece()
  36. {
  37. chamfer = 0.5;
  38. difference()
  39. {
  40. prism(size);
  41.  
  42. if (0) {
  43. // save material ?
  44. translate([0,0,coupler_depth/2*0])
  45. difference() {
  46. prism(size-2*coupler_depth);
  47. cube([2*size, 2*size, 2*coupler_depth], center=true);
  48. }
  49. }
  50.  
  51.  
  52. rotate([45,0,0])
  53. translate([0,0,size - coupler_depth - epsilon]) {
  54. cylinder(r=connector_dia/2, h=size, center=true);
  55. translate([0,0, - size/2 + 0*coupler_depth/2])
  56. cylinder(r1=connector_dia/2 + clip_ring_depth, r2=connector_dia/2, h=coupler_depth, center=true);
  57. }
  58.  
  59. rotate([-45,0,0])
  60. translate([0,0,size - coupler_depth - epsilon]) {
  61. cylinder(r=connector_dia/2, h=size, center=true);
  62. translate([0,0, - size/2 + 0*coupler_depth/2])
  63. cylinder(r1=connector_dia/2 + clip_ring_depth, r2=connector_dia/2, h=coupler_depth, center=true);
  64. }
  65.  
  66. //
  67. // chamfers
  68. //
  69.  
  70. translate([0, size*sqrt(2)/2 - chamfer/2, 0])
  71. rotate([45,0,0])
  72. cube([2*size, chamfer, chamfer], center=true);
  73.  
  74. translate([0, -size*sqrt(2)/2 + chamfer/2, 0])
  75. rotate([45,0,0])
  76. cube([2*size, chamfer, chamfer], center=true);
  77.  
  78. translate([-size/2,0,0])
  79. rotate([45,0,90])
  80. cube([2*size, chamfer, chamfer], center=true);
  81.  
  82. translate([size/2,0,0])
  83. rotate([45,0,90])
  84. cube([2*size, chamfer, chamfer], center=true);
  85.  
  86. translate([-size/2,0,size*sqrt(2)/2])
  87. rotate([45,0,90])
  88. cube([2*size, chamfer, chamfer], center=true);
  89.  
  90. translate([size/2,0,size*sqrt(2)/2])
  91. rotate([45,0,90])
  92. cube([2*size, chamfer, chamfer], center=true);
  93.  
  94. if (debug)
  95. translate([0,0,-epsilon])
  96. cube([size,size,size]);
  97. }
  98. }
  99.  
  100.  
  101. module coupler()
  102. {
  103. wall_thickness = size/10;
  104.  
  105. translate([0,0,coupler_depth*1.25 - clearance/2])
  106. difference() {
  107. union() {
  108. translate([0,0,-coupler_depth*0.75])
  109. cylinder(r1=connector_dia/2 + clip_ring_depth, r2=connector_dia/2, h=coupler_depth - clearance, center=true);
  110.  
  111. translate([0,0,coupler_depth*0.75])
  112. cylinder(r2=connector_dia/2 + clip_ring_depth, r1=connector_dia/2, h=coupler_depth - clearance, center=true);
  113.  
  114. cylinder(r=connector_dia/2, h=2*coupler_depth, center=true);
  115. }
  116.  
  117. // empty inside
  118. cylinder(r=connector_dia/2 - size/8 + 1, h=3*coupler_depth, center=true);
  119.  
  120. // cut-out for ring compression
  121. hull() {
  122. translate([connector_dia/2 + coupler_depth,0,])
  123. cube([clip_ring_depth, size/5, 3*coupler_depth], center=true);
  124. cube([1, 1, 3*coupler_depth], center=true);
  125. }
  126. }
  127. }
  128.  
  129.  
  130. if (debug) {
  131. // show coupler inside
  132. %rotate([-45,0,0])
  133. translate([0,0,size/2 - coupler_depth - clearance])
  134. color([0.9, 0.1, 0.1, 0.2]) coupler();
  135. }
  136.  
  137. piece();
  138. translate([size, 0, 0]) coupler();
  139.  
  140.  
  141.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement