]> www.fi.muni.cz Git - things.git/blob - rc-landing-gear.scad
rc landing gear - first version
[things.git] / rc-landing-gear.scad
1 eps = 0.01;
2 infty = 300;
3
4 base_d = 70;
5 base_y_scale = 0.7;
6 base_wall = 1.25;
7
8 base_l = 80;
9 base_w = 30;
10
11 rear_angle = 75;
12
13 wheel_base = 70;
14 wheel_h = 50;
15 wheel_axle_cube = 5;
16
17 axle_hole = 2;
18
19 beam_w = 1.5;
20 beam_h = 5;
21 top_beam_h = 12;
22
23 spring_clip_l = 3.5;
24 spring_clip_w = base_w - 5;
25 spring_dist = 10;
26
27 module rear_cyl() {
28         translate([0, 0, -beam_w*sin(rear_angle)/2])
29         rotate([rear_angle-90, 0, 0])
30                 cylinder(r = beam_w/2, h = beam_h/sin(rear_angle), $fn = 32);
31 }
32
33 module front_cyl() {
34         rotate([rear_angle-90, 0, 0])
35                 cylinder(r = beam_w/2, h = beam_h, $fn = 32);
36 }
37
38 module top_cyl() {
39         rotate([rear_angle-90, 0, 0])
40                 cylinder(r = beam_w/2, h = top_beam_h, $fn = 32);
41 }
42
43 module body() {
44         rotate([rear_angle-90, 0, 0])
45         translate([0, -sqrt(pow(base_d*base_y_scale/2,2) - pow(base_w*base_y_scale/2,2)), 0])
46         difference() {
47                 // outer cylinder
48                 scale([1, base_y_scale, 1])
49                         cylinder(r = base_d/2, h = base_l);
50                 // cut the sides
51                 for (i = [-1, 1]) scale ([i, 1, 1])
52                         translate([base_w/2, -infty/2, -infty/2])
53                                 cube(infty);
54                 // cut the rear
55                 translate([-infty/2, -infty, -infty/2]) cube(infty);
56         }
57
58         // wheel axle cubes
59         for (i = [-1, 1]) scale([i, 1, 1])
60                 translate([wheel_base/2 - wheel_axle_cube, wheel_h - wheel_axle_cube/2, 0])
61                         cube(wheel_axle_cube);
62
63         // rear beams
64         for (i = [-1, 1]) scale([i,1,1])
65                 hull() {
66                         translate([-(base_w/2-beam_w/2), spring_dist, 0])
67                                 rear_cyl();
68                         translate([wheel_base/2-beam_w/2, wheel_h, 0])
69                                 rear_cyl();
70                 }
71
72         // spring top
73         hull() {
74                 for (j = [-1, 1])
75                         translate([j*(base_w/2-beam_w/2), spring_dist, 0])
76                                 rear_cyl();
77         }
78
79         // spring sides
80         for (i = [-1, 1]) scale([i,1,1])
81                 hull() {
82                         translate([(base_w/2+beam_w), 0, 0])
83                                 rear_cyl();
84                         translate([(base_w/2-beam_w/2), spring_dist, 0])
85                                 rear_cyl();
86                 }
87
88         // front beams
89         for (i = [-1, 1]) scale([i,1,1])
90                 for (j = [-1, 1]) hull() {
91                         translate([j*(base_w/2-beam_w/2), (base_l-top_beam_h)*cos(rear_angle), (base_l-top_beam_h)*sin(rear_angle)])
92                                 top_cyl();
93                         translate([wheel_base/2-beam_w/2, wheel_h, 0])
94                                 front_cyl();
95                 }
96
97         // spring rear clip
98         translate([-spring_clip_w/2, 0, 0])
99                 cube([spring_clip_w, spring_clip_l, base_wall]);
100
101         // spring clip sides
102         for (i = [-1, 1]) scale([i,1,1])
103                 hull() {
104                         translate([(base_w/2-beam_w/2), 0, 0])
105                                 rear_cyl();
106                         translate([(base_w/2-beam_w/2), spring_clip_l - 1.5*beam_w, 0])
107                                 rear_cyl();
108                 }
109 }
110
111 difference() {
112         body();
113
114         // inner cylinder hole
115         rotate([+rear_angle-90, 0, 0])
116         translate([0, -sqrt(pow(base_d*base_y_scale/2,2) - pow(base_w*base_y_scale/2,2)), -infty/2])
117                 scale([1, 1*base_y_scale, 1])
118                         cylinder(r = base_d/2 - base_wall, h = infty);
119         // cut the bottom
120         translate([-infty/2, -infty/2, -infty]) cube(infty);
121         // wheel axle hole
122         translate([-infty/2, wheel_h, wheel_axle_cube/2])
123                 rotate([0, 90, 0])
124                         cylinder(r = axle_hole/2, h = infty);
125 }
126