Browse Source

some work on trackball roller holder mount

Thomas Buck 1 year ago
parent
commit
ef87a29ba2
1 changed files with 86 additions and 17 deletions
  1. 86
    17
      hardware/trackball.scad

+ 86
- 17
hardware/trackball.scad View File

49
 
49
 
50
 wall = 3.0;
50
 wall = 3.0;
51
 
51
 
52
-cut_roller_holder = false;
52
+cut_roller_holder = true;
53
 draw_threads = false;
53
 draw_threads = false;
54
 
54
 
55
 // #######################
55
 // #######################
132
 // ### Implementation ###
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
 roller_h = roller_dia + 7.0;
137
 roller_h = roller_dia + 7.0;
138
 roller_ball_h_off = 0.6;
138
 roller_ball_h_off = 0.6;
139
 roller_ball_hold_off = 0.5;
139
 roller_ball_hold_off = 0.5;
140
-roller_thread_hole = roller_dia + 0.5;
140
+roller_thread_hole = roller_dia + 1.0;
141
 roller_small_hole = sphere_r_at_h(roller_ball_hold_off, roller_dia / 2) * 2;
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
 roller_mount_angle_off = 90;
144
 roller_mount_angle_off = 90;
145
-roller_mount_dia = roller_thread_dia + 2.0;
145
+roller_mount_dia = 11.0;
146
 
146
 
147
 ball_h = 15; // todo
147
 ball_h = 15; // todo
148
 
148
 
265
             cylinder(d = roller_mount_dia, h = roller_ridge_h, $fn = 6);
265
             cylinder(d = roller_mount_dia, h = roller_ridge_h, $fn = 6);
266
             
266
             
267
             translate([0, 0, roller_h - roller_ridge_h])
267
             translate([0, 0, roller_h - roller_ridge_h])
268
-            scale([1, 1, -1])
268
+            scale([-1, 1, -1])
269
             metric_thread(diameter = roller_thread_dia,
269
             metric_thread(diameter = roller_thread_dia,
270
                     pitch = roller_thread_pitch,
270
                     pitch = roller_thread_pitch,
271
                     length = roller_h - roller_ridge_h,
271
                     length = roller_h - roller_ridge_h,
287
     }
287
     }
288
     
288
     
289
     %color("blue")
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
 module roller_mount() {
296
 module roller_mount() {
294
     difference() {
297
     difference() {
295
         color("cyan")
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
         translate([0, 0, roller_h - roller_ridge_h])
302
         translate([0, 0, roller_h - roller_ridge_h])
299
-        scale([1, 1, -1])
303
+        scale([-1, 1, -1])
300
         metric_thread(diameter = roller_thread_dia,
304
         metric_thread(diameter = roller_thread_dia,
301
                 pitch = roller_thread_pitch,
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
                 internal = true, n_starts = 1,
307
                 internal = true, n_starts = 1,
304
                 taper = 0, leadin = 2,
308
                 taper = 0, leadin = 2,
305
                 test = !draw_threads);
309
                 test = !draw_threads);
306
         
310
         
307
         if (cut_roller_holder) {
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
 module roller_mount_test() {
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
 base_dia = pico_l + 9;
385
 base_dia = pico_l + 9;
351
 //ball_and_roller();
415
 //ball_and_roller();
352
 //pico();
416
 //pico();
353
 //sensor();
417
 //sensor();
418
+
354
 //mx_switch_cutout(wall);
419
 //mx_switch_cutout(wall);
355
 //mx_switch_test();
420
 //mx_switch_test();
356
-//roller_mount_test();
357
 
421
 
422
+//roller_mount_test();
423
+//roller_mount();
358
 //roller_holder();
424
 //roller_holder();
425
+
426
+//ball_roller_test();
427
+
359
 trackball();
428
 trackball();

Loading…
Cancel
Save