centrifuge/centrifuge.scad
2025-01-13 16:03:48 -05:00

61 lines
1.3 KiB
OpenSCAD

$fn=360;
AXLE_DIAMETER=5;
BASE_HEIGHT=100;
BASE_LOWER_DIAMETER=100;
BASE_UPPER_DIAMETER=50;
TEST_TUBE_HEIGHT=150;
TEST_TUBE_DIAMETER=10;
TEST_TUBE_ANGLE=33;
TEST_TUBE_SPREAD=90;
module testTube(height, diameter) {
cylinder(height, diameter, diameter);
}
module arrangedTestTubes(angle, spread, rotation) {
rotate([0, 0, rotation]) {
translate([0, spread, 10]) {
rotate([angle, 0, 0]) {
testTube(TEST_TUBE_HEIGHT, TEST_TUBE_DIAMETER);
}
}
translate([0, -spread, 10]) {
rotate([-angle, 0, 0]) {
testTube(TEST_TUBE_HEIGHT, TEST_TUBE_DIAMETER);
}
}
translate([spread, 0, 10]) {
rotate([0, -angle, 0]) {
testTube(TEST_TUBE_HEIGHT, TEST_TUBE_DIAMETER);
}
}
translate([-spread, 0, 10]) {
rotate([0, angle, 0]) {
testTube(TEST_TUBE_HEIGHT, TEST_TUBE_DIAMETER);
}
}
}
}
module base(height, lowerDiameter, upperDiameter) {
cylinder(height, lowerDiameter, upperDiameter);
}
module axle(height, diameter) {
translate([0, 0, -1]) {
cylinder(height, diameter, diameter);
}
}
module centrifuge() {
difference() {
base(BASE_HEIGHT, BASE_LOWER_DIAMETER, BASE_UPPER_DIAMETER);
axle(BASE_HEIGHT + 2, AXLE_DIAMETER);
arrangedTestTubes(TEST_TUBE_ANGLE, TEST_TUBE_SPREAD, 0);
arrangedTestTubes(TEST_TUBE_ANGLE, TEST_TUBE_SPREAD, 45);
}
}
centrifuge();