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 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. charge_dia = 16.2;
  2. charge_height = 55.0;
  3. charge_wall = 2.5;
  4. ignite_dia = 6.8;
  5. ignite_height = 17.0;
  6. ignite_wall = 1.2;
  7. cable_dia = 5.0;
  8. base_width = 25;
  9. base_height = 10.0;
  10. base_wall = 3.0;
  11. hole_dia = 5.0;
  12. hole_len = 8.0;
  13. hole_angle = 45.0;
  14. hole_off = 2.0;
  15. hole_off2 = 5.0;
  16. $fn = 42;
  17. module charge() {
  18. difference() {
  19. cylinder(d = charge_dia + (2 * charge_wall), h = charge_height + charge_wall);
  20. translate([0, 0, charge_wall])
  21. cylinder(d = charge_dia, h = charge_height + 1);
  22. translate([0, 0, -1])
  23. cylinder(d = cable_dia, h = charge_wall + 2);
  24. translate([charge_dia / 2 + charge_wall + hole_off, 0, hole_off2])
  25. rotate([0, -hole_angle, 0])
  26. cylinder(d = hole_dia, h = hole_len);
  27. translate([-charge_dia / 2 - charge_wall - hole_off, 0, hole_off2])
  28. rotate([0, hole_angle, 0])
  29. cylinder(d = hole_dia, h = hole_len);
  30. translate([0, charge_dia / 2 + charge_wall + hole_off, hole_off2])
  31. rotate([hole_angle, 0, 0])
  32. cylinder(d = hole_dia, h = hole_len);
  33. translate([0, -charge_dia / 2 - charge_wall - hole_off, hole_off2])
  34. rotate([-hole_angle, 0, 0])
  35. cylinder(d = hole_dia, h = hole_len);
  36. }
  37. }
  38. module ignite() {
  39. difference() {
  40. cylinder(d = ignite_dia + (2 * ignite_wall), h = ignite_height + ignite_wall);
  41. translate([0, 0, ignite_wall])
  42. cylinder(d = ignite_dia, h = ignite_height + 1);
  43. translate([0, 0, -1])
  44. cylinder(d = cable_dia, h = ignite_wall + 2);
  45. }
  46. }
  47. module top() {
  48. charge();
  49. translate([0, 0, charge_wall])
  50. ignite();
  51. }
  52. module pillars() {
  53. hull() {
  54. cube([base_wall, base_wall, base_wall]);
  55. translate([base_width / 2, base_width / 2, base_height + base_wall])
  56. cylinder(d = charge_dia + (2 * charge_wall), h = 1);
  57. }
  58. hull() {
  59. translate([base_width - base_wall, 0, 0])
  60. cube([base_wall, base_wall, base_wall]);
  61. translate([base_width / 2, base_width / 2, base_height + base_wall])
  62. cylinder(d = charge_dia + (2 * charge_wall), h = 1);
  63. }
  64. hull() {
  65. translate([0, base_width - base_wall, 0])
  66. cube([base_wall, base_wall, base_wall]);
  67. translate([base_width / 2, base_width / 2, base_height + base_wall])
  68. cylinder(d = charge_dia + (2 * charge_wall), h = 1);
  69. }
  70. hull() {
  71. translate([base_width - base_wall, base_width - base_wall, 0])
  72. cube([base_wall, base_wall, base_wall]);
  73. translate([base_width / 2, base_width / 2, base_height + base_wall])
  74. cylinder(d = charge_dia + (2 * charge_wall), h = 1);
  75. }
  76. }
  77. module base() {
  78. cube([base_width, base_width, base_wall]);
  79. difference() {
  80. pillars();
  81. translate([base_width / 2, base_width / 2, base_wall + 1])
  82. cylinder(d = cable_dia, h = base_height + 2);
  83. }
  84. translate([base_width / 2, base_width / 2, base_height + base_wall])
  85. top();
  86. }
  87. base();