Rendering these values. This takes a few seconds.
Download STL
Read this model as text

A complete car wheel: the parametric tyre wrapped around the car rim, with metric hex bolts seated in the lug holes. A remix of mick/parametric-tyre, mick/parametric-rim and remixcad/metric-bolt in one assembly.

The image shows the solid OpenSCAD renders at outer_diameter 60 · rim_diameter 34 · width 22 · tread_blocks 24 · tread_depth 1.8 · tread_angle 18 · tread_gap 0.38 · shoulder 0.55 · face_thickness 4 · bore_diameter 8 · lug_count 5 · lug_circle 18 · vent_count 5 · vent_diameter 5 · bolt_size 4 · bolt_length 12 · show_bolts true · wall 2.4 · flange 1.2 · smoothness 96.

MIT

Parametric car wheel

mick/parametric-wheel@1.0.0

Remix this
Report

For a legal or policy problem: a license violation, personal data, somebody else’s work republished as their own. A model that prints badly is a comment, not a report.

Sign in to report

0reused0 remixes · 0 imports1downloads1.0.1latest

Parameters

from source
20200, steps of 1
10160, steps of 1
480, steps of 1
080, steps of 1
06, steps of 0.1
060, steps of 1
0.10.7, steps of 0.01
01, steps of 0.05

Showing the render for these values.

Description

What is this

A complete car wheel: the parametric tyre wrapped around the car rim, with metric hex bolts seated in the lug holes. A remix of mick/parametric-tyre, mick/parametric-rim and remixcad/metric-bolt in one assembly.

What you use it for

Wheels for RC cars, robot chassis and model vehicles where you want the whole thing in one print, or as a preview assembly before printing the tyre in flexible filament and the rim in rigid separately. Turn show_bolts off to print the wheel and drop real fasteners in later.

Design notes

The tyre and rim share rim_diameter and width, so one pair of numbers keeps them mated at any size. The lug holes are cut to the bolt size plus clearance, and the bolts are placed head out, half a millimetre proud of the face, the way a wheel is actually bolted up.

The tyre carcass and the rim come from their parents unchanged in shape; what this remix adds is the shared sizing, the bolt seating and the assembly.

Parameters

outer_diameter, rim_diameter and width size the wheel. The tread group shapes the tyre, the face group shapes the rim. bolt_size and bolt_length pick the lug bolts and show_bolts removes them. smoothness trades facets for render time.

Use with your agent
{
  "mcpServers": {
    "remixcad": {
      "type": "http",
      "url": "https://remix-cad.vercel.app/api/mcp"
    }
  }
}
get_model("mick/parametric-wheel@1.0.0")

Returns the manifest, the source, the import closure and the license obligations. Full MCP setup.

Parameter table

Parsed from the Customizer annotations in main.scad
Parameters of Parametric car wheel, with the ranges the source declares
NameDefaultRangeUnitDescription
outer_diameter6020 to 200 step 1
rim_diameter3410 to 160 step 1
width224 to 80 step 1
tread_blocks240 to 80 step 1
tread_depth1.80 to 6 step 0.1
tread_angle180 to 60 step 1
tread_gap0.380.1 to 0.7 step 0.01
shoulder0.550 to 1 step 0.05
face_thickness42 to 10 step 0.5
bore_diameter82 to 40 step 1
lug_count50 to 10 step 1
lug_circle186 to 120 step 1
vent_count50 to 16 step 1
vent_diameter50 to 30 step 0.5
bolt_size43 to 8 step 1
bolt_length126 to 30 step 1
show_boltstrue
wall2.41 to 6 step 0.1
flange1.20 to 4 step 0.1
smoothness9624 to 192 step 8

Lineage

1 model depends on this one

Only what this model came from and what came from it.

Remix, the code changed Import, used unchanged and pinned The version you are on Withdrawn, still recorded

License

Whoever downloads this takes these obligations along
  • mick/parametric-wheel@1.0.0 is MIT
  • remixcad/threads@1.0.0 is CC0
  • mick/parametric-tyre@1.0.0 is MIT
  • mick/parametric-rim@1.0.0 is MIT
  • remixcad/metric-bolt@1.0.0 is CC0

Source

main.scad is the entrypoint
main.scad
// A complete car wheel: tyre around rim, with hex bolts in the lug holes.
// Remix of mick/parametric-tyre, mick/parametric-rim and remixcad/metric-bolt.
// Uses threads.scad by Ryan A. Colyer, released with CC0 into the public domain.
// Published on RemixCAD as remixcad/threads.
use <remixcad/threads/threads.scad>

/* [Size] */
// Diameter measured over the tread, the outside of the wheel.
outer_diameter = 60; // [20:1:200]
// Diameter where tyre meets rim.
rim_diameter = 34; // [10:1:160]
// Width across the wheel, bead to bead.
width = 22; // [4:1:80]

/* [Tread] */
// Blocks around the tyre. Zero leaves a slick.
tread_blocks = 24; // [0:1:80]
// How deep each groove is cut into the crown.
tread_depth = 1.8; // [0:0.1:6]
// How far the blocks lean across the tread, in degrees.
tread_angle = 18; // [0:1:60]
// Groove width as a share of the space between blocks.
tread_gap = 0.38; // [0.1:0.01:0.7]
// How round the tyre shoulders are.
shoulder = 0.55; // [0:0.05:1]

/* [Face] */
// Thickness of the closed face disc.
face_thickness = 4; // [2:0.5:10]
// Centre bore for the axle.
bore_diameter = 8; // [2:1:40]
// Lug bolts around the bore.
lug_count = 5; // [0:1:10]
// Bolt circle diameter the lugs sit on.
lug_circle = 18; // [6:1:120]
// Round vents in the face. Zero closes the face.
vent_count = 5; // [0:1:16]
// Diameter of each vent.
vent_diameter = 5; // [0:0.5:30]

/* [Bolts] */
// Nominal metric size of the lug bolts, so 4 is an M4.
bolt_size = 4; // [3:1:8]
// Bolt length under the head.
bolt_length = 12; // [6:1:30]
// Show the bolts, or leave the holes open for real fasteners.
show_bolts = true;

/* [Shape] */
// Wall thickness of the rim barrel.
wall = 2.4; // [1:0.1:6]
// How far the rim flanges stand proud of the barrel.
flange = 1.2; // [0:0.1:4]
// Facets around the wheel. More is smoother and slower.
smoothness = 96; // [24:8:192]

/* [Hidden] */
outer_radius = outer_diameter / 2;
rim_radius = rim_diameter / 2;
half_width = width / 2;
shoulder_radius = shoulder * min(half_width, outer_radius - rim_radius) * 0.9;
pitch = tread_blocks > 0 ? 360 / tread_blocks : 360;
groove_width = 2 * PI * outer_radius * (pitch / 360) * tread_gap;
flange_height = 1.4;
// The lug hole clears the bolt, and both hole circles stay inside the barrel wall.
lug_hole = bolt_size + 0.6;
lug_radius = min(lug_circle / 2, rim_radius - wall - lug_hole / 2 - 1);
vent_radius_pos = min(rim_radius - wall - vent_diameter / 2 - 0.5,
                      lug_radius + lug_hole / 2 + vent_diameter / 2 + 0.8);
bolt_head_height = 0.7 * bolt_size;

// ---- Tyre, from mick/parametric-tyre ----

module section() {
  hull() {
    translate([rim_radius, -half_width]) square([0.01, width]);
    translate([outer_radius - shoulder_radius, -half_width + shoulder_radius])
      circle(r = shoulder_radius, $fn = 32);
    translate([outer_radius - shoulder_radius, half_width - shoulder_radius])
      circle(r = shoulder_radius, $fn = 32);
  }
}

module carcass() {
  rotate_extrude($fn = smoothness) section();
}

module grooves() {
  for (index = [0 : max(tread_blocks - 1, 0)]) {
    rotate([0, 0, index * pitch])
      translate([outer_radius, 0, 0])
        rotate([tread_angle, 0, 0])
          cube([tread_depth * 2, groove_width, width * 3], center = true);
  }
}

module tyre() {
  if (tread_blocks > 0 && tread_depth > 0) {
    difference() {
      carcass();
      grooves();
    }
  } else {
    carcass();
  }
}

// ---- Rim, from mick/parametric-rim ----

module barrel() {
  difference() {
    cylinder(h = width, r = rim_radius, center = true, $fn = smoothness);
    cylinder(h = width + 1, r = rim_radius - wall, center = true, $fn = smoothness);
  }
}

module flanges() {
  for (z = [-half_width, half_width - flange_height])
    translate([0, 0, z])
      difference() {
        cylinder(h = flange_height, r = rim_radius + flange, $fn = smoothness);
        translate([0, 0, -0.5])
          cylinder(h = flange_height + 1, r = rim_radius - wall, $fn = smoothness);
      }
}

module face() {
  translate([0, 0, half_width - face_thickness])
    difference() {
      cylinder(h = face_thickness, r = rim_radius - wall / 2, $fn = smoothness);
      translate([0, 0, -0.5])
        cylinder(h = face_thickness + 1, d = bore_diameter, $fn = smoothness);
      if (lug_count > 0)
        for (i = [0 : lug_count - 1])
          rotate([0, 0, i * 360 / lug_count])
            translate([lug_radius, 0, -0.5])
              cylinder(h = face_thickness + 1, d = lug_hole, $fn = 32);
      if (vent_count > 0 && vent_diameter > 0)
        for (i = [0 : vent_count - 1])
          rotate([0, 0, (i + 0.5) * 360 / vent_count])
            translate([vent_radius_pos, 0, -0.5])
              cylinder(h = face_thickness + 1, d = vent_diameter, $fn = 32);
    }
}

module rim() {
  union() {
    barrel();
    flanges();
    face();
  }
}

// ---- Bolts, from remixcad/metric-bolt ----

// Head out, seated just proud of the face, the way a wheel is bolted up.
module bolts() {
  if (lug_count > 0)
    for (i = [0 : lug_count - 1])
      rotate([0, 0, i * 360 / lug_count])
        translate([lug_radius, 0, half_width + bolt_head_height + 0.5])
          rotate([180, 0, 0])
            MetricBolt(bolt_size, bolt_length, 0.4);
}

module wheel() {
  tyre();
  rim();
  if (show_bolts) bolts();
}

wheel();

Comments

Context, not a score. Comments never move a model up or down the results.

No comments yet

Printed it? A note about your material and the clearance you landed on saves the next person a failed print.

Sign in to comment