summaryrefslogtreecommitdiff
path: root/gimbal.scad
blob: c2404caed00709873d76dbeff4e26925dfaac83c (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// 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 = 4;
mount_screw_head_dia = 10;

e = 0.01;
$fn = 500;

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

module grip()
    for (i = [0:19])
        rotate(i*360/20)
	translate([d/2-3, 0, -5/2])
	cube([3,2,5]);

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);

	// horizontal grip
	grip();
	// vertical grip at the upper half sphere (but not at the top)
	difference() {
	    rotate([90, -5, 0]) grip();
	    cylinder(r1=0, r2=sqrt(pow(d/2, 2) - pow(d/2-cutoff, 2)), h=d/2-cutoff);
	    translate([0, 0, -d+4]) cylinder(r=d/2, h=d);
	}
    }

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);

	// path for 1/4" screw; lets you rotate the sphere after
	// pushing it in (and allows later removal of it)
	hull() {
	    cylinder(r=screw_dia/2, h=d);
	    rotate([90, 0, 90])
	      cylinder(r=screw_dia/2, h=d);
	}
	
	// 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