$fn = 64; set_screw_dia = 3.05; rod_size = 22.3; rod_length = 170; //spacing between rods rod_distance = 0; //diameter of race ball_bearing_race_dia = 32.75; //individual ball bearing size ball_bearing_size = 6.4; probe_shaft = 17; //ball feet diameter feet_dia = 12.7; encoder_shaft_dia = 6.0; //counter bore diameter cb_dia = 7; //counter bore height cb_height = 5; //rotary encoder bolt hold circle radius enc_bolt_r = 15; /* rotate([90,90,0]) translate([0,0,-50]) cylinder( d = 60, h = 60, center = true); */ rotate([0,180,0]) small_base_connector_encoder(); //translate([0,45,0]) //encoder(); //this holds the rotary encoder //rotate([0,90,0]) //test_rod_holder(); //translate([0,0,-30]) //enclosure(); //rotate([90,90,0]) //base_rotary_top(); //translate([0,-50,0]) //rotate([90,90,0]) //connector_encoder(); module enclosure(){ difference(){ translate([0,45,90]) rotate([90,90,0]) minkowski(){ cylinder(d1 = 60, d2 = 35, h = 40, center = true); cube([60,46,10], center = true); } translate([0,50,90]) rotate([90,90,0]) minkowski(){ cylinder(d1 = 56, d2 = 33, h = 38, center = true); cube([57,43,12], center = true); } //to clear space to fit against rotary unit //arm rotary holder translate([0,31,30]) rotate([90,0,0]) cylinder(d = 60, h = 30, center = true); //big body translate([0,55,30]) rotate([90,0,0]) cylinder(d1 = 80, d2 = 60, h = 30, center = true); //top through hole for cables. translate([0,20,75]) rotate([90,0,0]) cylinder(d = 18, h = 20, center = true); //through hole for jack. translate([40,37,110]) rotate([90,0,90]) cylinder(d = 10, h = 20, center = true); //counterbore for jack on back side translate([34,40,110]) rotate([90,0,75]) cylinder(d = 20, h = 20, center = true); //through hole for usb cable. //translate([44,70,123]) //rotate([90,0,90]) //cylinder(d = 8, h = 20, center = true); //hole for usb PLUG. translate([49,65,110]) rotate([90,0,90]) cube([11, 11, 11], center = true); //bolt holes for( i = [0:3]){ translate([0,67,90]) rotate([90,i*90+45,0]) translate([61,0,0]) cylinder(d = 3.7, h = 8, center = true); } } difference(){ union(){ //support for bolt holes for( i = [0:3]){ translate([0,65,90]) rotate([90,i*90+45,0]) translate([61,0,0]) cylinder(d = 10, h = 10, center = true); } //support for bolt holes 2 for( i = [0:3]){ translate([0,56,90]) rotate([90,i*90+45,0]) translate([61,0,0]) cylinder(d1 = 10, d2 = 4, h = 8, center = true); } } //bolt holes for( i = [0:3]){ translate([0,67,90]) rotate([90,i*90+45,0]) translate([61,0,0]) cylinder(d = 3.7, h = 8, center = true); } //big body translate([0,55,30]) rotate([90,0,0]) cylinder(d1 = 80, d2 = 60, h = 30, center = true); } //ALL FOR STRAIN RELIEF /* difference(){ union(){ //strain relief translate([46,67,110]) rotate([90,0,0]) cylinder(d = 10, h = 5, center = true); //strain relief translate([46,60.5,110]) rotate([90,0,0]) cylinder(d1 = 10, d2 = 5, h = 8, center = true); } //usb cable holder translate([48,68,110]) rotate([180,0,90]) cylinder(d = 9, h = 13, center = true); } */ } module test_rod_holder(){ difference(){ union(){ //arm side rod holder translate([0,-5,0]) rotate([90,0,0]) cylinder(d1 = 60, d2 = 35, h = 35, center = true); } //encoder through hole translate([0,-1,0]) rotate([90,0,0]) cylinder(d = encoder_shaft_dia + .12, h = 40, center = true); //chamfer bottom encoder hole translate([0,14,0]) rotate([90,0,0]) cylinder(d1 = encoder_shaft_dia + 8, d2 = encoder_shaft_dia - 2, h = 10, center = true); //carbon arrow shaft hole translate([0,-15,0]) rotate([90,0,0]) cylinder(d = rod_size, h = 35, center = true); //WIRE through hole translate([0,rod_distance-10,45]) cylinder(d = rod_size-5, h = 81, center = true); //FRONT WIRE through hole translate([0,rod_distance-23.5,-41]) cylinder(d = rod_size, h = 81, center = true); //side rod set screw hole 2 translate([0,0,0]) rotate([90,0,90]) cylinder(d = set_screw_dia, h = 70, center = true); //side rod set screw hole 2 translate([0,-10,0]) rotate([90,0,90]) cylinder(d = set_screw_dia, h = 70, center = true); //side rod set screw for encoder shaft translate([0,8,0]) rotate([90,0,90]) cylinder(d = set_screw_dia, h = 70, center = true); } } module small_base_connector_encoder(){ difference(){ union(){ //arm rotary //translate([0,0,0]) //rotate([90,0,0]) //cylinder(d = 40, h = 35, center = true); //arm rotary holder translate([0,31,0]) rotate([90,0,0]) cylinder(d = 60, h = 30, center = true); //big body translate([0,55,0]) rotate([90,0,0]) cylinder(d1 = 80, d2 = 60, h = 30, center = true); } //bolt clearance for( i = [0:2]){ translate([0,20,0]) rotate([90,i*120+30,0]) translate([enc_bolt_r,0,0]) cylinder(d = 4, h = 20, center = true); } //bolt counterbore for( i = [0:2]){ translate([0,17,0]) rotate([90,i*120+30,0]) translate([enc_bolt_r,0,0]) cylinder(d = cb_dia, h = cb_height, center = true); } //BOTTOM BOLT HOLES for( i = [0:2]){ translate([0,70,0]) rotate([90,i*120+30,0]) translate([33,0,0]) cylinder(d = 3.7, h = 20, center = true); } //clearance for encoder shaft translate([0,10,0]) rotate([0,90,90]) cylinder(d = 7.5, h = 60, center = true); //clearance for encoder small part translate([0,23,0]) rotate([0,90,90]) cylinder(d = 22, h = 11, center = true); //clearance for encoder body translate([0,37,0]) rotate([0,90,90]) cylinder(d = 45, h = 26, center = true); //clearance for encoder body translate([0,77,0]) rotate([0,90,90]) cylinder(d1 = 45, d2 = 75, h = 76, center = true); //cable out hull(){ translate([0,59,-55]) cylinder(d = 18, h = 40, center = true); translate([0,73,0]) cylinder(d = 18, h = 40, center = true); } translate([0,45,-50]) cube([62,62,40], center = true); } } //Omron Encoder module encoder(){ difference(){ union(){ //body color("BurlyWood", 1.0){ rotate([0,90,90]) cylinder(d = 40, h = 39, center = true); //top of encoder (20mm) translate([0,-22,0]) rotate([0,90,90]) cylinder(d = 20, h = 5, center = true); //cable support translate([0,7.5,25]) rotate([0,0,90]) cylinder(d = 10, h = 12, center = true); } //cable stub color("black", 1.0){ translate([0,7.5,37]) rotate([0,0,90]) cylinder(d = 8, h = 12, center = true); } //shaft color("silver", 1.0){ translate([0,-32,0]) rotate([0,90,90]) cylinder(d = 6, h = 15, center = true); } } //bolt holes for( i = [0:2]){ translate([0,-16,0]) rotate([90,i*120,0]) translate([enc_bolt_r,0,0]) cylinder(d = 3, h = 8, center = true); } } } module base_rotary_top(){ difference(){ union(){ //arm bottom rotary holder translate([0,0,23]) cylinder(d = 60, h = 12.7, center = true); //arm rotary base connector translate([0,20,54]) rotate([90,0,0]) cylinder(d = 65, h = 30, center = true); translate([0,27.5,21.65]) cube([24,15,10], center = true); } //through hole for rotary encoder shaft translate([0,0,12]) cylinder(d = encoder_shaft_dia, h = 40, center = true); //set screw through hole - ridiculously long for( i = [0:2]){ translate([0,0,22]) rotate([0,90,i*120]) translate([0,0,25]) cylinder(d = set_screw_dia, h = 50, center = true); } //cut off top of holder //translate([0,22,90]) //cube([60,40,30], center = true); //cut off top and side of holder translate([0,-8,64.5]) cube([90,40,70], center = true); //clearance for arm connector translate([0,-8,54]) rotate([0,90,90]) cylinder(d = 45, h = 40, center = true); //clearance for encoder translate([0,42,54]) rotate([0,90,90]) cylinder(d = 47, h = 40, center = true); //clearance for encoder small part translate([0,20,54]) rotate([0,90,90]) cylinder(d = 22, h = 40, center = true); //bolt clearance for( i = [0:2]){ translate([0,19,54]) rotate([90,i*120+30,0]) translate([enc_bolt_r,0,0]) cylinder(d = 4, h = 20, center = true); } //bolt counterbore for( i = [0:2]){ translate([0,14,54]) rotate([90,i*120+30,0]) translate([enc_bolt_r,0,0]) cylinder(d = cb_dia, h = cb_height, center = true); } } } module connector_encoder(){ difference(){ union(){ //arm rotary //translate([0,0,0]) //rotate([90,0,0]) //cylinder(d = 40, h = 35, center = true); //arm rotary holder translate([0,26,0]) rotate([90,0,0]) cylinder(d = 55, h = 20, center = true); //translate([0,15,-48]) //cube([38,62,50], center = true); translate([0,17,-43]) cube([38,38,30], center = true); translate([0,0,-43]) cylinder( d = 38.5, h = 30, center = true); //Supports for body translate([11.6,26,-24]) rotate([0,105,0]) cube([42,20,20], center = true); mirror([1,0,0]){ translate([11.6,26,-24]) rotate([0,105,0]) cube([42,20,20], center = true); } } //bolt clearance for( i = [0:2]){ translate([0,20,0]) rotate([90,i*120+30,0]) translate([enc_bolt_r,0,0]) cylinder(d = 4, h = 20, center = true); } //bolt counterbore for( i = [0:2]){ translate([0,17,0]) rotate([90,i*120+30,0]) translate([enc_bolt_r,0,0]) cylinder(d = cb_dia, h = cb_height, center = true); } //clearance for encoder shaft translate([0,10,0]) rotate([0,90,90]) cylinder(d = 7.5, h = 60, center = true); //clearance for encoder small part translate([0,23,0]) rotate([0,90,90]) cylinder(d = 22, h = 11, center = true); //clearance for encoder body translate([0,37,0]) rotate([0,90,90]) cylinder(d = 43, h = 26, center = true); //ROD HOLDER //ROD through hole translate([0,rod_distance,-55]) cylinder(d = rod_size, h = 68, center = true); //chamfer for rod insertion translate([0,rod_distance,-71]) cylinder(d1 = rod_size + 5, d2 = rod_size - 5, h = 10, center = true); //front wire in/out hole translate([0,-12,-27]) rotate([0,90,90]) cylinder(d = 22, h = 20, center = true); //wire through hole (to get from encoder to rod) translate([0,22,-40]) rotate([0,90,90]) cylinder(d = 17, h = 32, center = true); //front set screw //translate([0,10,-45]) //rotate([0,90,90]) //cylinder(d = set_screw_dia, h = 80, center = true); //front set screw 2 //translate([0,10,-60]) //rotate([0,90,90]) //cylinder(d = set_screw_dia, h = 80, center = true); //cross set screw 1 translate([0,rod_distance,-50]) rotate([90,0,90]) cylinder(d = set_screw_dia, h = 60, center = true); //cross set screw 2 translate([0,rod_distance,-58]) rotate([90,0,90]) cylinder(d = set_screw_dia, h = 60, center = true); //cross set screw 3 translate([0,rod_distance,-40]) rotate([90,0,90]) cylinder(d = set_screw_dia, h = 60, center = true); //side cutoffs for rod clearance translate([15,-1,-15]) rotate([0,45,0]) cube([34,34,20], center = true); mirror([1,0,0]){ translate([15,-1,-15]) rotate([0,45,0]) cube([34,34,20], center = true); } //cutout for side body supports (defeats the purpose the supports, kind of. But whatever.) translate([67,10,-35]) rotate([0,90,90]) cylinder(d = 100, h = 80, center = true, $fn = 128); translate([-67,10,-35]) rotate([0,90,90]) cylinder(d = 100, h = 80, center = true, $fn = 128); //cutout for top for wire in/out translate([0,-11,-20]) rotate([50,0,0]) cube([38,54,20], center = true); //slice bottom at 45 degree angle translate([0,30,-70]) rotate([50,0,0]) cube([40,80,30], center = true); } }