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.

camera-mount.scad 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /*
  2. * Created by:
  3. * Thomas Buck <xythobuz@xythobuz.de> in May 2016
  4. *
  5. * Licensed under the
  6. * Creative Commons - Attribution - Share Alike license.
  7. */
  8. // -----------------------------------------------------------
  9. width_outer = 47.8;
  10. height_outer = 31.5;
  11. hole = 7;
  12. depth = 1.8;
  13. wall = 1.4;
  14. inner_y_offset = -1;
  15. diameter_big = 58;
  16. offset_big = 23;
  17. diameter_mid = 60;
  18. offset_mid = 24.5;
  19. diameter_small = 22;
  20. offset_small = 8;
  21. fpv_width = 36.5;
  22. fpv_depth = 11;
  23. fpv_offset = 5;
  24. fpv_hole = 2.5;
  25. fpv_holder_width = 8;
  26. fpv_holder_top = 2.5;
  27. fpv_wall = 2;
  28. cam_depth = 15.5;
  29. cam_base_height = 9;
  30. cam_arm_height = 17;
  31. cam_arm_hole_dist = 9.5;
  32. cam_arm_hole = 5;
  33. cam_arm_width = 3.1;
  34. cam_arm_dist = 3.1;
  35. cam_nut_outer = 12;
  36. cam_nut_inner = 9.2;
  37. cam_nut_height = 4;
  38. cam_holder_offset = 13.8;
  39. $fn = 30;
  40. // -----------------------------------------------------------
  41. module half_cylinder(d, h) {
  42. rotate([0, 0, 180])
  43. difference() {
  44. cylinder(d = d, h = h);
  45. translate([-(d / 2), 0, -1])
  46. cube([d, d / 2, h + 2]);
  47. }
  48. }
  49. module cam_arm() {
  50. difference() {
  51. union() {
  52. cube([cam_arm_width, cam_depth, cam_arm_hole_dist]);
  53. translate([0, cam_depth / 2, cam_arm_hole_dist])
  54. rotate([90, 0, 90])
  55. half_cylinder(cam_depth, cam_arm_width);
  56. }
  57. translate([-1, cam_depth / 2, cam_arm_hole_dist])
  58. rotate([0, 90, 0])
  59. cylinder(d = cam_arm_hole, h = cam_arm_width + 2);
  60. }
  61. }
  62. module cam_arm_nut() {
  63. translate([-cam_nut_height, 0, 0])
  64. rotate([0, 90, 0])
  65. difference() {
  66. cylinder(d = cam_nut_outer, h = cam_nut_height);
  67. translate([0, 0, -1])
  68. cylinder(d = cam_nut_inner, h = cam_nut_height + 2, $fn = 6);
  69. }
  70. }
  71. module cam_holder() {
  72. cube([(3 * cam_arm_width) + (2 * cam_arm_dist), cam_depth, cam_base_height]);
  73. translate([0, 0, cam_base_height])
  74. cam_arm();
  75. translate([0, cam_depth / 2, cam_base_height + cam_arm_hole_dist])
  76. cam_arm_nut();
  77. translate([cam_arm_width + cam_arm_dist, 0, cam_base_height])
  78. cam_arm();
  79. translate([2 * (cam_arm_width + cam_arm_dist), 0, cam_base_height])
  80. cam_arm();
  81. }
  82. module base() {
  83. difference() {
  84. cube([width_outer, height_outer, depth]);
  85. translate([wall + (hole / 2), wall + (hole / 2), -1])
  86. cylinder(d = hole, h = depth + 2);
  87. translate([width_outer - wall - (hole / 2), wall + (hole / 2), -1])
  88. cylinder(d = hole, h = depth + 2);
  89. translate([wall + (hole / 2), height_outer - wall - (hole / 2), -1])
  90. cylinder(d = hole, h = depth + 2);
  91. translate([width_outer - wall - (hole / 2), height_outer - wall - (hole / 2), -1])
  92. cylinder(d = hole, h = depth + 2);
  93. translate([width_outer / 2, -offset_mid, -1])
  94. cylinder(d = diameter_mid, h = depth + 2);
  95. translate([width_outer / 2, height_outer + offset_big, -1])
  96. cylinder(d = diameter_big, h = depth + 2);
  97. translate([-offset_small, height_outer / 2, -1])
  98. cylinder(d = diameter_small, h = depth + 2);
  99. translate([width_outer + offset_small, height_outer / 2, -1])
  100. cylinder(d = diameter_small, h = depth + 2);
  101. translate([0, 0, -1])
  102. rotate([0, 0, 45])
  103. translate([-2.8, -2.8, 0])
  104. cube([5, 5, depth + 2]);
  105. translate([width_outer, 0, -1])
  106. rotate([0, 0, 45])
  107. translate([-2.8, -2.8, 0])
  108. cube([5, 5, depth + 2]);
  109. translate([0, height_outer, -1])
  110. rotate([0, 0, 45])
  111. translate([-2.8, -2.2, 0])
  112. cube([5, 5, depth + 2]);
  113. translate([width_outer, height_outer, -1])
  114. rotate([0, 0, 45])
  115. translate([-2.2, -2.2, 0])
  116. cube([5, 5, depth + 2]);
  117. }
  118. }
  119. module arm() {
  120. difference() {
  121. cube([fpv_wall, fpv_holder_width, fpv_offset + (fpv_width / 2) + (fpv_hole / 2) + fpv_holder_top]);
  122. translate([-1, fpv_holder_width / 2, fpv_offset + (fpv_width / 2)])
  123. rotate([0, 90, 0])
  124. cylinder(d = fpv_hole, h = fpv_wall + 2);
  125. }
  126. }
  127. module fpv_holder() {
  128. arm();
  129. translate([fpv_width + fpv_wall, 0, 0])
  130. arm();
  131. }
  132. // -----------------------------------------------------------
  133. base();
  134. translate([(width_outer - fpv_width) / 2 - fpv_wall, (height_outer - fpv_holder_width) / 2, depth])
  135. fpv_holder();
  136. translate([cam_holder_offset, (height_outer + cam_depth) / 2, 0])
  137. rotate([180, 0, 0])
  138. cam_holder();
  139. // -----------------------------------------------------------
  140. /*
  141. %translate([(width_outer - fpv_width) / 2, (height_outer - fpv_depth) / 2, depth + fpv_offset])
  142. cube([fpv_width, fpv_depth, fpv_width]);
  143. %translate([width_outer / 2, (height_outer - fpv_depth) / 2 + 1, depth + fpv_offset + (fpv_width / 2)])
  144. rotate([90, 0, 0])
  145. cylinder(d = fpv_width / 3, h = 8);
  146. */