Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

231 строка
6.6KB

  1. use <stepper.scad>
  2. use <arm.scad>
  3. use <marker.scad>
  4. use <electronics.scad>
  5. use <sg90.scad>
  6. use <switch.scad>
  7. //module arm(holes, width, thinkness, bore){
  8. arm1 = 70;
  9. arm2 = 55;
  10. x = 55; //[15:85]
  11. y = 70; //[35:85]
  12. length = sqrt(pow(x,2) + pow(y,2));
  13. arm1_sq = pow(arm1,2);
  14. arm2_sq = pow(arm2,2);
  15. length_sq = pow(length,2);
  16. b = acos((arm1_sq + length_sq - arm2_sq)/(2 * arm1 * length));
  17. c = acos((arm1_sq - length_sq + arm2_sq)/(2 * arm1 * arm2));
  18. angle1_2_offset = 0; //[-90:0:90]
  19. angle2_offset = 0; //[-90:0:180]
  20. angle1 = angle1_2_offset + b + atan2(y,x) - 90;
  21. angle2 = angle2_offset + angle1 - 90 + c;
  22. stepper_spaceing = 47;
  23. stepper_offset = 55;
  24. washer_thinkness = 0.6;
  25. arm_thickness = 3;
  26. arm_width = 10;
  27. arm_offset = 15;
  28. arm_spacing = arm_thickness+washer_thinkness;
  29. bus_diameter = 3 + arm_width;
  30. shaft_bore = 5.3;
  31. joint_bore = 3.2;
  32. joint_spacing = arm_thickness+1;
  33. set_screw_bore = 2.5;
  34. $fn = $preview? 32 : 72;
  35. module arm3 (){
  36. difference(){
  37. union(){
  38. translate([0,0,-arm_thickness/2])cylinder(d=bus_diameter,h=10-arm_thickness/2);
  39. arm([0,25],arm_width,arm_thickness,joint_bore);
  40. }
  41. cylinder(d=shaft_bore,h=16,center=true);
  42. rotate([0,-90,0]){
  43. rotate([45,0,0]) translate([arm_thickness,0,0]) cylinder(d=set_screw_bore,h=20);
  44. rotate([-45,0,0]) translate([arm_thickness,0,0]) cylinder(d=set_screw_bore,h=20);
  45. }
  46. }
  47. }
  48. module arm3b(){
  49. difference(){
  50. union(){
  51. arm3();
  52. translate([6,0,arm_thickness])hull(){
  53. cylinder(h=arm_thickness*2,d=arm_width/2,center=true);
  54. translate([12,0,0]) cylinder(h=arm_thickness*2,d=arm_width/2,center=true);
  55. }
  56. }
  57. cylinder(d=shaft_bore,h=16,center=true);
  58. }
  59. }
  60. module arm0 (){
  61. difference(){
  62. union(){
  63. cylinder(d=bus_diameter,h=20,center=true);
  64. arm([0,25],arm_width,arm_thickness,joint_bore);
  65. }
  66. cylinder(d=shaft_bore,h=21,center=true);
  67. rotate([0,-90,0]){
  68. translate([5,0,0]) cylinder(d=set_screw_bore,h=20);
  69. translate([-5,0,0]) cylinder(d=set_screw_bore,h=20);
  70. }
  71. }
  72. }
  73. module arm5a(){
  74. rotate([90, 0, 90]) arm([25,0,50],arm_width,arm_thickness,joint_bore);
  75. }
  76. module arm5b(){
  77. arm5a();
  78. difference(){
  79. translate([-arm_thickness/2-2.5,35,-14]) rotate([0,0,180]) {sg90_bracket();
  80. sg90();
  81. sg90_arm(21,135);
  82. }
  83. translate([0,25,0]) rotate([0,90,0]) cylinder(d=7,h=10,center=true);
  84. }
  85. }
  86. module arm5(){
  87. translate([joint_spacing,0,0]) arm5a();
  88. translate([-joint_spacing,0,0]) arm5b();
  89. translate([0,50,0]) difference() {cube([arm_thickness+2*joint_spacing,10,arm_width], center=true);
  90. cylinder(d=joint_bore,h=40,center=true);
  91. }
  92. }
  93. module arm6a(){
  94. union(){
  95. rotate([0,0,90]) arm([0,30-arm_width/2],arm_width,arm_thickness,joint_bore);
  96. translate([0,30-arm_width/2,0]) cube([arm_width,arm_width,arm_thickness],center=true); //cylinder(h=arm_thickness,d=arm_width,center=true);
  97. }
  98. }
  99. module arm6b(){
  100. difference() {
  101. length = 29;
  102. hull() {
  103. cylinder(h=arm_thickness, d=arm_width,center=true);
  104. translate([0,length,0]) cylinder(h=arm_thickness, d=5, center=true);
  105. }
  106. cylinder(h=arm_thickness+1, d=joint_bore,center=true);
  107. translate([0,length,0]) cylinder(h=arm_thickness+1, d=2, center=true);
  108. }
  109. }
  110. module arm6(){
  111. arm_offset = 5+arm_thickness/2+1;
  112. difference(){
  113. union(){
  114. // joint arms
  115. translate([0,0,arm_offset]) arm6a();
  116. translate([0,0,-arm_offset]) arm6a();
  117. // servo arm
  118. translate([0,0,arm_offset]) rotate([0,0,90]) arm6b();
  119. // cylinder for marker holder
  120. translate([0,30,0]) {
  121. translate([-20+arm_width/2,0,0]) rotate([0,90,0]) cylinder(d=20,h=20);
  122. translate([-5,0,0]) {
  123. // added thinkness for setscrews
  124. rotate([-45,0,0]) cylinder(d=7,h=11);
  125. rotate([-135,0,0]) cylinder(d=7,h=11);
  126. }
  127. }
  128. }
  129. translate([0,30,0]){
  130. // hole for marker
  131. translate([-20+arm_width/2-1,0,0])rotate([0,90,0]) cylinder(d=16,h=22);
  132. translate([-5,0,0]) {
  133. // holes for setscrew
  134. rotate([-45,0,0]) cylinder(d=set_screw_bore,h=40);
  135. rotate([-135,0,0]) cylinder(d=set_screw_bore,h=40);
  136. }
  137. }
  138. }
  139. }
  140. //!arm6();
  141. translate([stepper_offset,0,0]) {
  142. // stepper on joint C
  143. rotate([-90,0,-90]) stepper_103H5205();
  144. // stepper on joint A
  145. translate([0,stepper_spaceing,0]) rotate([90,0,90]) stepper_103H5205();
  146. translate([arm_offset,0,0]){
  147. //arm0
  148. translate([0,stepper_spaceing,0]) rotate([angle1,0,0]) rotate([0,90,0]) arm0();//([0,-25],arm_width,arm_thickness,5);
  149. //arm1
  150. rotate([angle1,0,0]) rotate([0,-90,0])
  151. difference(){
  152. arm([0,-25,arm1],arm_width,arm_thickness,joint_bore);
  153. cylinder(d=shaft_bore, h= 10, center=true);
  154. translate([45,10,0]) cylinder(d=16, h=10, center=true);
  155. }
  156. //arm2
  157. translate([arm_spacing,0,0]) rotate([angle1,0,0]) translate([0,0,-25]) rotate([-angle1,0,0]) rotate([90,0,90]) arm([0,stepper_spaceing],arm_width,arm_thickness,joint_bore);
  158. translate([-arm_spacing,0,0]) rotate([angle1,0,0]) translate([0,0,-25]) rotate([-angle1,0,0]) rotate([90,0,90]) arm([0,stepper_spaceing],arm_width,arm_thickness,joint_bore);
  159. //arm3
  160. rotate([angle2,0,0]){
  161. translate([arm_spacing,0,0]) rotate([-90,0,-90]) arm3(); //([0,25],arm_width,arm_thickness,5);
  162. translate([-arm_spacing,0,0]) rotate([90,0,-90]) arm3b(); //arm([0,25],arm_width,arm_thickness,5);
  163. translate([0,-25,0]) rotate([angle1-angle2,0,0]) {
  164. // arm4
  165. rotate([0,-90,0]) arm([0,arm1],arm_width,arm_thickness,joint_bore);
  166. translate([0,0,arm1]) rotate([angle2-angle1,0,0]) rotate([0,0,0]) {
  167. arm5();
  168. translate([-stepper_offset-arm_offset,arm2+25]) rotate([0,90,0]) marker("red");
  169. translate([0,50,0]){
  170. arm6();
  171. }
  172. }
  173. }
  174. }
  175. }
  176. }
  177. // electronics
  178. translate([40,0,-60]) rotate([-0,-90,0]){
  179. color("olive") translate([-12,-2,5]) cube([40,61,1]);
  180. translate([20,5,0])
  181. rotate([0,0,90]) {
  182. stepper_controller();
  183. translate([30.4,0,0]) stepper_controller();
  184. }
  185. }
  186. //carriage
  187. translate([stepper_offset,0,0]){
  188. difference(){
  189. union(){
  190. rotate([0,90,0]) {
  191. stepper_103H5205_bracket();
  192. translate([0,stepper_spaceing,0]) stepper_103H5205_bracket();
  193. }
  194. translate([9,11,-16]) rotate([90,90,0]) translate([4.5,-4.38,0]) rotate([0,0,180]) cube([10.5,3,5]);
  195. }
  196. translate([9,11,-16]) rotate([90,90,0]){
  197. translate([-4.5,0,2.85]){
  198. rotate([90,0,0]) cylinder(d=1.5,h=10);
  199. translate([7.65,0,-1.15]) rotate([90,0,0]) cylinder(d=1.4,h=10);
  200. }
  201. }
  202. }
  203. translate([-53,-25.5,-25.5])cube([40,98,4]);
  204. translate([17.5,78,-14]) rotate([90,90,0]){
  205. switch_mount();
  206. // switch();
  207. }
  208. }