WOBBLbracket.py
Will this printed PLA shelf bracket hold its share of an 8 kg shelf?
FAILS
Peak 52.3 MPa on the 0.5 mm inside fillet (face 3) at (6.19, 12.6, 6.11). The part cracks at about 0.96x this load.
peak stress
52.3 MPa
safety factor
0.96
max deflection
3.47 mm
target
2.5
Confidence high
- passed mesh convergence, force balance, hand calculation, singularities, bolt bearing, units and sanity
Stress
Checks
| status | check | result |
|---|---|---|
| pass | mesh convergence | max principal stress settled: 43 -> 50.9 -> 53 -> 52.3 MPa over 4 meshes, last change 1.4% |
| pass | force balance | reactions balance the loads to 0.00014% (forces) and 8.4e-06% (moments) |
| pass | hand calculation | beam theory through the critical section gives 15.2 MPa nominal; FEA peak is 3.45x that, a stress concentration of about 3.4 from the local shape |
| pass | singularities | no sharp corner or support artifact is above the reported stress |
| pass | bolt bearing | worst hole of fix1 (d 4.5 mm) carries 2.7 N sideways and 45.7 N along its axis; bearing stress 0.1 MPa, safety factor 499.33 on bearing |
| pass | units and sanity | part 123 mm across, peak strain 0.015, max deflection 3.47 mm (2.8% of size): all plausible |
How to fix it
Round the 0.5 mm fillet to a 3 mm radius
Stress piles up in the 0.5 mm fillet. A fillet of 3 mm (about half the 6 mm wall) spreads it out. With that radius the peak is usually about 1.4x the 15.2 MPa beam stress, roughly 21.2 MPa (safety factor 2.35).
re-run: peak 24.1 MPa, safety factor 2.08, marginal
Thicken the wall at the peak from 6 to 9.7 mm
The wall through the peak is 6 mm. To reach safety factor 2.5 it needs 9.7 mm (+62%), because bending stress falls with thickness squared.
re-run: peak 21 MPa, safety factor 2.38, marginal
Add a triangular gusset across the inside corner
The peak sits where two walls meet and bend. A gusset as thick as the wall, with legs about half as long as the shorter wall, ties them together and usually cuts the corner stress by half or more.
re-run: peak 9.82 MPa, safety factor 5.09, holds
Shorten the lever arm from 58.9 to 22.5 mm
The load acts 58.9 mm from the critical section. Moving a support or the load to within 22.5 mm brings the bending stress to the target.
Mesh convergence
| level | nodes | global size mm | finest mm | governing MPa | change | max deflection mm | solve |
|---|---|---|---|---|---|---|---|
| 0 | 6,223 | 5.4 | 1.51 | 43 | 3.42 | 1.4 s | |
| 1 | 13,904 | 4.59 | 0.267 | 50.9 | +18.2% | 3.42 | 4.0 s |
| 2 | 34,533 | 3.9 | 0.117 | 53 | +4.3% | 3.47 | 17.8 s |
| 3 | 65,958 | 3.32 | 0.0716 | 52.3 | -1.4% | 3.47 | 43.4 s |
Stress peaks
Every peak Wobbl found, with its value at each mesh. Peaks at sharp corners and idealized supports are excluded from the answer because their value depends on the idealization, not the part.
| # | where | x, y, z (mm) | MPa by level | status |
|---|---|---|---|---|
| 1 | on the 0.5 mm inside fillet (face 3) | 6.15, 11.4, 6.15 | 43 → 50.9 → 52.7 → 52.3 | counted |
| 2 | on the 0.5 mm inside fillet (face 3) | 6.15, 19.3, 6.15 | 40.9 → 49.4 → 50.6 → 51.2 | counted |
| 3 | on the 0.5 mm inside fillet (face 3) | 6.15, 3.41, 6.15 | 39.4 → 48.3 → 47.8 → 48.3 | counted |
Setup
| material | PLA (3D printed) |
| limit | 50 MPa |
| target safety factor | 2.5 |
| mass | 30.29 g |
| load | 40 N down @ top and within 12 of 65,12.5,6 |
| fixture | bolt holes d=4.5 |
| fixture | wall x=min |
| part | 2 holes, 1 inside fillets, 0 sharp inside corners, walls about 6 mm |
Assumptions
- Linear elastic material and small deflections (no yielding redistribution, no buckling).
- PLA (3D printed): E 3500 MPa, Poisson 0.36, max principal vs tensile strength 50 MPa (Prusament PLA technical data sheet; Ultimaker PLA TDS).
- Loads are static and applied all at once; no impact, vibration or fatigue.
- Printed part treated as isotropic at 100% infill; across the layers it is roughly 60% as strong. Pass --print-direction to check that.
- Brittle failure: judged by the largest tensile principal stress.
- Bolted holes are rigidly held over the hole and a washer sized ring (twice the hole radius).
- Wall supports push but cannot pull (frictionless contact, solved iteratively).
- Contact between separate parts, friction and preload are not modeled.
Notes
- Built from bracket.py with thickness=6, width=25, height=80, depth=90, fillet=0.5, hole=4.5.