steve/deep-groove-ball-bearing
Deep groove ball bearing, metric: 6xx, MR, 60, 62, 63, 68 and 69 series, open, ZZ or 2RS, optional flange.
Cylindrical roller bearing, NU2 and NU3 series, bore 10 to 50 mm,.
| 1 | """Cylindrical roller bearing, NU2 and NU3 series, bore up to 50 mm. Bore d, outside diameter D, width B, chamfer r and the raceway diameters Fw (inner) and Ew (outer) are sourced and make the fit. detail = "full": a plain inner ring, an outer ring with a rib at each end, and the rollers between them, whose diameter follows from (Ew - Fw) / 2. Rib height, roller length and roller count are proportions for looks, not for design, and never change the fit dimensions; the cage is not drawn. detail = "simple": one solid ring. Axis along Z, centred on the origin.""" |
| 2 | import math |
| 3 | |
| 4 | from steve import Model |
| 5 | |
| 6 | designation = "NU204" # Bearing number |
| 7 | detail = "full" # full: rings and rolling elements; simple: one solid |
| 8 | |
| 9 | # number: (d, D, B, r, Fw, Ew). NTN Ball and Roller Bearings CAT. No. 2203-3/E (2024), pp. B-71 to B-72 (PDF pages 147-148), https://www.ntnglobal.com/en/products/catalog/pdf/2203E.pdf |
| 10 | BEARINGS = {"NU204": (20, 47, 14, 1, 26.5, 41.5), "NU205": (25, 52, 15, 1, 31.5, 46.5), "NU206": (30, 62, 16, 1, 37.5, 55.5), "NU207": (35, 72, 17, 1.1, 44, 64), "NU208": (40, 80, 18, 1.1, 49.5, 71.5), "NU209": (45, 85, 19, 1.1, 54.5, 76.5), "NU210": (50, 90, 20, 1.1, 59.5, 81.5), "NU304": (20, 52, 15, 1.1, 27.5, 45.5), "NU305": (25, 62, 17, 1.1, 34, 54), "NU306": (30, 72, 19, 1.1, 40.5, 62.5), "NU307": (35, 80, 21, 1.5, 46.2, 70.2), "NU308": (40, 90, 23, 1.5, 52, 80), "NU309": (45, 100, 25, 1.5, 58.5, 88.5), "NU310": (50, 110, 27, 2, 65, 97)} |
| 11 | |
| 12 | # Requirements: ISO 492 normal tolerance class, deviations in mm (upper deviation 0), by size range (over, up to and including). NTN CAT. No. 2203-3/E, Table 6.4, |
| 13 | # pp. A-58 to A-59, https://www.ntnglobal.com/en/products/catalog/pdf/2203E.pdf (checked 2026-11-03). |
| 14 | BORE_DEVIATION = ((2.5, "-0.008"), (10, "-0.008"), (18, "-0.008"), (30, "-0.010"), (50, "-0.012"), (80, "-0.015")) |
| 15 | OD_DEVIATION = ((6, "-0.008"), (18, "-0.008"), (30, "-0.009"), (50, "-0.011"), (80, "-0.013"), (120, "-0.015")) |
| 16 | WIDTH_DEVIATION = ((2.5, "-0.040"), (10, "-0.120"), (18, "-0.120"), (30, "-0.120"), (50, "-0.120"), (80, "-0.150")) |
| 17 | |
| 18 | |
| 19 | def lower_deviation(rows, size): |
| 20 | return next(value for upto, value in rows if size <= upto) |
| 21 | |
| 22 | d, D, W, r, Fw, Ew = BEARINGS[designation] |
| 23 | model = Model() |
| 24 | if detail == "simple": |
| 25 | outline = [(d / 2 + r, -W / 2), (D / 2 - r, -W / 2), (D / 2, -W / 2 + r), (D / 2, W / 2 - r), (D / 2 - r, W / 2), (d / 2 + r, W / 2), |
| 26 | (d / 2, W / 2 - r), (d / 2, -W / 2 + r)] |
| 27 | with model.sketch("section", on="XZ", name="Section") as sk: |
| 28 | sk.polyline("ring", outline, closed=True) |
| 29 | model.revolve("inner", "section", axis="Z", name="Bearing") |
| 30 | bore_face, od_face, low_face, high_face = "inner.side(ring.side6)", "inner.side(ring.side2)", "inner.side(ring.side0)", "inner.side(ring.side4)" |
| 31 | else: |
| 32 | roller = (Ew - Fw) / 2 |
| 33 | pitch_r = (Ew + Fw) / 4 |
| 34 | rib_width = 0.14 * W |
| 35 | rib_r = Ew / 2 - 0.3 * roller |
| 36 | roller_length = W - 2 * rib_width - 0.1 * W |
| 37 | clear = 0.01 * roller |
| 38 | inner = [(d / 2 + r, -W / 2), (Fw / 2 - r / 2, -W / 2), (Fw / 2, -W / 2 + r / 2), (Fw / 2, W / 2 - r / 2), (Fw / 2 - r / 2, W / 2), (d / 2 + r, W / 2), (d / 2, W / 2 - r), (d / 2, -W / 2 + r)] |
| 39 | outer = [(rib_r, -W / 2), (D / 2 - r, -W / 2), (D / 2, -W / 2 + r), (D / 2, W / 2 - r), (D / 2 - r, W / 2), (rib_r, W / 2), (rib_r, W / 2 - rib_width), (Ew / 2, W / 2 - rib_width), (Ew / 2, -W / 2 + rib_width), (rib_r, -W / 2 + rib_width)] |
| 40 | with model.sketch("inner_section", on="XZ", name="Inner ring section") as sk: |
| 41 | sk.polyline("inner_ring", inner, closed=True) |
| 42 | model.revolve("inner", "inner_section", axis="Z", op="new", body="inner_body", name="Inner ring") |
| 43 | with model.sketch("outer_section", on="XZ", name="Outer ring section") as sk: |
| 44 | sk.polyline("outer_ring", outer, closed=True) |
| 45 | model.revolve("outer", "outer_section", axis="Z", op="new", body="outer_body", name="Outer ring") |
| 46 | with model.sketch("roller_section", on="XZ", name="Roller section") as sk: |
| 47 | sk.polyline("roller_half", [(pitch_r, -roller_length / 2), (pitch_r + roller / 2 - clear, -roller_length / 2), (pitch_r + roller / 2 - clear, roller_length / 2), (pitch_r, roller_length / 2)], closed=True) |
| 48 | model.revolve("roller", "roller_section", axis=((pitch_r, 0, 0), (0, 0, 1)), op="new", body="roller_body", name="Roller") |
| 49 | rollers = max(6, int(2 * math.pi * pitch_r / (1.25 * roller))) |
| 50 | model.circular_pattern("rollers", axis="Z", count=rollers, bodies=["roller_body"], name="Rollers") |
| 51 | bore_face, od_face, low_face, high_face = "inner.side(inner_ring.side7)", "outer.side(outer_ring.side2)", "inner.side(inner_ring.side0)", "inner.side(inner_ring.side5)" |
| 52 | model.material("steel-generic") |
| 53 | model.appearance(color="#b9bdc2") |
| 54 | model.standard("ISO") |
| 55 | model.size("bore", bore_face, tol=("0", lower_deviation(BORE_DEVIATION, d)), modifiers=["SD", "ACS"]) |
| 56 | model.size("outside_diameter", od_face, tol=("0", lower_deviation(OD_DEVIATION, D)), modifiers=["SD", "ACS"]) |
| 57 | model.size("width", [low_face, high_face], tol=("0", lower_deviation(WIDTH_DEVIATION, d))) |
| 58 | model.note("tolerance_class", "ISO 492 normal tolerance class") |
| 59 | result = model.result() |
| 60 |
| 1 | name = "steve/cylindrical-roller-bearing" |
| 2 | version = "1.1.0" |
| 3 | runtime = "steve" |
| 4 | license = "MIT" |
| 5 | summary = "Cylindrical roller bearing, NU2 and NU3 series, bore 10 to 50 mm,." |
| 6 | description = """Cylindrical roller bearing, NU2 and NU3 series, bore up to 50 mm. Bore d, outside diameter D, width B, chamfer r and the raceway diameters Fw (inner) and Ew (outer) are sourced and make the fit. detail = \"full\": a plain inner ring, an outer ring with a rib at each end, and the rollers between them, whose diameter follows from (Ew - Fw) / 2. Rib height, roller length and roller count are proportions for looks, not for design, and never change the fit dimensions; the cage is not drawn. detail = \"simple\": one solid ring. Axis along Z, centred on the origin. Dimensions from a maker's public catalogue (see the README); not affiliated with any maker.""" |
| 7 | tags = ["bearing", "roller-bearing", "cylindrical-roller", "iso-15", "metric"] |
| 8 | changes = "Looks like a bearing: rings and rolling elements. detail = simple keeps one solid ring." |
| 9 | |
| 10 | [parameters.designation] |
| 11 | type = "choice" |
| 12 | default = "NU204" |
| 13 | choices = ["NU204", "NU205", "NU206", "NU207", "NU208", "NU209", "NU210", "NU304", "NU305", "NU306", "NU307", "NU308", "NU309", "NU310"] |
| 14 | label = "Bearing number" |
| 15 | |
| 16 | [parameters.detail] |
| 17 | type = "choice" |
| 18 | default = "full" |
| 19 | choices = ["full", "simple"] |
| 20 | label = "Detail" |
| 21 | description = "full: rings and rolling elements. simple: one solid ring with the same boundary dimensions, for big assemblies." |
| 22 | |
| 23 | [[presets]] |
| 24 | id = "NU204" |
| 25 | title = "NU204 (20 × 47 × 14)" |
| 26 | params = { designation = "NU204" } |
| 27 | aliases = ["NU204 bearing", "cylindrical roller bearing NU204", "20x47x14 roller-bearing"] |
| 28 | standard = "ISO 15" |
| 29 | |
| 30 | [[presets]] |
| 31 | id = "NU205" |
| 32 | title = "NU205 (25 × 52 × 15)" |
| 33 | params = { designation = "NU205" } |
| 34 | aliases = ["NU205 bearing", "cylindrical roller bearing NU205", "25x52x15 roller-bearing"] |
| 35 | standard = "ISO 15" |
| 36 | |
| 37 | [[presets]] |
| 38 | id = "NU206" |
| 39 | title = "NU206 (30 × 62 × 16)" |
| 40 | params = { designation = "NU206" } |
| 41 | aliases = ["NU206 bearing", "cylindrical roller bearing NU206", "30x62x16 roller-bearing"] |
| 42 | standard = "ISO 15" |
| 43 | |
| 44 | [[presets]] |
| 45 | id = "NU207" |
| 46 | title = "NU207 (35 × 72 × 17)" |
| 47 | params = { designation = "NU207" } |
| 48 | aliases = ["NU207 bearing", "cylindrical roller bearing NU207", "35x72x17 roller-bearing"] |
| 49 | standard = "ISO 15" |
| 50 | |
| 51 | [[presets]] |
| 52 | id = "NU208" |
| 53 | title = "NU208 (40 × 80 × 18)" |
| 54 | params = { designation = "NU208" } |
| 55 | aliases = ["NU208 bearing", "cylindrical roller bearing NU208", "40x80x18 roller-bearing"] |
| 56 | standard = "ISO 15" |
| 57 | |
| 58 | [[presets]] |
| 59 | id = "NU209" |
| 60 | title = "NU209 (45 × 85 × 19)" |
| 61 | params = { designation = "NU209" } |
| 62 | aliases = ["NU209 bearing", "cylindrical roller bearing NU209", "45x85x19 roller-bearing"] |
| 63 | standard = "ISO 15" |
| 64 | |
| 65 | [[presets]] |
| 66 | id = "NU210" |
| 67 | title = "NU210 (50 × 90 × 20)" |
| 68 | params = { designation = "NU210" } |
| 69 | aliases = ["NU210 bearing", "cylindrical roller bearing NU210", "50x90x20 roller-bearing"] |
| 70 | standard = "ISO 15" |
| 71 | |
| 72 | [[presets]] |
| 73 | id = "NU304" |
| 74 | title = "NU304 (20 × 52 × 15)" |
| 75 | params = { designation = "NU304" } |
| 76 | aliases = ["NU304 bearing", "cylindrical roller bearing NU304", "20x52x15 roller-bearing"] |
| 77 | standard = "ISO 15" |
| 78 | |
| 79 | [[presets]] |
| 80 | id = "NU305" |
| 81 | title = "NU305 (25 × 62 × 17)" |
| 82 | params = { designation = "NU305" } |
| 83 | aliases = ["NU305 bearing", "cylindrical roller bearing NU305", "25x62x17 roller-bearing"] |
| 84 | standard = "ISO 15" |
| 85 | |
| 86 | [[presets]] |
| 87 | id = "NU306" |
| 88 | title = "NU306 (30 × 72 × 19)" |
| 89 | params = { designation = "NU306" } |
| 90 | aliases = ["NU306 bearing", "cylindrical roller bearing NU306", "30x72x19 roller-bearing"] |
| 91 | standard = "ISO 15" |
| 92 | |
| 93 | [[presets]] |
| 94 | id = "NU307" |
| 95 | title = "NU307 (35 × 80 × 21)" |
| 96 | params = { designation = "NU307" } |
| 97 | aliases = ["NU307 bearing", "cylindrical roller bearing NU307", "35x80x21 roller-bearing"] |
| 98 | standard = "ISO 15" |
| 99 | |
| 100 | [[presets]] |
| 101 | id = "NU308" |
| 102 | title = "NU308 (40 × 90 × 23)" |
| 103 | params = { designation = "NU308" } |
| 104 | aliases = ["NU308 bearing", "cylindrical roller bearing NU308", "40x90x23 roller-bearing"] |
| 105 | standard = "ISO 15" |
| 106 | |
| 107 | [[presets]] |
| 108 | id = "NU309" |
| 109 | title = "NU309 (45 × 100 × 25)" |
| 110 | params = { designation = "NU309" } |
| 111 | aliases = ["NU309 bearing", "cylindrical roller bearing NU309", "45x100x25 roller-bearing"] |
| 112 | standard = "ISO 15" |
| 113 | |
| 114 | [[presets]] |
| 115 | id = "NU310" |
| 116 | title = "NU310 (50 × 110 × 27)" |
| 117 | params = { designation = "NU310" } |
| 118 | aliases = ["NU310 bearing", "cylindrical roller bearing NU310", "50x110x27 roller-bearing"] |
| 119 | standard = "ISO 15" |
| 120 | |
| 121 | [[presets]] |
| 122 | id = "NU204-simple" |
| 123 | title = "NU204, simple (one solid)" |
| 124 | params = { designation = "NU204", detail = "simple" } |
| 125 | aliases = ["NU204 simple"] |
| 126 | standard = "ISO 15" |
| 127 |
Cylindrical roller bearing, NU2 and NU3 series, bore up to 50 mm. Bore d, outside diameter D, width B, chamfer r and the raceway diameters Fw (inner) and Ew (outer) are sourced and make the fit. detail = "full": a plain inner ring, an outer ring with a rib at each end, and the rollers between them, whose diameter follows from (Ew - Fw) / 2. Rib height, roller length and roller count are proportions for looks, not for design, and never change the fit dimensions; the cage is not drawn. detail = "simple": one solid ring. Axis along Z, centred on the origin.
For the fit: the sourced dimensions below. For looks only, not for design: every other proportion named above.
NTN, Ball and Roller Bearings, CAT. No. 2203-3/E (2024), https://www.ntnglobal.com/en/products/catalog/pdf/2203E.pdf, pp. B-71 to B-72 (PDF pages 147 and 148). ISO 15 sets the boundary dimensions of these series.
| Number | d | D | B |
|---|---|---|---|
| NU204 | 20 | 47 | 14 |
| NU205 | 25 | 52 | 15 |
| NU206 | 30 | 62 | 16 |
| NU207 | 35 | 72 | 17 |
| NU208 | 40 | 80 | 18 |
| NU209 | 45 | 85 | 19 |
| NU210 | 50 | 90 | 20 |
| NU304 | 20 | 52 | 15 |
| NU305 | 25 | 62 | 17 |
| NU306 | 30 | 72 | 19 |
| NU307 | 35 | 80 | 21 |
| NU308 | 40 | 90 | 23 |
| NU309 | 45 | 100 | 25 |
| NU310 | 50 | 110 | 27 |
Maker names identify the source; this part isn't made by or affiliated with any maker.
Raceway diameters Fw and Ew and chamfers r are in part.py (BEARINGS), from the same tables; the ISO 492 normal class is from Table 6.4, pp. A-58 to A-59.
| 1 | # Cylindrical roller bearing |
| 2 | |
| 3 | ## Geometry |
| 4 | |
| 5 | Cylindrical roller bearing, NU2 and NU3 series, bore up to 50 mm. Bore d, outside diameter D, width B, chamfer r and the raceway diameters Fw (inner) and Ew (outer) are sourced and make the fit. detail = "full": a plain inner ring, an outer ring with a rib at each end, and the rollers between them, whose diameter follows from (Ew - Fw) / 2. Rib height, roller length and roller count are proportions for looks, not for design, and never change the fit dimensions; the cage is not drawn. detail = "simple": one solid ring. Axis along Z, centred on the origin. |
| 6 | |
| 7 | **For the fit:** the sourced dimensions below. **For looks only, not for design:** every other proportion named above. |
| 8 | |
| 9 | ## Source |
| 10 | |
| 11 | NTN, *Ball and Roller Bearings*, CAT. No. 2203-3/E (2024), <https://www.ntnglobal.com/en/products/catalog/pdf/2203E.pdf>, pp. B-71 to B-72 (PDF pages 147 and 148). ISO 15 sets the boundary dimensions of these series. |
| 12 | |
| 13 | | Number | d | D | B | |
| 14 | |---|---|---|---| |
| 15 | | NU204 | 20 | 47 | 14 | |
| 16 | | NU205 | 25 | 52 | 15 | |
| 17 | | NU206 | 30 | 62 | 16 | |
| 18 | | NU207 | 35 | 72 | 17 | |
| 19 | | NU208 | 40 | 80 | 18 | |
| 20 | | NU209 | 45 | 85 | 19 | |
| 21 | | NU210 | 50 | 90 | 20 | |
| 22 | | NU304 | 20 | 52 | 15 | |
| 23 | | NU305 | 25 | 62 | 17 | |
| 24 | | NU306 | 30 | 72 | 19 | |
| 25 | | NU307 | 35 | 80 | 21 | |
| 26 | | NU308 | 40 | 90 | 23 | |
| 27 | | NU309 | 45 | 100 | 25 | |
| 28 | | NU310 | 50 | 110 | 27 | |
| 29 | |
| 30 | Maker names identify the source; this part isn't made by or affiliated with any maker. |
| 31 | |
| 32 | Raceway diameters Fw and Ew and chamfers r are in `part.py` (`BEARINGS`), from the same tables; the ISO 492 normal class is from Table 6.4, pp. A-58 to A-59. |
| 33 |
Cylindrical roller bearing, NU2 and NU3 series, bore up to 50 mm. Bore d, outside diameter D, width B, chamfer r and the raceway diameters Fw (inner) and Ew (outer) are sourced and make the fit. detail = "full": a plain inner ring, an outer ring with a rib at each end, and the rollers between them, whose diameter follows from (Ew - Fw) / 2. Rib height, roller length and roller count are proportions for looks, not for design, and never change the fit dimensions; the cage is not drawn. detail = "simple": one solid ring. Axis along Z, centred on the origin. Dimensions from a maker's public catalogue (see the README); not affiliated with any maker.
Cylindrical roller bearing, NU2 and NU3 series, bore up to 50 mm. Bore d, outside diameter D, width B, chamfer r and the raceway diameters Fw (inner) and Ew (outer) are sourced and make the fit. detail = "full": a plain inner ring, an outer ring with a rib at each end, and the rollers between them, whose diameter follows from (Ew - Fw) / 2. Rib height, roller length and roller count are proportions for looks, not for design, and never change the fit dimensions; the cage is not drawn. detail = "simple": one solid ring. Axis along Z, centred on the origin.
For the fit: the sourced dimensions below. For looks only, not for design: every other proportion named above.
NTN, Ball and Roller Bearings, CAT. No. 2203-3/E (2024), https://www.ntnglobal.com/en/products/catalog/pdf/2203E.pdf, pp. B-71 to B-72 (PDF pages 147 and 148). ISO 15 sets the boundary dimensions of these series.
| Number | d | D | B |
|---|---|---|---|
| NU204 | 20 | 47 | 14 |
| NU205 | 25 | 52 | 15 |
| NU206 | 30 | 62 | 16 |
| NU207 | 35 | 72 | 17 |
| NU208 | 40 | 80 | 18 |
| NU209 | 45 | 85 | 19 |
| NU210 | 50 | 90 | 20 |
| NU304 | 20 | 52 | 15 |
| NU305 | 25 | 62 | 17 |
| NU306 | 30 | 72 | 19 |
| NU307 | 35 | 80 | 21 |
| NU308 | 40 | 90 | 23 |
| NU309 | 45 | 100 | 25 |
| NU310 | 50 | 110 | 27 |
Maker names identify the source; this part isn't made by or affiliated with any maker.
Raceway diameters Fw and Ew and chamfers r are in part.py (BEARINGS), from the same tables; the ISO 492 normal class is from Table 6.4, pp. A-58 to A-59.
Broken: a size needs a feature of size (a hole, a shaft, a sphere or two opposed parallel faces), and it names cone faces. Point it at one, or use model.distance between two features.
Broken: a size needs a feature of size (a hole, a shaft, a sphere or two opposed parallel faces), and it names cone and plane faces. Point it at one, or use model.distance between two features.
Select a requirement to show its faces in the 3D view; edges aren’t marked there. This build’s 3D preview doesn’t map its faces, so a requirement’s faces can’t be shown there. Requirements are written in the part’s code and compiled by the steve runtime at each build; nothing is exported as a file.
Looks like a bearing: rings and rolling elements. detail = simple keeps one solid ring.
Deep groove ball bearing, metric: 6xx, MR, 60, 62, 63, 68 and 69 series, open, ZZ or 2RS, optional flange.
Tapered roller bearing, 302 and 303 series, bore 15 to 50 mm,.
Angular contact ball bearing, 72 and 73 series, bore 10 to 50 mm,.
Single-direction thrust ball bearing, 511, 512 and 513 series, bore 10 to 50 mm,.