cura: dual extrusion improvements
[clinton/3d-models.git] / etc / meanwell_supply_cover.scad
1 // Power Supply Cover
2 // Copyright (c) 2014 "gregington"
3 // CC BY-SA 3.0, http://www.thingiverse.com/thing:216951
4
5
6 WALL = 5;
7 PSU_CLEARANCE = 2;
8 PSU_WIDTH = 115 + PSU_CLEARANCE;
9 PSU_HEIGHT = 50 + PSU_CLEARANCE;
10 PSU_DEPTH = 200;
11
12 COVER_WIDTH = PSU_WIDTH + (2 * WALL);
13 COVER_HEIGHT = PSU_HEIGHT + (2 * WALL);
14 COVER_DEPTH = 90 + WALL;
15 COVER_INNER_DEPTH= 50 + WALL;
16 COVER_SUPPORT_WIDTH = 20;
17
18 VENT_HEIGHT = 35;
19 VENT_WIDTH = 1.6;
20 VENT_DISTANCE = 4;
21
22 CABLE_SLOT_WIDTH = 8;
23 CABLE_SLOT_HEIGHT = 18;
24 CABLE_SLOT_Y_OFFSET = 40;
25 CABLE_SLOT_VENT_DISTANCE = 2;
26
27 POWER_SOCKET_OFFSET = 30;
28 POWER_SWITCH_OFFSET = 20;
29
30 SCREW_HOLE_HEIGHT = 12;
31 SCREW_HOLE_WIDTH = 5;
32 SCREW_HOLE_Z_OFFSET = 12.5;
33 SCREW_HOLE_Y_OFFSET = 83.5;
34
35
36 module cover() {
37 difference() {
38 cube([COVER_WIDTH, COVER_DEPTH, COVER_HEIGHT]);
39 translate([COVER_SUPPORT_WIDTH, COVER_INNER_DEPTH, 0]) {
40 cube([COVER_WIDTH - (2 * COVER_SUPPORT_WIDTH), COVER_DEPTH - COVER_INNER_DEPTH, COVER_HEIGHT]);
41 }
42 translate([WALL, WALL, WALL]) {
43 cube([PSU_WIDTH, PSU_DEPTH, PSU_HEIGHT]);
44 }
45 }
46 }
47
48 module vents() {
49 for (x = [ WALL + VENT_DISTANCE : VENT_DISTANCE : COVER_WIDTH - WALL ]) {
50 translate([x, WALL, (COVER_HEIGHT - VENT_HEIGHT) / 2]) {
51 rotate([0, -90, 90]) {
52 if (x < CABLE_SLOT_HEIGHT + WALL + VENT_DISTANCE) {
53 translate([CABLE_SLOT_WIDTH + CABLE_SLOT_VENT_DISTANCE, 0, 0]) {
54 slot(VENT_WIDTH, VENT_HEIGHT - CABLE_SLOT_WIDTH - CABLE_SLOT_VENT_DISTANCE, 2 * WALL);
55 }
56 } else {
57 slot(VENT_WIDTH, VENT_HEIGHT, 2 * WALL);
58 }
59 }
60 }
61 }
62
63 }
64
65 module slot(width, height, depth) {
66 translate([width / 2, 0, 0]) {
67 union() {
68 cube([height - width, width, depth]);
69 translate([0, width / 2, 0]) {
70 cylinder(h = depth, r = width / 2);
71 }
72 translate([height - width, width / 2, 0]) {
73 cylinder(h = depth, r = width / 2);
74 }
75 }
76 }
77 }
78
79 module powerSocket() {
80 translate([WALL + 2, POWER_SOCKET_OFFSET, 0.5 * COVER_HEIGHT]) {
81 rotate([0, 90, 0]) {
82 translate([20,0,-5]) cylinder(r=1.7, h=22, center=true);
83 translate([-20,0,-5]) cylinder(r=1.7, h=22, center=true);
84 hull() {
85 minkowski() {
86 cube([20.5,12.5,3], center=true);
87 cylinder(r=5,h=0.1);
88 }
89 translate([20,0,0]) cylinder(r=5, h=3, center=true);
90 translate([-20,0,0]) cylinder(r=5, h=3, center=true);
91 }
92 translate([0,0,-5.5 - 1.5])
93 minkowski() {
94 cube([20,12,11], center=true);
95 cylinder(r=4,h=0.1);
96 }
97 }
98 }
99 }
100
101 module powerSwitch() {
102 translate([COVER_WIDTH / 2, POWER_SWITCH_OFFSET, COVER_HEIGHT + 2]) {
103 rotate([0, 0, -90]) {
104 cube([14.8,20.8,2], center=true);
105 translate([0,0,-7-1]) cube([13,19.8,14], center=true);
106 }
107 }
108 }
109
110 module cableSlot() {
111 translate([WALL + VENT_DISTANCE / 2, WALL, (COVER_HEIGHT - VENT_HEIGHT) / 2]) {
112 rotate([90, 0, 0]) {
113 slot(CABLE_SLOT_WIDTH, CABLE_SLOT_HEIGHT, WALL * 2);
114 }
115 }
116 }
117
118 module screwHoles() {
119 translate([-2.5, SCREW_HOLE_Y_OFFSET + WALL - SCREW_HOLE_HEIGHT, SCREW_HOLE_Z_OFFSET + WALL + PSU_CLEARANCE / 2 - SCREW_HOLE_WIDTH / 2]) {
120 rotate([90, 0, 90]) {
121 slot(SCREW_HOLE_WIDTH, SCREW_HOLE_HEIGHT, COVER_WIDTH + 5);
122 }
123 }
124
125 translate([-2.5, SCREW_HOLE_Y_OFFSET + WALL - SCREW_HOLE_HEIGHT, COVER_HEIGHT - SCREW_HOLE_Z_OFFSET - SCREW_HOLE_WIDTH - WALL - PSU_CLEARANCE / 2 + SCREW_HOLE_WIDTH / 2]) {
126 rotate([90, 0, 90]) {
127 slot(SCREW_HOLE_WIDTH, SCREW_HOLE_HEIGHT, COVER_WIDTH + 5);
128 }
129 }
130 }
131
132 translate([0, COVER_HEIGHT, 0]) rotate([90, 0, 0]) {
133 difference() {
134 cover();
135 vents();
136 cableSlot();
137 powerSocket();
138 powerSwitch();
139 screwHoles();
140 }
141 }
142