-
Notifications
You must be signed in to change notification settings - Fork 0
/
ball.scad
94 lines (79 loc) · 2 KB
/
ball.scad
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
83
84
85
86
87
88
89
90
91
92
93
94
include <hemisphere_transfer_unit.scad>
module Hemisphere(radius, half_sep)
{
$fn=128;
difference()
{
color([0.0, 1.0, 0.5, 0.5])
sphere(radius);
translate([-radius, -half_sep, -radius]) cube([radius*2, radius*2, radius*2]);
}
}
module 608Bearing()
{
$fn=36;
rotate([90, 0, 0])
cylinder(.7, 1.1, 1.1);
}
module SemiMount(thickness, width)
{
$fn=36;
linear_extrude(thickness)
hull()
{
circle(1.4);
translate([0, width, 0])
circle(1.4);
}
}
module OmniBall(radius=4.0, separation=0.8)
{
//It neeHemisphereTransferUnit(radius, separation/2);
union()
{
difference()
{
union()
{
//mirror([0, 1, 0]) HemisphereTransferUnit(radius, separation/2);
mirror([0, 1, 0]) HemisphereDiff(radius, separation);
}
// Cut hole for middle bolt
// $fn=36;
// translate([0, radius+separation/2, 0])
// rotate([90, 0, 0])
// cylinder(radius*2+separation, .7, .7);
}
translate([0, -separation/2, 0]) 608Bearing();
translate([0, separation/2+0.7, 0]) 608Bearing();
bearing_edge = 0.5;
// Central bolt
// $fn=36;
// translate([0, radius+separation/2-bearing_edge, 0])
// rotate([90, 0, 0])
// cylinder(radius*2+separation-bearing_edge*2, .4, .4);
mount_spacing = 0.4;
$fn=36;
translate([-radius-mount_spacing, 0, 0])
rotate([90, 0, 90])
cylinder((radius+mount_spacing)*2, .4, .4);
translate([-radius-mount_spacing-0.5, -1.4, radius+mount_spacing])
cube([(radius+mount_spacing)*2+1, 2.8, .5]);
translate([-radius-mount_spacing-0.5, 0, 0])
union()
{
translate([0, -1.4, 0])
cube([0.5, 2.8, radius+mount_spacing]);
rotate([90, 0, 90]) SemiMount(0.5, 1.0);
}
mirror([1, 0, 0])
translate([-radius-mount_spacing-0.5, 0, 0])
union()
{
translate([0.0, -1.4, 0])
cube([0.5, 2.8, radius+mount_spacing]);
rotate([90, 0, 90]) SemiMount(0.5, 1.0);
}
}
}
OmniBall();