Browse Source

Added models for power supply housing

Clara Hobbs 7 years ago
parent
commit
9002c49016
3 changed files with 343 additions and 0 deletions
  1. 30
    0
      binding_post.scad
  2. 80
    0
      dph.scad
  3. 233
    0
      power_supply_housing.scad

+ 30
- 0
binding_post.scad View File

@@ -0,0 +1,30 @@
1
+include <MCAD/polyholes.scad>;
2
+include <MCAD/units.scad>;
3
+
4
+
5
+/*
6
+ * A hole for mounting binding posts.
7
+ */
8
+module binding_post(h=1*mm, major_d=7.65*mm, flat_width=6*mm,
9
+		clearance=0.35*mm) {
10
+	hole_d = major_d + clearance;
11
+	hole_flat = flat_width + clearance;
12
+
13
+	intersection() {
14
+		polyhole(d=hole_d, h=h);
15
+
16
+		translate([-hole_flat/2, -hole_d/2, 0])
17
+			cube([hole_flat, hole_d, h]);
18
+	}
19
+}
20
+
21
+
22
+difference() {
23
+	cube([16, 16 + 3/4*inch, 3]);
24
+
25
+	translate([8, 8, -epsilon])
26
+		binding_post(h=3+2*epsilon);
27
+
28
+	translate([8, 8 + 3/4*inch, -epsilon])
29
+		binding_post(h=3+2*epsilon);
30
+}

+ 80
- 0
dph.scad View File

@@ -0,0 +1,80 @@
1
+include <MCAD/polyholes.scad>;
2
+include <MCAD/units.scad>;
3
+
4
+
5
+/*
6
+ * Hole for mounting the DPH3205 control panel.
7
+ *
8
+ * The hole is positioned so that the origin is the center of the cutout on the
9
+ * panel.  Epsilons are included as required.
10
+ */
11
+module dph_panel_hole(h=26*mm, grip_thickness=2*mm, grip_lip=2*mm,
12
+		clearance=0.35*mm) {
13
+	hole_x = 71.5*mm + clearance;
14
+	hole_y = 39*mm + clearance;
15
+
16
+	grip_x = 76*mm + clearance;
17
+	grip_y = 13*mm + clearance;
18
+
19
+	/* The panel body cutout */
20
+	translate([0, 0, h/2])
21
+		cube([hole_x, hole_y, h + 2*epsilon], center=true);
22
+
23
+	translate([-grip_x/2, -grip_y/2, -epsilon]) {
24
+		/* The grip cutout at the panel */
25
+		cube([grip_x, grip_y, grip_thickness + epsilon]);
26
+
27
+		/* The rest of the hole, above the grip */
28
+		translate([-grip_lip, 0, grip_thickness])
29
+			cube([grip_x + 2*grip_lip, grip_y, h - grip_thickness + 2*epsilon]);
30
+	}
31
+}
32
+
33
+/*
34
+ * Holes for mounting the DPH3205 board itself.
35
+ */
36
+module dph_mounting_holes(h, bolt_tolerance=0.3*mm, layer_thickness=0.25*mm) {
37
+	spacing = [86*mm, 64*mm];
38
+	board = [93*mm, 71*mm];
39
+
40
+	translate([board[0]/2, board[1]/2, 0])
41
+		for (x = [-1, 1])
42
+			for (y = [-1, 1])
43
+				translate([x*-spacing[0]/2, y*-spacing[1]/2, -epsilon]) {
44
+					/* Bolt hole */
45
+					translate([0, 0, 4*mm + layer_thickness + epsilon])
46
+						polyhole(d=3*mm + bolt_tolerance, h=h + 2*epsilon);
47
+
48
+					/* Cap hole */
49
+					polyhole(d=5.5*mm + bolt_tolerance, h=4*mm + epsilon);
50
+				}
51
+}
52
+
53
+/*
54
+ * Boxes for mounting the DPH3205 board itself.
55
+ */
56
+module dph_mounting_boxes(h, bolt_tolerance=0.3*mm) {
57
+	spacing = [86*mm, 64*mm];
58
+	board = [93*mm, 71*mm];
59
+
60
+	translate([board[0]/2, board[1]/2, 0])
61
+		for (x = [-1, 1])
62
+			for (y = [-1, 1])
63
+				translate([x*-spacing[0]/2 - 4*mm, y*-spacing[1]/2 - 4*mm, 0]) {
64
+					cube([8*mm, 8*mm, h]);
65
+				}
66
+}
67
+
68
+
69
+/*difference() {
70
+	cube([84, 48, 5]);
71
+
72
+	translate([42, 24, 0])
73
+		dph_panel_hole();
74
+}*/
75
+
76
+difference() {
77
+	dph_mounting_boxes(h=5);
78
+
79
+	dph_mounting_holes(h=5);
80
+}

+ 233
- 0
power_supply_housing.scad View File

@@ -0,0 +1,233 @@
1
+include <MCAD/units.scad>;
2
+
3
+use <pd-buddy-openscad/truncated_teardrop.scad>;
4
+use <pd-buddy-openscad/sink_bracket.scad>;
5
+use <binding_post.scad>;
6
+use <dph.scad>;
7
+
8
+/*
9
+ * A wedge to keep overhangs reasonable when putting things on walls.  The
10
+ * slope is at 45 degrees in the X-Z plane.
11
+ *
12
+ * size: [x, y]
13
+ */
14
+module wedge(size) {
15
+	difference() {
16
+		translate([0, size[1]/2, 0])
17
+			rotate([0, 45, 0])
18
+			cube([size[0]*2/sqrt(2), size[1], size[0]*2/sqrt(2)], center=true);
19
+
20
+		translate([-size[0], -epsilon, 0])
21
+			cube([2*size[0], size[1] + 2*epsilon, size[0]]);
22
+
23
+		translate([-size[0], -epsilon, -size[0]])
24
+			cube([size[0], size[1] + 2*epsilon, size[0] + epsilon]);
25
+	}
26
+}
27
+
28
+/*
29
+ * A side of the housing, with ventillation holes
30
+ */
31
+module housing_side(case_thickness, height, depth, slot_r=2*mm, slot_count=3) {
32
+	offset = case_thickness + 2*slot_r;
33
+	spacing = slot_r*3;
34
+
35
+	difference() {
36
+		union() {
37
+			/* Wall */
38
+			cube([case_thickness, height, depth]);
39
+
40
+			/* Stop for the back */
41
+			translate([case_thickness, case_thickness, depth - case_thickness])
42
+				wedge([2*case_thickness, slot_r]);
43
+
44
+			/* Nut traps */
45
+			translate([case_thickness, height - case_thickness - 4*mm, case_thickness])
46
+				nut_trap_bot(thickness=4*mm);
47
+			translate([case_thickness, height - case_thickness - 4*mm, depth - case_thickness - 8*mm])
48
+				nut_trap_top(thickness=4*mm);
49
+		}
50
+
51
+		for (i = [0 : 4 : 4*slot_count - 1]) {
52
+			/* First row of slots */
53
+			hull() {
54
+				translate([-epsilon, offset, depth - offset - i*spacing])
55
+					truncated_teardrop(radius = slot_r, length = case_thickness + 2*epsilon);
56
+
57
+				translate([-epsilon, offset, depth - offset - (i + 3)*spacing])
58
+					truncated_teardrop(radius = slot_r, length = case_thickness + 2*epsilon);
59
+			}
60
+
61
+			/* Second row of slots */
62
+			hull() {
63
+				translate([-epsilon, offset + spacing, depth - offset - i*spacing])
64
+					truncated_teardrop(radius = slot_r, length = case_thickness + 2*epsilon);
65
+
66
+				translate([-epsilon, offset + spacing, depth - offset - (i + 3)*spacing])
67
+					truncated_teardrop(radius = slot_r, length = case_thickness + 2*epsilon);
68
+			}
69
+		}
70
+	}
71
+}
72
+
73
+/*
74
+ * A nut trap for the bottom pair of nuts
75
+ */
76
+module nut_trap_bot(thickness, nut_tolerance=0.05*mm, nut_depth=4*mm,
77
+		bolt_tolerance=0.3*mm) {
78
+	difference() {
79
+		/* Body */
80
+		translate([0, -2*thickness, 0])
81
+			cube([2*thickness, 2*thickness, 2*thickness]);
82
+
83
+		/* Nut trap */
84
+		translate([thickness, -2*thickness - epsilon, thickness])
85
+			rotate([0, 90, 90])
86
+			rotate([0, 0, 30])
87
+			cylinder(r=6.4*mm / 2 + nut_tolerance, h=nut_depth + epsilon, $fn=6);
88
+
89
+		/* Bolt hole */
90
+		translate([thickness, -2*thickness - epsilon, thickness])
91
+			rotate([0, 0, 90])
92
+			truncated_teardrop(radius=(3*mm + bolt_tolerance)/2,
93
+					length=2*thickness + 2*epsilon);
94
+	}
95
+}
96
+
97
+/*
98
+ * A nut trap for the top pair of nuts
99
+ */
100
+module nut_trap_top(thickness, nut_tolerance=0.05*mm, nut_depth=4*mm,
101
+		bolt_tolerance=0.3*mm) {
102
+	translate([0, -2*thickness, 0])
103
+		wedge([2*thickness, 2*thickness]);
104
+
105
+	nut_trap_bot(thickness, nut_tolerance, nut_depth, bolt_tolerance);
106
+}
107
+
108
+/*
109
+ * An M3 bolt hole
110
+ */
111
+module bolt_hole(h=7*mm, bolt_tolerance=0.3*mm, layer_thickness=0.25*mm) {
112
+	/* Bolt hole */
113
+	translate([0, 0, 4*mm + layer_thickness])
114
+		polyhole(d=3*mm + bolt_tolerance, h=h + 2*epsilon);
115
+
116
+	/* Cap hole */
117
+	translate([0, 0, -epsilon])
118
+		polyhole(d=5.5*mm + bolt_tolerance, h=4*mm + epsilon);
119
+}
120
+
121
+/*
122
+ * The front, top, and sides of the housing
123
+ */
124
+module housing_fts(size, case_thickness) {
125
+	/* Front panel */
126
+	difference() {
127
+		cube([size[0], size[2], case_thickness]);
128
+
129
+		/* DPH3205 panel cutout */
130
+		translate([size[0]/2, 39*mm/2 + case_thickness + 2*mm, 0]) {
131
+			dph_panel_hole();
132
+
133
+			/* DPH3205 bezel, for reference */
134
+			translate([0, 0, -1*mm])
135
+				color([0.5, 0.5, 0.5, 0.25])
136
+				%cube([79*mm, 43*mm, 1*mm], center=true);
137
+		}
138
+
139
+		/* Binding post cutouts */
140
+		translate([size[0]/2, size[2] - 25*mm, -epsilon]) {
141
+			translate([3/8*inch, 0, 0])
142
+				rotate([0, 0, 90])
143
+				binding_post(h=case_thickness + 2*epsilon);
144
+
145
+			translate([-3/8*inch, 0, 0])
146
+				rotate([0, 0, 90])
147
+				binding_post(h=case_thickness + 2*epsilon);
148
+		}
149
+	}
150
+
151
+	/* Top */
152
+	cube([size[0], case_thickness, size[1]]);
153
+
154
+	/* Left */
155
+	housing_side(case_thickness, size[2], size[1]);
156
+
157
+	/* Right */
158
+	translate([size[0], 0, 0])
159
+		mirror([1, 0, 0])
160
+		housing_side(case_thickness, size[2], size[1]);
161
+}
162
+
163
+/* The bottom and back of the housing */
164
+module housing_bb(size, case_thickness) {
165
+	in_size = [size[0] - 2*case_thickness, size[1] - case_thickness, size[2] - case_thickness];
166
+
167
+	sink_offset = 10*mm;
168
+	dph_offset = 14*mm;
169
+
170
+	/* Bottom */
171
+	difference() {
172
+		union() {
173
+			cube([in_size[0], in_size[1], case_thickness]);
174
+
175
+			/* Boxes for DPH3205 mounting holes */
176
+			translate([in_size[0]/2 - 93*mm/2 + dph_offset, in_size[1] - case_thickness - 71*mm, case_thickness])
177
+				dph_mounting_boxes(h=4*mm);
178
+
179
+			/* Boxes for mounting holes */
180
+			for (x = [0, in_size[0] - 8*mm])
181
+				for (y = [0, in_size[1] - 8*mm - case_thickness])
182
+					translate([x, y, case_thickness])
183
+						cube([8*mm, 8*mm, 4*mm]);
184
+		}
185
+
186
+		/* DPH3205 mounting holes */
187
+		translate([in_size[0]/2 - 93*mm/2 + dph_offset, in_size[1] - case_thickness - 71*mm, 0])
188
+			dph_mounting_holes(h=case_thickness + 4*mm);
189
+
190
+		/* Hole for accessing the PD Buddy Sink */
191
+		translate([sink_offset, in_size[1] - case_thickness, -epsilon])
192
+			rotate([0, 0, -90])
193
+			cube([8*mm, 26*mm, case_thickness + epsilon]);
194
+
195
+		/* Holes for case bolts */
196
+		for (x = [4*mm, in_size[0] - 4*mm])
197
+			for (y = [4*mm, in_size[1] - 4*mm - case_thickness])
198
+				translate([x, y, 0])
199
+					bolt_hole();
200
+	}
201
+
202
+	/* Back */
203
+	difference() {
204
+		translate([0, in_size[1] - case_thickness, 0])
205
+			cube([in_size[0], case_thickness, in_size[2]]);
206
+
207
+		/* DPH3205 fan hole */
208
+		translate([in_size[0]/2 + dph_offset, in_size[1] - case_thickness - epsilon, case_thickness + 4*mm + 42*mm - 15*mm])
209
+			rotate([0, 0, 90])
210
+			truncated_teardrop(radius=15*mm, length=case_thickness + 2*epsilon);
211
+
212
+		/* PD Buddy Sink hole */
213
+		translate([sink_offset + 8*mm, in_size[1] - case_thickness - epsilon, 8*mm])
214
+			cube([10*mm, case_thickness + 2*epsilon, 5*mm]);
215
+		translate([sink_offset + 8*mm - 2*mm, in_size[1] - case_thickness + 1*mm, 8*mm - 2*mm])
216
+			cube([14*mm, case_thickness + 2*epsilon, 9*mm]);
217
+	}
218
+
219
+	/* PD Buddy Sink mount */
220
+	translate([sink_offset, in_size[1] - case_thickness, 0])
221
+		rotate([0, 0, -90])
222
+		sink_mount();
223
+}
224
+
225
+case_thickness = 3*mm;
226
+size = [150*mm, 90*mm, 80*mm];
227
+
228
+housing_fts(size, case_thickness);
229
+
230
+translate([0, 100*mm, 0])
231
+	//#translate([case_thickness, -20*mm, case_thickness])
232
+	//rotate([90, 0, 0])
233
+	housing_bb(size, case_thickness);

Loading…
Cancel
Save