PIU-box-interim.scad 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. // License: CC0
  2. //
  3. // units in mm
  4. $fn = 50;
  5. M3_H3_DRILL_R = 4.3127/2;
  6. RFID_screw_diam = 3;
  7. RFID_screw_dw = 103.5;
  8. RFID_access_diam = 15.5;
  9. MAG_PCB_screw_dw = 81.5;
  10. MAG_PCB_screw_diam = 2;
  11. MAG_READER_screw_dw = 93.75;
  12. MAG_READER_screw_diam = 3;
  13. MAG_ACCESS_total_width = 25;
  14. //MAG_ACCESS_small_width = 10;
  15. MAG_ACCESS_small_width = 7;
  16. MAG_ACCESS_total_height = 95;
  17. MAG_ACCESS_section = [17,24,18,24,17];
  18. SCREEN_screw_diam = 3;
  19. SCREEN_dw = 177;
  20. SCREEN_dh = 54;
  21. SCREEN_WINDOW_h = 46;
  22. SCREEN_WINDOW_w = 160;
  23. BOARD_screw_diam = 3;
  24. BOARD_screw_dw = 76.25;
  25. BOARD_screw_dh = 101.5;
  26. PIU_width = 190;
  27. PIU_height = 160;
  28. PIU_side = 50;
  29. _base_platform_width = 2*PIU_width/3;
  30. _base_platform_height = 2*PIU_height/5;
  31. module PIU_board_plate_simple() {
  32. _cr = 5;
  33. _cdx = BOARD_screw_dh + 10;
  34. _cdy = BOARD_screw_dw + 10;
  35. difference() {
  36. hull() {
  37. translate([-_cdx/2, -_cdy/2]) circle(_cr);
  38. translate([ _cdx/2, -_cdy/2]) circle(_cr);
  39. translate([ _cdx/2, _cdy/2]) circle(_cr);
  40. translate([-_cdx/2, _cdy/2]) circle(_cr);
  41. }
  42. translate([-BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  43. translate([ BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  44. translate([ BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  45. translate([-BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  46. }
  47. }
  48. module PIU_board_plate() {
  49. _cr = 2;
  50. _cdx = BOARD_screw_dh + 10;
  51. _cdy = BOARD_screw_dw + 10;
  52. _w = 14;
  53. px = _base_platform_width;
  54. py = _base_platform_height;
  55. difference() {
  56. union() {
  57. hull() {
  58. translate([-px/2 -_w, -_cdy/2]) circle(_cr);
  59. translate([ px/2 +_w, -_cdy/2]) circle(_cr);
  60. translate([ px/2 +_w, _cdy/2]) circle(_cr);
  61. translate([-px/2 -_w, _cdy/2]) circle(_cr);
  62. }
  63. }
  64. hull() {
  65. translate([-_cdx/2 + _w, -_cdy/2 + _w]) circle(_cr);
  66. translate([ _cdx/2 - _w, -_cdy/2 + _w]) circle(_cr);
  67. translate([ _cdx/2 - _w, _cdy/2 - _w]) circle(_cr);
  68. translate([-_cdx/2 + _w, _cdy/2 - _w]) circle(_cr);
  69. }
  70. translate([-BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  71. translate([ BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  72. translate([ BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  73. translate([-BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  74. translate([-px/2, py/2]) circle(M3_H3_DRILL_R);
  75. translate([-px/2,-py/2]) circle(M3_H3_DRILL_R);
  76. translate([-px/2, 0]) circle(M3_H3_DRILL_R);
  77. translate([ px/2, py/2]) circle(M3_H3_DRILL_R);
  78. translate([ px/2,-py/2]) circle(M3_H3_DRILL_R);
  79. translate([ px/2, 0]) circle(M3_H3_DRILL_R);
  80. }
  81. }
  82. module PIU_board_support_base() {
  83. _cr = 8;
  84. //px = 2*PIU_width/3;
  85. //py = 2*PIU_height/5;
  86. px = _base_platform_width;
  87. py = _base_platform_height;
  88. difference() {
  89. union() {
  90. hull() {
  91. translate([-px/2, py/2]) circle(_cr);
  92. translate([-px/2, -py/2]) circle(_cr);
  93. }
  94. hull() {
  95. translate([ px/2, py/2]) circle(_cr);
  96. translate([ px/2,-py/2]) circle(_cr);
  97. }
  98. hull() {
  99. translate([ -px/2, 0]) circle(_cr);
  100. translate([ px/2, 0]) circle(_cr);
  101. }
  102. }
  103. translate([-px/2, 0]) circle(M3_H3_DRILL_R);
  104. translate([-px/2, py/2]) circle(M3_H3_DRILL_R);
  105. translate([-px/2,-py/2]) circle(M3_H3_DRILL_R);
  106. translate([ px/2, 0]) circle(M3_H3_DRILL_R);
  107. translate([ px/2, py/2]) circle(M3_H3_DRILL_R);
  108. translate([ px/2,-py/2]) circle(M3_H3_DRILL_R);
  109. }
  110. }
  111. module PIU_face() {
  112. ang = 10;
  113. difference() {
  114. // central face
  115. //
  116. square([PIU_width, PIU_height], center=true);
  117. // screen
  118. //
  119. translate([0, PIU_height/2 - SCREEN_WINDOW_h/2 - 10])
  120. union() {
  121. square([SCREEN_WINDOW_w, SCREEN_WINDOW_h], center=true);
  122. translate([-SCREEN_dw/2, SCREEN_dh/2]) circle(SCREEN_screw_diam/2);
  123. translate([ SCREEN_dw/2, SCREEN_dh/2]) circle(SCREEN_screw_diam/2);
  124. translate([ SCREEN_dw/2,-SCREEN_dh/2]) circle(SCREEN_screw_diam/2);
  125. translate([-SCREEN_dw/2,-SCREEN_dh/2]) circle(SCREEN_screw_diam/2);
  126. }
  127. // mag
  128. //
  129. //translate([-40, -5])
  130. translate([0, -5])
  131. union() {
  132. square([MAG_ACCESS_total_height, MAG_ACCESS_small_width], center=true);
  133. translate([-MAG_ACCESS_section[1]/2 - MAG_ACCESS_section[2]/2, 0])
  134. square([MAG_ACCESS_section[1], MAG_ACCESS_total_width], center=true);
  135. translate([ MAG_ACCESS_section[3]/2 + MAG_ACCESS_section[2]/2, 0])
  136. square([MAG_ACCESS_section[3], MAG_ACCESS_total_width], center=true);
  137. rotate( ang, [0,0,1]) translate([-MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2);
  138. rotate( ang, [0,0,1]) translate([ MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2);
  139. rotate(-ang, [0,0,1]) translate([-MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2);
  140. rotate(-ang, [0,0,1]) translate([ MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2);
  141. rotate( ang, [0,0,1]) translate([-MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2);
  142. rotate( ang, [0,0,1]) translate([ MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2);
  143. rotate(-ang, [0,0,1]) translate([-MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2);
  144. rotate(-ang, [0,0,1]) translate([ MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2);
  145. }
  146. // RFID
  147. //
  148. //translate([-30,-55])
  149. translate([0,-55])
  150. union() {
  151. translate([-RFID_screw_dw/2,0]) circle(RFID_screw_diam/2);
  152. translate([ RFID_screw_dw/2,0]) circle(RFID_screw_diam/2);
  153. circle(RFID_access_diam/2);
  154. }
  155. }
  156. }
  157. module PIU() {
  158. _c = 1;
  159. union() {
  160. PIU_face();
  161. // side left and right
  162. //
  163. translate([_c + PIU_width/2 + PIU_side/2, 0])
  164. square([PIU_side, PIU_height], center=true);
  165. translate([-(_c + PIU_width/2 + PIU_side/2), 0])
  166. square([PIU_side, PIU_height], center=true);
  167. // top and bottom
  168. //
  169. translate([0, _c + PIU_height/2 + PIU_side/2])
  170. square([PIU_width, PIU_side], center=true);
  171. translate([0, -(_c + PIU_height/2 + PIU_side/2)])
  172. square([PIU_width, PIU_side], center=true);
  173. // connecting strips
  174. //
  175. translate([-PIU_width/2 - _c/2, 0]) square([_c+0.25, PIU_height], center=true);
  176. translate([ PIU_width/2 + _c/2, 0]) square([_c+0.25, PIU_height], center=true);
  177. translate([ 0, PIU_height/2 + _c/2]) square([PIU_width, _c+0.25], center=true);
  178. translate([ 0, -(PIU_height/2 + _c/2)]) square([PIU_width, _c+0.25], center=true);
  179. }
  180. }
  181. module PIU_back_bracket() {
  182. _w = 20;
  183. _dx = PIU_width/2 - _w/2;
  184. _dy = PIU_height/2 - _w/2;
  185. _drill_r = M3_H3_DRILL_R;
  186. difference() {
  187. square([PIU_width, PIU_height], center=true);
  188. square([PIU_width - 2*_w, PIU_height - 2*_w], center=true);
  189. translate([ -_dx, -_dy]) circle(_drill_r);
  190. translate([ _dx, -_dy]) circle(_drill_r);
  191. translate([ _dx, _dy]) circle(_drill_r);
  192. translate([ -_dx, _dy]) circle(_drill_r);
  193. translate([ -_dx, 0]) circle(_drill_r);
  194. translate([ _dx, 0]) circle(_drill_r);
  195. translate([ 0, _dy]) circle(_drill_r);
  196. translate([ 0, -_dy]) circle(_drill_r);
  197. }
  198. }
  199. module all() {
  200. PIU();
  201. translate([0,240]) PIU_back_bracket();
  202. translate([0,240]) PIU_board_support_base();
  203. translate([0,-180]) PIU_board_plate();
  204. //translate([0,-300]) PIU_board_support_base();
  205. /*
  206. translate([220,-35]) rotate(0, [0,0,1]) PIU_board_plate();
  207. translate([-230,-35]) rotate(0, [0,0,1]) PIU_board_support_base();
  208. */
  209. }
  210. //all();
  211. PIU();