Просмотр исходного кода

some work on trackball roller holder mount

Thomas Buck 1 год назад
Родитель
Сommit
ef87a29ba2
1 измененных файлов: 86 добавлений и 17 удалений
  1. 86
    17
      hardware/trackball.scad

+ 86
- 17
hardware/trackball.scad Просмотреть файл

@@ -49,7 +49,7 @@ roller_count = 3;
49 49
 
50 50
 wall = 3.0;
51 51
 
52
-cut_roller_holder = false;
52
+cut_roller_holder = true;
53 53
 draw_threads = false;
54 54
 
55 55
 // #######################
@@ -132,17 +132,17 @@ mx_travel = 3.9;
132 132
 // ### Implementation ###
133 133
 // ######################
134 134
 
135
-roller_thread_dia = roller_dia + 5.0;
136
-roller_thread_pitch = 2.0;
135
+roller_thread_dia = 9.0;
136
+roller_thread_pitch = 2.5;
137 137
 roller_h = roller_dia + 7.0;
138 138
 roller_ball_h_off = 0.6;
139 139
 roller_ball_hold_off = 0.5;
140
-roller_thread_hole = roller_dia + 0.5;
140
+roller_thread_hole = roller_dia + 1.0;
141 141
 roller_small_hole = sphere_r_at_h(roller_ball_hold_off, roller_dia / 2) * 2;
142 142
 
143
-roller_ridge_h = 1.5;
143
+roller_ridge_h = wall;
144 144
 roller_mount_angle_off = 90;
145
-roller_mount_dia = roller_thread_dia + 2.0;
145
+roller_mount_dia = 11.0;
146 146
 
147 147
 ball_h = 15; // todo
148 148
 
@@ -265,7 +265,7 @@ module roller_holder() {
265 265
             cylinder(d = roller_mount_dia, h = roller_ridge_h, $fn = 6);
266 266
             
267 267
             translate([0, 0, roller_h - roller_ridge_h])
268
-            scale([1, 1, -1])
268
+            scale([-1, 1, -1])
269 269
             metric_thread(diameter = roller_thread_dia,
270 270
                     pitch = roller_thread_pitch,
271 271
                     length = roller_h - roller_ridge_h,
@@ -287,35 +287,99 @@ module roller_holder() {
287 287
     }
288 288
     
289 289
     %color("blue")
290
-    sphere(d = roller_dia);
290
+    sphere(d = roller_dia, $fn = 200);
291 291
 }
292 292
 
293
+roller_mount_add_len = 0.5;
294
+roller_mount_test_bot_h = 2.0;
295
+
293 296
 module roller_mount() {
294 297
     difference() {
295 298
         color("cyan")
296
-        cylinder(d = roller_mount_dia, h = roller_h - roller_ridge_h);
299
+        translate([0, 0, -roller_mount_add_len])
300
+        cylinder(d = roller_mount_dia, h = roller_h - roller_ridge_h + roller_mount_add_len);
297 301
         
298 302
         translate([0, 0, roller_h - roller_ridge_h])
299
-        scale([1, 1, -1])
303
+        scale([-1, 1, -1])
300 304
         metric_thread(diameter = roller_thread_dia,
301 305
                 pitch = roller_thread_pitch,
302
-                length = roller_h - roller_ridge_h,
306
+                length = roller_h - roller_ridge_h + roller_mount_add_len + 0.1,
303 307
                 internal = true, n_starts = 1,
304 308
                 taper = 0, leadin = 2,
305 309
                 test = !draw_threads);
306 310
         
307 311
         if (cut_roller_holder) {
308
-            translate([-roller_thread_dia / 2 - 2, -roller_thread_dia, -1])
309
-            cube([roller_thread_dia + 4, roller_thread_dia, roller_h + 2]);
312
+            translate([-roller_thread_dia / 2 - 2, -roller_thread_dia, -5])
313
+            cube([roller_thread_dia + 4, roller_thread_dia, roller_h + 10]);
310 314
         }
311 315
     }
316
+    
317
+    translate([0, 0, -roller_mount_add_len - roller_mount_test_bot_h])
318
+    roller_mount_bottom();
319
+}
320
+
321
+module roller_mount_bottom() {
322
+    color("yellow")
323
+    cylinder(d = roller_mount_dia, h = roller_mount_test_bot_h);
324
+    
325
+    color("yellow")
326
+    translate([0, 0, roller_mount_test_bot_h])
327
+    cylinder(d1 = 1.5, d2 = 1.0, h = 1.0);
328
+    
329
+    %translate([0, 0, roller_mount_test_bot_h])
330
+    cylinder(d = 2.0, h = 8.5);
312 331
 }
313 332
 
314 333
 module roller_mount_test() {
315
-    roller_mount();
334
+    translate([0, 0, roller_mount_add_len + roller_mount_test_bot_h]) {
335
+        roller_mount();
336
+        
337
+        translate([0, 0, roller_h - roller_dia / 2 + roller_ball_h_off])
338
+        roller_holder();
339
+    }
340
+}
341
+
342
+module ball_roller_test() {
343
+    %translate([0, 0, ball_dia / 2 + ball_h - 10])
344
+    ball_and_roller();
316 345
     
317
-    translate([0, 0, roller_h - roller_dia / 2 + roller_ball_h_off])
318
-    roller_holder();
346
+    difference() {
347
+        hull() {
348
+            cylinder(d = 60, h = 1);
349
+            
350
+            translate([0, 0, ball_dia / 2 + ball_h - 10])
351
+            for (r = [0 : roller_count - 1])
352
+            rotate([0, 0, roller_mount_angle_off + 360 / roller_count * r])
353
+            translate([sphere_r_at_h(roller_ball_h - ball_dia / 2, ball_dia / 2), 0, -ball_dia / 2 + roller_ball_h])
354
+            rotate([0, 180 + sphere_angle_at_rh(roller_ball_h - ball_dia / 2, ball_dia / 2), 0])
355
+            translate([0, 0, -roller_dia / 2])
356
+            translate([0, 0, -roller_h + roller_dia / 2 - roller_ball_h_off])
357
+            translate([0, 0, -roller_mount_add_len - roller_mount_test_bot_h])
358
+            cylinder(d = roller_mount_dia + 2, h = roller_h - roller_ridge_h + roller_mount_add_len + roller_mount_test_bot_h - 1);
359
+        }
360
+            
361
+        translate([0, 0, ball_dia / 2 + ball_h - 10])
362
+        for (r = [0 : roller_count - 1])
363
+        rotate([0, 0, roller_mount_angle_off + 360 / roller_count * r])
364
+        translate([sphere_r_at_h(roller_ball_h - ball_dia / 2, ball_dia / 2), 0, -ball_dia / 2 + roller_ball_h])
365
+        rotate([0, 180 + sphere_angle_at_rh(roller_ball_h - ball_dia / 2, ball_dia / 2), 0])
366
+        translate([0, 0, -roller_dia / 2])
367
+        translate([0, 0, -roller_h + roller_dia / 2 - roller_ball_h_off])
368
+        translate([0, 0, -roller_mount_add_len - roller_mount_test_bot_h])
369
+        cylinder(d = roller_mount_dia, h = roller_h - roller_ridge_h + roller_mount_add_len + roller_mount_test_bot_h + 10);
370
+        
371
+        translate([0, 0, ball_dia / 2 + ball_h - 10])
372
+        sphere(d = ball_dia + 10, $fn = 200);
373
+    }
374
+    
375
+    translate([0, 0, ball_dia / 2 + ball_h - 10])
376
+    for (r = [0 : roller_count - 1])
377
+    rotate([0, 0, roller_mount_angle_off + 360 / roller_count * r])
378
+    translate([sphere_r_at_h(roller_ball_h - ball_dia / 2, ball_dia / 2), 0, -ball_dia / 2 + roller_ball_h])
379
+    rotate([0, 180 + sphere_angle_at_rh(roller_ball_h - ball_dia / 2, ball_dia / 2), 0])
380
+    translate([0, 0, -roller_dia / 2])
381
+    translate([0, 0, -roller_h + roller_dia / 2 - roller_ball_h_off])
382
+    roller_mount();
319 383
 }
320 384
 
321 385
 base_dia = pico_l + 9;
@@ -351,9 +415,14 @@ module trackball() {
351 415
 //ball_and_roller();
352 416
 //pico();
353 417
 //sensor();
418
+
354 419
 //mx_switch_cutout(wall);
355 420
 //mx_switch_test();
356
-//roller_mount_test();
357 421
 
422
+//roller_mount_test();
423
+//roller_mount();
358 424
 //roller_holder();
425
+
426
+//ball_roller_test();
427
+
359 428
 trackball();

Загрузка…
Отмена
Сохранить