|
@@ -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();
|