Bladeren bron

add 3d printed hub75 scaffolding

Thomas Buck 10 maanden geleden
bovenliggende
commit
5696ae084b

BIN
hardware/conn.stl Bestand weergeven


BIN
hardware/conn_half.stl Bestand weergeven


BIN
hardware/foot.stl Bestand weergeven


BIN
hardware/foot_half.stl Bestand weergeven


BIN
hardware/pi_mount.stl Bestand weergeven


BIN
hardware/psu_mount.stl Bestand weergeven


+ 373
- 0
hardware/rgb_mount.scad Bestand weergeven

@@ -0,0 +1,373 @@
1
+panel_w = 127.8;
2
+panel_d = 13;
3
+
4
+panel_hole_dia = 2.5;
5
+panel_hole_dist_x = 114.4 - panel_hole_dia;
6
+panel_hole_dist_y = 92.4 - panel_hole_dia;
7
+
8
+hole_off_x = (panel_w - panel_hole_dist_x) / 2;
9
+hole_off_y = (panel_w - panel_hole_dist_y) / 2;
10
+
11
+panel_nub_d = 3.0;
12
+panel_nub_h = 4.0;
13
+panel_nub_off_x = 24.25 - (panel_nub_d / 2);
14
+panel_nub_off_y = 10.0 - (panel_nub_d / 2);
15
+panel_nub_hole = panel_nub_d + 1.0;
16
+
17
+strip_w = hole_off_x * 2 + 10;
18
+strip_d = 6.0;
19
+strip_hole_d = 4.0;
20
+
21
+foot_h = 10;
22
+foot_plate_h = foot_h + hole_off_y + 10;
23
+foot_d = strip_d;
24
+foot_l = 100.0;
25
+
26
+conn_h = hole_off_y * 2 + 50;
27
+conn_w = strip_w;
28
+conn_d = foot_d;
29
+conn_hole_d = strip_hole_d;
30
+
31
+pi_width = 85;
32
+pi_height = 56;
33
+pi_hole_dist_x = 58;
34
+pi_hole_dist_y = 49;
35
+pi_hole_off_x = 3.5;
36
+pi_hole_off_y = 3.5;
37
+pi_hole = 2.8;
38
+
39
+pi_off_x = 10;
40
+pi_off_y = 25;
41
+pi_mount_dist = 10;
42
+pi_mount_w = 15.0;
43
+pi_mount_d = foot_d;
44
+
45
+$fn = 42;
46
+
47
+module holes(h, d1 = pi_hole, d2 = pi_hole) {
48
+    for (x = [0, pi_hole_dist_x])
49
+    for (y = [0, pi_hole_dist_y])
50
+    translate([pi_hole_off_x + x, 0, pi_hole_off_y + y])
51
+    rotate([90, 0, 0])
52
+    cylinder(d1 = d1, d2 = d2, h = h);
53
+}
54
+
55
+module pi() {
56
+    cube([pi_width, 2.0, pi_height]);
57
+    
58
+    translate([0, 10, 0])
59
+    holes(20);
60
+}
61
+
62
+module panel() {
63
+    difference() {
64
+        cube([panel_w, panel_d, panel_w]);
65
+        
66
+        for (x = [0, panel_hole_dist_x])
67
+        for (y = [0, panel_hole_dist_y])
68
+        translate([hole_off_x + x, -1, hole_off_y + y])
69
+        rotate([-90, 0, 0])
70
+        cylinder(d = panel_hole_dia, h = panel_d + 2);
71
+    }
72
+    
73
+    // actually only bottom-left and top-right
74
+    for (x = [panel_nub_off_x, panel_w - panel_nub_off_x])
75
+    for (y = [panel_nub_off_y, panel_w - panel_nub_off_y])
76
+    translate([x, 0, y])
77
+    rotate([90, 0, 0])
78
+    cylinder(d = panel_nub_d, h = panel_nub_h);
79
+}
80
+
81
+module foot() {
82
+    translate([0, -strip_d * 2, 0])
83
+    difference() {
84
+        translate([-strip_w / 2, 0, -foot_h])
85
+        cube([strip_w, strip_d, foot_plate_h]);
86
+        
87
+        for (x = [-1, 1])
88
+        translate([x * hole_off_x, -1, hole_off_y])
89
+        rotate([-90, 0, 0])
90
+        cylinder(d = strip_hole_d, h = strip_d + 2);
91
+    }
92
+    
93
+    translate([-strip_w / 2, -strip_d * 2 - foot_l / 2 + foot_d / 2, -foot_h - foot_d])
94
+    cube([strip_w, foot_l, foot_d]);
95
+    
96
+    for (d = [-strip_d * 2 - 5, -strip_d])
97
+    translate([-strip_w / 2, d, -foot_h])
98
+    cube([strip_w, 5, 5]);
99
+}
100
+
101
+module foot_strip() {
102
+    translate([0, -strip_d, 0])
103
+    difference() {
104
+        translate([-strip_w / 2, 0, 0])
105
+        cube([strip_w, strip_d, panel_w]);
106
+        
107
+        for (x = [-1, 1])
108
+        for (y = [0, panel_hole_dist_y])
109
+        translate([x * hole_off_x, -1, hole_off_y + y])
110
+        rotate([-90, 0, 0])
111
+        cylinder(d = strip_hole_d, h = strip_d + 2);
112
+    }
113
+    
114
+    difference() {
115
+        for (x = [-1, 1])
116
+        scale([x, 1, 1])
117
+        for (y = [0, panel_w - 15])
118
+        translate([strip_w / 2, -strip_d, y])
119
+        cube([20, strip_d, 15]);
120
+        
121
+        for (x = [-panel_nub_off_x, panel_nub_off_x])
122
+        for (y = [panel_nub_off_y, panel_w - panel_nub_off_y])
123
+        translate([x, 1, y])
124
+        rotate([90, 0, 0])
125
+        cylinder(d = panel_nub_hole, h = strip_d + 2);
126
+    }
127
+}
128
+
129
+module conn() {
130
+    difference() {
131
+        translate([-conn_w / 2, -conn_d, -conn_h / 2])
132
+        cube([conn_w, conn_d, conn_h]);
133
+        
134
+        for (x = [-1, 1])
135
+        for (y = [0, -hole_off_y * 2])
136
+        translate([x * hole_off_x, -conn_d - 1, hole_off_y + y])
137
+        rotate([-90, 0, 0])
138
+        cylinder(d = strip_hole_d, h = strip_d + 2);
139
+    }
140
+}
141
+
142
+module foot_half() {
143
+    difference() {
144
+        foot();
145
+        
146
+        translate([-50, -100, -50])
147
+        cube([50, 200, 200]);
148
+    }
149
+}
150
+
151
+module foot_strip_half() {
152
+    difference() {
153
+        foot_strip();
154
+        
155
+        translate([-50, -10, -5])
156
+        cube([50, 20, 200]);
157
+    }
158
+}
159
+
160
+module conn_half() {
161
+    difference() {
162
+        conn();
163
+        
164
+        translate([-50, -10, -100])
165
+        cube([50, 20, 200]);
166
+    }
167
+}
168
+
169
+module pi_mount_piece(l, z) {
170
+    translate([0, 0, z])
171
+    difference() {
172
+        translate([0, -pi_mount_d - strip_d - conn_d, 0])
173
+        cube([panel_w, pi_mount_d, pi_mount_w]);
174
+        
175
+        for (x = [hole_off_x, panel_w - hole_off_x])
176
+        translate([x, -strip_d - foot_d - pi_mount_d - 1, pi_mount_w / 2])
177
+        rotate([-90, 0, 0])
178
+        cylinder(d = strip_hole_d, h = strip_d + 2);
179
+    }
180
+    
181
+    difference() {
182
+        // TODO hardcoded
183
+        for (x = [32, (pi_height + panel_w) / 2 - 11])
184
+        translate([x + pi_off_x, -pi_mount_d - strip_d - conn_d, ((sign(l) < 0) ? l : pi_mount_w) + z])
185
+        cube([pi_mount_w, pi_mount_d, abs(l) + 0.1]);
186
+        
187
+        translate([(pi_height + panel_w) / 2 + pi_off_x, -2 - strip_d - foot_d - conn_d - pi_mount_dist, pi_off_y])
188
+        rotate([0, -90, 0])
189
+        translate([0, 25, 0])
190
+        holes(20, 3.5, 3.5);
191
+    }
192
+    
193
+    // TODO missing slot nub holes!
194
+}
195
+
196
+module pi_mount() {
197
+    %translate([(pi_height + panel_w) / 2 + pi_off_x, -2 - strip_d - foot_d - pi_mount_d - pi_mount_dist, pi_off_y])
198
+    rotate([0, -90, 0])
199
+    pi();
200
+    
201
+    color("red") {
202
+        // TODO hardcoded
203
+        pi_mount_piece(7, hole_off_y - pi_mount_w / 2);
204
+        pi_mount_piece(-20, panel_w - hole_off_y - pi_mount_w / 2);
205
+    }
206
+}
207
+
208
+psu_w = 98.3;
209
+psu_h = 129.2;
210
+psu_d = 40.1;
211
+
212
+psu_hole_dia = 4.0;
213
+psu_hole_w = 35.5 - 2.4;
214
+psu_hole_h = 44.4 - 2.4;
215
+psu_hole_x = 29.85 + 1.2;
216
+psu_hole_y = 34.85 + 1.2;
217
+
218
+psu_y_off = 30;
219
+psu_mount_w = 15;
220
+psu_mount_d = foot_d;
221
+
222
+module psu_holes() {
223
+    for (x = [0, psu_hole_w])
224
+    for (y = [0, psu_hole_h])
225
+    translate([x + psu_hole_x, -1, y + psu_hole_y])
226
+    rotate([-90, 0, 0])
227
+    cylinder(d = psu_hole_dia, h = psu_d + 10);
228
+}
229
+
230
+module psu_mount_piece(l, z) {
231
+    difference() {
232
+        translate([0, 0, z])
233
+        union() {
234
+            translate([0, -psu_mount_d - strip_d - conn_d, 0])
235
+            cube([panel_w, psu_mount_d, psu_mount_w]);
236
+            
237
+            for (x = [0, psu_hole_w])
238
+            translate([x + (panel_w - psu_w) / 2 + psu_hole_x - psu_mount_w / 2, -psu_mount_d - strip_d - conn_d, ((sign(l) < 0) ? l : psu_mount_w)])
239
+            cube([psu_mount_w, psu_mount_d, abs(l) + 0.1]);
240
+        }
241
+        
242
+        translate([0, 0, z])
243
+        for (x = [hole_off_x, panel_w - hole_off_x])
244
+        translate([x, -strip_d - foot_d - psu_mount_d - 1, psu_mount_w / 2])
245
+        rotate([-90, 0, 0])
246
+        cylinder(d = strip_hole_d, h = strip_d + 2);
247
+        
248
+        translate([(panel_w - psu_w) / 2, -psu_d - strip_d - foot_d - psu_mount_d, psu_y_off])
249
+        psu_holes();
250
+        
251
+        // TODO missing slot nub holes!
252
+    }
253
+}
254
+
255
+module psu_mount() {
256
+    %translate([(panel_w - psu_w) / 2, -psu_d - strip_d - foot_d - psu_mount_d, psu_y_off])
257
+    difference() {
258
+        cube([psu_w, psu_d, psu_h]);
259
+        
260
+        translate([0, -5, 0])
261
+        psu_holes();
262
+    }
263
+    
264
+    color("red") {
265
+        // TODO hardcoded
266
+        psu_mount_piece(46, hole_off_y - psu_mount_w / 2);
267
+        psu_mount_piece(0, panel_w - hole_off_y - psu_mount_w / 2);
268
+    }
269
+}
270
+
271
+module two_by_two() {
272
+    %for (x = [0, panel_w])
273
+    for (y = [0, panel_w])
274
+    translate([x, 0, y])
275
+    panel();
276
+    
277
+    pi_mount();
278
+    
279
+    translate([panel_w, 0, 0])
280
+    psu_mount();
281
+    
282
+    translate([panel_w, 0, 0]) {
283
+        color("green")
284
+        for (y = [0, panel_w])
285
+        translate([0, 0, y])
286
+        foot_strip();
287
+        
288
+        color("yellow")
289
+        foot();
290
+    }
291
+    
292
+    for (y = [0, panel_w])
293
+    translate([0, 0, y]) {
294
+        color("cyan")
295
+        foot_strip_half();
296
+        
297
+        color("orange")
298
+        if (y == 0)
299
+        foot_half();
300
+        
301
+        translate([panel_w * 2, 0, 0])
302
+        scale([-1, 1, 1]) {
303
+            color("cyan")
304
+            foot_strip_half();
305
+            
306
+            color("orange")
307
+            if (y == 0)
308
+            foot_half();
309
+        }
310
+    }
311
+    
312
+    color("magenta")
313
+    translate([panel_w, -strip_d, panel_w])
314
+    conn();
315
+    
316
+    color("blue")
317
+    for (x = [0, panel_w * 2])
318
+    translate([x, -strip_d, panel_w])
319
+    scale([x == 0 ? 1 : -1, 1, 1])
320
+    conn_half();
321
+}
322
+
323
+module three_by_one() {
324
+    %for (x = [0, panel_w, panel_w * 2])
325
+    translate([x, 0, 0])
326
+    panel();
327
+    
328
+    pi_mount();
329
+    
330
+    translate([panel_w * 2, 0, 0])
331
+    psu_mount();
332
+    
333
+    // TODO filler pieces for top gap
334
+    
335
+    for (x = [panel_w, panel_w * 2])
336
+    translate([x, 0, 0]) {
337
+        color("green")
338
+        foot_strip();
339
+        
340
+        color("yellow")
341
+        foot();
342
+    }
343
+    
344
+    color("cyan")
345
+    foot_strip_half();
346
+    
347
+    color("orange")
348
+    foot_half();
349
+    
350
+    translate([panel_w * 3, 0, 0])
351
+    scale([-1, 1, 1]) {
352
+        color("cyan")
353
+        foot_strip_half();
354
+        
355
+        color("orange")
356
+        foot_half();
357
+    }
358
+}
359
+
360
+two_by_two();
361
+//three_by_one();
362
+
363
+//foot_strip();
364
+//foot_strip_half();
365
+
366
+//foot();
367
+//foot_half();
368
+
369
+//conn();
370
+//conn_half();
371
+
372
+//pi_mount();
373
+//psu_mount();

BIN
hardware/strip.stl Bestand weergeven


BIN
hardware/strip_half.stl Bestand weergeven


Laden…
Annuleren
Opslaan