Last active
February 28, 2018 19:50
-
-
Save 1nVitr0/137ab708187d408cc484d5e25d0557e3 to your computer and use it in GitHub Desktop.
Customizable SCAD Model of an Omniwheel with spaces to attach ball bearings or similar as secondary wheels
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
innerWheelSize=60/2; | |
wheelThickness=3; | |
spokeHeight=7; | |
spokeWidth=2; | |
boltInner=3/2; | |
boltDistance=3; | |
boltSlopeLength=5; | |
boltSides=6; | |
holeInner=15; | |
holeOuter=18; | |
holeCurveRadius=4; | |
numberWheels=10; | |
wheelsHolderRadius=8/2; | |
wheelsThickness = 5; | |
wheelsRadius=12/2; | |
wheelsBolt=5/2; | |
wheelsGap=1; | |
wheelsGapRadius=7/2; | |
wheelsCurveRadius=1.5; | |
servo=true; | |
servoSideSlope=2; | |
servoDepth=2; | |
servoArms=4; | |
servoScrew=1/2; | |
servoCenterRadius=4/2; | |
servoScrewPlateRadius=2/2; | |
servoScrewPlateThickness=1; | |
servoArmLength=6; | |
servoArmWidthStart=2; | |
servoArmWidthEnd=1; | |
servoArmHoleDistance=5; | |
servoArmHole=0.5/2; | |
servoArmHoleDepth=5; | |
$fn = 50; | |
cubeSize = sqrt(pow(wheelsThickness+wheelsGap*2+spokeWidth*2, 2)/2); | |
circumference = 2*PI*innerWheelSize; | |
innerRadius = (2*PI*holeInner-(spokeWidth*numberWheels))/numberWheels/2; | |
outerRadius = (2*PI*holeOuter-(spokeWidth*numberWheels))/numberWheels/2; | |
innerShift = (1-cos(360*(innerRadius/2/(2*PI*holeInner))))*(2*PI*holeInner); | |
outerShift = (1-cos(360*(outerRadius/2/(2*PI*holeOuter))))*(2*PI*holeOuter); | |
difference() { | |
union() { | |
color("grey") difference() { | |
translate([0,0,-(wheelThickness/2)]) cylinder(r=innerWheelSize, h=wheelThickness); | |
union() { | |
for(a = [0:(360/numberWheels):359]) { | |
rotate([0,0,a+(360/numberWheels/2)]) translate([holeInner-innerShift,0,-(wheelThickness/2)-0.5]) scale([holeCurveRadius/innerRadius,1,1]) cylinder(r=innerRadius, h=wheelsThickness+1); | |
rotate([0,0,a+(360/numberWheels/2)]) translate([holeOuter-outerShift,0,-(wheelThickness/2)-0.5]) scale([holeCurveRadius/outerRadius,1,1]) cylinder(r=outerRadius, h=wheelsThickness+1); | |
} | |
translate([0,0,-(wheelThickness/2)-0.5]) difference() { | |
cylinder(r=holeOuter, h=wheelThickness+1); | |
translate([0,0,-0.5]) cylinder(r=holeInner, h=wheelThickness+2); | |
} | |
} | |
} | |
for (a = [0:(360/numberWheels):359]) { | |
rotate(a) { | |
color("green") translate([boltInner+boltDistance,-(spokeWidth/2),-(spokeHeight/2)]) cube([innerWheelSize-(boltInner+boltDistance),spokeWidth,spokeHeight]); | |
translate([innerWheelSize-wheelsRadius,0,0]) { | |
color("green") rotate([0,0,45]) cube([cubeSize, cubeSize, spokeHeight], center=true); | |
color("green") translate([wheelsRadius/2,(((wheelsThickness+wheelsGap*2+spokeWidth*2))/2)-(spokeWidth/2),0]) cube([wheelsRadius,spokeWidth,spokeHeight], center=true); | |
color("green") translate([wheelsRadius/2+wheelsRadius/2,(((wheelsThickness+wheelsGap*2+spokeWidth*2))/2)-(spokeWidth/2),0]) rotate([90,0,0]) cylinder(r=wheelsHolderRadius, h=spokeWidth, center=true); | |
color("red") translate([wheelsRadius/2+wheelsRadius/2,(((wheelsThickness+wheelsGap*2+spokeWidth*2))/2)-(spokeWidth/2),0]) rotate([90,0,0]) translate([0,0,spokeWidth/2+wheelsGap/2]) cylinder(r=wheelsGapRadius, h=wheelsGap, center=true); | |
color("green") translate([wheelsRadius/2,-(((wheelsThickness+wheelsGap*2+spokeWidth*2))/2)+(spokeWidth/2),0]) cube([wheelsRadius,spokeWidth,spokeHeight], center=true); | |
color("green") translate([wheelsRadius/2+wheelsRadius/2,-(((wheelsThickness+wheelsGap*2+spokeWidth*2))/2)+(spokeWidth/2),0]) rotate([90,0,0]) cylinder(r=wheelsHolderRadius, h=spokeWidth, center=true); | |
color("red") translate([wheelsRadius/2+wheelsRadius/2,-(((wheelsThickness+wheelsGap*2+spokeWidth*2))/2)+(spokeWidth/2),0]) rotate([90,0,0]) translate([0,0,-spokeWidth/2-wheelsGap/2]) cylinder(r=wheelsGapRadius, h=wheelsGap, center=true); | |
} | |
} | |
} | |
translate([0,0,-spokeHeight/2]) color("red") cylinder(r=boltInner+boltDistance, r2=boltInner+boltDistance+boltSlopeLength, h=spokeHeight/2-wheelThickness/2); | |
if (servo) { | |
translate([0,0,wheelThickness/2]) color("red") cylinder(r=boltInner+boltDistance+boltSlopeLength, r2=(boltInner+boltDistance+boltSlopeLength)-servoSideSlope, h=spokeHeight/2-wheelThickness/2); | |
} else { | |
translate([0,0,wheelThickness/2]) color("red") cylinder(r=boltInner+boltDistance+boltSlopeLength, r2=boltInner+boltDistance, h=spokeHeight/2-wheelThickness/2); | |
} | |
} | |
union() { | |
if (servo) color("blue"){ | |
translate([0,0,-servoScrewPlateThickness-servoDepth]) color("red") cylinder(r=servoScrewPlateRadius, h=spokeHeight, center=true); | |
color("red") cylinder(r=servoScrew, h=spokeHeight+1, center=true); | |
translate([0,0,spokeHeight/2-servoDepth]) color("red") cylinder(r=servoCenterRadius, h=servoDepth+1); | |
for (a = [0:(360/servoArms):359]) { | |
rotate(a) { | |
translate([servoArmLength/2,0,spokeHeight/2-servoDepth+(servoDepth+1)/2]) rotate([0,90,0]) linear_extrude(height=servoArmLength-servoArmWidthEnd, center=true, scale=[1,servoArmWidthEnd/servoArmWidthStart]) square(size=[servoDepth+1,servoArmWidthStart], center=true); | |
translate([servoArmLength-servoArmWidthEnd/2,0,spokeHeight/2-servoDepth]) cylinder(r=servoArmWidthEnd/2, h=servoDepth+1); | |
color("red") translate([servoArmHoleDistance,0,spokeHeight/2-servoArmHoleDepth]) cylinder(r=servoArmHole, h=servoArmHoleDepth+1); | |
} | |
} | |
} else { | |
color("red") cylinder(r=servoScrew, h=spokeHeight+1, center=true, $fn=boltSides); | |
} | |
for (a = [0:(360/numberWheels):359]) { | |
rotate(a) translate([innerWheelSize-wheelsRadius,0,0]) { | |
difference() { | |
color("green") translate([(wheelsRadius+spokeHeight/2)/2,0,0]) cube([wheelsRadius+spokeHeight/2, wheelsThickness+wheelsGap*2, spokeHeight+1], center=true); | |
union() color("red") { | |
translate([wheelsRadius/2+wheelsRadius/2,(((wheelsThickness+wheelsGap*2+spokeWidth*2))/2)-(spokeWidth/2),0]) rotate([90,0,0]) translate([0,0,spokeWidth/2+wheelsGap/2]) cylinder(r=wheelsGapRadius, h=wheelsGap, center=true); | |
translate([wheelsRadius/2+wheelsRadius/2,-(((wheelsThickness+wheelsGap*2+spokeWidth*2))/2)+(spokeWidth/2),0]) rotate([90,0,0]) translate([0,0,-spokeWidth/2-wheelsGap/2]) cylinder(r=wheelsGapRadius, h=wheelsGap, center=true); | |
} | |
} | |
color("red") translate([wheelsRadius/2+wheelsRadius/2,0,0]) rotate([90,0,0]) cylinder(r=wheelsBolt, h=circumference/numberWheels, center=true); | |
color("green") scale([wheelsCurveRadius/((wheelsThickness+wheelsGap*2)/2),1,1]) cylinder(r=(wheelsThickness+wheelsGap*2)/2, h=spokeHeight+1, center=true); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment