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.

fpv_top.scad 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /*
  2. * Created by:
  3. * Thomas Buck <xythobuz@xythobuz.de> in June 2016
  4. *
  5. * Licensed under the
  6. * Creative Commons - Attribution - Share Alike license.
  7. */
  8. // -----------------------------------------------------------
  9. dist_x = 44;
  10. dist_y = 68.5;
  11. height = 35;
  12. base_height = 2;
  13. diameter = 6.5;
  14. hole = 2.5;
  15. cuts = 4;
  16. vtx_width = 21;
  17. vtx_height = 28;
  18. vtx_x = ((dist_x - vtx_width) / 2) - 3;
  19. vtx_y = 2;
  20. vtx_off_1 = 0.15;
  21. vtx_off_2 = 0.5;
  22. osd_width = 51;
  23. osd_height = 24;
  24. osd_x = (dist_x - osd_width) / 2;
  25. osd_y = dist_y - osd_height - 6;
  26. osd_off_1 = 0.3;
  27. osd_off_2 = 0.7;
  28. display_hole = 3;
  29. display_width = 6;
  30. display_length = 6;
  31. display_depth = 2;
  32. display_depth_add = 2;
  33. display_dist = 21;
  34. display_off_x = 13;
  35. display_off_y = 2.23;
  36. display_off_z = -3.08;
  37. display_angle = 35;
  38. add_handle = 0; // [0,1]
  39. handle = 3;
  40. helper_plate = 0.2;
  41. $fn = 25;
  42. // -----------------------------------------------------------
  43. module leg() {
  44. difference() {
  45. cylinder(d = diameter, h = height);
  46. translate([0, 0, -1])
  47. cylinder(d = hole, h = height + 2);
  48. }
  49. }
  50. module legs() {
  51. leg();
  52. translate([dist_x, 0, 0])
  53. leg();
  54. translate([dist_x, dist_y, 0])
  55. leg();
  56. translate([0, dist_y, 0])
  57. leg();
  58. }
  59. module handle() {
  60. rotate([90, 0, 0])
  61. translate([dist_x / 2, dist_y / 2 + handle / 2, base_height])
  62. difference() {
  63. cylinder(d = dist_x, h = handle);
  64. translate([0, 0, -1])
  65. cylinder(d = dist_x - handle, h = handle + 2);
  66. translate([-dist_x / 2, -dist_x / 2, -1])
  67. cube([dist_x, dist_x / 2, handle + 2]);
  68. }
  69. }
  70. module display_nub() {
  71. translate([0, 0, -display_depth_add])
  72. difference() {
  73. cube([display_width, display_length, display_depth + display_depth_add]);
  74. translate([display_width / 2, display_width / 2, -1])
  75. cylinder(d = display_hole, h = display_depth + display_depth_add + 2);
  76. }
  77. }
  78. module display() {
  79. translate([display_off_x, -display_length + display_off_y, display_off_z])
  80. rotate([display_angle, 0, 0])
  81. union() {
  82. display_nub();
  83. translate([display_dist, 0, 0])
  84. display_nub();
  85. }
  86. }
  87. module base() {
  88. difference() {
  89. cube([dist_x, dist_y, base_height]);
  90. // VTX holes
  91. translate([vtx_x - (cuts / 2), vtx_y + (cuts / 2) + (vtx_off_1 * vtx_height), -1])
  92. cylinder(d = cuts, h = base_height + 2);
  93. translate([vtx_x - (cuts / 2), vtx_y + (cuts / 2) + (vtx_off_2 * vtx_height), -1])
  94. cylinder(d = cuts, h = base_height + 2);
  95. translate([vtx_x + (cuts / 2) + vtx_width, vtx_y + (cuts / 2) + (vtx_off_1 * vtx_height), -1])
  96. cylinder(d = cuts, h = base_height + 2);
  97. translate([vtx_x + (cuts / 2) + vtx_width, vtx_y + (cuts / 2) + (vtx_off_2 * vtx_height), -1])
  98. cylinder(d = cuts, h = base_height + 2);
  99. // OSD holes
  100. translate([osd_x - (cuts / 2) + (osd_off_1 * osd_width), osd_y - (cuts / 2), -1])
  101. cylinder(d = cuts, h = base_height + 2);
  102. translate([osd_x - (cuts / 2) + (osd_off_2 * osd_width), osd_y - (cuts / 2), -1])
  103. cylinder(d = cuts, h = base_height + 2);
  104. translate([osd_x - (cuts / 2) + (osd_off_1 * osd_width), osd_y + (cuts / 2) + osd_height, -1])
  105. cylinder(d = cuts, h = base_height + 2);
  106. translate([osd_x - (cuts / 2) + (osd_off_2 * osd_width), osd_y + (cuts / 2) + osd_height, -1])
  107. cylinder(d = cuts, h = base_height + 2);
  108. }
  109. translate([-diameter / 2, -diameter / 2, base_height - helper_plate])
  110. cube([dist_x + diameter, dist_y + diameter, helper_plate]);
  111. cylinder(d = diameter, h = base_height);
  112. translate([dist_x, 0, 0])
  113. cylinder(d = diameter, h = base_height);
  114. translate([dist_x, dist_y, 0])
  115. cylinder(d = diameter, h = base_height);
  116. translate([0, dist_y, 0])
  117. cylinder(d = diameter, h = base_height);
  118. display();
  119. if (add_handle) {
  120. handle();
  121. }
  122. }
  123. // -----------------------------------------------------------
  124. translate([dist_x, 0, base_height + height])
  125. rotate([0, 180, 0])
  126. union() {
  127. legs();
  128. translate([0, 0, height])
  129. base();
  130. %translate([vtx_x, vtx_y, height + base_height])
  131. cube([vtx_width, vtx_height, 5]);
  132. %translate([osd_x, osd_y, height + base_height])
  133. cube([osd_width, osd_height, 10]);
  134. }