90 lines
3.0 KiB
OpenSCAD
90 lines
3.0 KiB
OpenSCAD
include <./gnal_v3.scad>;
|
|
|
|
$fn = 250;
|
|
|
|
REEL_H = 42;
|
|
REEL_D = 99;
|
|
REEL_OUTER_WALL_H = 4;
|
|
REEL_OUTER_WALL_W = 3;
|
|
|
|
REEL_INNER_D = 25.7 + 6;
|
|
REEL_INNER_H = 19.5;
|
|
REEL_INNER_WALL_W = 3;
|
|
|
|
SPOKE_H = 3;
|
|
|
|
module reel_frame () {
|
|
//outer wall
|
|
translate([0, 0, REEL_OUTER_WALL_H / 2]) difference () {
|
|
cylinder(r = REEL_D / 2, h = REEL_OUTER_WALL_H, center = true);
|
|
cylinder(r = (REEL_D / 2) - REEL_OUTER_WALL_W, h = REEL_OUTER_WALL_H + 1, center = true);
|
|
}
|
|
|
|
//inner wall
|
|
translate([0, 0, REEL_INNER_H / 2]) difference () {
|
|
cylinder(r = REEL_INNER_D / 2, h = REEL_INNER_H, center = true);
|
|
cylinder(r = (REEL_INNER_D / 2) - REEL_INNER_WALL_W, h = REEL_INNER_H + 1, center = true);
|
|
translate([14, 0, 0]) rotate([0, 0, 45]) cube([10, 0.3, 20], center = true);
|
|
translate([0, 0, -REEL_INNER_H / 2]) intersection () {
|
|
cylinder(r = 30.5 / 2, h = 6, center = true);
|
|
rotate([0, 45, 0]) cube([3, 31, 3], center = true);
|
|
}
|
|
}
|
|
//top notches
|
|
translate([0, 0, 19.4]) difference () {
|
|
intersection () {
|
|
cylinder(r = 30 / 2, h = 6, center = true);
|
|
rotate([0, 45, 0]) cube([3, 30, 3], center = true);
|
|
}
|
|
cylinder(r = (REEL_INNER_D / 2) - REEL_INNER_WALL_W, h = 6 + 1, center = true);
|
|
}
|
|
|
|
//spokes
|
|
translate([0, 0, SPOKE_H / 2]) for (i = [0:5]) {
|
|
rotate([0, 0, i * (360 / 6)]) {
|
|
translate([0, ((REEL_D - REEL_INNER_D) / 2) - 1.5, 0]) {
|
|
cube([4.5, (REEL_D - REEL_INNER_D) / 2, SPOKE_H], center = true);
|
|
}
|
|
}
|
|
}
|
|
|
|
translate([0, 0, 4]) rotate([0, 0, 8]) spiral(rotations = 15, fn = $fn, start_d = 29.5, bottom = -4);
|
|
}
|
|
|
|
module reel_top () {
|
|
//outer wall
|
|
translate([0, 0, SPOKE_H / 2]) difference () {
|
|
cylinder(r = REEL_D / 2, h = SPOKE_H, center = true);
|
|
cylinder(r = (REEL_D / 2) - REEL_OUTER_WALL_W, h = REEL_OUTER_WALL_H + 1, center = true);
|
|
}
|
|
|
|
//inner wall
|
|
translate([0, 0, SPOKE_H / 2]) difference () {
|
|
cylinder(r = REEL_INNER_D / 2, h = SPOKE_H, center = true);
|
|
cylinder(r = (REEL_INNER_D / 2) - REEL_INNER_WALL_W, h = REEL_INNER_H + 1, center = true);
|
|
translate([0, 0, -SPOKE_H / 2]) intersection () {
|
|
cylinder(r = 30.5 / 2, h = 6, center = true);
|
|
rotate([0, 45, 0]) cube([3, 31, 3], center = true);
|
|
}
|
|
}
|
|
|
|
translate([0, 0, SPOKE_H / 2]) difference () {
|
|
cylinder(r = (REEL_INNER_D + REEL_D) / 4, h = SPOKE_H, center = true);
|
|
cylinder(r = ((REEL_INNER_D + REEL_D) / 4) - REEL_INNER_WALL_W, h = REEL_INNER_H + 1, center = true);
|
|
}
|
|
|
|
//spokes
|
|
translate([0, 0, SPOKE_H / 2]) for (i = [0:5]) {
|
|
rotate([0, 0, i * (360 / 6)]) {
|
|
translate([0, ((REEL_D - REEL_INNER_D) / 2) - 1.5, 0]) {
|
|
cube([4.5, (REEL_D - REEL_INNER_D) / 2, SPOKE_H], center = true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//reel_frame();
|
|
rotate([180, 0, 0]) reel_top();
|
|
//translate([0, 0, -19.5]) reel_frame();
|