$fn = 10; //The more, the smoother smoothness= 30; //The lesser, the smoother //Helix antenna params: NTurns= 20; //20 LengthOfMatchingCoax_l1 = 31.25; //[lambda/4] DiameterOfMatchingCoax_d1 = 6.06; //mm PadderDiameter_d4 = 5.0; //mm (Can be varied) PadderExtraSpace = 1; //mm PadderSpaceOffsetFromReflector = 4; //mm HelixLength_l2 = 625; //mm (62.5 cm) HelixSpacing = HelixLength_l2/NTurns; //Nturns HelixDiameter = 39.79; //mm ReflectorDiameter_d3 = 137.5; //mm ReflectorWidth = 4; //mm HelixWireSize = 2; //mm ThreeDPartCutout = HelixWireSize*1.5; ThreeDPartWidth = 10; //mm (distance from PCV pipe to wire) PVCPipeInnerDiameter = 16; //mm PVCPipeOuterDiameter = 20; //mm //This should be applied: Helix diameter //= PVC pipe diameter //+ 2 * (distance from pipe surface to wire center) HelixRadius = HelixDiameter/2; PVCPipeOuterRadius = PVCPipeOuterDiameter/2; PVCPipeInnerRadius = PVCPipeInnerDiameter/2; ReflectorRadius = ReflectorDiameter_d3/2; module line3D(p1, p2, thickness) { hull() { translate(p1) sphere(thickness / 2); translate(p2) sphere(thickness / 2); } } module polyline3D(points, thickness) { module polyline3D_inner(points, index) { if(index < len(points)) { line3D(points[index - 1], points[index], thickness, fn); polyline3D_inner(points, index + 1); } } polyline3D_inner(points, 1); } points = [ for(a = [0:smoothness:360 * NTurns]) [(HelixDiameter/2) * cos(a), (HelixDiameter/2) * sin(a), HelixSpacing / (360 / smoothness) * (a / smoothness)] ]; //Helper 3d printing needed fixer color("yellow"){ difference(){ union(){ translate([0,-ThreeDPartWidth/2,0]){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth/2,0,-ThreeDPartWidth/2]){ cube([ThreeDPartWidth,ThreeDPartWidth,HelixSpacing]); } } rotate([0.0,0.0,180.0]){ translate([0,-ThreeDPartWidth/2,0]){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth/2,0,-ThreeDPartWidth*2]){ cube([ThreeDPartWidth,ThreeDPartWidth,HelixSpacing]); } } } rotate([0.0,0.0,270.0]){ translate([0,-ThreeDPartWidth/2,0]){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth/2,0,-ThreeDPartWidth*1]){ cube([ThreeDPartWidth,ThreeDPartWidth,HelixSpacing]); } } } //TOPS: for(a = [0:1:(NTurns-1)]) { translate([0,-ThreeDPartWidth/2,HelixSpacing-ThreeDPartWidth/2+a*HelixSpacing]){ difference(){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth/2,0,0]){ cube([ThreeDPartWidth,ThreeDPartWidth,HelixSpacing]); } translate([ThreeDPartWidth*2,ThreeDPartWidth*1.5,ThreeDPartWidth/2]){ rotate([90.0,0.0,0.0]){ cylinder(ThreeDPartWidth*2,ThreeDPartCutout,ThreeDPartCutout); } } } } rotate([0.0,0.0,180.0]){ translate([0,-ThreeDPartWidth/2,HelixSpacing*0.5-ThreeDPartWidth/2+a*HelixSpacing]){ difference(){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth/2,0,0]){ cube([ThreeDPartWidth,ThreeDPartWidth,HelixSpacing]); } translate([ThreeDPartWidth*2,ThreeDPartWidth*1.5,ThreeDPartWidth/2]){ rotate([90.0,0.0,0.0]){ cylinder(ThreeDPartWidth*2,ThreeDPartCutout,ThreeDPartCutout); } } } } } rotate([0.0,0.0,90.0]){ translate([0,-ThreeDPartWidth/2,HelixSpacing*0.25-ThreeDPartWidth/2+a*HelixSpacing]){ difference(){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth/2,0,0]){ cube([ThreeDPartWidth,ThreeDPartWidth,HelixSpacing]); } translate([ThreeDPartWidth*2,ThreeDPartWidth*1.5,ThreeDPartWidth/2]){ rotate([90.0,0.0,0.0]){ cylinder(ThreeDPartWidth*2,ThreeDPartCutout,ThreeDPartCutout); } } } } } rotate([0.0,0.0,270.0]){ translate([0,-ThreeDPartWidth/2,HelixSpacing*0.75-ThreeDPartWidth/2+a*HelixSpacing]){ difference(){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth/2,0,0]){ cube([ThreeDPartWidth,ThreeDPartWidth,HelixSpacing]); } translate([ThreeDPartWidth*2,ThreeDPartWidth*1.5,ThreeDPartWidth/2]){ rotate([90.0,0.0,0.0]){ cylinder(ThreeDPartWidth*2,ThreeDPartCutout,ThreeDPartCutout); } } } } } } }//END union union(){ translate([-ReflectorDiameter_d3*1.5,-ReflectorDiameter_d3*1.5,-ReflectorDiameter_d3+ReflectorWidth]){ cube([ReflectorDiameter_d3*3,ReflectorDiameter_d3*3,ReflectorDiameter_d3]); } translate([-ReflectorDiameter_d3*1.5,-ReflectorDiameter_d3*1.5,HelixLength_l2+ReflectorWidth]){ cube([ReflectorDiameter_d3*3,ReflectorDiameter_d3*3,ReflectorDiameter_d3]); } } } //END difference } //END color //Structure holder 1 color("red"){ translate([0,0,HelixLength_l2/2]){ union(){ translate([-HelixDiameter/2+ThreeDPartWidth/2,-ThreeDPartWidth/2,0]){ cube([HelixDiameter-ThreeDPartWidth,ThreeDPartWidth,ThreeDPartWidth]); } rotate([0,0,90]){ translate([-HelixDiameter/2+ThreeDPartWidth/2,-ThreeDPartWidth/2,0]){ cube([HelixDiameter-ThreeDPartWidth,ThreeDPartWidth,ThreeDPartWidth]); } } } } } //Structure holder 2 color("red"){ translate([0,0,HelixLength_l2-ThreeDPartWidth]){ union(){ translate([-HelixDiameter/2+ThreeDPartWidth/2,-ThreeDPartWidth/2,0]){ cube([HelixDiameter-ThreeDPartWidth,ThreeDPartWidth,ThreeDPartWidth]); } rotate([0,0,90]){ translate([-HelixDiameter/2+ThreeDPartWidth/2,-ThreeDPartWidth/2,0]){ cube([HelixDiameter-ThreeDPartWidth,ThreeDPartWidth,ThreeDPartWidth]); } } } } } //PVC pipe /*color("gray"){ translate([0,0,ReflectorWidth/2+ReflectorWidth]){ difference(){ cylinder(HelixLength_l2,PVCPipeOuterRadius,PVCPipeOuterRadius); cylinder(HelixLength_l2*1.5,PVCPipeInnerRadius,PVCPipeInnerRadius); } } }*/ //Reflector color("#eee"){ cylinder(ReflectorWidth,ReflectorDiameter_d3/2,ReflectorDiameter_d3/2); } //Helix wire color("#B87333"){ polyline3D(points, HelixWireSize); //cylinder(ReflectorWidth,ReflectorDiameter_d3); } //Insulator //Prevent the coax center conductor from touching the reflector (ground) translate([HelixDiameter/2,HelixDiameter/2,-LengthOfMatchingCoax_l1+2]){ color("black"){ cylinder(LengthOfMatchingCoax_l1+PadderSpaceOffsetFromReflector,PadderDiameter_d4/2+HelixWireSize+PadderExtraSpace,PadderDiameter_d4/2+HelixWireSize+PadderExtraSpace); } } //Former