//appjaws-fan-arm-connectors - parameterised arm connectors for external fans. //change "length" to set the length of the arm connector between screw hole centres //change "uc" to change the positions of the flange and/or U bracket relative to the arm //change "type" to select connector end types //For the rear fan you will need 1 type 1 and 1 type 3. //For the front fan you will need 1 type 2 and 1 type 3. include ; gap = 15;//u-bracket gap length=50;//U Bracket and/or Flange screw hole centres. Min distance for type 1=34, type 2=24, type 3=24 wall=4; radius=5; sc=1.8;//screw clearence //type 1 = 2 u Brackets //type 2 = 1 u Bracket straight and 1 u Bracket at 90 degrees to the arm //type 3 = 1 U Bracket and 1 Flange type=1; uo=0;//U Bracket and flange offset from the arm $fn=100; module uBracket() { difference() { union() { translate([0,-wall*3,0]) cube([wall,gap-2,radius*2]); // U radius infill rotate([90,0,0]) translate([gap,radius,-wall*1.5]) cylinder(gap+wall*2,radius,radius);//end radius translate([wall+1,-gap-wall/2,0]) cube([radius*2,gap+wall*2,radius*2]); // U body translate([radius,-wall*3,0]) cylinder(h=radius*2,r=radius); // U radius upper translate([radius,1,0]) cylinder(h=radius*2,r=radius);// U radius lower } translate([wall,-gap+wall/2,-wall/2]) cube([gap+1,gap,gap]); //U cut out translate([gap,wall*2,radius]) rotate([90,0,0]) cylinder(gap*2,sc,sc); //U screw holes translate([gap,-5.5,radius]) sphere(9); //rotating surface } }//end module uBracket module Flange() { difference() { union() { translate([0,-radius*2,0]) cube([radius,radius*2,radius]); //arm top intersection() { union() { rotate([90,0,0]) translate([0,5,-radius]) cylinder(h=gap+wall,r=radius); // arm end radius } translate([0,-radius,radius]) sphere(9); // } } rotate([90,0,0]) translate([0,6.7,-radius]) cylinder(20,sc,sc); // mount slot rotate([90,0,0]) translate([-1.8,3,-radius]) cube([3.6,4,20]); // mount slot rotate([90,0,0]) translate([0,3.7,-radius]) cylinder(20,sc,sc); // mount slot } } if(type==1){ translate([0,-radius*2,0]) cube([length-gap*2-wall*2,radius*2,radius]); //arm translate([length-gap*2-wall*2,uo+1,0]) uBracket();//u Bracket translate([0,-uo-radius*2,0])rotate([0,0,180]) uBracket();//u Bracket } else if (type==2){ translate([radius,-radius*2,0]) cube([length-gap-radius-wall,radius*2,radius]); //arm translate([length-gap-wall,uo+1,0]) uBracket();//u Bracket translate([radius,-uo,0]) rotate([0,270,0]) uBracket();//u Bracket }else if (type==3) { translate([radius,-radius*2,0]) cube([length-gap-radius-wall,radius*2,radius]); //arm translate([length-gap-wall,uo+1,0]) uBracket();//u bracket translate([0,-uo,0]) Flange();//flange }