// License: CC0 // // Version 0.1.2 // // 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_small_width = 7; MAG_ACCESS_total_height = 95; MAG_ACCESS_section = [17,24,18,24,17]; SCREEN_screw_diam = 3; SCREEN_dw = 177; SCREEN_dh = 54; SCREEN_WINDOW_h = 46; SCREEN_WINDOW_w = 160; BOARD_screw_diam = 3; BOARD_screw_dh = 76.25; BOARD_screw_dw = 101.5; BOARD_mount_screw_dw = 175; BOARD_mount_screw_dh = 70; BOARD_mount_screw_diam = 3; // ... //PIU_width = 190; //PIU_height = 160; //PIU_side = 50; RAM_mount_pos_x = 0; RAM_mount_pos_y = 30; RAM_mount_dw = 3*25.4; RAM_mount_dh = (1 + 5/8)*25.4; RAM_mount_screw_diam = (1/4)*25.4; PIU_width = 200; PIU_height = 165; PIU_side = 70; _base_platform_width = 2*PIU_width/3; _base_platform_height = 2*PIU_height/5; USE_MOUNT_BRACKET = true; mount_bracket_dh = 40; mount_bracket_r = 5/2; mount_bracket_y = -PIU_height/2 + BOARD_mount_screw_dh/2 + 15; mount_bracket_x = BOARD_mount_screw_dw/2; module PIU_board_plate_simple() { _cr = 5; _cdx = BOARD_screw_dh + 10; _cdy = BOARD_screw_dw + 10; difference() { hull() { translate([-_cdx/2, -_cdy/2]) circle(_cr); translate([ _cdx/2, -_cdy/2]) circle(_cr); translate([ _cdx/2, _cdy/2]) circle(_cr); translate([-_cdx/2, _cdy/2]) circle(_cr); } translate([-BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2); translate([ BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2); translate([ BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2); translate([-BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2); } } module PIU_board_plate() { _cr = 2; _cdx = BOARD_screw_dh + 10; _cdy = BOARD_screw_dw + 10; _w = 14; px = _base_platform_width; py = _base_platform_height; difference() { union() { hull() { translate([-px/2 -_w, -_cdy/2]) circle(_cr); translate([ px/2 +_w, -_cdy/2]) circle(_cr); translate([ px/2 +_w, _cdy/2]) circle(_cr); translate([-px/2 -_w, _cdy/2]) circle(_cr); } } hull() { translate([-_cdx/2 + _w, -_cdy/2 + _w]) circle(_cr); translate([ _cdx/2 - _w, -_cdy/2 + _w]) circle(_cr); translate([ _cdx/2 - _w, _cdy/2 - _w]) circle(_cr); translate([-_cdx/2 + _w, _cdy/2 - _w]) circle(_cr); } translate([-BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2); translate([ BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2); translate([ BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2); translate([-BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2); translate([-px/2, py/2]) circle(M3_H3_DRILL_R); translate([-px/2,-py/2]) circle(M3_H3_DRILL_R); translate([-px/2, 0]) circle(M3_H3_DRILL_R); translate([ px/2, py/2]) circle(M3_H3_DRILL_R); translate([ px/2,-py/2]) circle(M3_H3_DRILL_R); translate([ px/2, 0]) circle(M3_H3_DRILL_R); } } module PIU_board_support_base() { _cr = 8; //px = 2*PIU_width/3; //py = 2*PIU_height/5; px = _base_platform_width; py = _base_platform_height; difference() { union() { hull() { translate([-px/2, py/2]) circle(_cr); translate([-px/2, -py/2]) circle(_cr); } hull() { translate([ px/2, py/2]) circle(_cr); translate([ px/2,-py/2]) circle(_cr); } hull() { translate([ -px/2, 0]) circle(_cr); translate([ px/2, 0]) circle(_cr); } } translate([-px/2, 0]) circle(M3_H3_DRILL_R); translate([-px/2, py/2]) circle(M3_H3_DRILL_R); translate([-px/2,-py/2]) circle(M3_H3_DRILL_R); translate([ px/2, 0]) circle(M3_H3_DRILL_R); translate([ px/2, py/2]) circle(M3_H3_DRILL_R); translate([ px/2,-py/2]) circle(M3_H3_DRILL_R); } } module PIU_face() { ang = 10; 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([-40, -5]) 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( ang, [0,0,1]) translate([-MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2); rotate( ang, [0,0,1]) translate([ MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2); rotate(-ang, [0,0,1]) translate([-MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2); rotate(-ang, [0,0,1]) translate([ MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2); rotate( ang, [0,0,1]) translate([-MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2); rotate( ang, [0,0,1]) translate([ MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2); rotate(-ang, [0,0,1]) translate([-MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2); rotate(-ang, [0,0,1]) translate([ MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2); } // RFID // //translate([-30,-55]) 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); } // Blue Board mounting bracket // translate([0, -PIU_height/2 + BOARD_mount_screw_dh/2 + 15]) union() { translate([-BOARD_mount_screw_dw/2, BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2); translate([ BOARD_mount_screw_dw/2, BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2); translate([ BOARD_mount_screw_dw/2,-BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2); translate([-BOARD_mount_screw_dw/2,-BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2); } if (USE_MOUNT_BRACKET) { translate([ mount_bracket_x, mount_bracket_y+mount_bracket_dh/2]) circle(mount_bracket_r); translate([ mount_bracket_x, mount_bracket_y-mount_bracket_dh/2]) circle(mount_bracket_r); translate([-mount_bracket_x, mount_bracket_y+mount_bracket_dh/2]) circle(mount_bracket_r); translate([-mount_bracket_x, mount_bracket_y-mount_bracket_dh/2]) circle(mount_bracket_r); } } } module BOARD_mounting_plate() { //BOARD_screw_diam = 3; //BOARD_screw_dw = 76.25; //BOARD_screw_dh = 101.5; //BOARD_mount_screw_dw = 175; //BOARD_mount_screw_dh = 80; //BOARD_mount_screw_diam = 3; extra = BOARD_mount_screw_diam*4; difference() { dy = 5; union() { square([BOARD_mount_screw_dw+extra, BOARD_mount_screw_dh+extra], center=true); translate([0, dy]) square([BOARD_screw_dw+extra, BOARD_screw_dh+extra], center=true); } translate([0,dy]) union() { square([30,30], center=true); translate([-BOARD_screw_dw/2, BOARD_screw_dh/2]) circle(BOARD_screw_diam/2); translate([ BOARD_screw_dw/2, BOARD_screw_dh/2]) circle(BOARD_screw_diam/2); translate([-BOARD_screw_dw/2,-BOARD_screw_dh/2]) circle(BOARD_screw_diam/2); translate([ BOARD_screw_dw/2,-BOARD_screw_dh/2]) circle(BOARD_screw_diam/2); } union() { translate([-BOARD_mount_screw_dw/2, BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2); translate([ BOARD_mount_screw_dw/2, BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2); translate([ BOARD_mount_screw_dw/2,-BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2); translate([-BOARD_mount_screw_dw/2,-BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_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); translate([ -_dx, 0]) circle(_drill_r); translate([ _dx, 0]) circle(_drill_r); translate([ 0, _dy]) circle(_drill_r); translate([ 0, -_dy]) circle(_drill_r); } } module PIU_back_panel() { difference() { // central face // square([PIU_width, PIU_height], center=true); translate([0,-30]) circle(20); translate([RAM_mount_pos_x,RAM_mount_pos_y]) union() { translate([-RAM_mount_dw/2, -RAM_mount_dh/2]) circle(RAM_mount_screw_diam/2); translate([ RAM_mount_dw/2, -RAM_mount_dh/2]) circle(RAM_mount_screw_diam/2); translate([-RAM_mount_dw/2, RAM_mount_dh/2]) circle(RAM_mount_screw_diam/2); translate([ RAM_mount_dw/2, RAM_mount_dh/2]) circle(RAM_mount_screw_diam/2); } if (USE_MOUNT_BRACKET) { translate([ mount_bracket_x, mount_bracket_y+mount_bracket_dh/2]) circle(mount_bracket_r); translate([ mount_bracket_x, mount_bracket_y-mount_bracket_dh/2]) circle(mount_bracket_r); translate([-mount_bracket_x, mount_bracket_y+mount_bracket_dh/2]) circle(mount_bracket_r); translate([-mount_bracket_x, mount_bracket_y-mount_bracket_dh/2]) circle(mount_bracket_r); } } } module all() { PIU(); translate([0,240]) PIU_back_bracket(); translate([0,240]) PIU_board_support_base(); translate([0,-180]) PIU_board_plate(); //translate([0,-300]) PIU_board_support_base(); /* translate([220,-35]) rotate(0, [0,0,1]) PIU_board_plate(); translate([-230,-35]) rotate(0, [0,0,1]) PIU_board_support_base(); */ } //all(); //PIU(); // calibration because svg export sucks // //square([100,100], center=true); PIU_face(); translate([0,-160]) BOARD_mounting_plate(); translate([0,180]) PIU_back_panel();