PIU-box-interim.scad 11 KB

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