// License: CC0 // // units in mm $fn = 50; M3_H3_DRILL_R = 4.3127/2; RFID_screw_diam = 3; RFID_screw_dw = 103.5; RFID_access_diam = 15.5; MAG_PCB_screw_dw = 81.5; MAG_PCB_screw_diam = 2; MAG_READER_screw_dw = 93.75; MAG_READER_screw_diam = 3; MAG_ACCESS_total_width = 25; MAG_ACCESS_small_width = 10; MAG_ACCESS_total_height = 95; MAG_ACCESS_section = [17,16,29,16,17]; SCREEN_screw_diam = 3; SCREEN_dw = 186; SCREEN_dh = 54; SCREEN_WINDOW_h = 46; SCREEN_WINDOW_w = 160; BOARD_screw_diam = 3; BOARD_screw_dw = 76.25; BOARD_screw_dh = 101.5; PIU_width = 200; PIU_height = 160; PIU_side = 50; module PIU_face() { difference() { // central face // square([PIU_width, PIU_height], center=true); // screen // translate([0, PIU_height/2 - SCREEN_WINDOW_h/2 - 10]) union() { square([SCREEN_WINDOW_w, SCREEN_WINDOW_h], center=true); translate([-SCREEN_dw/2, SCREEN_dh/2]) circle(SCREEN_screw_diam/2); translate([ SCREEN_dw/2, SCREEN_dh/2]) circle(SCREEN_screw_diam/2); translate([ SCREEN_dw/2,-SCREEN_dh/2]) circle(SCREEN_screw_diam/2); translate([-SCREEN_dw/2,-SCREEN_dh/2]) circle(SCREEN_screw_diam/2); } // mag // translate([0, -5]) union() { square([MAG_ACCESS_total_height, MAG_ACCESS_small_width], center=true); translate([-MAG_ACCESS_section[1]/2 - MAG_ACCESS_section[2]/2, 0]) square([MAG_ACCESS_section[1], MAG_ACCESS_total_width], center=true); translate([ MAG_ACCESS_section[3]/2 + MAG_ACCESS_section[2]/2, 0]) square([MAG_ACCESS_section[3], MAG_ACCESS_total_width], center=true); rotate( 15, [0,0,1]) translate([-MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2); rotate( 15, [0,0,1]) translate([ MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2); rotate(-15, [0,0,1]) translate([-MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2); rotate(-15, [0,0,1]) translate([ MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2); rotate( 15, [0,0,1]) translate([-MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2); rotate( 15, [0,0,1]) translate([ MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2); rotate(-15, [0,0,1]) translate([-MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2); rotate(-15, [0,0,1]) translate([ MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2); } // RFID // translate([0,-55]) union() { translate([-RFID_screw_dw/2,0]) circle(RFID_screw_diam/2); translate([ RFID_screw_dw/2,0]) circle(RFID_screw_diam/2); circle(RFID_access_diam/2); } } } module PIU() { _c = 1; union() { PIU_face(); // side left and right // translate([_c + PIU_width/2 + PIU_side/2, 0]) square([PIU_side, PIU_height], center=true); translate([-(_c + PIU_width/2 + PIU_side/2), 0]) square([PIU_side, PIU_height], center=true); // top and bottom // translate([0, _c + PIU_height/2 + PIU_side/2]) square([PIU_width, PIU_side], center=true); translate([0, -(_c + PIU_height/2 + PIU_side/2)]) square([PIU_width, PIU_side], center=true); // connecting strips // translate([-PIU_width/2 - _c/2, 0]) square([_c+0.25, PIU_height], center=true); translate([ PIU_width/2 + _c/2, 0]) square([_c+0.25, PIU_height], center=true); translate([ 0, PIU_height/2 + _c/2]) square([PIU_width, _c+0.25], center=true); translate([ 0, -(PIU_height/2 + _c/2)]) square([PIU_width, _c+0.25], center=true); } } module PIU_back_bracket() { _w = 20; _dx = PIU_width/2 - _w/2; _dy = PIU_height/2 - _w/2; _drill_r = M3_H3_DRILL_R; difference() { square([PIU_width, PIU_height], center=true); square([PIU_width - 2*_w, PIU_height - 2*_w], center=true); translate([ -_dx, -_dy]) circle(_drill_r); translate([ _dx, -_dy]) circle(_drill_r); translate([ _dx, _dy]) circle(_drill_r); translate([ -_dx, _dy]) circle(_drill_r); } } PIU(); translate([0,240]) PIU_back_bracket();