include include include include include $fn = $preview ? 50 : 200; // $t = 0; /* Weight: Component Weight Amount Motor 280g 2 Bearing 60g 4 Computer 50g ? 1 RTL SDR 30g? 1 GPS 50g? 1 Pulley 60T 50g? 2 Pulley 16T 10g? 2 Belts, Screws 100g? 1 Box Frame 200g? 1 */ module gimbal(alt, az){ alt_axis_z = 115; pulley_dist_alt = 40.088; pulley_dist_az = 40.088; pulley_height = 12; rotate([0, 0, az]){ translate([0, 0, alt_axis_z]){ rotate([0, -alt, 0]){ translate([-50, 70, 0]){ rotate([0, 90, 0]){ w110(); } } translate([-50, -70, 0]){ rotate([0, 90, 0]){ usbcam1(); } } translate([0, 35, 0]){ rotate([-90, 90, 0]){ color([1,1,0.8]) union(){ difference(){ cylinder(h=5, r=50); translate([-100, 0, 0]){ cube([200, 200, 100], center=true); } } cylinder(h=5, r=10); } } } } rotate([90, 0, 0]){ cylinder(h=100, r=5, center=true); } translate([0, -45/2, 0]){ rotate([90, 90, 0]){ driveunit(12, pulley_dist_alt, 19, 5, 7); } } translate([0, 45/2, 0]){ rotate([90, 65, 0]){ kfl000(); } } translate([0, -45/2, 0]){ rotate([-90, 65, 0]){ kfl000(); } } } translate([0, 0, 0]){ rotate([0, 180, 180]){ driveunit(12, pulley_dist_alt, 19, 5, 7); } } kfl000(); translate([0, 0, 45]){ rotate([0, 180, 0]){ kfl000(); } } color([1,1,0.8]) difference(){ union(){ translate([-30, 45/2, 0]){ cube([100, 5, 140]); } translate([-30, -45/2 - 5, 0]){ cube([100, 5, 140]); } translate([20, 0, -2.5]){ cube([100, 55, 5], center=true); } translate([0, 0, -2.5]){ cube([30, 70, 5], center=true); } translate([0, 0, 45+2.5]){ cube([30, 70, 5], center=true); } translate([20, 0, 140-2.5]){ cube([100, 55, 5], center=true); } } cylinder(h=40, r=6, center=true); translate([pulley_dist_az, 0, 0]){ cylinder(h=40, r=6, center=true); } translate([-15, -35, 0]){ cube([30, 70, 10]); } translate([-15, -35, 35]){ cube([30, 70, 10]); } } translate([0, 0, 140]){ antenna_gps(); } translate([45, 0, 140]){ antenna_adsb(); } } translate([0, 0, -30]){ rotate([0, 0, 0]){ cube([200, 200, 10], center=true); } cylinder(h=73, r=5); } } gimbal(abs(($t * 360)%180 - 90), $t*360);