Beta FPV HX115 Canopy
This is one of my more 'creative' designs, it's a canopy for the Beta FPV HX115.
It makes heavy use of hull() to produce the faceted design. It needs holes drilling for the camera mount and
VTX antenna.
$fn=80;
module babyTurtle() {
module body() {
hull() {
cube([14,14,0.01], center=true);
translate([0,0,9.5]) cube([12.5,12.5,0.01], center=true);
}
translate([0,0,9.5]) cylinder(d=10.5,h=9);
}
module mountHole() {
translate([-14/2,0,6.5]) rotate([0,90,0]) {
difference() {
cylinder(d=5,h=14);
translate([0,0,-0.5]) cylinder(d=2,h=15);
}
%translate([0,0,-5.5]) cylinder(d=2,h=25);
}
}
translate([0,0,-6.5]) {
body();
mountHole();
}
}
module vtx() {
module body() {
hull() {
cube([3.3,29,1], center=true);
translate([-16.5,0,0]) cube([0.01,8.2,1], center=true);
}
}
module mountHoles() {
translate([0.75-(2.5/2),(29/2)-1-(2.5/2),-2]) cylinder(d=2.5,h=4);
translate([0.75-(2.5/2),-((29/2)-1-(2.5/2)),-2]) cylinder(d=2.5,h=4);
}
module connector() {
translate([-4,5.5,2]) rotate([0,0,-55]) cube([4.5,7.5,3.1], center=true);
}
module antenna() {
translate([-22.5,0,0]) rotate([0,90,0]) cylinder(d=4.3,h=6);
}
difference() {
body();
mountHoles();
}
connector();
antenna();
}
module propClearnce() {
rotate([0,0,45]) translate([115/2,0,0]) cylinder(d=72,h=6);
rotate([0,0,45+90]) translate([115/2,0,0]) cylinder(d=72,h=6);
rotate([0,0,45+180]) translate([115/2,0,0]) cylinder(d=72,h=6);
rotate([0,0,45+270]) translate([115/2,0,0]) cylinder(d=72,h=6);
}
module frameMountHoles() {
translate([47.8/2,0,0]) cylinder(d=2,h=1);
translate([-47.8/2,0,0]) cylinder(d=2,h=1);
translate([0,47.8/2,0]) cylinder(d=2,h=1);
translate([0,-47.8/2,0]) cylinder(d=2,h=1);
}
module cameraClearance() {
translate([0,-10,10]) {
hull () {
rotate([90-15,0,0]) babyTurtle();
rotate([90-25,0,0]) babyTurtle();
rotate([90-35,0,0]) babyTurtle();
rotate([90-55,0,0]) babyTurtle();
rotate([90-65,0,0]) babyTurtle();
}
%rotate([90-30,0,0]) babyTurtle();
}
}
module canopy() {
module cameraShroud() {
hull() {
translate([0,-47.8/2,-1]) cylinder(d=4,h=3);
translate([0,-6,27]) cube([8,5,5], center=true);
translate([0,-14,20]) cube([20,5,5], center=true);
translate([0,-10,15]) cube([23,5,5], center=true);
translate([0,-12,0]) cube([22,1,2], center=true);
translate([0,-1,14]) cube([19,5,2], center=true);
}
}
module cameraShrouldHollow() {
hull() {
translate([0,(-47.8/2)+2,-2]) cylinder(d=4,h=3);
translate([0,-4,25]) cube([6,5,5], center=true);
translate([0,-12,20]) cube([18,5,3], center=true);
translate([0,-10,15]) cube([20,5,5], center=true);
translate([0,-12,0]) cube([20,3,2], center=true);
translate([0,-1,14]) cube([17,5,2], center=true);
}
}
module rear() {
hull() {
translate([0,-6,27]) cube([8,5,5], center=true);
translate([0,11,20]) cube([4,5,5], center=true);
translate([0,25,-0.5]) cube([1,1,1], center=true);
translate([0,-1,14]) cube([19,5,2], center=true);
}
}
module rearHollow() {
hull() {
translate([0,-8,25]) cube([8,5,5], center=true);
translate([0,9,18]) cube([4,5,5], center=true);
translate([0,23,-0.5]) cube([1,1,1], center=true);
translate([0,-3,14]) cube([17,5,2], center=true);
}
}
module underside() {
hull() {
translate([0,0,0]) cube([48,5,2], center=true);
translate([47.8/2,0,-1]) cylinder(d=4,h=1);
translate([-47.8/2,0,-1]) cylinder(d=4,h=1);
translate([0,25,-0.5]) cube([1,1,1], center=true);
translate([0,-10,0]) cube([22,5,2], center=true);
translate([0,-10,12]) cube([22,5,1], center=true);
translate([0,-1,14]) cube([19,5,2], center=true);
}
}
module underSideHollow() {
hull() {
translate([0,0,-1]) cube([44,4,2], center=true);
translate([0,24,-1]) cube([1,1,1], center=true);
translate([0,-8,-1]) cube([22,5,2], center=true);
translate([0,-8,10]) cube([22,5,1], center=true);
translate([0,-1,12]) cube([18,5,2], center=true);
}
}
module hollow() {
cameraShrouldHollow();
rearHollow();
underSideHollow();
}
difference() {
union() {
cameraShroud();
rear();
underside();
}
translate([0,0,5]) cameraClearance();
hollow();
}
}
module stackCover() {
module frame() {
difference() {
linear_extrude(height=9) projection(cut=true) canopy();
stack();
}
}
module standoffs() {
module standoff() {
cylinder(d=4,h=11);
}
translate([47.8/2,0,0]) standoff();
translate([-47.8/2,0,0]) standoff();
translate([0,-47.8/2,0]) standoff();
}
module standoffHoles() {
module standoffHole() {
translate([0,0,-0.5]) cylinder(d=2,h=12);
}
translate([47.8/2,0,0]) standoffHole();
translate([-47.8/2,0,0]) standoffHole();
translate([0,-47.8/2,0]) standoffHole();
}
difference() {
union() {
frame();
translate([0,0,-2]) standoffs();
}
standoffHoles();
}
}
//%translate([0,0,-9]) stackCover();
canopy();
module stack() {
translate([0,0,11/2]) rotate([0,0,45]) cube([32,32,11], center=true);
}
//%translate([0,0,-12]) stack();
//%translate([0,0,-12]) frameMountHoles();
//%translate([0,8,1]) rotate([0,90,0]) vtx();
//%translate([0,-3,1]) rotate([-40,0,0]) rotate([-90,90,0]) vtx();
//%translate([0,0,5]) cameraClearance();
//%propClearnce();