My self-made 3D-printable designs, mainly in OpenSCAD
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.

firework_15mm.scad 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. charge_dia = 16.2;
  2. charge_height = 42.0;
  3. charge_wall = 2.5;
  4. base_add = 2.5;
  5. bottom_pins = 3.0;
  6. ignite_dia = 7.0;
  7. ignite_height = 20.0;
  8. ignite_wall = 1.2;
  9. cable_dia = 5.0;
  10. cable_width = 2.0;
  11. hole_dia = 7.0;
  12. hole_len = 15.0;
  13. hole_angle = 45.0;
  14. hole_off = 4.0;
  15. hole_off2 = 2.0;
  16. mount_height = 2.0;
  17. mount_width = 6.0;
  18. mount_len = 10.0;
  19. mount_hole = 3.2;
  20. $fn = 42;
  21. module gas_holes() {
  22. translate([charge_dia / 2 + charge_wall + hole_off, 0, hole_off2])
  23. rotate([0, -hole_angle, 0])
  24. cylinder(d = hole_dia, h = hole_len);
  25. translate([-charge_dia / 2 - charge_wall - hole_off, 0, hole_off2])
  26. rotate([0, hole_angle, 0])
  27. cylinder(d = hole_dia, h = hole_len);
  28. translate([0, charge_dia / 2 + charge_wall + hole_off, hole_off2])
  29. rotate([hole_angle, 0, 0])
  30. cylinder(d = hole_dia, h = hole_len);
  31. translate([0, -charge_dia / 2 - charge_wall - hole_off, hole_off2])
  32. rotate([-hole_angle, 0, 0])
  33. cylinder(d = hole_dia, h = hole_len);
  34. }
  35. module mount_tabs() {
  36. for (i = [0 : 90 : 360]) {
  37. rotate([0, 0, i + 45])
  38. translate([charge_dia / 2, -mount_width / 2, 0])
  39. difference() {
  40. union() {
  41. cube([mount_len, mount_width, mount_height]);
  42. translate([mount_len, mount_width / 2, 0])
  43. cylinder(d = mount_width, h = mount_height);
  44. }
  45. translate([mount_len, mount_width / 2, -1])
  46. cylinder(d = mount_hole, h = mount_height + 2);
  47. }
  48. }
  49. }
  50. module charge() {
  51. difference() {
  52. // outer shell
  53. cylinder(d = charge_dia + (2 * charge_wall), h = charge_height + charge_wall + base_add);
  54. // bore hole
  55. translate([0, 0, charge_wall + base_add])
  56. cylinder(d = charge_dia, h = charge_height + 1);
  57. // cable hole
  58. translate([0, 0, -1])
  59. cylinder(d = cable_dia, h = charge_wall + base_add + 2);
  60. // cable cut on bottom
  61. translate([0, -cable_dia / 2, -1])
  62. cube([charge_dia, cable_dia, cable_width + 1]);
  63. translate([0, 0, base_add])
  64. gas_holes();
  65. translate([0, 0, charge_height / 2 + base_add])
  66. gas_holes();
  67. }
  68. // pins to hold up long charges
  69. for (i = [0 : 90 : 360]) {
  70. rotate([0, 0, i + 45])
  71. translate([(charge_dia - bottom_pins) / 2, 0, charge_wall + base_add])
  72. sphere(d = bottom_pins);
  73. }
  74. }
  75. module ignite() {
  76. difference() {
  77. cylinder(d = ignite_dia + (2 * ignite_wall), h = ignite_height + ignite_wall);
  78. translate([0, 0, ignite_wall])
  79. cylinder(d = ignite_dia, h = ignite_height + 1);
  80. translate([0, 0, -1])
  81. cylinder(d = cable_dia, h = ignite_wall + 2);
  82. }
  83. }
  84. module top() {
  85. charge();
  86. translate([0, 0, charge_wall + base_add])
  87. ignite();
  88. mount_tabs();
  89. }
  90. top();