1
+ use < ../../lib/Round- Anything/polyround.scad>
2
+
3
+ use < ../Mounting/StandardMountAdapter.scad>
4
+
5
+
6
+ corner_x = 24 ;
7
+ boardcorner_x = 17 ;
8
+ boardcorner_y = 23 ;
9
+ square_x = 5 ;
10
+ lite_l = 45 ;
11
+ lite_w = 80 - 18 ;
12
+
13
+
1
14
// 0,0,0: Mitte des Lite-PCB, auf der Seite mit dem OpenBIkeSensor logo, x: Richtung USB-Port, Z: Richtung Ultraschallsensoren
2
- $ fn = 100 ;
15
+ $ fn = 120 ;
3
16
4
17
Lite_PCB_x = 44 ;
5
18
Lite_PCB_y = 29.2 ;
@@ -8,54 +21,183 @@ Lite_PCB_Dimensions = [Lite_PCB_x, Lite_PCB_y, Lite_PCB_z];
8
21
9
22
Lite_ESP_socket_x = 38 ;
10
23
Lite_ESP_socket_y = 2.54 ;
11
- Lite_ESP_socket_z = 9 ;
24
+ Lite_ESP_socket_z = 9 + Lite_PCB_z + 1.8 ;
12
25
Lite_ESP_socket_dimensions = [Lite_ESP_socket_x, Lite_ESP_socket_y, Lite_ESP_socket_z];
13
26
14
- Lite_transducer_position = [23.8 , 0 , 20.1 ];
15
- Lite_transducer_variance = 0.8 ;
27
+ Lite_transducer_position = [23.8 , 0 , 20.6 ];
28
+ Lite_transducer_variance = 1.2 ;
16
29
Lite_transducer_diameter = 16 + Lite_transducer_variance;
17
30
Lite_transducer_diameter_small = 12.5 + Lite_transducer_variance;
18
31
19
-
20
-
21
32
Lite_ESP_position_x = 0 ;
22
33
Lite_ESP_position_y = 0 ;
23
- Lite_ESP_position_z = - 15.2 ;
34
+ Lite_ESP_position_z = - 16.2 ;
35
+
36
+ Lite_ESP_dimensions = [53 , 29 , 4.8 ];
24
37
25
- Lite_USB_position_x = 0 ;
38
+ Lite_USB_position_x = 55 ;
26
39
Lite_USB_position_y = 0 ;
27
- Lite_USB_position_z = 0 ;
40
+ Lite_USB_position_z = - 14.5 ;
41
+
42
+ Lite_screwmount_top = 4 ;
43
+ Lite_screwmount_bottom = 6 ;
44
+ Lite_screwmount_height = Lite_screwmount_top + Lite_screwmount_bottom;
45
+
46
+ Lite_USB = [Lite_USB_position_x, Lite_USB_position_y, Lite_USB_position_z];
28
47
29
48
Lite_ESP_position = [Lite_ESP_position_x, Lite_ESP_position_y, Lite_ESP_position_z];
30
- module ESP() color("black")translate([25, 0, 0])cube([51.5, 28.5, 4.5], center = true);
31
- module Ultrasonic(i) {
32
- color ("blue" ) translate ([23.9 , i * 7.3 , 17.99 ])cube ([41.5 , 1.4 , 36 ], center = true );
33
- #translate ([23.9 , 0 , 16.99 ])cube ([41.5 , 19.5 , 35 ], center = true );
34
49
35
- translate (Lite_transducer_position - [0 , 8 * i, 100 ])rotate ([i * 90 , 0 , 0 ])cylinder (d2 = Lite_transducer_diameter, h = 8.5 );
50
+ sensor_x = - Lite_transducer_position[2 ] + .5 ;
51
+ sensor_y = Lite_transducer_position[0 ];
52
+
53
+ function angle_three_points_2d(pa, pb, pc) = asin(cross(pb - pa, pb - pc) / (norm(pb - pa) * norm(pb - pc)));
54
+
55
+ module rounded_cube(x, y, z, r, r2, center = true) {
56
+ t = center ? - [x / 2 , y / 2 , z / 2 ]: [0 , 0 , 0 ];
57
+ translate (t)polyRoundExtrude([[0 , 0 , max (r, r2)], [0 , y, max (r, r2)], [x, y, max (r, r2)], [x, 0 , max (r, r2)]], z, r, r2);
58
+ }
36
59
60
+ module SidePolygon() {
61
+ corners = [
62
+ [square_x, - lite_w / 2 , 9 ],
63
+ // chose radius so the corners match
64
+ [- corner_x, - 0 , (corner_x - boardcorner_x) / (1 / sin (angle_three_points_2d([0 , 0 ], [- corner_x, - 0 ], [square_x, lite_w / 2 ])) - 1 )],
65
+ [square_x, lite_w / 2 , 9 ],
66
+ [lite_l, lite_w / 2 , 5 ],
67
+ [lite_l, - lite_w / 2 , 5 ]
68
+ ];
69
+ translate ([sensor_x, sensor_y])polygon(polyRound(corners, fn = 150 ));
70
+ }
37
71
38
- #translate (Lite_transducer_position - [0 , 8 * i, 0 ])rotate ([i * 90 , 0 , 0 ])cylinder (d = Lite_transducer_diameter_small, h = 40 );
72
+ module MidPolygon() {
73
+ corners = [[square_x, - lite_w / 2 , 5 ], [- boardcorner_x, - boardcorner_y, 5 ], [- boardcorner_x, boardcorner_y, 5 ], [square_x, lite_w / 2 , 5 ], [lite_l, lite_w / 2 , 5 ], [lite_l, -
74
+ lite_w / 2 , 5 ]];
75
+ translate ([sensor_x, sensor_y]) polygon(polyRound(corners));
76
+ }
77
+
78
+ module LidCutter() {
79
+ translate ([40 , 0 , Lite_ESP_position_z + 0.8 ])cube ([120 , 90 , 0.1 ], center = true );
80
+ }
81
+
82
+ module Box() {
83
+ hull () {
84
+ for (i = [- 1 , 1 ]) {
85
+ translate ([0 , 0 , i * 9 - (i + 1 ) / 2 ])linear_extrude(1 )MidPolygon();
86
+ translate ([0 , 0 , i * 18 - (i + 1 ) / 2 ])linear_extrude(1 )SidePolygon();
87
+ }
88
+ }
89
+ }
90
+
91
+ module ESP() {
92
+ difference () {
93
+ color ("black" )translate ([24.6 , 0 , 0.2 ])cube (Lite_ESP_dimensions, center = true );
94
+ for (i = [- 1 , 1 ])for (j = [- 1 , 1 ]) {
95
+ translate ([i * 24.6 + 22.6 , j * 12.5 - 2.5 , - 4.7 ])cube ([4 , 5 , 5 ]);
96
+ }
97
+ }
98
+ }
99
+
100
+ module Ultrasonic(i, onlyboards = false, h = 30) {
101
+ translate ([0 , 0 , - h / 2 + 34 / 2 ]) {
102
+ color ("blue" ) translate ([23.9 , i * 7.3 , 17.99 ])cube ([42.5 , 1.4 , h], center = true );
103
+ hull () {
104
+ translate ([Lite_transducer_position[0 ], 0 , 14.99 ])cube ([42.5 , 21.5 , h], center = true );
105
+ translate ([Lite_transducer_position[0 ], 0 , 16.99 ])cube ([42.5 , 16.5 , h], center = true );
106
+ translate ([Lite_transducer_position[0 ], 0 , 10.99 ])cube ([49.5 , 18.5 , h], center = true );
107
+ }
108
+ intersection () {
109
+ translate ([0 , 0 , + h / 2 - 34 / 2 ])hull () {
110
+ translate (Lite_transducer_position - [0 , 8 * i, 100 ])rotate ([i * 90 , 0 , 0 ])cylinder (d1 = Lite_transducer_diameter + 12 , d2 = Lite_transducer_diameter, h = 8.5 );
111
+ translate (Lite_transducer_position - [0 , 8 * i, 0 ])rotate ([i * 90 , 0 , 0 ])cylinder (d1 = Lite_transducer_diameter + 12 , d2 = Lite_transducer_diameter, h = 8.5 );
112
+ }
113
+ color ("blue" ) translate ([23.9 , i * 7 , 17.99 ])cube ([41.5 , 60 , h + 14 ], center = true );
114
+
115
+ }
116
+ }
117
+ translate (Lite_transducer_position - [0 , 8 * i, 0 ])rotate ([i * 90 , 0 , 0 ])cylinder (d = Lite_transducer_diameter_small, h = 40 );
118
+ }
119
+
120
+ module USB_hole() {
121
+ translate (Lite_USB) {
122
+ translate ([0 , 0 , - 2.25 ])
123
+ rounded_cube(45 , 12.5 , 8 , 0 , 0 , center = true );
124
+ rounded_cube(45 , 5 , 12.5 , 2.5 , 0 , center = true );
125
+ }
126
+ }
127
+
128
+ module Screwbump(size = 6, hole_diameter = 3.8, height = 6, bottom = true, toppart = 2.1, insert = 4) {
129
+ outer_polygon = [[size, 0 , 0 ], [- size, 0 , 0 ], [- size, size, size], [0 , 3 * size, size], [size, size, size]];
130
+ difference () {
131
+ hull () {
132
+ translate ([0 , 0 , 0 ])polyRoundExtrude(outer_polygon, 1 , 0 , 0 );
133
+
134
+ translate ([0 , 0 , height - 1 ])polyRoundExtrude(outer_polygon, 1 , 0 , 0 );
135
+ if (bottom)translate ([0 , - 0.01 , 1.3 * height])rotate ([90 , 0 , 0 ])cylinder (d = size, h = 0.1 );
136
+ }
137
+ translate ([0 , size, toppart])cylinder (d = insert, h = height - toppart);
138
+ translate ([0 , size, - .01 ])cylinder (d = hole_diameter, h = toppart);
139
+ }
39
140
}
40
141
41
142
42
143
module LiteElectronics(onlyboards = false) {
43
144
// the rendered model from stls (not closed, only for preview)
44
- translate ([15 , 0 , 0 ])rotate ([180 , 00 , 00 ])rotate ([0 , 0 , 90 ])import("../../lib/OpenBikeSensor-Lite-PCB-0.1.2.stl" );
145
+ // if (!$preview) translate([15, 0, 0])rotate([180, 00, 00])rotate([0, 0, 90])import("../../lib/OpenBikeSensor-Lite-PCB-0.1.2.stl");
45
146
46
147
// board cube
47
148
color ("green" )translate (- [0 , Lite_PCB_y / 2 , Lite_PCB_z])cube (Lite_PCB_Dimensions, center = false );
149
+ color ("green" )translate (- [0.2 , Lite_PCB_y / 2 + 0.2 , Lite_PCB_z + 14 ])cube (Lite_PCB_Dimensions + [0.4 , 0.4 , 14 ], center = false );
150
+
48
151
49
152
// sockets for ESP
50
- for (i = [- 1 , 1 ]) color ("darkgrey" )translate ([3.5 , i * Lite_PCB_y / 2 - (i + 1 ) * Lite_ESP_socket_y / 2 - i * 0.45 , - Lite_ESP_socket_dimensions[2 ] - Lite_PCB_Dimensions[ 2 ] ])
153
+ for (i = [- 1 , 1 ]) color ("darkgrey" )translate ([3.5 , i * Lite_PCB_y / 2 - (i + 1 ) * Lite_ESP_socket_y / 2 - i * 0.45 , - Lite_ESP_socket_dimensions[2 ] + 1.8 ])
51
154
cube (Lite_ESP_socket_dimensions);
52
155
53
- #translate (Lite_ESP_position)ESP();
54
-
55
- for (i = [- 1 , 1 ])Ultrasonic(i);
156
+ translate (Lite_ESP_position)ESP();
157
+
158
+ // printability chamfers above ESP
159
+ hull () {
160
+ translate ([24.6 , 0 , Lite_ESP_position_z - 2 ])cube ([45 , 29 , 1 ], center = true );
161
+ translate ([24.6 , 0 , Lite_ESP_position_z - 4.3 ])cube ([45 , 18.5 , 5.01 ], center = true );
162
+ }
163
+ translate ([0 , 0 , 0 ])hull () {
164
+ translate ([24.6 , 0 , Lite_ESP_position_z - 2 ])cube ([Lite_ESP_dimensions[0 ], 20 , 0.5 ], center = true );
165
+ translate ([25 ., 0 , Lite_ESP_position_z - 4.3 ])cube ([45 , 18.5 , 0.1 ], center = true );
166
+ }
167
+ for (i = [- 1 , 1 ])Ultrasonic(i, onlyboards = onlyboards, h = 50 );
168
+ USB_hole();
56
169
}
57
- LiteElectronics();
170
+
58
171
difference () {
59
- // translate([12.5, - 18, 9])cube([23, 36, 28]);
60
- for (i = [- 1 , 1 ])Ultrasonic(i);
61
- }
172
+ union () {
173
+ translate ([- 7 , 0 , Lite_ESP_position_z + 0.8 + 0.05 - Lite_screwmount_top])rotate ([0 , 0 , 90 ])
174
+ Screwbump(size = 4 , hole_diameter = 3.2 , height = Lite_screwmount_height, bottom = true , toppart = Lite_screwmount_top);
175
+ translate ([lite_w - 7.3 , 12 , Lite_ESP_position_z + 0.8 + 0.05 - Lite_screwmount_top])rotate ([0 , 0 , - 90 ])
176
+ Screwbump(size = 4 , hole_diameter = 3.2 , height = Lite_screwmount_height, bottom = true , toppart = Lite_screwmount_top);
177
+ translate ([lite_w - 7.3 , - 12 , Lite_ESP_position_z + 0.8 + 0.05 - Lite_screwmount_top])rotate ([0 , 0 , - 90 ])
178
+ Screwbump(size = 4 , hole_diameter = 3.2 , height = Lite_screwmount_height, bottom = true , toppart = Lite_screwmount_top);
179
+ translate ([23.8 , - 3.5 , - 17.9 ])rotate ([180 , 0 , 90 ])StandardMountAdapter(screwholes = false , channels = false , twoholes = false );
180
+ difference () {
181
+ union () {
182
+ rotate ([90 , 90 , 0 ])Box();
183
+ difference () {
184
+ translate (Lite_USB + [0 , 0 , - 3.5 - 1.6 + 1 ]) {
185
+ rounded_cube(28 , 16.5 , 6.5 , 0 , 1.5 , center = true );
186
+
187
+ difference () {
188
+ #rounded_cube(30 , 15 , 6.5 , 0 , 1.5 , center = true );
189
+ translate ([8 , - 20 , - 5 ])cube ([4 , 60 , 20 ]);
190
+ }
191
+ }
192
+ translate (Lite_USB + [10 , 0 , 0 ])cube ([4 , 20 , 12.5 ], center = true );
193
+ }
194
+ }
195
+ hull () translate ([23.8 , - 3.5 , - 18 ])rotate ([180 , 0 , 90 ])StandardMountAdapter(screwholes = false , channels = false );
196
+
197
+ }
198
+ }
199
+ LiteElectronics();
200
+ LidCutter();
201
+ }
202
+
203
+ if ($ preview) translate ([80 , 0 , 0 ])LiteElectronics();
0 commit comments