PIU-box-interim.scad 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  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_dh = 76.25;
  25. BOARD_screw_dw = 101.5;
  26. BOARD_mount_screw_dw = 175;
  27. BOARD_mount_screw_dh = 70;
  28. BOARD_mount_screw_diam = 3;
  29. // ...
  30. //PIU_width = 190;
  31. //PIU_height = 160;
  32. //PIU_side = 50;
  33. RAM_mount_pos_x = 0;
  34. RAM_mount_pos_y = 30;
  35. RAM_mount_dw = 3*25.4;
  36. RAM_mount_dh = (1 + 5/8)*25.4;
  37. RAM_mount_screw_diam = (1/4)*25.4;
  38. PIU_width = 200;
  39. PIU_height = 165;
  40. PIU_side = 70;
  41. _base_platform_width = 2*PIU_width/3;
  42. _base_platform_height = 2*PIU_height/5;
  43. module PIU_board_plate_simple() {
  44. _cr = 5;
  45. _cdx = BOARD_screw_dh + 10;
  46. _cdy = BOARD_screw_dw + 10;
  47. difference() {
  48. hull() {
  49. translate([-_cdx/2, -_cdy/2]) circle(_cr);
  50. translate([ _cdx/2, -_cdy/2]) circle(_cr);
  51. translate([ _cdx/2, _cdy/2]) circle(_cr);
  52. translate([-_cdx/2, _cdy/2]) circle(_cr);
  53. }
  54. translate([-BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  55. translate([ BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  56. translate([ BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  57. translate([-BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  58. }
  59. }
  60. module PIU_board_plate() {
  61. _cr = 2;
  62. _cdx = BOARD_screw_dh + 10;
  63. _cdy = BOARD_screw_dw + 10;
  64. _w = 14;
  65. px = _base_platform_width;
  66. py = _base_platform_height;
  67. difference() {
  68. union() {
  69. hull() {
  70. translate([-px/2 -_w, -_cdy/2]) circle(_cr);
  71. translate([ px/2 +_w, -_cdy/2]) circle(_cr);
  72. translate([ px/2 +_w, _cdy/2]) circle(_cr);
  73. translate([-px/2 -_w, _cdy/2]) circle(_cr);
  74. }
  75. }
  76. hull() {
  77. translate([-_cdx/2 + _w, -_cdy/2 + _w]) circle(_cr);
  78. translate([ _cdx/2 - _w, -_cdy/2 + _w]) circle(_cr);
  79. translate([ _cdx/2 - _w, _cdy/2 - _w]) circle(_cr);
  80. translate([-_cdx/2 + _w, _cdy/2 - _w]) circle(_cr);
  81. }
  82. translate([-BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  83. translate([ BOARD_screw_dh/2, -BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  84. translate([ BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  85. translate([-BOARD_screw_dh/2, BOARD_screw_dw/2]) circle(BOARD_screw_diam/2);
  86. translate([-px/2, py/2]) circle(M3_H3_DRILL_R);
  87. translate([-px/2,-py/2]) circle(M3_H3_DRILL_R);
  88. translate([-px/2, 0]) circle(M3_H3_DRILL_R);
  89. translate([ px/2, py/2]) circle(M3_H3_DRILL_R);
  90. translate([ px/2,-py/2]) circle(M3_H3_DRILL_R);
  91. translate([ px/2, 0]) circle(M3_H3_DRILL_R);
  92. }
  93. }
  94. module PIU_board_support_base() {
  95. _cr = 8;
  96. //px = 2*PIU_width/3;
  97. //py = 2*PIU_height/5;
  98. px = _base_platform_width;
  99. py = _base_platform_height;
  100. difference() {
  101. union() {
  102. hull() {
  103. translate([-px/2, py/2]) circle(_cr);
  104. translate([-px/2, -py/2]) circle(_cr);
  105. }
  106. hull() {
  107. translate([ px/2, py/2]) circle(_cr);
  108. translate([ px/2,-py/2]) circle(_cr);
  109. }
  110. hull() {
  111. translate([ -px/2, 0]) circle(_cr);
  112. translate([ px/2, 0]) circle(_cr);
  113. }
  114. }
  115. translate([-px/2, 0]) circle(M3_H3_DRILL_R);
  116. translate([-px/2, py/2]) circle(M3_H3_DRILL_R);
  117. translate([-px/2,-py/2]) circle(M3_H3_DRILL_R);
  118. translate([ px/2, 0]) circle(M3_H3_DRILL_R);
  119. translate([ px/2, py/2]) circle(M3_H3_DRILL_R);
  120. translate([ px/2,-py/2]) circle(M3_H3_DRILL_R);
  121. }
  122. }
  123. module PIU_face() {
  124. ang = 10;
  125. difference() {
  126. // central face
  127. //
  128. square([PIU_width, PIU_height], center=true);
  129. // screen
  130. //
  131. translate([0, PIU_height/2 - SCREEN_WINDOW_h/2 - 10])
  132. union() {
  133. square([SCREEN_WINDOW_w, SCREEN_WINDOW_h], center=true);
  134. translate([-SCREEN_dw/2, SCREEN_dh/2]) circle(SCREEN_screw_diam/2);
  135. translate([ SCREEN_dw/2, SCREEN_dh/2]) circle(SCREEN_screw_diam/2);
  136. translate([ SCREEN_dw/2,-SCREEN_dh/2]) circle(SCREEN_screw_diam/2);
  137. translate([-SCREEN_dw/2,-SCREEN_dh/2]) circle(SCREEN_screw_diam/2);
  138. }
  139. // mag
  140. //
  141. //translate([-40, -5])
  142. translate([0, -5])
  143. union() {
  144. square([MAG_ACCESS_total_height, MAG_ACCESS_small_width], center=true);
  145. translate([-MAG_ACCESS_section[1]/2 - MAG_ACCESS_section[2]/2, 0])
  146. square([MAG_ACCESS_section[1], MAG_ACCESS_total_width], center=true);
  147. translate([ MAG_ACCESS_section[3]/2 + MAG_ACCESS_section[2]/2, 0])
  148. square([MAG_ACCESS_section[3], MAG_ACCESS_total_width], center=true);
  149. rotate( ang, [0,0,1]) translate([-MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2);
  150. rotate( ang, [0,0,1]) translate([ MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2);
  151. rotate(-ang, [0,0,1]) translate([-MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2);
  152. rotate(-ang, [0,0,1]) translate([ MAG_PCB_screw_dw/2, 0]) circle(MAG_PCB_screw_diam/2);
  153. rotate( ang, [0,0,1]) translate([-MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2);
  154. rotate( ang, [0,0,1]) translate([ MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2);
  155. rotate(-ang, [0,0,1]) translate([-MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2);
  156. rotate(-ang, [0,0,1]) translate([ MAG_READER_screw_dw/2, 0]) circle(MAG_READER_screw_diam/2);
  157. }
  158. // RFID
  159. //
  160. //translate([-30,-55])
  161. translate([0,-55])
  162. union() {
  163. translate([-RFID_screw_dw/2,0]) circle(RFID_screw_diam/2);
  164. translate([ RFID_screw_dw/2,0]) circle(RFID_screw_diam/2);
  165. circle(RFID_access_diam/2);
  166. }
  167. // Blue Board mounting bracket
  168. //
  169. translate([0, -PIU_height/2 + BOARD_mount_screw_dh/2 + 15])
  170. union() {
  171. translate([-BOARD_mount_screw_dw/2, BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2);
  172. translate([ BOARD_mount_screw_dw/2, BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2);
  173. translate([ BOARD_mount_screw_dw/2,-BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2);
  174. translate([-BOARD_mount_screw_dw/2,-BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2);
  175. }
  176. }
  177. }
  178. module BOARD_mounting_plate() {
  179. //BOARD_screw_diam = 3;
  180. //BOARD_screw_dw = 76.25;
  181. //BOARD_screw_dh = 101.5;
  182. //BOARD_mount_screw_dw = 175;
  183. //BOARD_mount_screw_dh = 80;
  184. //BOARD_mount_screw_diam = 3;
  185. extra = BOARD_mount_screw_diam*4;
  186. difference() {
  187. union() {
  188. square([BOARD_mount_screw_dw+extra, BOARD_mount_screw_dh+extra], center=true);
  189. translate([0, 30])
  190. square([BOARD_screw_dw+extra, BOARD_screw_dh+extra], center=true);
  191. }
  192. translate([0,30])
  193. union() {
  194. square([30,30], center=true);
  195. translate([-BOARD_screw_dw/2, BOARD_screw_dh/2]) circle(BOARD_screw_diam/2);
  196. translate([ BOARD_screw_dw/2, BOARD_screw_dh/2]) circle(BOARD_screw_diam/2);
  197. translate([-BOARD_screw_dw/2,-BOARD_screw_dh/2]) circle(BOARD_screw_diam/2);
  198. translate([ BOARD_screw_dw/2,-BOARD_screw_dh/2]) circle(BOARD_screw_diam/2);
  199. }
  200. union() {
  201. translate([-BOARD_mount_screw_dw/2, BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2);
  202. translate([ BOARD_mount_screw_dw/2, BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2);
  203. translate([ BOARD_mount_screw_dw/2,-BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2);
  204. translate([-BOARD_mount_screw_dw/2,-BOARD_mount_screw_dh/2]) circle(BOARD_mount_screw_diam/2);
  205. }
  206. }
  207. }
  208. module PIU() {
  209. _c = 1;
  210. union() {
  211. PIU_face();
  212. // side left and right
  213. //
  214. translate([_c + PIU_width/2 + PIU_side/2, 0])
  215. square([PIU_side, PIU_height], center=true);
  216. translate([-(_c + PIU_width/2 + PIU_side/2), 0])
  217. square([PIU_side, PIU_height], center=true);
  218. // top and bottom
  219. //
  220. translate([0, _c + PIU_height/2 + PIU_side/2])
  221. square([PIU_width, PIU_side], center=true);
  222. translate([0, -(_c + PIU_height/2 + PIU_side/2)])
  223. square([PIU_width, PIU_side], center=true);
  224. // connecting strips
  225. //
  226. translate([-PIU_width/2 - _c/2, 0]) square([_c+0.25, PIU_height], center=true);
  227. translate([ PIU_width/2 + _c/2, 0]) square([_c+0.25, PIU_height], center=true);
  228. translate([ 0, PIU_height/2 + _c/2]) square([PIU_width, _c+0.25], center=true);
  229. translate([ 0, -(PIU_height/2 + _c/2)]) square([PIU_width, _c+0.25], center=true);
  230. }
  231. }
  232. module PIU_back_bracket() {
  233. _w = 20;
  234. _dx = PIU_width/2 - _w/2;
  235. _dy = PIU_height/2 - _w/2;
  236. _drill_r = M3_H3_DRILL_R;
  237. difference() {
  238. square([PIU_width, PIU_height], center=true);
  239. square([PIU_width - 2*_w, PIU_height - 2*_w], center=true);
  240. translate([ -_dx, -_dy]) circle(_drill_r);
  241. translate([ _dx, -_dy]) circle(_drill_r);
  242. translate([ _dx, _dy]) circle(_drill_r);
  243. translate([ -_dx, _dy]) circle(_drill_r);
  244. translate([ -_dx, 0]) circle(_drill_r);
  245. translate([ _dx, 0]) circle(_drill_r);
  246. translate([ 0, _dy]) circle(_drill_r);
  247. translate([ 0, -_dy]) circle(_drill_r);
  248. }
  249. }
  250. module PIU_back_panel() {
  251. difference() {
  252. // central face
  253. //
  254. square([PIU_width, PIU_height], center=true);
  255. translate([0,-30])
  256. circle(20);
  257. translate([RAM_mount_pos_x,RAM_mount_pos_y])
  258. union() {
  259. translate([-RAM_mount_dw/2, -RAM_mount_dh/2]) circle(RAM_mount_screw_diam/2);
  260. translate([ RAM_mount_dw/2, -RAM_mount_dh/2]) circle(RAM_mount_screw_diam/2);
  261. translate([-RAM_mount_dw/2, RAM_mount_dh/2]) circle(RAM_mount_screw_diam/2);
  262. translate([ RAM_mount_dw/2, RAM_mount_dh/2]) circle(RAM_mount_screw_diam/2);
  263. }
  264. }
  265. }
  266. module all() {
  267. PIU();
  268. translate([0,240]) PIU_back_bracket();
  269. translate([0,240]) PIU_board_support_base();
  270. translate([0,-180]) PIU_board_plate();
  271. //translate([0,-300]) PIU_board_support_base();
  272. /*
  273. translate([220,-35]) rotate(0, [0,0,1]) PIU_board_plate();
  274. translate([-230,-35]) rotate(0, [0,0,1]) PIU_board_support_base();
  275. */
  276. }
  277. //all();
  278. //PIU();
  279. PIU_face();
  280. translate([0,-160]) BOARD_mounting_plate();
  281. translate([0,180]) PIU_back_panel();