]> www.fi.muni.cz Git - openparking.git/blob - things/semaphore.scad
Infinite reads handling
[openparking.git] / things / semaphore.scad
1 eps = 0.01;
2 infty = 100;
3
4 wall = 1.5;
5
6 led_d = 10 + 0.5;
7 led_angle = 10;
8 led_depth = 4;
9 led_x = led_d/2+0.75;
10
11 body_x = led_d + 2*led_x + 15;
12 body_d = 14;
13 top_off = body_d*tan(led_angle);
14 body_y = led_d + 2*top_off + 5*wall;
15 base_w = led_d + 4*wall;
16
17 screw_d = 3.8;
18 screw_head = 8;
19 // screw_y = led_d/2+screw_head/2+wall;
20 screw_x = body_x/2 +wall + screw_head/2;
21 screw_wall = 2.5;
22
23 cable_w = 7;
24 cable_h = screw_wall;
25
26 module body() {
27         hull() {
28                 for (i = [-1, 1]) translate([i*led_x, 0, 0])
29                         cylinder(r = base_w/2, h = eps);
30         //      translate([-led_x-led_d/2-wall, -led_d/2-wall, 0])
31         //              cube([2*led_x + led_d + 2*wall, led_d+2*wall, eps]);
32                 translate([-body_x/2, -body_y/2, body_d-screw_wall])
33                         cube([body_x, body_y, screw_wall]);
34                 for (i = [-1, 1]) scale([i, 1, 1]) {
35                         translate([screw_x-screw_head/2, -screw_head/2-wall, body_d-screw_wall])
36                                 cube([screw_head, screw_head+2*wall, screw_wall]);
37                         translate([screw_x-screw_head/2, -screw_head/2-wall, 0])
38                                 cube([screw_head/2, screw_head+2*wall, eps]);
39                 }
40         }
41 };
42         
43
44 module main_hole() {
45         hull() {
46                 for (i = [-1, 1])
47                         rotate([led_angle, 0, 0]) {
48                                 translate([i*led_x, 0, led_depth])
49                                         cylinder(r = led_d/2+wall/2, h = eps);
50                         }
51                 translate([-body_x/2+wall, -body_y/2+wall, body_d-screw_wall])
52                         cube([body_x-2*wall, body_y-2*wall, screw_wall+eps]);
53         }
54         for (i = [-1, 1])
55                 rotate([led_angle, 0, 0])
56                         translate([i*led_x, 0, led_depth])
57                                 cylinder(r = led_d/2+wall/2, h = infty);
58 }
59
60 difference() {
61         body();
62         // LED holes
63         for (i = [-1, 1])
64                 rotate([led_angle, 0, 0])
65                         translate([i*led_x, 0, -infty/2])
66                                 cylinder(r = led_d/2, h = infty);
67         // main hole
68         difference() {
69                 main_hole();
70 //              translate([-screw_head/2-wall, screw_y-screw_head/2-wall, 0])
71 //                      cube([screw_head+2*wall, screw_head+2*wall, infty]);
72         };
73         for (i = [-1, 1]) scale([i, 1, 1]) {
74                 // screw head hole
75                 translate([screw_x-screw_head/2, -screw_head/2, -eps])
76                         cube([screw_head+wall, screw_head, body_d-screw_wall]);
77                 // screw hole
78                 translate([screw_x-screw_d/2, -screw_head/2, -eps])
79                         cube([screw_d, screw_head, infty]);
80         }
81         // cable hole
82         translate([-led_x, 0, 0])
83                 rotate([0, 0, 30])
84                 translate([-infty, -cable_w/2, body_d-cable_h])
85                         cube([infty, cable_w, cable_h+eps]);
86 }