|
@@ -26,9 +26,6 @@
|
26
|
26
|
|
27
|
27
|
height = 25; // [14:26]
|
28
|
28
|
|
29
|
|
-// cut-out for new part in Fabrikator Mini V1.5
|
30
|
|
-fab_mini_v15 = "true"; // [true, false]
|
31
|
|
-
|
32
|
29
|
// default for 25mm fan: 23
|
33
|
30
|
fan_hole_diameter = 23; // [26]
|
34
|
31
|
|
|
@@ -44,13 +41,31 @@ fan_hole_angled = "true"; // [true, false]
|
44
|
41
|
|
45
|
42
|
/* [Hidden] */
|
46
|
43
|
|
|
44
|
+bottom_arm_height = 2;
|
|
45
|
+bottom_arm_gap = 8;
|
|
46
|
+
|
|
47
|
+back_support_depth = 2;
|
|
48
|
+mid_left_cutout = 9;
|
|
49
|
+
|
|
50
|
+wall_size = 3;
|
47
|
51
|
fan_angle = 10;
|
48
|
52
|
|
|
53
|
+nub_size = 1;
|
|
54
|
+nub_depth = 1;
|
|
55
|
+
|
|
56
|
+motor_width = 28.5;
|
|
57
|
+motor_depth = 27;
|
|
58
|
+
|
49
|
59
|
$fn = 25;
|
50
|
60
|
|
51
|
61
|
fan_screw_pos = fan_screw_distance / 2;
|
52
|
62
|
fan_screw_neg = -fan_screw_pos;
|
53
|
63
|
|
|
64
|
+fabrikator_mini_v15_height = 20;
|
|
65
|
+mid_left_cutout_height = 5;
|
|
66
|
+
|
|
67
|
+base_height = 5;
|
|
68
|
+
|
54
|
69
|
// -----------------------------------------------------------
|
55
|
70
|
|
56
|
71
|
module ellipse(w, l, d) {
|
|
@@ -67,118 +82,113 @@ module ellipse(w, l, d) {
|
67
|
82
|
|
68
|
83
|
// -----------------------------------------------------------
|
69
|
84
|
|
|
85
|
+// stepper motor
|
|
86
|
+%translate([nub_depth, wall_size, 0])
|
|
87
|
+ cube([motor_depth, motor_width, height + 1]);
|
|
88
|
+
|
70
|
89
|
// bottom left arm
|
71
|
|
-if (fab_mini_v15 == "true") {
|
72
|
|
- translate([0, 0, 8])
|
73
|
|
- cube([30, 2, 2]);
|
74
|
|
-} else {
|
75
|
|
- translate([0, 0, 8])
|
76
|
|
- cube([30, 2, height - 8]);
|
77
|
|
-}
|
|
90
|
+translate([0, 0, bottom_arm_gap])
|
|
91
|
+ cube([motor_depth + nub_depth, wall_size, bottom_arm_height]);
|
78
|
92
|
|
79
|
93
|
// bottom left nub
|
80
|
|
-if (fab_mini_v15 == "true") {
|
81
|
|
- translate([0, 0, 8])
|
82
|
|
- cube([1, 3, 2]);
|
83
|
|
-} else {
|
84
|
|
- translate([0, 0, 8])
|
85
|
|
- cube([1, 3, height - 8]);
|
86
|
|
-}
|
|
94
|
+translate([0, 0, bottom_arm_gap])
|
|
95
|
+ cube([nub_depth, wall_size + nub_size, bottom_arm_height]);
|
87
|
96
|
|
88
|
|
-if (height > 20) {
|
|
97
|
+if (height > fabrikator_mini_v15_height) {
|
89
|
98
|
// top left arm
|
90
|
|
- translate([0, 0, 20])
|
91
|
|
- cube([30, 2, height - 20]);
|
|
99
|
+ translate([0, 0, fabrikator_mini_v15_height])
|
|
100
|
+ cube([motor_depth + nub_depth, wall_size, height - fabrikator_mini_v15_height]);
|
92
|
101
|
|
93
|
102
|
// top left nub
|
94
|
|
- translate([0, 0, 20])
|
95
|
|
- cube([1, 3, height - 20]);
|
|
103
|
+ translate([0, 0, fabrikator_mini_v15_height])
|
|
104
|
+ cube([nub_depth, wall_size + nub_size, height - fabrikator_mini_v15_height]);
|
96
|
105
|
}
|
97
|
106
|
|
98
|
107
|
// left back support
|
99
|
|
-translate([26, 0, 0])
|
100
|
|
- cube([4, 2, height]);
|
|
108
|
+translate([motor_depth + nub_depth - back_support_depth, 0, 0])
|
|
109
|
+ cube([back_support_depth, wall_size, height]);
|
101
|
110
|
|
102
|
111
|
// mid left support
|
103
|
|
-translate([15, 0, 10])
|
104
|
|
- cube([11, 2, height - 10]);
|
|
112
|
+translate([nub_depth + mid_left_cutout, 0, 10])
|
|
113
|
+ cube([motor_depth - back_support_depth - mid_left_cutout, wall_size, height - fabrikator_mini_v15_height + mid_left_cutout_height]);
|
105
|
114
|
|
106
|
115
|
// right arm
|
107
|
116
|
difference() {
|
108
|
|
- translate([0, 30.5, 0])
|
109
|
|
- cube([30, 2, height]);
|
|
117
|
+ translate([0, motor_width + wall_size, 0])
|
|
118
|
+ cube([motor_depth + nub_depth, wall_size, height]);
|
110
|
119
|
|
111
|
|
- translate([22, 28, 4])
|
|
120
|
+ translate([24 - wall_size, 28, 4])
|
112
|
121
|
rotate([0, 0, 90])
|
113
|
122
|
ellipse(7, 20, 8);
|
114
|
123
|
|
115
|
124
|
if (height > 23) {
|
116
|
|
- translate([22, 28, 15])
|
|
125
|
+ translate([24 - wall_size, 28, 15])
|
117
|
126
|
rotate([0, 0, 90])
|
118
|
127
|
ellipse(7, 20, 8);
|
119
|
128
|
}
|
120
|
129
|
}
|
121
|
130
|
|
122
|
131
|
// right nub
|
123
|
|
-translate([0, 29.5, 0])
|
124
|
|
- cube([1, 3, height]);
|
|
132
|
+translate([0, motor_width + wall_size - nub_size, 0])
|
|
133
|
+ cube([nub_depth, wall_size + nub_size, height]);
|
125
|
134
|
|
126
|
135
|
// back wall
|
127
|
136
|
difference() {
|
128
|
|
- translate([28, 0, 0])
|
129
|
|
- cube([2, 32, height]);
|
|
137
|
+ translate([motor_depth + nub_depth, 0, 0])
|
|
138
|
+ cube([wall_size, motor_width + (2 * wall_size), height]);
|
130
|
139
|
|
131
|
|
- translate([25, 10, 4])
|
|
140
|
+ translate([25, 8 + wall_size, 4])
|
132
|
141
|
ellipse(7, 20, 8);
|
133
|
142
|
|
134
|
143
|
if (height > 23) {
|
135
|
|
- translate([25, 10, 15])
|
|
144
|
+ translate([25, 8 + wall_size, 15])
|
136
|
145
|
ellipse(7, 20, 8);
|
137
|
146
|
}
|
138
|
147
|
}
|
139
|
148
|
|
|
149
|
+// bottom part
|
140
|
150
|
difference() {
|
141
|
151
|
// base
|
142
|
|
- translate([0, 0, -5])
|
143
|
|
- cube([30, 32.5, 5]);
|
|
152
|
+ translate([0, 0, -base_height])
|
|
153
|
+ cube([motor_depth + nub_depth + wall_size, motor_width + (2 * wall_size), base_height]);
|
144
|
154
|
|
145
|
155
|
// cut off angled bottom part
|
146
|
156
|
rotate([0, -fan_angle, 0])
|
147
|
|
- translate([-2, -1, -11])
|
148
|
|
- cube([34, 34, 6]);
|
|
157
|
+ translate([-base_height, -(base_height / 2), -(3 * base_height)])
|
|
158
|
+ cube([motor_depth * 1.5, motor_width + (2 * wall_size) + base_height, (2 * base_height)]);
|
149
|
159
|
|
150
|
160
|
// main fan hole
|
151
|
161
|
if (fan_hole_angled == "true") {
|
152
|
162
|
rotate([0, -fan_angle, 0])
|
153
|
|
- translate([14.5, 16, -7])
|
154
|
|
- cylinder(d = fan_hole_diameter, h = 10);
|
|
163
|
+ translate([nub_depth + (motor_depth / 2), wall_size + (motor_width / 2), -(base_height * 1.5)])
|
|
164
|
+ cylinder(d = fan_hole_diameter, h = (2 * base_height));
|
155
|
165
|
} else {
|
156
|
|
- translate([14.5, 16, -7])
|
157
|
|
- cylinder(d = fan_hole_diameter, h = 10);
|
|
166
|
+ translate([nub_depth + (motor_depth / 2), wall_size + (motor_width / 2), -(base_height * 1.5)])
|
|
167
|
+ cylinder(d = fan_hole_diameter, h = (2 * base_height));
|
158
|
168
|
}
|
159
|
169
|
|
160
|
170
|
// fan screw holes
|
161
|
171
|
for (i = [1 : 2]) {
|
162
|
172
|
for (j = [1 : 2]) {
|
163
|
173
|
rotate([0, -fan_angle, 0])
|
164
|
|
- translate([14.5, 16, -7])
|
|
174
|
+ translate([nub_depth + (motor_depth / 2), wall_size + (motor_width / 2), -(base_height * 1.5)])
|
165
|
175
|
translate([(((i % 2) == 0) ? fan_screw_pos : fan_screw_neg),
|
166
|
176
|
(((j % 2) == 0) ? fan_screw_pos : fan_screw_neg), 0])
|
167
|
|
- cylinder(d = fan_screw_diameter, h = 10);
|
|
177
|
+ cylinder(d = fan_screw_diameter, h = (2 * base_height));
|
168
|
178
|
}
|
169
|
179
|
}
|
170
|
180
|
|
171
|
181
|
// big air hole
|
172
|
|
- translate([8, 33, -1.8])
|
|
182
|
+ translate([8, 36, -1.8])
|
173
|
183
|
rotate([90, 0, 0])
|
174
|
|
- cylinder(d = 2, h = 34);
|
|
184
|
+ cylinder(d = 2, h = 40);
|
175
|
185
|
|
176
|
186
|
// small air hole
|
177
|
|
- translate([12, 33, -1.5])
|
|
187
|
+ translate([12, 36, -1.5])
|
178
|
188
|
rotate([90, 0, 0])
|
179
|
|
- cylinder(d = 1.5, h = 34);
|
|
189
|
+ cylinder(d = 1.5, h = 40);
|
180
|
190
|
|
181
|
191
|
// elliptical air hole
|
182
|
|
- translate([-1, 11, -3.5])
|
|
192
|
+ translate([-1, 9 + wall_size, -3.5])
|
183
|
193
|
ellipse(2, 12, 8);
|
184
|
194
|
}
|