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.
 
 

144 lines
4.4 KiB

  1. include <BOSL/constants.scad>
  2. use <BOSL/transforms.scad>
  3. use <BOSL/shapes.scad>
  4. use <SensorBox.scad>
  5. use <Vitamins.scad>
  6. servo_mount_size = [12, 32, 2.5];
  7. servo_mount_pos = [0, 0, 16];
  8. servo_mount_hole_diam = 2;
  9. servo_core_size = [12, 23, 22.3];
  10. servo_gears_size = [servo_core_size.x, servo_core_size.x, 26.5];
  11. servo_gears_pos = [0, -(servo_core_size.y/2 - servo_gears_size.y/2), 0];
  12. servo_centergears_size = [servo_core_size.x/2, servo_core_size.x/2, servo_gears_size.z];
  13. servo_centergears_pos = [0, 0, 0];
  14. servo_shaft_size = [1, 1, 28.5];
  15. servo_shaft_pos = servo_gears_pos;
  16. display_pos = [0, 8, servo_core_size.z];
  17. box_wall = 2;
  18. servo_box_round = 1;
  19. servo_box_size = [40, get_servo_box_size().y, servo_core_size.z + box_wall*2];
  20. servo_box_chamber = [servo_box_size.x - box_wall*2, servo_box_size.y - box_wall*2, servo_box_size.z - box_wall*2];
  21. servo_box_chamber_walled = [servo_box_chamber.x + box_wall, servo_box_chamber.y + box_wall, servo_box_chamber.z + box_wall];
  22. servo_box_pos = [6, 0, servo_box_size.z/2 - box_wall];
  23. servo_box_socket_size = [servo_box_size.x, servo_box_size.y, 4];
  24. servo_box_screw_joiner_size = [5, 5, 20];
  25. servo_box_screw_joiner_pos = [servo_box_size.x/2 + servo_box_screw_joiner_size.x/2, 0, 2];
  26. module servo_mount_holes() {
  27. for (i = [0:1]) {
  28. down(servo_mount_size.z)
  29. fwd((1-2*i)*(servo_mount_size.y/2 - servo_mount_hole_diam) + 0.5*(i+1))
  30. cylinder(h=servo_mount_size.z*4, d=servo_mount_hole_diam, $fn=10);
  31. }
  32. }
  33. module servo() {
  34. up(servo_core_size.z/2)
  35. cube(servo_core_size, center=true);
  36. up(servo_mount_size.z/2) translate(servo_mount_pos)
  37. difference() {
  38. cube(servo_mount_size, center=true);
  39. servo_mount_holes();
  40. }
  41. translate(servo_gears_pos) cylinder(d=servo_gears_size.x, h=servo_gears_size.z, $fn=30);
  42. translate(servo_centergears_pos) cylinder(d=servo_centergears_size.x, h=servo_centergears_size.z, $fn=20);
  43. translate(servo_shaft_pos) cylinder(d=servo_shaft_size.x, h=servo_shaft_size.z, $fn=20);
  44. }
  45. display_needle_length = 15;
  46. module display_mount_holes() {
  47. translate(-servo_shaft_pos) {
  48. #servo_mount_holes();
  49. }
  50. }
  51. module display() {
  52. angle_max = 180;
  53. angle_gap = 8;
  54. module display_pie() {
  55. up(1) zrot(-90 + angle_gap/2)
  56. pie_slice(ang=angle_max-angle_gap, l=2, r=display_needle_length);
  57. }
  58. difference() {
  59. //up(2/2) cube([20, 40, 2], center=true);
  60. minkowski() {
  61. display_pie();
  62. cylinder(r=7,h=0.1);
  63. }
  64. up(1.5) display_pie();
  65. translate(-servo_shaft_pos) {
  66. down(servo_core_size.z) servo();
  67. }
  68. display_mount_holes();
  69. }
  70. slices=20;
  71. for (i = [0:slices]) {
  72. zrot(i * (angle_max - angle_gap)/slices + angle_gap/2) fwd(display_needle_length) up(3) scale(i%5==0 ? 1 : 0.5) cube([1, 4, 2], center=true);
  73. }
  74. }
  75. module servo_box() {
  76. up(box_wall) translate(servo_box_pos) {
  77. difference() {
  78. cuboid(servo_box_size, chamfer=servo_box_round);
  79. cuboid(servo_box_chamber, chamfer=servo_box_round);
  80. }
  81. translate(servo_box_screw_joiner_pos) {
  82. fwd(20) screw_joiner(servo_box_screw_joiner_size, edges=EDGES_Z_RT);
  83. back(20) screw_joiner(servo_box_screw_joiner_size, edges=EDGES_Z_RT);
  84. }
  85. }
  86. }
  87. module servo_box_divider(socket) {
  88. up(3) {
  89. difference() {
  90. up(50 + servo_box_size.z/2 + 5) cube([500, 100, 100], center=true);
  91. up(-box_wall) translate(servo_box_pos) scale(socket ? 1 : [0.97, 0.99, 0.98]) cube(servo_box_chamber_walled, center=true);
  92. }
  93. }
  94. }
  95. module model_display() {
  96. up(box_wall) translate(display_pos) display();
  97. }
  98. module model_servo_box() {
  99. difference() {
  100. servo_box();
  101. translate(display_pos) {
  102. down(servo_core_size.z - 2) fwd(servo_gears_pos.y) servo();
  103. display_mount_holes();
  104. }
  105. }
  106. }
  107. module model_servo_box_top() {
  108. //up(box_wall + bank_inside_size.z/2)
  109. intersection() {
  110. model_servo_box();
  111. servo_box_divider(socket=true);
  112. }
  113. model_display();
  114. }
  115. module model_servo_box_bottom() {
  116. //up(box_wall + bank_inside_size.z/2)
  117. difference() {
  118. model_servo_box();
  119. servo_box_divider(socket=false);
  120. }
  121. }
  122. translate(display_pos) down(servo_core_size.z - 4) fwd(servo_gears_pos.y) %servo();
  123. model_servo_box_top();
  124. model_servo_box_bottom();