]> mj.ucw.cz Git - home-hw.git/commitdiff
RS485 convertor case: 1st try
authorMartin Mares <mj@ucw.cz>
Sat, 23 Nov 2019 18:56:15 +0000 (19:56 +0100)
committerMartin Mares <mj@ucw.cz>
Sat, 23 Nov 2019 18:56:15 +0000 (19:56 +0100)
rs485-case/case.scad [new file with mode: 0644]

diff --git a/rs485-case/case.scad b/rs485-case/case.scad
new file mode 100644 (file)
index 0000000..1f60dd3
--- /dev/null
@@ -0,0 +1,102 @@
+wall_thickness = 1.5;
+
+pcb_length = 53.5;
+pcb_width = 18.5;
+pcb_thickness = 1;
+pcb_depth = 3;
+pcb_rail_width = 1;
+
+box_height = 12;
+box_depth = pcb_thickness + pcb_depth;
+
+usb_width = 10.5;
+usb_height = 11;
+
+rs485_width = 16.5;
+rs485_height = 8;
+
+lock_thickness = 1;
+lock_height = 4;
+
+over = 0.1;
+clearance = 0.3;
+
+module bottom() {
+       difference() {
+               // Exterior
+               translate([-wall_thickness, -wall_thickness, -box_depth-wall_thickness])
+                       cube([2*wall_thickness + pcb_length, 2*wall_thickness + pcb_width, wall_thickness + box_depth + box_height]);
+
+               // Interior
+               cube([pcb_length, pcb_width, box_height+1]);
+
+               // USB connector hole
+               translate([pcb_length-over, (pcb_width-usb_width)/2, 0])
+                       cube([wall_thickness+2, usb_width, box_height+over]);
+
+               // RS485 connector hole
+               translate([-wall_thickness-over, (pcb_width-rs485_width)/2, 0])
+                       cube([wall_thickness+2*over, rs485_width, box_height+over]);
+
+               // PCB
+               translate([0, 0, -pcb_thickness])
+                       cube([pcb_length, pcb_width, pcb_thickness+over]);
+
+               // Sub-PCB holes
+               translate([0, pcb_rail_width, -pcb_thickness-pcb_depth])
+                       cube([10, pcb_width - 2*pcb_rail_width, pcb_thickness + pcb_depth + over]);
+               translate([24, pcb_rail_width, -pcb_thickness-pcb_depth])
+                       cube([9, pcb_width - 2*pcb_rail_width, pcb_thickness + pcb_depth + over]);
+               translate([pcb_length - 9, pcb_rail_width, -pcb_thickness-pcb_depth])
+                       cube([8, pcb_width - 2*pcb_rail_width, pcb_thickness + pcb_depth + over]);
+       }
+
+       // Locks
+       /*
+       translate([0, -wall_thickness-lock_thickness, box_height - lock_height])
+               cube([pcb_length, lock_thickness + wall_thickness/2, lock_height]);
+       translate([0, pcb_width + wall_thickness/2, box_height - lock_height])
+               cube([pcb_length, lock_thickness + wall_thickness/2, lock_height]);
+       */
+}
+
+module top() {
+       difference() {
+               union() {
+                       // Lid
+                       translate([-wall_thickness, -wall_thickness, 0])
+                               cube([pcb_length + 2*wall_thickness, pcb_width + 2*wall_thickness, wall_thickness]);
+
+                       // USB connector roof
+                       translate([pcb_length, (pcb_width - usb_width)/2 + clearance, usb_height - box_height + clearance])
+                               cube([wall_thickness, usb_width - 2*clearance, box_height - usb_height - clearance + over]);
+
+                       // RS485 connector roof
+                       translate([-wall_thickness, (pcb_width - rs485_width)/2 + clearance, rs485_height - box_height + clearance])
+                               cube([wall_thickness, rs485_width - 2*clearance, box_height - rs485_height - clearance + over]);
+               }
+
+               // LED holes
+               translate([32, 1, -over])
+                       cube([4, 2, wall_thickness + 2*over]);
+               translate([32, pcb_width - 3, -over])
+                       cube([4, 2, wall_thickness + 2*over]);
+
+               // USB label
+               translate([pcb_length-3, pcb_width/2, wall_thickness/2])
+               rotate(90)
+               scale([0.4, 0.4, 1])
+                       linear_extrude(wall_thickness/2 + over)
+                       text("USB", font = "Liberation Serif", halign="center");
+
+               // RS485 label
+               translate([3, pcb_width/2, wall_thickness/2])
+               rotate(-90)
+               scale([0.4, 0.4, 1])
+                       linear_extrude(wall_thickness/2 + over)
+                       text("RS 485", font = "Liberation Serif", halign="center");
+       }
+}
+
+color([0.7, 0, 0]) bottom();
+color([0, 1, 0]) translate([0, 0, box_height]) top();