|
@@ -0,0 +1,71 @@
|
|
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();
|