//Same as V2 except it is more production friendly. $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; structureInset = 5.0; structureInsetEps = 0.1; //Helper 3d printing needed fixer module placeStructure(pos = [0,0,0]) { translate(pos){ color("yellow"){ difference(){ union(){ //Structure 1 pin color("green"){ translate([0,0,HelixLength_l2/2]){ union(){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ cube([structureInset,structureInset,structureInset]); } rotate([0,0,90]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ rounded_cube([structureInset,structureInset,structureInset]); } } rotate([0,0,180]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ cube([structureInset,structureInset,structureInset]); } } rotate([0,0,270]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2+structureInsetEps/2,ThreeDPartWidth/2-structureInset/2+structureInsetEps/2]){ cube([structureInset-structureInsetEps,structureInset-structureInsetEps,structureInset-structureInsetEps]); } } } } } //Structure 2 pin color("green"){ translate([0,0,HelixLength_l2-ThreeDPartWidth]){ union(){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ cube([structureInset,structureInset,structureInset]); } rotate([0,0,90]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ cube([structureInset,structureInset,structureInset]); } } rotate([0,0,180]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ cube([structureInset,structureInset,structureInset]); } } rotate([0,0,270]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2+structureInsetEps/2,ThreeDPartWidth/2-structureInset/2+structureInsetEps/2]){ cube([structureInset-structureInsetEps,structureInset-structureInsetEps,structureInset-structureInsetEps]); } } } } } //PADS rotate([0.0,0.0,0.0]){ translate([0,-ThreeDPartWidth/2,0]){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth*0.8,-ThreeDPartWidth/2*0.6,ReflectorWidth]){ cube([ThreeDPartWidth*1.6,ThreeDPartWidth*1.6,ThreeDPartWidth*0.4]); } } } //Special 90deg turn rotate([0.0,0.0,90.0]){ translate([0,-ThreeDPartWidth/2,0]){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth*0.8,-ThreeDPartWidth*0,ReflectorWidth]){ cube([ThreeDPartWidth/2,ThreeDPartWidth,ThreeDPartWidth*0.4]); } } } rotate([0.0,0.0,90.0]){ translate([ThreeDPartWidth*1.2,-ThreeDPartWidth/2,0]){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth*0.8,-ThreeDPartWidth*0,ReflectorWidth]){ cube([ThreeDPartWidth/2,ThreeDPartWidth,ThreeDPartWidth*0.4]); } } } //END SPECIAL rotate([0.0,0.0,180.0]){ translate([0,-ThreeDPartWidth/2,0]){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth*0.8,-ThreeDPartWidth/2*0.6,ReflectorWidth]){ cube([ThreeDPartWidth*1.6,ThreeDPartWidth*1.6,ThreeDPartWidth*0.4]); } } } rotate([0.0,0.0,270.0]){ translate([0,-ThreeDPartWidth/2,0]){ translate([HelixDiameter-PVCPipeOuterDiameter-ThreeDPartWidth*0.8,-ThreeDPartWidth/2*0.6,ReflectorWidth]){ cube([ThreeDPartWidth*1.6,ThreeDPartWidth*1.6,ThreeDPartWidth*0.4]); } } } //END PADS //Columns 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 } } module rounded_cube(size = [1, 1, 1], center = false, radius = 0.4) { //Radii should be lesser than half of the min(size[0],size[1],size[2])! // If single value, convert to [x, y, z] vector size = (size[0] == undef) ? [size, size, size] : size; translate = (center == false) ? [radius, radius, radius] : [ radius - (size[0] / 2), radius - (size[1] / 2), radius - (size[2] / 2) ]; translate(v = translate) minkowski() { cube(size = [ size[0] - (radius * 2), size[1] - (radius * 2), size[2] - (radius * 2) ]); sphere(r = radius); } } JOINT_OFFSET=20.0; //mm union(){ difference(){ placeStructure([0,0,0]); translate([-50,-50,(HelixLength_l2/2)+JOINT_OFFSET]){ cube([100,100,(HelixLength_l2/2)+20+JOINT_OFFSET]); } } } translate([90,0,0]){ union(){ difference(){ placeStructure([0,0,0]); translate([-50,-50,JOINT_OFFSET-20]){ cube([100,100,HelixLength_l2/2+20]); } }//END DIFF translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*4.45,-ThreeDPartWidth/2,0]){ rounded_cube([ThreeDPartWidth/2-0.2,ThreeDPartWidth,ThreeDPartWidth*2]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.0,-ThreeDPartWidth/2,0]){ rounded_cube([ThreeDPartWidth/2-0.2,ThreeDPartWidth,ThreeDPartWidth*2]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.5,ThreeDPartWidth*0.47,ThreeDPartWidth/2]){ rounded_cube([ThreeDPartWidth,ThreeDPartWidth/2-0.2,ThreeDPartWidth]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.5,-ThreeDPartWidth*0.97,ThreeDPartWidth/2]){ rounded_cube([ThreeDPartWidth,ThreeDPartWidth/2-0.2,ThreeDPartWidth]); } } rotate([0,0,90]){ translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*4.45,-ThreeDPartWidth/2,0]){ rounded_cube([ThreeDPartWidth/2-0.2,ThreeDPartWidth,ThreeDPartWidth*2]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.0,-ThreeDPartWidth/2,0]){ rounded_cube([ThreeDPartWidth/2-0.2,ThreeDPartWidth,ThreeDPartWidth*2]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.5,ThreeDPartWidth*0.47,ThreeDPartWidth/2]){ rounded_cube([ThreeDPartWidth,ThreeDPartWidth/2-0.2,ThreeDPartWidth]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.5,-ThreeDPartWidth*0.97,ThreeDPartWidth/2]){ rounded_cube([ThreeDPartWidth,ThreeDPartWidth/2-0.2,ThreeDPartWidth]); } } } rotate([0,0,180]){ translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*4.45,-ThreeDPartWidth/2,0]){ rounded_cube([ThreeDPartWidth/2-0.2,ThreeDPartWidth,ThreeDPartWidth*2]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.0,-ThreeDPartWidth/2,0]){ rounded_cube([ThreeDPartWidth/2-0.2,ThreeDPartWidth,ThreeDPartWidth*2]); } } //R translate([0,0,ThreeDPartWidth*0.35]){ translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.5,ThreeDPartWidth*0.47,ThreeDPartWidth/2]){ rounded_cube([ThreeDPartWidth,ThreeDPartWidth/2-0.2,ThreeDPartWidth]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.5,-ThreeDPartWidth*0.97,ThreeDPartWidth/2]){ rounded_cube([ThreeDPartWidth,ThreeDPartWidth/2-0.2,ThreeDPartWidth]); } } } } rotate([0,0,270]){ translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*4.45,-ThreeDPartWidth/2,0]){ rounded_cube([ThreeDPartWidth/2-0.2,ThreeDPartWidth,ThreeDPartWidth*2]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.0,-ThreeDPartWidth/2,0]){ rounded_cube([ThreeDPartWidth/2-0.2,ThreeDPartWidth,ThreeDPartWidth*2]); } } //R translate([0,0,-ThreeDPartWidth*0.35]){ translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.5,ThreeDPartWidth*0.47,ThreeDPartWidth/2]){ rounded_cube([ThreeDPartWidth,ThreeDPartWidth/2-0.2,ThreeDPartWidth]); } } translate([0,0,HelixLength_l2/2+ThreeDPartWidth]){ translate([-HelixDiameter/2+ThreeDPartWidth*3.5,-ThreeDPartWidth*0.97,ThreeDPartWidth/2]){ rounded_cube([ThreeDPartWidth,ThreeDPartWidth/2-0.2,ThreeDPartWidth]); } } } } } } //Structure holder 1 color("red"){ translate([0,0,HelixLength_l2/1.5]){ difference(){ union(){ translate([-HelixDiameter/2+ThreeDPartWidth/2,-ThreeDPartWidth/2,0]){ rounded_cube([HelixDiameter-ThreeDPartWidth,ThreeDPartWidth,ThreeDPartWidth]); } rotate([0,0,90]){ translate([-HelixDiameter/2+ThreeDPartWidth/2,-ThreeDPartWidth/2,0]){ rounded_cube([HelixDiameter-ThreeDPartWidth,ThreeDPartWidth,ThreeDPartWidth]); } } } //END union union(){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ rounded_cube([structureInset,structureInset,structureInset]); } rotate([0,0,90]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ rounded_cube([structureInset,structureInset,structureInset]); } } rotate([0,0,180]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ rounded_cube([structureInset,structureInset,structureInset]); } } rotate([0,0,270]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ rounded_cube([structureInset,structureInset,structureInset]); } } } } } } //Structure holder 2 color("red"){ translate([0,0,HelixLength_l2-ThreeDPartWidth]){ difference(){ union(){ translate([-HelixDiameter/2+ThreeDPartWidth/2,-ThreeDPartWidth/2,0]){ rounded_cube([HelixDiameter-ThreeDPartWidth,ThreeDPartWidth,ThreeDPartWidth]); } rotate([0,0,90]){ translate([-HelixDiameter/2+ThreeDPartWidth/2,-ThreeDPartWidth/2,0]){ rounded_cube([HelixDiameter-ThreeDPartWidth,ThreeDPartWidth,ThreeDPartWidth]); } } } //END union union(){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ rounded_cube([structureInset,structureInset,structureInset]); } rotate([0,0,90]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ rounded_cube([structureInset,structureInset,structureInset]); } } rotate([0,0,180]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ rounded_cube([structureInset,structureInset,structureInset]); } } rotate([0,0,270]){ translate([ThreeDPartWidth+structureInsetEps,-ThreeDPartWidth/2+structureInset/2,ThreeDPartWidth/2-structureInset/2]){ rounded_cube([structureInset,structureInset,structureInset]); } } } } } }