summaryrefslogtreecommitdiff
path: root/gimbal.scad
blob: 078a055e376d9be763c0bc0a0b76a35687bd76b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// sphere diameter
d = 30;
cutoff = 3;
c = 3;
base = 10;

screw_len = 0.8 * (d - 2*cutoff);
screw_dia = 25.4/4;

mount_screw_dia = 3;
mount_screw_head_dia = 8;

e = 0.01;
$fn = 500;

module screw() {
    cylinder(r=screw_dia/2, h=screw_len);
}

module ball()
    difference() {
	sphere(d/2);
	translate([0, 0, d/2 - cutoff - screw_len + e]) screw();
	for (i = [-1,1])
            translate([0, 0, i * (d - cutoff)]) cube(d, center=true);
    }

module shell() {
    difference() {
	// sphere with cylinder to bottom
	mirror([0, 0, 1])
	assign(r2=d/2+c)
	union() {
	    sphere(r=r2);
	    cylinder(r=r2, h=r2 + base);
	}

	// hollow out the sphere
	sphere(d/2);

	// add intro region
	translate([0, 0, d])
	cube([d-2*cutoff, d*2, 2*d], center=true);

	// mounting screw hole
	assign(rs=mount_screw_dia)
	assign(rh=mount_screw_head_dia)
	union() {
	    cylinder(r=rs/2, h=3*(d+base), center=true);
	    translate([0, 0, -d/2-rh]) cylinder(r1=0, r2=rh/2, h=rh);
	    translate([0, 0, -d/2   ]) cylinder(r=rh/2, h=d);
	}
    }
}

union() {
shell();
translate([0,0,20]) rotate([90, 0, 90]) ball();
}
contact: Jan Huwald // Impressum