| 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 | |