|  | @ -2,14 +2,15 @@ $fn = 128; | 
		
	
		
			
				|  |  | with_frame=1; |  |  | with_frame=1; | 
		
	
		
			
				|  |  | with_akku=0; |  |  | with_akku=0; | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | with_props=1; |  |  |  | 
		
	
		
			
				|  |  |  |  |  | with_props=0; | 
		
	
		
			
				|  |  | with_motor=1; |  |  | with_motor=1; | 
		
	
		
			
				|  |  | with_pcbs=1; |  |  |  | 
		
	
		
			
				|  |  |  |  |  | with_pcbs=0; | 
		
	
		
			
				|  |  | with_motor_brim=1; |  |  | with_motor_brim=1; | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | name="Malaika"; |  |  |  | 
		
	
		
			
				|  |  | version="v1.2"; |  |  |  | 
		
	
		
			
				|  |  |  |  |  | name="phschoen"; | 
		
	
		
			
				|  |  |  |  |  | version="v1.3"; | 
		
	
		
			
				|  |  | text_depth=0.5; |  |  | text_depth=0.5; | 
		
	
		
			
				|  |  |  |  |  | with_cam=true; | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | motor_d = 8.75;//8.620; |  |  | motor_d = 8.75;//8.620; | 
		
	
		
			
				|  |  | motor_r=motor_d/2; |  |  | motor_r=motor_d/2; | 
		
	
	
		
			
				|  | @ -38,6 +39,11 @@ body_wall_thickness = 2; | 
		
	
		
			
				|  |  | body_bottom_flange = 5; |  |  | body_bottom_flange = 5; | 
		
	
		
			
				|  |  | body_bottom_bridge = 6; |  |  | body_bottom_bridge = 6; | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | cam_width = 14; | 
		
	
		
			
				|  |  |  |  |  | cam_angle = 20; | 
		
	
		
			
				|  |  |  |  |  | cam_pos = body_width/2 +5; | 
		
	
		
			
				|  |  |  |  |  | cam_hight = 5; | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  | triangle_cut_height = 10; |  |  | triangle_cut_height = 10; | 
		
	
		
			
				|  |  | cable_cut_width = 3; |  |  | cable_cut_width = 3; | 
		
	
		
			
				|  |  | cable_cut_height = 3; |  |  | cable_cut_height = 3; | 
		
	
	
		
			
				|  | @ -63,6 +69,45 @@ module triangle_cuts(h=4) { | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | module cam_tx06(with_hull = false) { | 
		
	
		
			
				|  |  |  |  |  |     q = 20; | 
		
	
		
			
				|  |  |  |  |  |     hcam = 13;         // camera height | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  |     le = 0; | 
		
	
		
			
				|  |  |  |  |  |     translate([ 0,0, 0]) { | 
		
	
		
			
				|  |  |  |  |  |         color("green") | 
		
	
		
			
				|  |  |  |  |  |         if (with_hull) | 
		
	
		
			
				|  |  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |  |             hull() | 
		
	
		
			
				|  |  |  |  |  |             { | 
		
	
		
			
				|  |  |  |  |  |                 translate([ 0,-7.0, 0]) cube([0.8,14,  hcam  ]);   // front pcb | 
		
	
		
			
				|  |  |  |  |  |                 translate([-5,-7.0, 0]) cube([0.8,14,  hcam  ]);   // back pcb | 
		
	
		
			
				|  |  |  |  |  |                 translate([-5,-2.5,13]) cube([0.8, 5,   2  ]);     // antena pcb | 
		
	
		
			
				|  |  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |  |         } else { | 
		
	
		
			
				|  |  |  |  |  |             translate([ 0,-7.0, 0]) cube([0.8,14,  hcam  ]);   // front pcb | 
		
	
		
			
				|  |  |  |  |  |             translate([-5,-7.0, 0]) cube([0.8,14,  hcam  ]);   // back pcb | 
		
	
		
			
				|  |  |  |  |  |             translate([-5,-2.5,13]) cube([0.8, 5,   2  ]);     // antena pcb | 
		
	
		
			
				|  |  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  |         color("grey") { | 
		
	
		
			
				|  |  |  |  |  |             translate([0.1,0, 6]) rotate([0,90,0]) cylinder(d= 8, h=6,$fn=4*q); | 
		
	
		
			
				|  |  |  |  |  |             translate([6  ,0, 6]) rotate([0,90,0]) cylinder(d=10, h=3,$fn=4*q); | 
		
	
		
			
				|  |  |  |  |  |             translate([-6.25,4.,12]) cube([1, 2, 2]); | 
		
	
		
			
				|  |  |  |  |  |             translate([-4.5,5.,2]) cube([4.5, 2, 3.6]); | 
		
	
		
			
				|  |  |  |  |  |             translate([-4,0, 15]) rotate([0,le,0]) translate([0,0,  5]) cylinder(d=3, h=28, $fn=2*q); | 
		
	
		
			
				|  |  |  |  |  |             translate([-4,0, 15]) rotate([0,le,0]) translate([0,0, 10]) cylinder(d=5, h=10, $fn=3*q); | 
		
	
		
			
				|  |  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |  |         color("wheat") { | 
		
	
		
			
				|  |  |  |  |  |             translate([-4,0, 15]) rotate([0,le,0]) cylinder(d=1.5, h=5, $fn=2*q); | 
		
	
		
			
				|  |  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |  |         color("silver") { | 
		
	
		
			
				|  |  |  |  |  |             translate([-6.5,3,11]) cube([1.5, 4, 2]); | 
		
	
		
			
				|  |  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  | module pcb_flight_controller() { |  |  | module pcb_flight_controller() { | 
		
	
		
			
				|  |  |     flight_controller = [20, 28,2]; |  |  |     flight_controller = [20, 28,2]; | 
		
	
		
			
				|  |  |     cube(flight_controller); |  |  |     cube(flight_controller); | 
		
	
	
		
			
				|  | @ -171,6 +216,7 @@ module body() { | 
		
	
		
			
				|  |  |             // board mount |  |  |             // board mount | 
		
	
		
			
				|  |  |             color("red") |  |  |             color("red") | 
		
	
		
			
				|  |  |                 aligned_cube([body_width, body_width, body_height]); |  |  |                 aligned_cube([body_width, body_width, body_height]); | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |         // board pcb cutout |  |  |         // board pcb cutout | 
		
	
	
		
			
				|  | @ -195,16 +241,23 @@ module body() { | 
		
	
		
			
				|  |  |         // text stamp |  |  |         // text stamp | 
		
	
		
			
				|  |  |         union() |  |  |         union() | 
		
	
		
			
				|  |  |         { |  |  |         { | 
		
	
		
			
				|  |  |             rotate([0,0,90]) { |  |  |  | 
		
	
		
			
				|  |  |                 translate([0,-body_width/2+text_depth-eps,body_height/2]) |  |  |  | 
		
	
		
			
				|  |  |                 rotate([90,0,0]) |  |  |  | 
		
	
		
			
				|  |  |                 linear_extrude(height = text_depth) |  |  |  | 
		
	
		
			
				|  |  |                 { |  |  |  | 
		
	
		
			
				|  |  |                     translate([0,2,0]) |  |  |  | 
		
	
		
			
				|  |  |                     text(halign="center",valign="center", $fn=$fn, size=5,font="Linux Libertine:style=Bold", "Toolbox"); |  |  |  | 
		
	
		
			
				|  |  |                     translate([0,-3,0]) |  |  |  | 
		
	
		
			
				|  |  |                     text(halign="center",valign="center", $fn=$fn, size=3,font="Linux Libertine:style=Bold", version); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             if (with_cam == false) | 
		
	
		
			
				|  |  |  |  |  |             { | 
		
	
		
			
				|  |  |  |  |  |                 rotate([0,0,90]) { | 
		
	
		
			
				|  |  |  |  |  |                     translate([0,-body_width/2+text_depth-eps,body_height/2]) | 
		
	
		
			
				|  |  |  |  |  |                     rotate([90,0,0]) | 
		
	
		
			
				|  |  |  |  |  |                     linear_extrude(height = text_depth) | 
		
	
		
			
				|  |  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |  |                         translate([0,2,0]) | 
		
	
		
			
				|  |  |  |  |  |                         text(halign="center",valign="center", $fn=$fn, size=5,font="Linux Libertine:style=Bold", "Toolbox"); | 
		
	
		
			
				|  |  |  |  |  |                         translate([0,-3,0]) | 
		
	
		
			
				|  |  |  |  |  |                         text(halign="center",valign="center", $fn=$fn, size=3,font="Linux Libertine:style=Bold", version); | 
		
	
		
			
				|  |  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |                 } |  |  |                 } | 
		
	
		
			
				|  |  |  |  |  |             }else { | 
		
	
		
			
				|  |  |  |  |  |                 translate([body_width/2, 0, body_wall_thickness]) | 
		
	
		
			
				|  |  |  |  |  |                 aligned_cube([10, cam_width, body_height+eps]); | 
		
	
		
			
				|  |  |             } |  |  |             } | 
		
	
		
			
				|  |  |             rotate([0,0,180]) { |  |  |             rotate([0,0,180]) { | 
		
	
		
			
				|  |  |                 translate([0,-body_width/2+text_depth-eps,body_height/2]) |  |  |                 translate([0,-body_width/2+text_depth-eps,body_height/2]) | 
		
	
	
		
			
				|  | @ -217,6 +270,37 @@ module body() { | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |  |  |  |             color("orange") | 
		
	
		
			
				|  |  |  |  |  |             if (with_cam) { | 
		
	
		
			
				|  |  |  |  |  |                 difference() { | 
		
	
		
			
				|  |  |  |  |  |                     translate([body_width/2, 0, 0]) | 
		
	
		
			
				|  |  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |  |                         intersection() { | 
		
	
		
			
				|  |  |  |  |  |                         rotate([0,-cam_angle,0]) | 
		
	
		
			
				|  |  |  |  |  |                         aligned_cube([10, cam_width+body_wall_thickness*2, body_height], [0,1,0]); | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  |                         aligned_cube([10, cam_width+body_wall_thickness*2, body_height], [0,1,0]); | 
		
	
		
			
				|  |  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  |                     translate([body_width/2+5, 0, 0]) | 
		
	
		
			
				|  |  |  |  |  |                     translate([3.5,0,5]) | 
		
	
		
			
				|  |  |  |  |  |                     rotate([0,90-cam_angle,0]) | 
		
	
		
			
				|  |  |  |  |  |                     rotate([0,0,90]) | 
		
	
		
			
				|  |  |  |  |  |                     linear_extrude(height = text_depth) | 
		
	
		
			
				|  |  |  |  |  |                     text(halign="center",valign="center", $fn=$fn, size=3,font="Linux Libertine:style=Bold", version); | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  |                     rotate([0,-cam_angle,0]) | 
		
	
		
			
				|  |  |  |  |  |                     translate([cam_pos,0,-8.5]) | 
		
	
		
			
				|  |  |  |  |  |                     scale([1.05,1.05,1.2]) | 
		
	
		
			
				|  |  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |  |                         for (i = [0:1:10]) | 
		
	
		
			
				|  |  |  |  |  |                         translate([0,0,i + cam_hight]) | 
		
	
		
			
				|  |  |  |  |  |                         cam_tx06(with_hull=true); | 
		
	
		
			
				|  |  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |  |             } | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | module quad() { |  |  | module quad() { | 
		
	
	
		
			
				|  | @ -237,6 +321,12 @@ module quad() { | 
		
	
		
			
				|  |  |             akku_holder(); |  |  |             akku_holder(); | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |  |  |  |     if (with_cam) { | 
		
	
		
			
				|  |  |  |  |  |         translate([cam_pos, 0, 0]) | 
		
	
		
			
				|  |  |  |  |  |         rotate([0,-cam_angle,0]) | 
		
	
		
			
				|  |  |  |  |  |         translate([0, 0, cam_hight]) | 
		
	
		
			
				|  |  |  |  |  |             %cam_tx06(); | 
		
	
		
			
				|  |  |  |  |  |     } | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | module akku_holder() { |  |  | module akku_holder() { | 
		
	
	
		
			
				|  | 
 |