aboutsummaryrefslogtreecommitdiffstats
path: root/docs/prints/calibrate_size.scad
diff options
context:
space:
mode:
Diffstat (limited to 'docs/prints/calibrate_size.scad')
-rw-r--r--docs/prints/calibrate_size.scad77
1 files changed, 77 insertions, 0 deletions
diff --git a/docs/prints/calibrate_size.scad b/docs/prints/calibrate_size.scad
new file mode 100644
index 00000000..f1e60c95
--- /dev/null
+++ b/docs/prints/calibrate_size.scad
@@ -0,0 +1,77 @@
+// Calibration object for delta sizing
+//
+// Generate STL using OpenSCAD:
+// openscad calibrate_size.scad -o calibrate_size.stl
+
+base_radius = 70;
+base_height = 1.5;
+base_width = 8;
+cylinder_height = 5;
+cylinder_radius = 5;
+cylinder_outer_dist = 65;
+ridge_cut_radius = .5;
+text_height = 1;
+text_size = 5;
+spoke_angles = [0, 60, 120, 180, 240, 300];
+CUT=0.01;
+
+// Circular ring around entire object (to help reduce warping)
+module base_ring() {
+ difference() {
+ cylinder(h=base_height, r=base_radius);
+ translate([0, 0, -CUT])
+ cylinder(h=base_height + 2*CUT, r=base_radius-base_width);
+ }
+}
+
+// The base ring plus the base spokes
+module base() {
+ base_ring();
+ // Spokes
+ for (angle=spoke_angles)
+ rotate([0, 0, angle])
+ translate([-base_width/2, -CUT, 0])
+ cube([base_width, base_radius-base_width+2*CUT, base_height]);
+}
+
+// Cylinder that measurement ridges are cut out of
+module measuring_cylinder() {
+ cut_width = cylinder_radius;
+ difference() {
+ cylinder(h=cylinder_height+CUT, r=cylinder_radius, $fn=60);
+ for (angle=spoke_angles)
+ rotate([0, 0, angle])
+ translate([-cut_width, cylinder_radius - ridge_cut_radius, -CUT])
+ cube([2*cut_width, cut_width, cylinder_height+3*CUT]);
+ }
+}
+
+// All the measuring cylinders around the ring
+module measuring_cylinders() {
+ measuring_cylinder();
+ for (angle=spoke_angles)
+ rotate([0, 0, angle])
+ translate([0, cylinder_outer_dist, 0])
+ measuring_cylinder();
+}
+
+// Text writing
+module write_text(angle, dist, msg) {
+ text_offset = dist + 1 - text_size/2;
+ rotate([0, 0, angle])
+ translate([0, text_offset, base_height - CUT])
+ linear_extrude(height=text_height + CUT)
+ text(msg, size=text_size, halign="center");
+}
+
+// Final object with text descriptions
+module calibration_object() {
+ base();
+ translate([0, 0, base_height-CUT])
+ measuring_cylinders();
+ write_text(120, cylinder_outer_dist - 20, "A");
+ write_text(240, cylinder_outer_dist - 20, "B");
+ write_text(0, cylinder_outer_dist - 20, "C");
+}
+
+calibration_object();