User Tools

Site Tools


Quadcoper GPS + Beacon case

rc-case.scad
$fn=30;
 
module case4(l, w, h, t) {
        difference() {
            translate([0, 0, - (t/2) ])
                cube([l + t*2, w + t*2, h + t], true);
             cube([l, w, h + 0.1], true);
        };
}
 
module case3(l, w, h, t) {
        difference() {
            translate([- (t/2 + 0.1), 0, - (t/2 + 0.1) ])
                cube([l + t, w + t*2, h + t], true);
             cube([l + 0.1, w, h], true);
        };
}
 
module case2(l, w, h, t) {
    difference() {
        translate([0, 0, - (t/2 + 0.1) ])
            cube([l, w + t*2, h + t], true);
         cube([l + 0.2, w, h], true);
    }
}
 
 
module gps(l, w, h, t) {
    case4(l, w, h, t);
}
 
module beacon(l, w, h, t) {
    case3(l, w, h, t);
}
 
module bridge(l, w, h, t) {
    difference() {
        case3(l, w, h, t + 1);
        translate([-2, 0, -(ride_t + 1)])
            cylinder(h + 3, 6, 6, true);
    }
}
 
 
gps_l = 23;
gps_w = 22;
gps_h = 12;
 
ride_t = 2.3;
 
beacon_l = 32;
beacon_w = 22;
beacon_h = 10;
 
ant_hole_d = 6;
 
bridge_l = ant_hole_d + 17;
bridge_w = gps_w -ride_t;
bridge_h = gps_h - 1;
 
mount_h = 17;
mount_ind = 5.5;
mount_outd = mount_ind + ride_t;
mount_dist = 23;
 
module mount(h, d) {
    cylinder(h, d, d, true);
}
 
module holder() {
    difference() {
        union() {
            translate([0, 0, -10])
            rotate([0, -15, 0]) 
            union() {    
                translate([0, 0, gps_h/2 + ride_t]) 
                    gps(gps_l, gps_w, gps_h, ride_t);
 
                translate([-ride_t, 0, -(beacon_h/2 + ride_t)])
                    rotate([180, 0, 180])
                    beacon(beacon_l, beacon_w, beacon_h, ride_t);
 
                translate([bridge_l/2 + gps_l/2 + ride_t + 2, 0, gps_h/2 - 0.5])
                    rotate([180, 0, 0])
                    bridge(bridge_l, bridge_w, bridge_h, ride_t);
            };
 
            translate([bridge_l + gps_l/2 + ride_t, mount_dist/2, gps_h/2])
                mount(mount_h, mount_outd);
 
            translate([bridge_l + gps_l/2 + ride_t, -mount_dist/2, gps_h/2])
                mount(mount_h, mount_outd);
        };
        union() {
            translate([bridge_l + gps_l/2 + ride_t, mount_dist/2, gps_h/2 + 1])
                mount(mount_h + 3, mount_ind);
            translate([bridge_l + gps_l/2 + ride_t, -mount_dist/2, gps_h/2 + 1])
                mount(mount_h + 3, mount_ind);
        };
    };
}
 
holder();