GeigerCounterEnclosure/ServoGauge.scad

144 lines
4.4 KiB
OpenSCAD
Raw Normal View History

2021-08-28 16:03:33 +00:00
include <BOSL/constants.scad>
use <BOSL/transforms.scad>
use <BOSL/shapes.scad>
use <SensorBox.scad>
use <Vitamins.scad>
servo_mount_size = [12, 32, 2.5];
servo_mount_pos = [0, 0, 16];
servo_mount_hole_diam = 2;
servo_core_size = [12, 23, 22.3];
servo_gears_size = [servo_core_size.x, servo_core_size.x, 26.5];
servo_gears_pos = [0, -(servo_core_size.y/2 - servo_gears_size.y/2), 0];
servo_centergears_size = [servo_core_size.x/2, servo_core_size.x/2, servo_gears_size.z];
servo_centergears_pos = [0, 0, 0];
servo_shaft_size = [1, 1, 28.5];
servo_shaft_pos = servo_gears_pos;
display_pos = [0, 8, servo_core_size.z];
box_wall = 2;
servo_box_round = 1;
servo_box_size = [40, get_servo_box_size().y, servo_core_size.z + box_wall*2];
servo_box_chamber = [servo_box_size.x - box_wall*2, servo_box_size.y - box_wall*2, servo_box_size.z - box_wall*2];
servo_box_chamber_walled = [servo_box_chamber.x + box_wall, servo_box_chamber.y + box_wall, servo_box_chamber.z + box_wall];
servo_box_pos = [6, 0, servo_box_size.z/2 - box_wall];
servo_box_socket_size = [servo_box_size.x, servo_box_size.y, 4];
servo_box_screw_joiner_size = [5, 5, 20];
servo_box_screw_joiner_pos = [servo_box_size.x/2 + servo_box_screw_joiner_size.x/2, 0, 2];
module servo_mount_holes() {
for (i = [0:1]) {
down(servo_mount_size.z)
fwd((1-2*i)*(servo_mount_size.y/2 - servo_mount_hole_diam) + 0.5*(i+1))
cylinder(h=servo_mount_size.z*4, d=servo_mount_hole_diam, $fn=10);
}
}
module servo() {
up(servo_core_size.z/2)
cube(servo_core_size, center=true);
up(servo_mount_size.z/2) translate(servo_mount_pos)
difference() {
cube(servo_mount_size, center=true);
servo_mount_holes();
}
translate(servo_gears_pos) cylinder(d=servo_gears_size.x, h=servo_gears_size.z, $fn=30);
translate(servo_centergears_pos) cylinder(d=servo_centergears_size.x, h=servo_centergears_size.z, $fn=20);
translate(servo_shaft_pos) cylinder(d=servo_shaft_size.x, h=servo_shaft_size.z, $fn=20);
}
display_needle_length = 15;
module display_mount_holes() {
translate(-servo_shaft_pos) {
#servo_mount_holes();
}
}
module display() {
angle_max = 180;
angle_gap = 8;
module display_pie() {
up(1) zrot(-90 + angle_gap/2)
pie_slice(ang=angle_max-angle_gap, l=2, r=display_needle_length);
}
difference() {
//up(2/2) cube([20, 40, 2], center=true);
minkowski() {
display_pie();
cylinder(r=7,h=0.1);
}
up(1.5) display_pie();
translate(-servo_shaft_pos) {
down(servo_core_size.z) servo();
}
display_mount_holes();
}
slices=20;
for (i = [0:slices]) {
zrot(i * (angle_max - angle_gap)/slices + angle_gap/2) fwd(display_needle_length) up(3) scale(i%5==0 ? 1 : 0.5) cube([1, 4, 2], center=true);
}
}
module servo_box() {
up(box_wall) translate(servo_box_pos) {
difference() {
cuboid(servo_box_size, chamfer=servo_box_round);
cuboid(servo_box_chamber, chamfer=servo_box_round);
}
translate(servo_box_screw_joiner_pos) {
fwd(20) screw_joiner(servo_box_screw_joiner_size, edges=EDGES_Z_RT);
back(20) screw_joiner(servo_box_screw_joiner_size, edges=EDGES_Z_RT);
}
}
}
module servo_box_divider(socket) {
up(3) {
difference() {
up(50 + servo_box_size.z/2 + 5) cube([500, 100, 100], center=true);
up(-box_wall) translate(servo_box_pos) scale(socket ? 1 : [0.97, 0.99, 0.98]) cube(servo_box_chamber_walled, center=true);
}
}
}
module model_display() {
up(box_wall) translate(display_pos) display();
}
module model_servo_box() {
difference() {
servo_box();
translate(display_pos) {
down(servo_core_size.z - 2) fwd(servo_gears_pos.y) servo();
display_mount_holes();
}
}
}
module model_servo_box_top() {
//up(box_wall + bank_inside_size.z/2)
intersection() {
model_servo_box();
servo_box_divider(socket=true);
}
model_display();
}
module model_servo_box_bottom() {
//up(box_wall + bank_inside_size.z/2)
difference() {
model_servo_box();
servo_box_divider(socket=false);
}
}
translate(display_pos) down(servo_core_size.z - 4) fwd(servo_gears_pos.y) %servo();
model_servo_box_top();
model_servo_box_bottom();