Skip to content

Instantly share code, notes, and snippets.

@1nVitr0
Last active February 28, 2018 19:50
Show Gist options
  • Save 1nVitr0/137ab708187d408cc484d5e25d0557e3 to your computer and use it in GitHub Desktop.
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
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