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