-rw-r--r-- | x-carriage-adapter.scad | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/x-carriage-adapter.scad b/x-carriage-adapter.scad index af91d52..f3ebb09 100644 --- a/x-carriage-adapter.scad +++ b/x-carriage-adapter.scad | |||
@@ -1,145 +1,145 @@ | |||
1 | screw_tolerance=0.1; slide_tolerance=.3; play_tolerance=.8; | 1 | screw_tolerance=0.1; slide_tolerance=.3; play_tolerance=.8; |
2 | draft=true; | 2 | draft=true; |
3 | use <e3dchimera.scad>; | 3 | use <e3dchimera.scad>; |
4 | 4 | ||
5 | assembly_height = 49.5; // the height of e3d chimera assembly in e3dchimera.scad | 5 | assembly_height = 49.5; // the height of e3d chimera assembly in e3dchimera.scad |
6 | hs_nozzles_from_back = 6;// the distance from nozzles from the back of the heatsink | 6 | hs_nozzles_from_back = 6;// the distance from nozzles from the back of the heatsink |
7 | hs_size = [30,18,30]; // the heatsink size | 7 | hs_size = [30,18,30]; // the heatsink size |
8 | mounting_holes_from_top = [// the offsets of mounting holes on the back | 8 | mounting_holes_from_top = [// the offsets of mounting holes on the back |
9 | [0, 20], [-4.5,10], [4.5,10] | 9 | [0, 20], [-4.5,10], [4.5,10] |
10 | ]; | 10 | ]; |
11 | mounting_holes_on_top = [// the offsets of mounting holes on the top | 11 | mounting_holes_on_top = [// the offsets of mounting holes on the top |
12 | [0,-3], [-17/2,9], [17/2,9] | 12 | [0,-3], [-17/2,9], [17/2,9] |
13 | ]; | 13 | ]; |
14 | feeds_apart = 18; // the distance between nozzles (and, therefore filament feeds) | 14 | feeds_apart = 18; // the distance between nozzles (and, therefore filament feeds) |
15 | 15 | ||
16 | feed_shell_d = 17; // the shell diameter around filament feed, pushfit's diameter | 16 | feed_shell_d = 17; // the shell diameter around filament feed, pushfit's diameter |
17 | screw_shell_d = 8; // the shell diameter around screws | 17 | screw_shell_d = 8; // the shell diameter around screws |
18 | thread_h = 10.5; // the height of the pushfit's thread | 18 | thread_h = 10.5; // the height of the pushfit's thread |
19 | hinge_s = 6; // hinges thickness | 19 | hinge_s = 6; // hinges thickness |
20 | 20 | ||
21 | screwhead_d = 5.5; // the diameter of the screw head | 21 | screwhead_d = 5.5; // the diameter of the screw head |
22 | screwhead_h = 3; // the height of the screw head | 22 | screwhead_h = 3; // the height of the screw head |
23 | 23 | ||
24 | ms_size = [19.8,6,10]; // microswitch dimensions | 24 | ms_size = [19.8,6,10]; // microswitch dimensions |
25 | ms_screws_apart = 9.5; // distance between microswitch mounting screws | 25 | ms_screws_apart = 9.5; // distance between microswitch mounting screws |
26 | ms_switch_offset = 2.5; // the offset of the switch from the center | 26 | ms_switch_offset = 2.5; // the offset of the switch from the center |
27 | ms_bump = ms_size[1]; // how far from hinge microswitch is mounted | 27 | ms_bump = ms_size[1]; // how far from hinge microswitch is mounted |
28 | 28 | ||
29 | lower_by = 15; // lower hotend from the original intention by this long | 29 | lower_by = 15; // lower hotend from the original intention by this long |
30 | gap = 5; // gap between microswitch and heatsink | 30 | gap = 5; // gap between microswitch and heatsink |
31 | 31 | ||
32 | ps_offset = 3+3; // pushscrew offset from the hinge | 32 | ps_offset = 3+3; // pushscrew offset from the hinge |
33 | 33 | ||
34 | back_thickness = 8; // thickness of the part behind the hinge | 34 | back_thickness = 8; // thickness of the part behind the hinge |
35 | nut_thickness = 2.5; // intelligent guess should suffice | 35 | nut_thickness = 2.5; // intelligent guess should suffice |
36 | nut_width = 5.5; // intelligent guess should suffice | 36 | nut_width = 5.5; // intelligent guess should suffice |
37 | 37 | ||
38 | use <threads.scad>; | 38 | use <threads.scad>; |
39 | /* the internal thread for e3d bowden coupling: http://e3d-online.com/E3D-v6/Spares/Threaded-Bowden-Coupling-1.75mm-Filament */ | 39 | /* the internal thread for e3d bowden coupling: http://e3d-online.com/E3D-v6/Spares/Threaded-Bowden-Coupling-1.75mm-Filament */ |
40 | module pushfit_thread(h=thread_h) { | 40 | module pushfit_thread(h=thread_h) { |
41 | thr = 3/8 + .5/25.4; | 41 | thr = 3/8 + .5/25.4; |
42 | slit = 25.4*thr/2 + 0.4; | 42 | slit = 25.4*thr/2 + 0.4; |
43 | translate([0,0,-1]) if(draft) cylinder(d=thr*25.4,h=h+2); | 43 | translate([0,0,-1]) if(draft) cylinder(d=thr*25.4,h=h+2); |
44 | else english_thread(diameter=thr,threads_per_inch=28,length=(h+2)/25.4,internal=true); | 44 | else english_thread(diameter=thr,threads_per_inch=28,length=(h+2)/25.4,internal=true); |
45 | translate([-2,-slit,-1]) cube([4,slit,h+2]); | 45 | translate([-2,-slit,-1]) cube([4,slit,h+2]); |
46 | } | 46 | } |
47 | 47 | ||
48 | 48 | ||
49 | sff = hs_nozzles_from_back+gap; // switch from feeds | 49 | sff = hs_nozzles_from_back+gap; // switch from feeds |
50 | hff = sff+ms_size[1]+ms_bump+thread_h/2;// hinges from feeds | 50 | hff = sff+ms_size[1]+ms_bump+thread_h/2;// hinges from feeds |
51 | 51 | ||
52 | module holder() { | 52 | module holder() { |
53 | translate([0,0,0]) difference() { | 53 | translate([0,0,0]) difference() { |
54 | union() { | 54 | union() { |
55 | hull() { | 55 | hull() { |
56 | rs = 3; drs = screw_shell_d/2-rs; | 56 | rs = 3; drs = screw_shell_d/2-rs; |
57 | rf = 6; drf = feed_shell_d/2-rf; | 57 | rf = 6; drf = feed_shell_d/2-rf; |
58 | for(sx=[-1,1]) translate([sx*feeds_apart/2,0,0]) { | 58 | for(sx=[-1,1]) translate([sx*feeds_apart/2,0,0]) { |
59 | translate([0,0,drf]) | 59 | translate([0,0,drf]) |
60 | cylinder(d=feed_shell_d,h=thread_h-drf,$fn=60); | 60 | cylinder(d=feed_shell_d,h=thread_h-drf,$fn=60); |
61 | cylinder(r=rf,h=thread_h,$fn=30); | 61 | cylinder(r=rf,h=thread_h,$fn=30); |
62 | } | 62 | } |
63 | for(mhot = mounting_holes_on_top) translate([mhot[0],mhot[1],0]) { | 63 | for(mhot = mounting_holes_on_top) translate([mhot[0],mhot[1],0]) { |
64 | translate([0,0,drs]) | 64 | translate([0,0,drs]) |
65 | cylinder(d=screw_shell_d,h=thread_h-drs,$fn=30); | 65 | cylinder(d=screw_shell_d,h=thread_h-drs,$fn=30); |
66 | cylinder(r=rs,h=thread_h,$fn=30); | 66 | cylinder(r=rs,h=thread_h,$fn=30); |
67 | } | 67 | } |
68 | } | 68 | } |
69 | hull() { | 69 | hull() { |
70 | translate([0,0,thread_h/2]) cube(size=[hs_size[0]-2*hinge_s-2*slide_tolerance,feed_shell_d,thread_h],center=true); | 70 | translate([0,0,thread_h/2]) cube(size=[hs_size[0]-2*hinge_s-2*slide_tolerance,feed_shell_d,thread_h],center=true); |
71 | translate([0,-hff,thread_h/2]) | 71 | translate([0,-hff,thread_h/2]) |
72 | rotate([0,90,0]) | 72 | rotate([0,90,0]) |
73 | cylinder(d=thread_h,h=hs_size[0]-2*hinge_s-2*slide_tolerance,center=true,$fn=60); | 73 | cylinder(d=thread_h,h=hs_size[0]-2*hinge_s-2*slide_tolerance,center=true,$fn=60); |
74 | } | 74 | } |
75 | }//union | 75 | }//union |
76 | for(sx=[-1,1]) translate([sx*feeds_apart/2,0,0]) | 76 | for(sx=[-1,1]) translate([sx*feeds_apart/2,0,0]) |
77 | pushfit_thread(); | 77 | pushfit_thread(); |
78 | for(mhot = mounting_holes_on_top) translate([mhot[0],mhot[1],0]) { | 78 | for(mhot = mounting_holes_on_top) translate([mhot[0],mhot[1],0]) { |
79 | translate([0,0,-1]) cylinder(d=3,h=thread_h+2,$fn=12); // TODO: sink heads | 79 | translate([0,0,-1]) cylinder(d=3,h=thread_h+2,$fn=12); // TODO: sink heads |
80 | translate([0,0,thread_h/2]) cylinder(d=screwhead_d+slide_tolerance,h=thread_h/2+1,$fn=30); | 80 | translate([0,0,thread_h/2]) cylinder(d=screwhead_d+slide_tolerance,h=thread_h/2+1,$fn=30); |
81 | } | 81 | } |
82 | // hinge | 82 | // hinge |
83 | translate([0,-hff,thread_h/2]) | 83 | translate([0,-hff,thread_h/2]) |
84 | rotate([0,90,0]) cylinder(d=3+slide_tolerance,h=hs_size[0],center=true,$fn=12); | 84 | rotate([0,90,0]) cylinder(d=3+slide_tolerance,h=hs_size[0],center=true,$fn=12); |
85 | // push screw | 85 | // push screw |
86 | hull() for(oy=[-1,1]) translate([0,-hff+ps_offset+oy,-1]) cylinder(d=3+play_tolerance,h=thread_h+2,$fn=30); | 86 | hull() for(oy=[-1,1]) translate([0,-hff+ps_offset+oy,-1]) cylinder(d=3+play_tolerance,h=thread_h+2,$fn=30); |
87 | // tune screw | 87 | // tune screw |
88 | translate([0,-sff-ms_size[1]/2,-1]) cylinder(d=3,h=thread_h+2); | 88 | translate([0,-sff-ms_size[1]/2,-1]) cylinder(d=3,h=thread_h+2); |
89 | }//difference | 89 | }//difference |
90 | } | 90 | } |
91 | 91 | ||
92 | 92 | ||
93 | module base() { | 93 | module base() { |
94 | us = 2*ms_size[2]; | 94 | us = ms_size[2]+screw_shell_d/2; |
95 | translate([0,-hff,0]) difference() { | 95 | translate([0,-hff,0]) difference() { |
96 | union() { | 96 | union() { |
97 | for(sx=[-1,1]) translate([sx*(hs_size[0]-hinge_s)/2,0,0]) hull() { | 97 | for(sx=[-1,1]) translate([sx*(hs_size[0]-hinge_s)/2,0,0]) hull() { |
98 | translate([0,0,thread_h/2]) | 98 | translate([0,0,thread_h/2]) |
99 | rotate([0,90,0]) cylinder(d=thread_h,h=hinge_s,center=true,$fn=60); | 99 | rotate([0,90,0]) cylinder(d=thread_h,h=hinge_s,center=true,$fn=60); |
100 | cube(size=[hinge_s,thread_h,thread_h],center=true); | 100 | cube(size=[hinge_s,thread_h,thread_h],center=true); |
101 | translate([-hinge_s/2,0,-1]) mirror([0,1,0]) cube(size=[hinge_s,thread_h/2+back_thickness,thread_h+1]); | 101 | translate([-hinge_s/2,0,-1]) mirror([0,1,0]) cube(size=[hinge_s,thread_h/2+back_thickness,thread_h+1]); |
102 | } // hull for | 102 | } // hull for |
103 | hull() { | 103 | hull() { |
104 | translate([0,0,-us/2-slide_tolerance]) cube(size=[hs_size[0],thread_h+1,us],center=true); | 104 | translate([0,0,-us/2-slide_tolerance]) cube(size=[hs_size[0],thread_h+1,us],center=true); |
105 | for(sx=[-1,1]) translate([sx*(hs_size[0]/2-ms_bump),thread_h/2,-us-slide_tolerance]) | 105 | for(sx=[-1,1]) translate([sx*(hs_size[0]/2-ms_bump),thread_h/2,-us-slide_tolerance]) |
106 | cylinder(r=ms_bump,h=us+slide_tolerance,$fn=30); | 106 | cylinder(r=ms_bump,h=us+slide_tolerance,$fn=30); |
107 | } | 107 | } |
108 | translate([-hs_size[0]/2,-thread_h/2-slide_tolerance,-us-slide_tolerance]) | 108 | translate([-hs_size[0]/2,-thread_h/2-slide_tolerance,-us-slide_tolerance]) |
109 | mirror([0,1,0]) cube(size=[hs_size[0],back_thickness,us+slide_tolerance+thread_h]); | 109 | mirror([0,1,0]) cube(size=[hs_size[0],back_thickness,us+slide_tolerance+thread_h]); |
110 | } // union | 110 | } // union |
111 | translate([0,0,thread_h/2]) | 111 | translate([0,0,thread_h/2]) |
112 | rotate([0,90,0]) cylinder(d=3+screw_tolerance,h=hs_size[0]+2,center=true,$fn=12); | 112 | rotate([0,90,0]) cylinder(d=3+screw_tolerance,h=hs_size[0]+2,center=true,$fn=12); |
113 | for(smx=[0,1]) mirror([smx,0,0]) | 113 | for(smx=[0,1]) mirror([smx,0,0]) |
114 | translate([hs_size[0]/2+1,0,thread_h/2]) rotate([0,-90,0]) cylinder(d=screwhead_d+slide_tolerance,h=screwhead_h+1,$fn=30); | 114 | translate([hs_size[0]/2+1,0,thread_h/2]) rotate([0,-90,0]) cylinder(d=screwhead_d+slide_tolerance,h=screwhead_h+1,$fn=30); |
115 | /* changed my mind; for(srx=[-1,1]) rotate([srx*15,0,0]) | 115 | /* changed my mind; for(srx=[-1,1]) rotate([srx*15,0,0]) |
116 | translate([0,0,thread_h/2-slide_tolerance]) | 116 | translate([0,0,thread_h/2-slide_tolerance]) |
117 | cube(size=[hs_size[0]-2*hinge_s,thread_h*sqrt(2)+2,thread_h],center=true); */ | 117 | cube(size=[hs_size[0]-2*hinge_s,thread_h*sqrt(2)+2,thread_h],center=true); */ |
118 | // switch mount | 118 | // switch mount |
119 | for(sx=[-1,1]) translate([sx*ms_screws_apart/2+ms_switch_offset,thread_h/2,-ms_size[2]]) | 119 | for(sx=[-1,1]) translate([sx*ms_screws_apart/2+ms_switch_offset,thread_h/2,-ms_size[2]]) |
120 | rotate([90,0,0]) | 120 | rotate([90,0,0]) |
121 | cylinder(d=2.5,h=ms_size[1]*2,center=true,$fn=12); | 121 | cylinder(d=2.5,h=ms_size[1]*2,center=true,$fn=12); |
122 | // thing mount | 122 | // thing mount |
123 | translate([0,-thread_h/2-back_thickness,lower_by]) | 123 | translate([0,-thread_h/2-back_thickness,lower_by]) |
124 | for(mhft = mounting_holes_from_top) translate([mhft[0],0,-mhft[1]]) { | 124 | for(mhft = mounting_holes_from_top) translate([mhft[0],0,-mhft[1]]) { |
125 | rotate([-90,0,0]) | 125 | rotate([-90,0,0]) |
126 | translate([0,0,-1]) | 126 | translate([0,0,-1]) |
127 | cylinder(d=3,h=back_thickness+1); | 127 | cylinder(d=3,h=back_thickness+1); |
128 | translate([0,back_thickness/2,0]) | 128 | translate([0,back_thickness/2,0]) |
129 | cube(size=[2*hs_size[0],nut_thickness+slide_tolerance,nut_width+slide_tolerance],center=true); | 129 | cube(size=[2*hs_size[0],nut_thickness+slide_tolerance,nut_width+slide_tolerance],center=true); |
130 | } // translate for | 130 | } // translate for |
131 | mirror([0,0,1]) translate([0,ps_offset,-1]) cylinder(d=3,h=hs_size[2]+1); | 131 | mirror([0,0,1]) translate([0,ps_offset,-1]) cylinder(d=3,h=hs_size[2]+1); |
132 | } // difference | 132 | } // difference |
133 | } | 133 | } |
134 | 134 | ||
135 | view="*"; | 135 | view="*"; |
136 | 136 | ||
137 | if(view=="holder") { | 137 | if(view=="holder") { |
138 | holder(); | 138 | holder(); |
139 | }else if(view=="base") { | 139 | }else if(view=="base") { |
140 | base(); | 140 | base(); |
141 | }else { | 141 | }else { |
142 | % translate([0,0,-assembly_height]) chimera_assembly(); | 142 | % translate([0,0,-assembly_height]) chimera_assembly(); |
143 | color("lightgreen",0.7) holder(); | 143 | color("lightgreen",0.7) holder(); |
144 | color("darkgreen",0.7) base(); | 144 | color("darkgreen",0.7) base(); |
145 | } | 145 | } |