Brak opisu
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.

actuator.scad 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. $fa=1/1;
  2. $fs=1/2;
  3. bissl=1/2;
  4. part="spool";//[spool,cap,hammer,all]
  5. total_length=50;
  6. wall=0.8;
  7. air=0.5;
  8. copper_height=5;
  9. thick_wall=2*wall; //can be specified
  10. iron_d=4;
  11. iron_h=total_length/3; //can be changed, but this seems optimal
  12. spool_h=iron_h; //according to theory, optimum is a little more
  13. iron_travel=iron_h; //may be smaller with heavy beaters or returning springs
  14. extra_hold=iron_h/3;
  15. spool_id=iron_d+2*air;
  16. spool_od=spool_id+2*wall;
  17. cap_od=spool_od+2*copper_height;
  18. slit=15;
  19. hole=3;
  20. hammer_flat=true;
  21. module spool() {
  22. difference() {
  23. union() {
  24. cylinder(d1=spool_od,d2=cap_od,h=thick_wall+iron_travel);
  25. translate([0,0,iron_travel+thick_wall]) cylinder(d=spool_od,h=spool_h+extra_hold);
  26. }
  27. translate([0,0,thick_wall]) cylinder(d=spool_id,h=spool_h+iron_h+bissl+extra_hold);
  28. }
  29. }
  30. module cap() {
  31. difference() {
  32. union() {
  33. cylinder(d=cap_od,h=thick_wall);
  34. translate([0,0,thick_wall])cylinder(d=spool_od+2*wall+2*air,h=extra_hold);
  35. translate([-cap_od/2,0,0])cube([cap_od,cap_od/2,thick_wall]);
  36. translate([-cap_od/2,cap_od/2,0])cube([cap_od,thick_wall,2*thick_wall+slit]);
  37. translate([-thick_wall/2,0,0])cube([thick_wall,cap_od/2,extra_hold+thick_wall]);
  38. }
  39. translate([0,0,-bissl])cylinder(d=spool_id,h=extra_hold+thick_wall+2*bissl);
  40. cylinder(d=spool_od+2*air,h=extra_hold);
  41. hull() {
  42. translate([cap_od/2-thick_wall-hole/2,cap_od/2+thick_wall/2,2*thick_wall+hole/2])rotate([90,0,0])cylinder (d=hole, h=thick_wall+bissl,center=true);
  43. translate([cap_od/2-thick_wall-hole/2,cap_od/2+thick_wall/2,slit])rotate([90,0,0])cylinder (d=hole, h=thick_wall+bissl,center=true);
  44. }
  45. hull() {
  46. translate([-cap_od/2+thick_wall+hole/2,cap_od/2+thick_wall/2,2*thick_wall+hole/2])rotate([90,0,0])cylinder (d=hole, h=thick_wall+bissl,center=true);
  47. translate([-cap_od/2+thick_wall+hole/2,cap_od/2+thick_wall/2,slit])rotate([90,0,0])cylinder (d=hole, h=thick_wall+bissl,center=true);
  48. }
  49. }
  50. }
  51. echo (cap_od-thick_wall*2-hole);
  52. module hammer() {
  53. if (hammer_flat) {
  54. cylinder(d=cap_od-2*air,h=thick_wall);
  55. translate([0,0,thick_wall]) cylinder(d1=cap_od-2*air,d2=iron_d,h=cap_od/2-iron_d/2-air/2);
  56. }
  57. else {
  58. cylinder(d2=cap_od/2,d1=iron_d,h=cap_od/4-iron_d/4);
  59. translate([0,0,cap_od/4-iron_d/4])cylinder(d=cap_od/2,h=thick_wall);
  60. translate([0,0,cap_od/4-iron_d/4+thick_wall]) cylinder(d1=cap_od/2,d2=iron_d,h=cap_od/4-iron_d/4);
  61. }
  62. translate([0,0,thick_wall+cap_od/2-iron_d/2-air/2]) cylinder(d=iron_d,h=1.5*iron_h);
  63. }
  64. if (part=="all") {
  65. spool();
  66. translate([0,0,spool_h+iron_h+bissl+air+thick_wall])cap();
  67. translate([0,0,total_length])mirror([0,0,1])hammer();
  68. }
  69. if (part=="spool") spool();
  70. if (part=="cap") cap();
  71. if (part=="hammer") hammer();