--- /dev/null
+eps = 0.01;
+infty = 100;
+
+
+base_d = 26;
+screw_d1 = 19;
+screw_d2 = 16;
+screw_hole = 3.5;
+base_wall = 1.5;
+
+motor_angle = 4;
+
+tube_d = 8+0.2;
+tube_h = 20;
+tube_wall = 1;
+
+module body() {
+ // base
+ cylinder(r = base_d/2, h = base_wall);
+ // tube
+ intersection() {
+ rotate([0, motor_angle, 0])
+ cylinder(r = tube_d/2 + tube_wall, h = tube_h);
+ translate([-infty/2, -infty/2, 0])
+ cube(infty);
+ }
+ // tube supports
+ for (angle = [45, 135, 225, 315])
+ rotate([0, 0, angle]) hull() {
+ translate([-eps/2, -tube_d/2, -eps/2])
+ cube([eps, tube_d, eps]);
+ translate([base_d/2, -eps/2, -eps/2])
+ cube(eps);
+ translate([tube_d/2, -eps/2, 0.9*tube_h])
+ cube(eps);
+ }
+}
+
+module screw_hole() {
+ translate([0, 0, -eps])
+ cylinder(r = screw_hole/2, h = base_wall + 2*eps, $fn = 6);
+ translate([0, 0, base_wall/2])
+ cylinder(r1 = screw_hole/2,
+ r2 = screw_hole/2 + base_wall/2,
+ h = base_wall/2+eps, $fn = 6);
+}
+
+difference() {
+ body();
+ // screw holes
+ for (x = [-1, 1]) translate([x*screw_d1/2, 0, 0])
+ screw_hole();
+ for (y = [-1, 1]) translate([0, y*screw_d2/2, 0])
+ screw_hole();
+ // tube hole
+ rotate([0, motor_angle, 0])
+ translate([0, 0, -infty/2])
+ cylinder(r = tube_d/2, h = infty);
+}
+
+