]> mj.ucw.cz Git - home-hw.git/blob - rs485-case/case.scad
RS485 convertor case: 1st try
[home-hw.git] / rs485-case / case.scad
1 wall_thickness = 1.5;
2
3 pcb_length = 53.5;
4 pcb_width = 18.5;
5 pcb_thickness = 1;
6 pcb_depth = 3;
7 pcb_rail_width = 1;
8
9 box_height = 12;
10 box_depth = pcb_thickness + pcb_depth;
11
12 usb_width = 10.5;
13 usb_height = 11;
14
15 rs485_width = 16.5;
16 rs485_height = 8;
17
18 lock_thickness = 1;
19 lock_height = 4;
20
21 over = 0.1;
22 clearance = 0.3;
23
24 module bottom() {
25         difference() {
26                 // Exterior
27                 translate([-wall_thickness, -wall_thickness, -box_depth-wall_thickness])
28                         cube([2*wall_thickness + pcb_length, 2*wall_thickness + pcb_width, wall_thickness + box_depth + box_height]);
29
30                 // Interior
31                 cube([pcb_length, pcb_width, box_height+1]);
32
33                 // USB connector hole
34                 translate([pcb_length-over, (pcb_width-usb_width)/2, 0])
35                         cube([wall_thickness+2, usb_width, box_height+over]);
36
37                 // RS485 connector hole
38                 translate([-wall_thickness-over, (pcb_width-rs485_width)/2, 0])
39                         cube([wall_thickness+2*over, rs485_width, box_height+over]);
40
41                 // PCB
42                 translate([0, 0, -pcb_thickness])
43                         cube([pcb_length, pcb_width, pcb_thickness+over]);
44
45                 // Sub-PCB holes
46                 translate([0, pcb_rail_width, -pcb_thickness-pcb_depth])
47                         cube([10, pcb_width - 2*pcb_rail_width, pcb_thickness + pcb_depth + over]);
48                 translate([24, pcb_rail_width, -pcb_thickness-pcb_depth])
49                         cube([9, pcb_width - 2*pcb_rail_width, pcb_thickness + pcb_depth + over]);
50                 translate([pcb_length - 9, pcb_rail_width, -pcb_thickness-pcb_depth])
51                         cube([8, pcb_width - 2*pcb_rail_width, pcb_thickness + pcb_depth + over]);
52         }
53
54         // Locks
55         /*
56         translate([0, -wall_thickness-lock_thickness, box_height - lock_height])
57                 cube([pcb_length, lock_thickness + wall_thickness/2, lock_height]);
58         translate([0, pcb_width + wall_thickness/2, box_height - lock_height])
59                 cube([pcb_length, lock_thickness + wall_thickness/2, lock_height]);
60         */
61 }
62
63 module top() {
64         difference() {
65                 union() {
66                         // Lid
67                         translate([-wall_thickness, -wall_thickness, 0])
68                                 cube([pcb_length + 2*wall_thickness, pcb_width + 2*wall_thickness, wall_thickness]);
69
70                         // USB connector roof
71                         translate([pcb_length, (pcb_width - usb_width)/2 + clearance, usb_height - box_height + clearance])
72                                 cube([wall_thickness, usb_width - 2*clearance, box_height - usb_height - clearance + over]);
73
74                         // RS485 connector roof
75                         translate([-wall_thickness, (pcb_width - rs485_width)/2 + clearance, rs485_height - box_height + clearance])
76                                 cube([wall_thickness, rs485_width - 2*clearance, box_height - rs485_height - clearance + over]);
77                 }
78
79                 // LED holes
80                 translate([32, 1, -over])
81                         cube([4, 2, wall_thickness + 2*over]);
82                 translate([32, pcb_width - 3, -over])
83                         cube([4, 2, wall_thickness + 2*over]);
84
85                 // USB label
86                 translate([pcb_length-3, pcb_width/2, wall_thickness/2])
87                 rotate(90)
88                 scale([0.4, 0.4, 1])
89                         linear_extrude(wall_thickness/2 + over)
90                         text("USB", font = "Liberation Serif", halign="center");
91
92                 // RS485 label
93                 translate([3, pcb_width/2, wall_thickness/2])
94                 rotate(-90)
95                 scale([0.4, 0.4, 1])
96                         linear_extrude(wall_thickness/2 + over)
97                         text("RS 485", font = "Liberation Serif", halign="center");
98         }
99 }
100
101 color([0.7, 0, 0]) bottom();
102 color([0, 1, 0]) translate([0, 0, box_height]) top();