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.

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. */