|
@@ -0,0 +1,144 @@
|
|
1
|
+
|
|
2
|
+sensor_width = 7;
|
|
3
|
+sensor_tower_width = 4.5;
|
|
4
|
+sensor_length = 25;
|
|
5
|
+sensor_height = 11;
|
|
6
|
+sensor_gap = 3;
|
|
7
|
+sensor_bottom = 3.5;
|
|
8
|
+sensor_hole_diameter = 3;
|
|
9
|
+sensor_hole_distance = 2.4;
|
|
10
|
+
|
|
11
|
+pcb_width = 10.5;
|
|
12
|
+pcb_length = 33;
|
|
13
|
+pcb_height = 1.8;
|
|
14
|
+pcb_sensor_x = 0.25;
|
|
15
|
+pcb_conn_x = 0.7;
|
|
16
|
+conn_length = 5.8;
|
|
17
|
+conn_height = 7;
|
|
18
|
+
|
|
19
|
+filament_width = 2;
|
|
20
|
+wall_size = 2;
|
|
21
|
+filament_top_distance = 3;
|
|
22
|
+sensor_y_gap = 0.2;
|
|
23
|
+
|
|
24
|
+flag_wall = 0.75;
|
|
25
|
+flag_width = 6.5;
|
|
26
|
+flag_gap = 2;
|
|
27
|
+flag_height = 5;
|
|
28
|
+
|
|
29
|
+part = "flag"; // "gantry" or "flag"
|
|
30
|
+
|
|
31
|
+$fn = 25;
|
|
32
|
+
|
|
33
|
+module sensor() {
|
|
34
|
+ difference() {
|
|
35
|
+ cube([sensor_length, sensor_width, sensor_bottom]);
|
|
36
|
+
|
|
37
|
+ translate([sensor_hole_distance, sensor_width / 2, -1])
|
|
38
|
+ cylinder(d = sensor_hole_diameter, h = sensor_bottom + 2);
|
|
39
|
+
|
|
40
|
+ translate([sensor_length - sensor_hole_distance, sensor_width / 2, -1])
|
|
41
|
+ cylinder(d = sensor_hole_diameter, h = sensor_bottom + 2);
|
|
42
|
+ }
|
|
43
|
+
|
|
44
|
+ translate([(sensor_length - sensor_gap - (2 * sensor_tower_width)) / 2, 0, sensor_bottom])
|
|
45
|
+ cube([sensor_tower_width, sensor_width, sensor_height - sensor_bottom]);
|
|
46
|
+
|
|
47
|
+ translate([(sensor_length - sensor_gap - (2 * sensor_tower_width)) / 2 + sensor_gap + sensor_tower_width, 0, sensor_bottom])
|
|
48
|
+ cube([sensor_tower_width, sensor_width, sensor_height - sensor_bottom]);
|
|
49
|
+}
|
|
50
|
+
|
|
51
|
+module pcb() {
|
|
52
|
+ difference() {
|
|
53
|
+ cube([pcb_length, pcb_width, pcb_height]);
|
|
54
|
+
|
|
55
|
+ translate([pcb_length - sensor_length - pcb_sensor_x, (pcb_width - sensor_width) / 2, 0])
|
|
56
|
+ translate([sensor_hole_distance, sensor_width / 2, -1])
|
|
57
|
+ cylinder(d = sensor_hole_diameter, h = pcb_height + 2);
|
|
58
|
+
|
|
59
|
+ translate([pcb_length - sensor_length - pcb_sensor_x, (pcb_width - sensor_width) / 2, 0])
|
|
60
|
+ translate([sensor_length - sensor_hole_distance, sensor_width / 2, -1])
|
|
61
|
+ cylinder(d = sensor_hole_diameter, h = pcb_height + 2);
|
|
62
|
+ }
|
|
63
|
+
|
|
64
|
+ translate([pcb_length - sensor_length - pcb_sensor_x, (pcb_width - sensor_width) / 2, pcb_height])
|
|
65
|
+ sensor();
|
|
66
|
+
|
|
67
|
+ translate([pcb_conn_x, 0, -conn_height])
|
|
68
|
+ cube([conn_length, pcb_width, conn_height]);
|
|
69
|
+}
|
|
70
|
+
|
|
71
|
+module gantry() {
|
|
72
|
+ difference() {
|
|
73
|
+ cube([sensor_hole_diameter + wall_size, sensor_width + (2 * wall_size), wall_size]);
|
|
74
|
+
|
|
75
|
+ translate([sensor_hole_distance, wall_size + (sensor_width / 2), -1])
|
|
76
|
+ cylinder(d = sensor_hole_diameter, h = wall_size + 2);
|
|
77
|
+ }
|
|
78
|
+
|
|
79
|
+ difference() {
|
|
80
|
+ translate([sensor_length - sensor_hole_diameter - wall_size, 0, 0])
|
|
81
|
+ cube([sensor_hole_diameter + wall_size, sensor_width + (2 * wall_size), wall_size]);
|
|
82
|
+
|
|
83
|
+ translate([sensor_length - sensor_hole_distance, wall_size + (sensor_width / 2), -1])
|
|
84
|
+ cylinder(d = sensor_hole_diameter, h = wall_size + 2);
|
|
85
|
+ }
|
|
86
|
+
|
|
87
|
+ translate([sensor_hole_diameter + wall_size, 0, 0])
|
|
88
|
+ cube([sensor_length - (2 * (sensor_hole_diameter + wall_size)), wall_size - sensor_y_gap, wall_size]);
|
|
89
|
+
|
|
90
|
+ translate([sensor_hole_diameter + wall_size, sensor_width + wall_size + sensor_y_gap, 0])
|
|
91
|
+ cube([sensor_length - (2 * (sensor_hole_diameter + wall_size)), wall_size - sensor_y_gap, wall_size]);
|
|
92
|
+
|
|
93
|
+ difference() {
|
|
94
|
+ translate([sensor_length - (2 * (sensor_tower_width + sensor_gap)), 0, wall_size])
|
|
95
|
+ cube([sensor_gap + wall_size, wall_size - sensor_y_gap, sensor_height - sensor_bottom - wall_size]);
|
|
96
|
+
|
|
97
|
+ translate([sensor_length / 2, wall_size + 1, sensor_height - sensor_bottom - filament_top_distance])
|
|
98
|
+ rotate([90, 0, 0])
|
|
99
|
+ cylinder(d = filament_width, h = wall_size + 2);
|
|
100
|
+ }
|
|
101
|
+
|
|
102
|
+ difference() {
|
|
103
|
+ translate([sensor_length - (2 * (sensor_tower_width + sensor_gap)), sensor_width + wall_size + sensor_y_gap, wall_size])
|
|
104
|
+ cube([sensor_gap + wall_size, wall_size - sensor_y_gap, sensor_height - sensor_bottom - wall_size]);
|
|
105
|
+
|
|
106
|
+ translate([sensor_length / 2, sensor_width + (2 * wall_size) + 1, sensor_height - sensor_bottom - filament_top_distance])
|
|
107
|
+ rotate([90, 0, 0])
|
|
108
|
+ cylinder(d = filament_width, h = wall_size + 2);
|
|
109
|
+ }
|
|
110
|
+}
|
|
111
|
+
|
|
112
|
+module flag() {
|
|
113
|
+ translate([sensor_length / 2, flag_width + wall_size + (sensor_width - flag_width) / 2, sensor_height - sensor_bottom - filament_top_distance])
|
|
114
|
+ rotate([90, 0, 0])
|
|
115
|
+ union() {
|
|
116
|
+ difference() {
|
|
117
|
+ translate([-sensor_gap / 4, (filament_width + flag_wall) / 2 - 0.3, 0])
|
|
118
|
+ cube([sensor_gap / 2, flag_height, flag_width]);
|
|
119
|
+
|
|
120
|
+ translate([-sensor_gap / 4 - 1, (filament_width + flag_wall) / 2 - 0.3, (flag_width - flag_gap) / 2])
|
|
121
|
+ cube([sensor_gap / 2 + 2, flag_height + 1, flag_gap]);
|
|
122
|
+ }
|
|
123
|
+ difference() {
|
|
124
|
+ cylinder(d = filament_width + flag_wall, h = flag_width);
|
|
125
|
+ translate([0, 0, -1])
|
|
126
|
+ cylinder(d = filament_width / 2, h = flag_width + 2);
|
|
127
|
+ }
|
|
128
|
+ }
|
|
129
|
+}
|
|
130
|
+
|
|
131
|
+%translate([-(pcb_length - sensor_length - pcb_sensor_x), (-(pcb_width - sensor_width) / 2) + wall_size, -pcb_height - sensor_bottom])
|
|
132
|
+ pcb();
|
|
133
|
+
|
|
134
|
+if (part == "gantry") {
|
|
135
|
+ gantry();
|
|
136
|
+} else {
|
|
137
|
+ %gantry();
|
|
138
|
+}
|
|
139
|
+
|
|
140
|
+if (part == "flag") {
|
|
141
|
+ flag();
|
|
142
|
+} else {
|
|
143
|
+ flag();
|
|
144
|
+}
|