Guest User

Untitled

a guest
Jul 16th, 2023
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. // Mount a downward-facing Raspberry Pi HD camera on an Ender 3 print head
  2. $fa = 1;
  3. $fs = 0.1;
  4.  
  5. // Dimensions
  6. dilate = 1; // How much should hole diameters be expanded?
  7.  
  8. faceplate_bolt_diam = 5; // The mounting bolts are M5
  9. faceplate_nut_diam = 8/cos(30);
  10. faceplate_sep = 37.5; // Separation between the centers of the two wheels that roll along the X axis
  11. faceplate_nut_countersink = 3;
  12. faceplate_extra_thickness = 1; // How thick should material be past the mount bolt countersink? (n.b. we only have 3mm of exposed mounting bolt thread to work with)
  13. faceplate_shoulder = 3;
  14. faceplate_total_depth = 2*faceplate_shoulder + 9;
  15. faceplate_total_height = faceplate_extra_thickness + faceplate_nut_countersink;
  16.  
  17. printhead_back_height = 23; // Back of the print head's distance from zero
  18. printhead_top_depth = 14; // (real-life-)z displacement to get from 0 to the top of the print head
  19.  
  20. camera_bolt_diam = 6.35; // The camera screw is a 1/4"-20
  21. camera_bolt_height = 68; // How far (real-life-)forward from zero should the camera mount beam go?
  22. camera_bolt_offset = 36; // How far to the (real-life-)right from zero is the camera bolt?
  23. camera_bolt_depth = 9; // (real-life-)z displacement to get from 0 to the camera bolt center
  24.  
  25. // Faceplate definition
  26. module faceplate_body() {
  27. translate([-dilate/2, -faceplate_total_depth/2, -faceplate_total_height/2]) {
  28. cube([(faceplate_sep+dilate)/2, faceplate_total_depth, faceplate_total_height]);
  29. }
  30. translate([faceplate_sep/2,0,-faceplate_total_height/2]) {
  31. cylinder(h=faceplate_total_height, d=faceplate_total_depth);
  32. }
  33. };
  34.  
  35. module faceplate_holes() {
  36. // Mounting bolt screw hole
  37. translate([faceplate_sep/2, 0, 0]) {
  38. cylinder(h=faceplate_total_height+dilate, d=faceplate_bolt_diam+dilate,
  39. center=true);
  40. }
  41.  
  42. // Mounting bolt countersink
  43. translate([faceplate_sep/2, 0, (+faceplate_total_height-faceplate_nut_countersink+dilate)/2]) {
  44. cylinder(h=faceplate_nut_countersink+dilate,
  45. d1=faceplate_nut_diam,
  46. d2=faceplate_nut_diam+2*dilate,
  47. center=true);
  48. }
  49. };
  50.  
  51. module half_faceplate_body() {
  52. difference() {
  53. faceplate_body();
  54. faceplate_holes();
  55. }
  56. };
  57.  
  58. module mount() {
  59. union() {
  60. half_faceplate_body();
  61. mirror([1,0,0]) half_faceplate_body();
  62. }
  63. };
  64.  
  65. beam_width = faceplate_total_depth;
  66. beam_thickness = faceplate_total_height;
  67. camera_bolt_pt = [camera_bolt_offset, camera_bolt_depth, camera_bolt_height];
  68.  
  69. // Beam definition
  70. module beam_body() {
  71.  
  72. /*
  73. translate([0, camera_bolt_depth, camera_bolt_height/2]) cube(2,center=true);
  74. translate([0, camera_bolt_depth, camera_bolt_height/1]) cube(2,center=true);
  75. translate([camera_bolt_offset, camera_bolt_depth, camera_bolt_height/2]) cube(2,center=true);
  76. translate([camera_bolt_offset, camera_bolt_depth, camera_bolt_height/1]) cube(2,center=true);
  77. */
  78.  
  79. // Beam from zero to top of printhead (depth extension)
  80. beam_0_ext = [0,printhead_top_depth,0];
  81. beam_0_overshoot = [0,beam_thickness,0];
  82. beam_0_dims = [beam_width, 0, beam_thickness] + beam_0_ext + beam_0_overshoot;
  83. beam_0_c = (beam_0_ext+beam_0_overshoot)/2;
  84. translate(beam_0_c) cube(beam_0_dims, center=true);
  85.  
  86. // From beam 0 to past print head coasters (height extension)
  87. beam_1_ext = [0,0,camera_bolt_height/2-beam_width];
  88. beam_1_overshoot = [0,0,beam_width];
  89. beam_1_dims = [beam_width, beam_thickness, 0] + beam_1_ext + beam_1_overshoot;
  90. beam_1_c = beam_0_c + beam_0_ext/2 + (beam_1_ext+beam_1_overshoot)/2;
  91. translate(beam_1_c) cube(beam_1_dims, center=true);
  92.  
  93. // From beam 1 to right edge of print head (width extension)
  94. beam_2_ext = [camera_bolt_offset/4,0,0];
  95. beam_2_overshoot = [beam_width,0,0];
  96. beam_2_dims = [0, beam_thickness, beam_width] + beam_2_ext + beam_2_overshoot;
  97. beam_2_c = beam_1_c + beam_1_ext/2 + (beam_2_ext+beam_2_overshoot)/2;
  98. translate(beam_2_c) cube(beam_2_dims, center=true);
  99.  
  100. // From beam 2 to bolt front (height extension)
  101. beam_3_ext = [0,0,camera_bolt_height/2+beam_width/2-beam_thickness];
  102. beam_3_overshoot = [0,0,beam_thickness];
  103. beam_3_dims = [beam_width, beam_thickness, 0] + beam_3_ext + beam_3_overshoot;
  104. beam_3_c = beam_2_c + beam_2_ext/2 + (beam_3_ext+beam_3_overshoot)/2;
  105. translate(beam_3_c) cube(beam_3_dims, center=true);
  106. // From beam 3 to bolt front (width extension)
  107. beam_4_ext = [beam_width,0,0];
  108. beam_4_overshoot = [0,0,0];
  109. beam_4_dims = [0, beam_thickness, beam_thickness] + beam_4_ext + beam_4_overshoot;
  110. beam_4_c = beam_3_c + beam_3_ext/2 + (beam_4_ext+beam_4_overshoot)/2 + [beam_width/2-beam_thickness,0,0];
  111. translate(beam_4_c) cube(beam_4_dims, center=true);
  112.  
  113. translate(camera_bolt_pt-[0,0,beam_thickness/2])
  114. cylinder(h=beam_thickness, r=camera_bolt_diam+2*faceplate_shoulder/2-dilate/2, center=true);
  115.  
  116. translate(camera_bolt_pt-[10,-5,beam_thickness/2])
  117. cylinder(h=beam_thickness, r=4, center=true);
  118. }
  119.  
  120. module camera_bolt_hole() {
  121. translate(camera_bolt_pt)
  122. cylinder(h=beam_width,
  123. d=camera_bolt_diam + dilate,
  124. center=true);
  125. }
  126.  
  127. module beam() {
  128. difference() {
  129. beam_body();
  130. camera_bolt_hole();
  131. }
  132. }
  133.  
  134. union() {
  135. mount();
  136. beam();
  137. }
  138.  
Advertisement
Add Comment
Please, Sign In to add comment