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.

opi-cam-mount.scad 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. opi_cam_width = 19.0;
  2. opi_cam_height = 54.4;
  3. opi_cam_depth = 4.5;
  4. opi_cam_bottom_depth = 1.4;
  5. opi_cam_bottom_height = 30.0;
  6. opi_cam_bottom_off_y = 7.5;
  7. opi_lens_width = 8.6;
  8. opi_lens_height = 8.6;
  9. opi_lens_off_x = 5.0;
  10. opi_lens_off_y = 9.0;
  11. cable_cut_width = 15.0;
  12. wall_size = 2.0;
  13. cable_tie_width = 3.0;
  14. cable_tie_height = 2.0;
  15. cable_tie_off_1 = 9.0;
  16. cable_tie_off_2 = 47.0;
  17. screw_holes = 3.2;
  18. screw_plate = 10.0;
  19. lens_gap = 0.5;
  20. top_gap = 0.5;
  21. $fn = 10;
  22. module cam() {
  23. cube([opi_cam_width, opi_cam_height, opi_cam_depth]);
  24. translate([opi_lens_off_x, opi_cam_height - opi_lens_height - opi_lens_off_y, opi_cam_depth])
  25. cube([opi_lens_width, opi_lens_height, 5]);
  26. translate([0, opi_cam_bottom_off_y, -opi_cam_bottom_depth])
  27. cube([opi_cam_width, opi_cam_bottom_height, opi_cam_bottom_depth]);
  28. }
  29. module holder_bottom_walls() {
  30. difference() {
  31. cube([opi_cam_width + (4 * wall_size), opi_cam_height + (4 * wall_size), wall_size + opi_cam_bottom_depth]);
  32. translate([2 * wall_size, (2 * wall_size) + opi_cam_bottom_off_y, wall_size])
  33. cube([opi_cam_width, opi_cam_bottom_height, opi_cam_bottom_depth + 1]);
  34. }
  35. // inner walls
  36. translate([wall_size, wall_size, wall_size])
  37. cube([opi_cam_width + (2 * wall_size), wall_size, opi_cam_depth + opi_cam_bottom_depth]);
  38. translate([wall_size, opi_cam_height + (2 * wall_size), wall_size])
  39. cube([opi_cam_width + (2 * wall_size), wall_size, opi_cam_depth + opi_cam_bottom_depth]);
  40. translate([wall_size, 2 * wall_size, wall_size])
  41. cube([wall_size, opi_cam_height, opi_cam_depth + opi_cam_bottom_depth]);
  42. translate([opi_cam_width + (2 * wall_size), 2 * wall_size, wall_size])
  43. cube([wall_size, opi_cam_height, opi_cam_depth + opi_cam_bottom_depth]);
  44. // outer walls
  45. translate([0, 0, wall_size])
  46. cube([opi_cam_width + (4 * wall_size), wall_size, opi_cam_depth + opi_cam_bottom_depth + wall_size]);
  47. translate([0, opi_cam_height + (3 * wall_size), wall_size])
  48. cube([opi_cam_width + (4 * wall_size), wall_size, opi_cam_depth + opi_cam_bottom_depth + wall_size]);
  49. translate([0, wall_size, wall_size])
  50. cube([wall_size, opi_cam_height + (2 * wall_size), opi_cam_depth + opi_cam_bottom_depth + wall_size]);
  51. translate([opi_cam_width + (3 * wall_size), wall_size, wall_size])
  52. cube([wall_size, opi_cam_height + (2 * wall_size), opi_cam_depth + opi_cam_bottom_depth + wall_size]);
  53. }
  54. module screws() {
  55. difference() {
  56. cube([(4 * wall_size) + opi_cam_width, screw_plate, wall_size]);
  57. translate([3.3, screw_plate / 2, -1])
  58. cylinder(d = screw_holes, h = wall_size + 2);
  59. translate([23.3, screw_plate / 2, -1])
  60. cylinder(d = screw_holes, h = wall_size + 2);
  61. //translate([13.3, screw_plate / 2, -1])
  62. // cylinder(d = screw_holes, h = wall_size + 2);
  63. //translate([((4 * wall_size) + opi_cam_width) / 3, screw_plate / 2, -1])
  64. // cylinder(d = screw_holes, h = wall_size + 2);
  65. //translate([((4 * wall_size) + opi_cam_width) * 2 / 3, screw_plate / 2, -1])
  66. // cylinder(d = screw_holes, h = wall_size + 2);
  67. }
  68. }
  69. module holder_bottom() {
  70. difference() {
  71. holder_bottom_walls();
  72. // ribbon cable
  73. translate([((opi_cam_width + (4 * wall_size)) - cable_cut_width) / 2, -1, wall_size + opi_cam_bottom_depth])
  74. cube([cable_cut_width, (2 * wall_size) + 2, opi_cam_depth]);
  75. // cable-tie center
  76. translate([wall_size, ((4 * wall_size) + opi_cam_height - cable_tie_width) / 2, -1])
  77. cube([cable_tie_height, cable_tie_width, (3 * wall_size) + opi_cam_depth + opi_cam_bottom_depth]);
  78. translate([opi_cam_width + (2 * wall_size), ((4 * wall_size) + opi_cam_height - cable_tie_width) / 2, -1])
  79. cube([cable_tie_height, cable_tie_width, (3 * wall_size) + opi_cam_depth + opi_cam_bottom_depth]);
  80. // cable-tie bottom
  81. translate([wall_size, (2 * wall_size) + cable_tie_off_1, -1])
  82. cube([cable_tie_height, cable_tie_width, (3 * wall_size) + opi_cam_depth + opi_cam_bottom_depth]);
  83. translate([opi_cam_width + (2 * wall_size), (2 * wall_size) + cable_tie_off_1, -1])
  84. cube([cable_tie_height, cable_tie_width, (3 * wall_size) + opi_cam_depth + opi_cam_bottom_depth]);
  85. // cable-tie top
  86. translate([wall_size, (2 * wall_size) + cable_tie_off_2, -1])
  87. cube([cable_tie_height, cable_tie_width, (3 * wall_size) + opi_cam_depth + opi_cam_bottom_depth]);
  88. translate([opi_cam_width + (2 * wall_size), (2 * wall_size) + cable_tie_off_2, -1])
  89. cube([cable_tie_height, cable_tie_width, (3 * wall_size) + opi_cam_depth + opi_cam_bottom_depth]);
  90. }
  91. translate([0, -screw_plate, 0])
  92. screws();
  93. }
  94. module holder_top() {
  95. difference() {
  96. translate([top_gap, top_gap, 0])
  97. cube([opi_cam_width + (2 * wall_size) - (2 * top_gap), opi_cam_height + (2 * wall_size) - (2 * top_gap), wall_size]);
  98. // camera lens
  99. translate([wall_size + opi_lens_off_x - lens_gap, wall_size + opi_cam_height - opi_lens_height - opi_lens_off_y - lens_gap, -1])
  100. cube([opi_lens_width + (2 * lens_gap), opi_lens_height + (2 * lens_gap), wall_size + 2]);
  101. // cable-tie center
  102. translate([0, ((2 * wall_size) + opi_cam_height - cable_tie_width) / 2, -1])
  103. cube([cable_tie_height, cable_tie_width, wall_size + 2]);
  104. translate([opi_cam_width + wall_size, ((2 * wall_size) + opi_cam_height - cable_tie_width) / 2, -1])
  105. cube([cable_tie_height, cable_tie_width, wall_size + 2]);
  106. /*
  107. // cable-tie bottom
  108. translate([0, wall_size + cable_tie_off_1, -1])
  109. cube([cable_tie_height, cable_tie_width, wall_size + 2]);
  110. translate([opi_cam_width + wall_size, wall_size + cable_tie_off_1, -1])
  111. cube([cable_tie_height, cable_tie_width, wall_size + 2]);
  112. // cable-tie top
  113. translate([0, wall_size + cable_tie_off_2, -1])
  114. cube([cable_tie_height, cable_tie_width, wall_size + 2]);
  115. translate([opi_cam_width + wall_size, wall_size + cable_tie_off_2, -1])
  116. cube([cable_tie_height, cable_tie_width, wall_size + 2]);
  117. */
  118. }
  119. }
  120. module cam_holder() {
  121. holder_bottom();
  122. %translate([2 * wall_size, 2 * wall_size, wall_size])
  123. cam();
  124. translate([wall_size, wall_size, wall_size + opi_cam_depth + opi_cam_bottom_depth])
  125. holder_top();
  126. }
  127. cam_holder();