////////////////////////////////////////////////////////////////////////////
// Joukovsky Tower
// OpenSCAD
// Pere Hernàndez i Casellas
// 20211113
// GNU General Public License 3.0 http://www.gnu.org
///////////////////////////////////////////////////////////////////////////
$fn=60;
///////////////////////////////////////////////////////////////////////////
// Main parameters
///////////////////////////////////////////////////////////////////////////
// Foundation
rad0=10;
rad1=12.5; //Base radious
r_pile=1.0;
d0=35; // piles lenght
d1=8; // foundation thickness
// Terrain
color([0,1,0,0.1])
% cube([80,80,0.01], center = true);
// Main mast
rad2=7.5;
rad10=5.0;
d2=30; // main cone height
d3=50;
d4=10;
d5=50;
d6=10;
d7=50;
d8=10;
d9=50;
d10=10;
mh=d2+d3+d4+d5+d6+d7+d8+d9+d10;
echo("Max height", mh);
// Fairing parameters
rinc=0.2;
dd=20;
hd=3.5;
// Observatory
r_sphe=5.5;
s_sphe=sqrt(r_sphe*r_sphe-rad10*rad10);
// LEDs
rl1=0.15;
rl2=0.25;
dl1=0.1;
dl2=0.15;
sep1=0.2;
// Calculed values
zk=(rad10-rad2)/(mh-d2);
ak=atan((rad2-rad10)/(mh-d2));
z0=rad2-zk*d2;
rad3=z0+zk*(d2+d3);
rad4=z0+zk*(d2+d3+d4);
rad5=z0+zk*(d2+d3+d4+d5);
rad6=z0+zk*(d2+d3+d4+d5+d6);
rad7=z0+zk*(d2+d3+d4+d5+d6+d7);
rad8=z0+zk*(d2+d3+d4+d5+d6+d7+d8);
rad9=z0+zk*(d2+d3+d4+d5+d6+d7+d8+d9);
radtop=z0+zk*(mh);
echo("Rad top",radtop,rad3,rad9);
///////////////////////////////////////////////////////////////////////////
// Drawing the model
///////////////////////////////////////////////////////////////////////////
color([0.8,0.8,0.8]) {
// Foundation
translate([0,0,-d1])
cylinder(h=d1, r=rad1);
// Piles
for ( l=[0:30:360])
rotate([0,0,l])
translate([rad0,0,-d1-d0])
cylinder(h=d0, r=1);
// First cone
cylinder(h=d2,r1=rad1,r2=rad2);
// Second cone
translate([0,0,d2])
cylinder(h=mh-d2,r1=rad2,r2=rad10);
}
// Joukowsky fairing
// Level 2-3
color([0.8,0.8,0.0]) {
rotate([0,0,-2.5])
hull() {
translate([0,0,d2])
cylinder(h=d3,r1=rad2+rinc,r2=rad3+rinc);
translate([0,dd,d2-hd])
rotate([4*ak,0,0])
cylinder(h=d3,r1=0.2,r2=0.2);
}
}
// Level 4-5
color([0.8,0.8,0.0]) {
rotate([0,0,0])
hull() {
translate([0,0,d2+d3+d4])
cylinder(h=d3,r1=rad4+rinc,r2=rad5+rinc);
translate([0,dd,d2+d3+d4-hd])
rotate([4*ak,0,0])
cylinder(h=d3,r1=0.2,r2=0.2);
}
}
// Level 6-7
color([0.8,0.8,0.0]) {
rotate([0,0,5])
hull() {
translate([0,0,d2+d3+d4+d5+d6])
cylinder(h=d3,r1=rad6+rinc,r2=rad7+rinc);
translate([0,dd,d2+d3+d4+d5+d6-hd])
rotate([4*ak,0,0])
cylinder(h=d3,r1=0.2,r2=0.2);
}
}
// Level 8-9
color([0.8,0.8,0.0]) {
rotate([0,0,10])
hull() {
translate([0,0,d2+d3+d4+d5+d6+d7+d8])
cylinder(h=d3,r1=rad8+rinc,r2=rad9+rinc);
translate([0,dd,d2+d3+d4+d5+d6+d7+d8-hd])
rotate([4*ak,0,0])
cylinder(h=d3,r1=0.2,r2=0.2);
}
}
// Top observatory
color([0.8,0.8,1,0.15]) {
translate([0,0,mh+s_sphe])
% sphere(r=r_sphe);
}
// Railing
color([0,0,0.8])
translate([0,0,mh]) {
translate([0,0,1.1]){
rotate_extrude(convexity = 10, $fn = 100)
translate([rad10-0.2, 0, 0])
circle(r = 0.025, $fn = 100);
}
for (m=[0:15:360])
rotate([0,0,m])
translate([rad10-0.2,0,0])
cylinder(h=1.1,r=0.02);
}
// DRAW LEDS
// Red LED
translate([0,0,d2+d3+d4+d5+d6+d7+d8+d9]) {
// Copy rings
for (j = [1:1:9])
translate([0,0,j]) {
// Ring of LEDs
for ( i = [0:15:360])
rotate([0,0,i])
translate([0,rad9+sep1,0])
rotate([-90,0,0]) {
cylinder(h=dl1,r=rl1);
translate([0,0,dl1])
cylinder(h=dl2, r1=rl1, r2=rl2);
translate([0,0,dl1+dl2])
color([1,0,0]) {
cylinder(h=0.04, r=rl2);
translate([0,0,-1])
cylinder(h=1.0, r=0.05);
}
}
// Support
color([1,0,0])
rotate_extrude(convexity = 10, $fn = 100)
translate([rad9+sep1, 0, 0])
circle(r = 0.05, $fn = 100);
}
}
// Green LED
translate([0,0,d2+d3+d4+d5+d6+d7]) {
// Copy rings
for (j = [1:1:9])
translate([0,0,j]) {
// Ring of LEDs
for ( i = [0:15:360])
rotate([0,0,i])
translate([0,rad7+sep1,0])
rotate([-90,0,0]) {
cylinder(h=dl1,r=rl1);
translate([0,0,dl1])
cylinder(h=dl2, r1=rl1, r2=rl2);
translate([0,0,dl1+dl2])
color([0,1,0]) {
cylinder(h=0.04, r=rl2);
translate([0,0,-1])
cylinder(h=1.0, r=0.05);
}
}
// Support
color([0,1,0])
rotate_extrude(convexity = 10, $fn = 100)
translate([rad7+sep1, 0, 0])
circle(r = 0.05, $fn = 100);
}
}
// Yellow LED
translate([0,0,d2+d3+d4+d5]) {
// Copy rings
for (j = [1:1:9])
translate([0,0,j]) {
// Ring of LEDs
for ( i = [0:15:360])
rotate([0,0,i])
translate([0,rad5+sep1,0])
rotate([-90,0,0]) {
cylinder(h=dl1,r=rl1);
translate([0,0,dl1])
cylinder(h=dl2, r1=rl1, r2=rl2);
translate([0,0,dl1+dl2])
color([1,1,0]) {
cylinder(h=0.04, r=rl2);
translate([0,0,-1])
cylinder(h=1.0, r=0.05);
}
}
// Support
color([1,1,0])
rotate_extrude(convexity = 10, $fn = 100)
translate([rad5+sep1, 0, 0])
circle(r = 0.05, $fn = 100);
}
}
// Blue LED
translate([0,0,d2+d3]) {
// Copy rings
for (j = [1:1:9])
translate([0,0,j]) {
// Ring of LEDs
for ( i = [0:15:360])
rotate([0,0,i])
translate([0,rad3+sep1,0])
rotate([-90,0,0]) {
cylinder(h=dl1,r=rl1);
translate([0,0,dl1])
cylinder(h=dl2, r1=rl1, r2=rl2);
translate([0,0,dl1+dl2])
color([0,0,1]) {
cylinder(h=0.04, r=rl2);
translate([0,0,-1])
cylinder(h=1.0, r=0.05);
}
}
// Support
color([0,0,1])
rotate_extrude(convexity = 10, $fn = 100)
translate([rad3+sep1, 0, 0])
circle(r = 0.05, $fn = 100);
}
}
// Human body observatory
translate([0,0,mh])
scale([0.005,0.005,0.005])
rotate([0,0,-45])
rotate([90,0,0])
color([0.5,0.8,0])
import("man1.stl", convexity=3);
// Human body2 floor
translate([0,-17,0])
scale([0.005,0.005,0.005])
rotate([0,0,-45])
rotate([90,0,0])
color([0.0,0.8,0])
import("man1.stl", convexity=3);