My self-made 3D-printable designs, mainly in OpenSCAD
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

Copter.scad 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. //parametric micro quadcopter frame for lulfro and others
  2. //Patrick Sapinski
  3. //v1
  4. //22/05/15
  5. motorDiameter = 7;
  6. motorHeight = 18;
  7. shellThickness = 3;
  8. armThickness = 6;
  9. m2mDistance = 90;
  10. batteryWidth = 40;
  11. propLength = 50;
  12. module makeArm() {
  13. translate([m2mDistance/2,0,0])
  14. difference() {
  15. //create the motor holder and arm
  16. union(){
  17. translate([-m2mDistance/2 + motorDiameter/2,-armThickness/2,motorHeight/2 - armThickness])
  18. cube([m2mDistance/2,armThickness,armThickness]);
  19. cylinder(h = motorHeight/2, r=motorDiameter/2 + shellThickness/2);
  20. sphere(r=motorDiameter/2 + shellThickness/2);
  21. //prop preview
  22. %rotate([0,0,45])cube([propLength,5,5],center=true);
  23. }
  24. //hollow out the motor holder
  25. sphere(r=motorDiameter/2);
  26. cylinder(h = motorHeight/2, r=motorDiameter/2);
  27. //hollow out the groove for the wire in the motor holder
  28. translate([-shellThickness,0,-shellThickness])
  29. cube([m2mDistance,armThickness - shellThickness,motorHeight],center=true);
  30. //???
  31. translate([-shellThickness*2,-armThickness/2 + shellThickness/2,-motorHeight/2])
  32. cube([motorHeight,armThickness - shellThickness,motorHeight + shellThickness]);
  33. }
  34. }
  35. difference() {
  36. union(){
  37. //create each arm
  38. rotate([0,0,45]){
  39. rotate([0,0,90]) makeArm();
  40. rotate([0,0,180]) makeArm();
  41. rotate([0,0,270]) makeArm();
  42. rotate([0,0,360]) makeArm();
  43. }
  44. //create the FC cube
  45. translate([0,0,motorHeight/2 - armThickness/2])
  46. cube([batteryWidth + shellThickness,batteryWidth + shellThickness,armThickness],center=true);
  47. }
  48. translate([0,0,motorHeight/2 - armThickness/2 - motorHeight/2 + shellThickness/2])
  49. union(){
  50. //hollow out some grooves in the arms for the wires
  51. rotate([0,0,45])
  52. cube([armThickness - shellThickness,m2mDistance/2,motorHeight/1.5],center=true);
  53. rotate([0,0,45])
  54. cube([m2mDistance/2,armThickness - shellThickness,motorHeight/1.5],center=true);
  55. }
  56. //hollow out the FC hole
  57. translate([0,0,motorHeight/2 - armThickness/2 - shellThickness/2])
  58. cube([batteryWidth,batteryWidth,armThickness],center=true);
  59. //drunk code below
  60. b = 20;
  61. h = 20;
  62. w = 4;
  63. rotate(a=[0,0,45])
  64. translate([2,2,motorHeight/2])
  65. linear_extrude(height = w, center = true, convexity = 10, twist = 0)
  66. polygon(points=[[0,0],[h,0],[0,b]], paths=[[0,1,2]]);
  67. rotate(a=[0,0,45 + 180])
  68. translate([2,2,motorHeight/2])
  69. linear_extrude(height = w, center = true, convexity = 10, twist = 0)
  70. polygon(points=[[0,0],[h,0],[0,b]], paths=[[0,1,2]]);
  71. rotate(a=[0,0,45 + 90])
  72. translate([2,2,motorHeight/2])
  73. linear_extrude(height = w, center = true, convexity = 10, twist = 0)
  74. polygon(points=[[0,0],[h,0],[0,b]], paths=[[0,1,2]]);
  75. rotate(a=[0,0,45 + 270])
  76. translate([2,2,motorHeight/2])
  77. linear_extrude(height = w, center = true, convexity = 10, twist = 0)
  78. polygon(points=[[0,0],[h,0],[0,b]], paths=[[0,1,2]]);
  79. }
  80. /*
  81. //parabolic arm attempt...
  82. module oval(w,h, height, center = false) {
  83. scale([1, h/w, 1]) cylinder(h=height, r=w, center=center);
  84. }
  85. translate([0,0,2])
  86. difference() {
  87. cube([m2mDistance,m2mDistance,fcHeight],center=true);
  88. for (i = [0 : 3])
  89. rotate([0,0,i * 90])
  90. translate([m2mDistance + 10,0,0])
  91. oval(m2mDistance/2 + 40,m2mDistance/2, 5);
  92. }
  93. */