-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathidler_mount.scad
138 lines (122 loc) · 5.37 KB
/
idler_mount.scad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Defines dimensions shared between single and double idlers.
include <bearing_608.scad>;
include <idler.scad>;
include <config.scad>;
screw_r = (3.0-0.1)/2;
// Thickness of the mount's inside-bearing tubes.
// In PLA, 1.5mm gives enough thickness to grab the bearing ID but still flex enough to insert.
inside_bearing_thickness = 1.5;
inside_bearing_h = bearing_608_h;
taper_h = 5.0; // Thickness from bearing clip to start of interior cutout.
outer_cyl_h = 12.0;
outer_cyl_r = 27.0/2;
filament_r = 0.5/2; // Measured OD of PowerPro spectra is ~0.5mm.
idler_filament_r = idler_or-idler_cut+filament_r;
idler_clearance = 0.5; // Set <= filament dia to reduce chance of escape.
outer_wall = 3.5; // thickness of vertical wall
outer_cube_l = 20.0; // longer than outer_cube_w (affects width of wall with idler screw)
outer_cube_w = idler_h+idler_clearance*2+outer_wall*2; // narrow side of idler mount
idler_boss_gap = 0.04;
idler_boss_ir = 3;
idler_boss_or = idler_boss_ir + idler_clearance;
idler_color = black;
idler_mount_height = taper_h*2+outer_cyl_h+bearing_608_h*2;
// Params for the clips: the features at the ends that secure the top and bottom bearings.
// The clips are not actually necessary, but more there to handle printing variation
// and to prevent the bearings from popping off while handling them.
clip_gap = 2.5;
clip_flange_r = bearing_608_ir+bearing_608_countersink_r-0.2; // A little less than what's needed for a perfect fit.
clip_flange_h = bearing_608_countersink_h;
clip_flange_extra_h = 1.0; // Extra cylinder space to grab onto the clip, to simplify later removal.
main_extra_r = bearing_608_countersink_r+1.0; // Additional body boss, against which flat side of top & bottom bearings sit.
$fn=128;
module bearing_grip() {
difference() {
union() {
// Clip body
cylinder(r=bearing_608_ir, h=inside_bearing_h);
cylinder(r1=clip_flange_r, r2=bearing_608_ir, h=clip_flange_h);
translate([0, 0, bearing_608_h-clip_flange_h]) cylinder(r1=bearing_608_ir, r2=clip_flange_r, h=clip_flange_h);
translate([0, 0, bearing_608_h]) cylinder(r=clip_flange_r, h=clip_flange_extra_h);
translate([0, 0, bearing_608_h+clip_flange_extra_h]) cylinder(r2=bearing_608_ir, r1=clip_flange_r, h=clip_flange_h);
}
// Missing chunk enables clipping into bearing
translate([-big/2, -clip_gap/2, -delta]) cube([big, clip_gap, bearing_608_h+2*delta+clip_flange_extra_h+10]);
// Missing chunk that serves the same purpose; can't have radius too large.
translate([bearing_608_ir-0.4, -big/2, -delta]) cube([2, big, big]);
}
}
module bearing_body(inside_h, hole_locs) {
// inside_h is the height of both the gap and the outer cylinder.
difference() {
union() {
translate([0, 0, 0]) cylinder(r1=bearing_608_ir+main_extra_r, r2=outer_cyl_r, h=taper_h);
translate([0, 0, taper_h]) cylinder(r=outer_cyl_r, h=inside_h);
translate([0, 0, taper_h+inside_h]) cylinder(r1=outer_cyl_r, r2=bearing_608_ir+main_extra_r, h=taper_h);
}
// Slot for idler
difference() {
translate([0, 0, taper_h+inside_h/2]) cube([big, idler_h+idler_clearance*2, inside_h], center=true);
// Bosses for idler
for(i = [-1, 1]) {
for (hl = hole_locs) {
translate([idler_filament_r, i*(idler_h/2+idler_boss_gap), taper_h+hl])
rotate([i*-90, 0, 0]) cylinder(r1=idler_boss_ir, r2=idler_boss_or, h=idler_clearance-idler_boss_gap+delta);
}
}
}
}
}
module idler_mount(inside_h, hole_locs) {
difference() {
intersection() {
union() {
// Main body
translate([0, 0, 0]) rotate([180, 0, 0]) bearing_grip();
translate([0, 0, 0]) bearing_body(inside_h, hole_locs);
translate([0, 0, taper_h+inside_h+taper_h]) bearing_grip();
}
// Main body envelope
union() {
cube([outer_cube_l, outer_cube_w, big], center=true);
}
}
// Central vertical hole
cylinder(r=bearing_608_ir-inside_bearing_thickness, h=big, center=true);
// Hole for idler screw
for (i = hole_locs) {
translate([idler_filament_r, 0, taper_h+i]) rotate([90, 0, 0]) cylinder(r=screw_r, h=big, center=true);
}
// Extra material removal; simply not needed on back.
translate([-13.5, 0, 0]) cube([20, big, big], center=true);
// Material removal to have a larger filament approach angle
for (i = hole_locs) {
hull() {
translate([idler_filament_r*2, 0, i+taper_h]) rotate([180, 0, 0]) cylinder(r=1.5, h=20);
translate([idler_filament_r*2 + 10, 0, i+taper_h]) rotate([180, 0, 0]) cylinder(r=1.5, h=20);
}
}
}
}
module idler_mount_assembly(inside_h, hole_locs) {
translate([0, 0, -bearing_608_h]) bearing_608();
translate([0, 0, taper_h+inside_h+taper_h]) bearing_608();
for (hole_loc=hole_locs) {
translate([idler_filament_r, 0, taper_h+hole_loc]) rotate([90, 0, 0]) color(idler_color) idler();
}
color(color) idler_mount(inside_h, hole_locs);
}
inside_h_single = idler_or*2+idler_clearance;
//rotate([0, -90, 0]) idler_mount(inside_h_single, [inside_h_single/2]);
module idler_mount_assembly_single() {
idler_mount_assembly(inside_h_single, [inside_h_single/2]);
}
//idler_mount_assembly_single();
idler_spacing = 60; // Gap between the two idlers.
inside_h_double = idler_or*2+idler_clearance+idler_spacing;
idler_offset = idler_or+idler_clearance/2;
//rotate([0, -90, 0]) idler_mount(inside_h, [idler_offset, idler_offset+idler_spacing]);
module idler_mount_assembly_double() {
idler_mount_assembly(inside_h_double, [idler_offset, idler_offset+idler_spacing]);
}
//idler_mount_assembly_double();