weight = "penny";
// weight = "608zz";
bearing = "608zz";
+weight_lip_thickness = 1;
wall_thickness = 2;
+penny_thickness = 1.52;
+spinner_height = penny_thickness * 5 + 2;
_608zz_radius = 22;
+_608zz_thickness = 7;
penny_radius = 19.05 / 2;
-penny_thickness = 1.52;
weight_radius = (weight == "penny") ? penny_radius : _608zz_radius;
+weight_thickness = (weight == "penny") ?
+ penny_thickness * 5 : _608zz_thickness;
bearing_radius = (bearing == "608zz") ? _608zz_radius : 1/0;
+bearing_thickness = (bearing == "608zz") ? _608zz_thickness : 1/0;
arms = 3;
-module spin(weight_radius,
- arms,
- wall_thickness,
- bearing_radius) {
+module ring(outer_radius, inner_radius) {
+ difference() {
+ circle(outer_radius);
+ circle(inner_radius); } }
+
+module spin_2d(weight_radius,
+ arms,
+ wall_thickness,
+ bearing_radius) {
bearing_holder_radius = bearing_radius + wall_thickness;
weight_holder_radius = weight_radius + wall_thickness;
- circle(bearing_holder_radius);
+ ring(bearing_holder_radius, bearing_radius);
/*
- * imagine a right triangle with one point at the origin, at the
+ * imagine a triangle with one point at the origin, at the
* center of the spinning bearing holder, one point in the middle of
* the weight holder, and one point at the center of a circle tangent
* to the first two, called the joiner circle.
/* c: goes between origin and joiner circle. */
c = bearing_holder_radius + joiner_radius;
- /* A: angle at the origin, between the base and hypotenuse.
+ /* A: angle at the origin, between the base and segment from origin
+ to center of joiner circle.
it is calculated using law of cosines, given the lengths of
all 3 sides of the triangle. */
A = acos((pow(b, 2) + pow(c, 2) - pow(a, 2)) / (2 * b * c));
bearing_joiner_point,
weight_joiner_point]);
translate([joiner_x, joiner_y]) {
- circle(joiner_radius); } }
+ circle(joiner_radius); }
+ translate([weight_holder_radius + bearing_holder_radius, 0]) {
+ circle(weight_holder_radius); } }
mirror(v = [0, 1, 0]) {
difference() {
polygon([bearing_weight_point,
bearing_joiner_point,
weight_joiner_point]);
translate([joiner_x, joiner_y]) {
- circle(joiner_radius); } } }
+ circle(joiner_radius); }
+ translate([weight_holder_radius + bearing_holder_radius, 0]) {
+ circle(weight_holder_radius); } } }
translate([weight_holder_radius + bearing_holder_radius, 0]) {
- circle(weight_holder_radius); } } } }
+ ring(weight_holder_radius, weight_radius); } } } }
+
+module spin(weight_radius,
+ weight_thickness,
+ weight_lip_thickness,
+ arms,
+ wall_thickness,
+ bearing_radius,
+ bearing_thickness,
+ spinner_height) {
+ /* TODO: make window size parameter */
+ /* TODO: rethink how lips are done */
+ /* TODO: right now, weight is assumed to be thicker than bearing*/
+ bearing_lip_thickness = (spinner_height - bearing_thickness) / 2;
+ linear_extrude(height = weight_lip_thickness) {
+ spin_2d(weight_radius - 1,
+ arms,
+ wall_thickness + 1,
+ bearing_radius - 1); }
+ linear_extrude(height = bearing_lip_thickness) {
+ ring(bearing_radius, bearing_radius - 1); }
+ linear_extrude(height = spinner_height) {
+ spin_2d(weight_radius, arms, wall_thickness, bearing_radius); }
+ translate([0, 0, spinner_height - bearing_lip_thickness]) {
+ linear_extrude(height = bearing_lip_thickness) {
+ ring(bearing_radius, bearing_radius - 1); } }
+ translate([0, 0, spinner_height - weight_lip_thickness]) {
+ linear_extrude(height = weight_lip_thickness) {
+ spin_2d(weight_radius - 1,
+ arms,
+ wall_thickness + 1,
+ bearing_radius - 1); } } }
/*
This file is part of 3d-printables.