소스 검색

3d model changes. add uv led. thread adapter as separate part. added text. small fixes.

Thomas Buck 2 년 전
부모
커밋
bb49d04de8
1개의 변경된 파일176개의 추가작업 그리고 40개의 파일을 삭제
  1. 176
    40
      hardware/openchrono.scad

+ 176
- 40
hardware/openchrono.scad 파일 보기

@@ -6,16 +6,16 @@ body_gap = 0.1;
6 6
 
7 7
 body_screw_off = 10;
8 8
 body_screw_pos = 20;
9
-body_screw_dia = 3.2;
10
-body_screw_head = 5.8;
9
+body_screw_dia = 3.3;
10
+body_screw_head = 6.0;
11 11
 body_screw_depth = 3.2;
12
-body_screw_insert_dia = 5.0;
13
-body_screw_insert_height = 15.0;
12
+body_screw_insert_dia = 4.8;
13
+body_screw_insert_height = 12.0;
14 14
 
15 15
 lcd_pcb_w = 29.0;
16 16
 lcd_pcb_h = 29.0;
17 17
 lcd_pcb_d = 5.2;
18
-lcd_hole_dia = 2.0;
18
+lcd_hole_dia = 1.9;
19 19
 lcd_hole_w = 6.0;
20 20
 lcd_hole_h = 2.5;
21 21
 lcd_off = 10.0;
@@ -51,7 +51,7 @@ switch_h = 6.5;
51 51
 switch_d = 10.0;
52 52
 switch_plate_w = 20.5;
53 53
 switch_plate_h = switch_h;
54
-switch_dia = 2.6;
54
+switch_dia = 2.4;
55 55
 switch_screw_l = 10.0;
56 56
 switch_screw_d = 15.0;
57 57
 switch_off = 15;
@@ -95,8 +95,45 @@ thread_profile_mac11 = [
95 95
 // debug / testing
96 96
 thread_profile_none = [ false, 0, 0, 0, 0 ];
97 97
 
98
-thread_profile = thread_profile_m14;
99
-thread_base = 1.0;
98
+thread_profiles = [
99
+    thread_profile_1911,
100
+    thread_profile_m14,
101
+    thread_profile_mac11
102
+];
103
+
104
+thread_base = 5.0;
105
+
106
+test_bat_w = 47;
107
+test_bat_h = 59;
108
+test_bat_d = 15;
109
+test_bat_dia = 2.9;
110
+test_bat_off = 30.5;
111
+test_bat_l = 8;
112
+
113
+thread_adapter_screw_inset = 5;
114
+thread_adapter_in_body = 5;
115
+thread_adapter_h = body_screw_insert_height - thread_adapter_in_body;
116
+
117
+enable_gap_support = true;
118
+
119
+text1 = [
120
+    "OpenChrono",
121
+    "Liberation Sans:style=Bold",
122
+    12.0,
123
+    2.0,
124
+    55
125
+];
126
+text2 = [
127
+    "by xythobuz.de",
128
+    "Liberation Sans:style=Bold",
129
+    9.0,
130
+    2.0,
131
+    -60
132
+];
133
+
134
+texts_left = [ text1, text2 ];
135
+
136
+include_uv_leds = true;
100 137
 
101 138
 // how deep things on the outside have to be set in
102 139
 function circle_offset_deviation(off, dia) =
@@ -109,7 +146,12 @@ module lcd_cutout() {
109 146
         for (x = [0, lcd_pcb_w - lcd_hole_w])
110 147
         for (y = [0, lcd_pcb_h - lcd_hole_w])
111 148
         translate([x, y, -1])
112
-            cube([lcd_hole_w, lcd_hole_w, lcd_hole_h + 1]);
149
+        cube([lcd_hole_w, lcd_hole_w, lcd_hole_h + 1]);
150
+        
151
+        // TODO hacky
152
+        if (enable_gap_support)
153
+        translate([0, (lcd_pcb_w - 1) / 2, 0])
154
+        cube([lcd_pcb_w, 1, 9]);
113 155
     }
114 156
             
115 157
     for (x = [0, lcd_hole_off_x])
@@ -180,10 +222,41 @@ module thread(profile, thread_draw) {
180 222
     }
181 223
 }
182 224
 
225
+module thread_profile_adapter(profile, draw_profile) {
226
+    difference() {
227
+        thread(profile, draw_profile);
228
+        
229
+        for (r = [45, -45])
230
+        for (r2 = [0, 180])
231
+        rotate([0, 0, r + r2])
232
+        translate([0, (outer_dia - body_screw_insert_dia) / 2 - thread_adapter_screw_inset, -1])
233
+        cylinder(d = body_screw_dia, h = 100);
234
+    }
235
+}
236
+
237
+module thread_adapter() {
238
+    difference() {
239
+        cylinder(d = outer_dia, h = thread_adapter_h);
240
+        
241
+        translate([0, 0, -1])
242
+        cylinder(d = inner_dia, h = thread_adapter_h + 2);
243
+        
244
+        for (r = [45, -45])
245
+        rotate([0, 0, r])
246
+        translate([0, (outer_dia - body_screw_insert_dia) / 2 - thread_adapter_screw_inset, -thread_adapter_in_body])
247
+        cylinder(d = body_screw_insert_dia, h = body_screw_insert_height + 1);
248
+    }
249
+}
250
+
183 251
 module half_body(right_side) {
184 252
     difference() {
185
-        // body
186
-        cylinder(d = outer_dia, h = height);
253
+        union() {
254
+            // body
255
+            cylinder(d = outer_dia, h = height);
256
+            
257
+            translate([0, 0, height])
258
+            thread_adapter();
259
+        }
187 260
         
188 261
         // inner tube
189 262
         translate([0, 0, -1])
@@ -205,6 +278,17 @@ module half_body(right_side) {
205 278
             cylinder(d = led_ridge_dia, h = led_ridge_h);
206 279
         }
207 280
         
281
+        if (include_uv_leds)
282
+        for (x = [1, -1])
283
+        scale([x, 1, 1])
284
+        translate([inner_dia / 2 - 1, 0, led_off / 2])
285
+        rotate([0, 90, 0]) {
286
+            cylinder(d = led_dia, h = led_l + led_ridge_h + 1);
287
+            
288
+            translate([0, 0, led_l + 1])
289
+            cylinder(d = led_ridge_dia, h = led_ridge_h);
290
+        }
291
+        
208 292
         // TODO hacky sensor cable, arduino side
209 293
         for (z = [1, -1])
210 294
         translate([0, 0, height / 2])
@@ -233,6 +317,13 @@ module half_body(right_side) {
233 317
             
234 318
             translate([-inner_dia / 2 - led_l - led_ridge_h - 5, 0, -height / 2 + led_off - 1])
235 319
             cube([led_ridge_dia + 2, led_ridge_dia - 2, led_ridge_h]);
320
+            
321
+            if (include_uv_leds)
322
+            if (z < 0)
323
+            for (x = [0, 5])
324
+            translate([-inner_dia / 2 - led_l - led_ridge_h - x, 0, led_off / 2])
325
+            rotate([0, 90, 0])
326
+            cylinder(d = led_ridge_dia, h = led_ridge_h);
236 327
         }
237 328
     }
238 329
 }
@@ -254,14 +345,9 @@ module screw_holes(with_head) {
254 345
     }
255 346
 }
256 347
 
257
-module left_half(thread_draw) {
348
+module left_half() {
258 349
     difference() {
259
-        union() {
260
-            half_body(false);
261
-            
262
-            translate([0, 0, height])
263
-            thread(thread_profile, thread_draw);
264
-        }
350
+        half_body(false);
265 351
         
266 352
         translate([-outer_dia / 2 - 1, -outer_dia / 2 - 1 + body_gap / 2, height - 1])
267 353
         cube([outer_dia + 2, outer_dia / 2 + 1, 50]);
@@ -322,18 +408,19 @@ module left_half(thread_draw) {
322 408
                 cylinder(d = led_ridge_dia, h = led_ridge_h);
323 409
             }
324 410
         }
411
+        
412
+        for (t = texts_left)
413
+        rotate([0, 0, -t[4]])
414
+        translate([0, outer_dia / 2 - t[3], (height + thread_adapter_h) / 2])
415
+        rotate([0, -90, -90])
416
+        linear_extrude(height = t[3] + 1)
417
+        text(t[0], size = t[2], font = t[1], halign = "center", valign="center");
325 418
     }
326 419
 }
327 420
 
328
-module right_half(thread_draw) {
421
+module right_half() {
329 422
     difference() {
330
-        union() {
331
-            half_body(true);
332
-            
333
-            translate([0, 0, height])
334
-            rotate([0, 0, 180])
335
-            thread(thread_profile, thread_draw);
336
-        }
423
+        half_body(true);
337 424
         
338 425
         translate([-outer_dia / 2 - 1, -outer_dia / 2 - 1 + body_gap / 2, height - 1])
339 426
         cube([outer_dia + 2, outer_dia / 2 + 1, 50]);
@@ -343,6 +430,12 @@ module right_half(thread_draw) {
343 430
         translate([outer_dia / 2 - arduino_w -((outer_dia / 2) - (inner_dia / 2) - arduino_w) / 2, arduino_d / 2, -arduino_h / 2 + height / 2])
344 431
         rotate([90, 0, 0])
345 432
         arduino_cutout();
433
+    }
434
+}
435
+
436
+module right_half_aaa_bat() {
437
+    difference() {
438
+        right_half();
346 439
         
347 440
         for (a = [0, bat_angle, -bat_angle])
348 441
         rotate([0, 0, a])
@@ -351,40 +444,83 @@ module right_half(thread_draw) {
351 444
     }
352 445
 }
353 446
 
354
-module assembly_closed(thread_draw) {
355
-    right_half(thread_draw);
447
+module right_half_testing() {
448
+    difference() {
449
+        right_half();
450
+        
451
+        difference() {
452
+            translate([-test_bat_w / 2, outer_dia / 2 - circle_offset_deviation(test_bat_w / 2, outer_dia), (height - test_bat_h) / 2])
453
+            cube([test_bat_w, test_bat_d + 1, test_bat_h]);
454
+            
455
+            // TODO hacky
456
+            if (enable_gap_support)
457
+            translate([-0.5, 14, 20])
458
+            cube([1, 13, test_bat_h + 2]);
459
+        }
460
+        
461
+        for (x = [test_bat_off / 2, -test_bat_off / 2])
462
+        translate([x, outer_dia / 2 - circle_offset_deviation(test_bat_w / 2, outer_dia) - test_bat_l, height / 2])
463
+        rotate([-90, 0, 0])
464
+        cylinder(d = test_bat_dia, h = outer_dia / 2);
465
+        
466
+        // TODO hacky power cable
467
+        translate([15, -10, 60])
468
+        rotate([-90, 0, 12])
469
+        cylinder(d = 6.0, h = outer_dia);
470
+    }
471
+}
472
+
473
+module assembly_closed() {
474
+    //right_half_aaa_bat();
475
+    right_half_testing();
356 476
     
357 477
     rotate([0, 0, 180])
358
-    left_half(thread_draw);
478
+    left_half();
479
+    
480
+    translate([0, 0, height + thread_adapter_h + 0.5])
481
+    thread_profile_adapter(thread_profiles[0], false);
359 482
 }
360 483
 
361
-module assembly_opened(angle, thread_draw) {
484
+module assembly_opened(angle) {
362 485
     translate([-outer_dia / 2, 0, 0]) {
486
+        //rotate([0, 0, angle / 2])
487
+        //translate([outer_dia / 2, 0, 0])
488
+        //right_half_aaa_bat();
489
+        
363 490
         rotate([0, 0, angle / 2])
364 491
         translate([outer_dia / 2, 0, 0])
365
-        right_half(thread_draw);
492
+        right_half_testing();
366 493
         
367 494
         rotate([0, 0, -angle / 2])
368 495
         translate([outer_dia / 2, 0, 0])
369 496
         rotate([0, 0, 180])
370
-        left_half(thread_draw);
497
+        left_half();
371 498
     }
372 499
 }
373 500
 
374
-module print() {
501
+module print(all_thread_adapters) {
375 502
     translate([outer_dia / 2 + 5, 0, 0])
376
-    left_half(true);
503
+    left_half();
504
+    
505
+    //translate([-outer_dia / 2 - 5, 0, 0])
506
+    //right_half_aaa_bat(true);
377 507
     
378 508
     translate([-outer_dia / 2 - 5, 0, 0])
379
-    right_half(true);
509
+    right_half_testing();
510
+
511
+    if (all_thread_adapters)
512
+    for (p = [0 : len(thread_profiles) - 1])
513
+    translate([(p - floor(len(thread_profiles) / 2)) * (outer_dia + 5), -outer_dia / 2 - 5, 0])
514
+    thread_profile_adapter(thread_profiles[p], true);
380 515
 }
381 516
 
382 517
 //lcd_cutout();
383 518
 
384
-//left_half(false);
385
-//right_half(false);
519
+//left_half();
520
+//right_half();
386 521
 
387
-//assembly_closed(false);
388
-//assembly_opened(90, false);
522
+//assembly_closed();
523
+//assembly_opened(90);
389 524
 
390
-print();
525
+//print(true);
526
+print(false);

Loading…
취소
저장