You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

83 lines
2.0 KiB

  1. include <BOSL/constants.scad>
  2. use <BOSL/transforms.scad>
  3. use <BOSL/shapes.scad>
  4. model = 0;
  5. bank_wall = 2;
  6. bank_inside_size = [94, 19, 19];
  7. bank_socket_size = [bank_inside_size.x + 2, bank_inside_size.y + 2, 4];
  8. pcb_size = [20, 19, 1];
  9. separator_size = [2.5, pcb_size.y - 3, 12.5];
  10. separator_pos = [bank_inside_size.x/2 - pcb_size.x - 0.2 - separator_size.x/2, -3, -bank_inside_size.z/2 + separator_size.z/2];
  11. joiner_size = [5, 5, bank_inside_size.z];
  12. joiner_pos = [0, bank_inside_size.y/2 + bank_wall + joiner_size.y/2, 0];
  13. joiner_spread = 60;
  14. bank_joiner_screw_diam = 2.2;
  15. window_pos = [bank_inside_size.x/2, 0, 0];
  16. window_size = [10, bank_inside_size.y - 1.8*2, 12];
  17. module bank_inside() {
  18. cube(bank_inside_size, center=true);
  19. }
  20. module bank_joiner() {
  21. difference() {
  22. cuboid(joiner_size, chamfer=1, edges=EDGES_Z_BK);
  23. down(joiner_size.z/2) cylinder(d=bank_joiner_screw_diam, h=joiner_size.z, $fn=12);
  24. }
  25. }
  26. module bank() {
  27. difference() {
  28. minkowski() {
  29. cube(bank_inside_size, center=true);
  30. sphere(r=bank_wall, $fn=18);
  31. }
  32. bank_inside();
  33. translate(window_pos) cube(window_size, center=true);
  34. }
  35. translate(separator_pos) cube(separator_size, center=true);
  36. translate(joiner_pos) {
  37. left(joiner_spread/2) bank_joiner();
  38. right(joiner_spread/2) bank_joiner();
  39. }
  40. }
  41. module bank_divider(socket) {
  42. up(5.5) {
  43. difference() {
  44. down(50) cube([500, 100, 100], center=true);
  45. scale(socket ? 1 : [0.995, 0.97, 0.96]) cube(bank_socket_size, center=true);
  46. }
  47. }
  48. }
  49. module model_bank_bottom() {
  50. up(bank_wall + bank_inside_size.z/2)
  51. intersection() {
  52. bank();
  53. bank_divider(socket=true);
  54. }
  55. }
  56. module model_bank_top() {
  57. up(bank_wall + bank_inside_size.z/2)
  58. difference() {
  59. bank();
  60. bank_divider(socket=false);
  61. }
  62. }
  63. if (model == 0) {
  64. model_bank_bottom();
  65. model_bank_top();
  66. }
  67. if (model == 1) {
  68. model_bank_bottom();
  69. }
  70. if (model == 2) {
  71. model_bank_top();
  72. }