Shelf bracket
Does a printed PLA bracket hold an 8 kg shelf, and what fixes it?
You ask
Will this printed PLA shelf bracket hold its share of an 8 kg shelf?
Wobbl runs
$ wobbl run bracket.py -m pla --fix "bolt holes d=4.5" --fix "wall x=min" \ --load "40 N down @ top and within 12 of 65,12.5,6"$ wobbl fix output --applyChecks
- passmesh convergence
- passforce balance
- passhand calculation
- passsingularities
- passbolt bearing
- passunits and sanity

FAILSPeak 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
- Target
- 2.5
- Confidence
- high
summary.txt
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. Confidence: high. passed mesh convergence, force balance, hand calculation, singularities, bolt bearing, units and sanityMax deflection 3.47 mm at (90, 0, 6).Material PLA (3D printed), limit 50 MPa; mass 30.29 g.Loads: 40 N down @ top and within 12 of 65,12.5,6. Fixtures: bolt holes d=4.5; wall x=min. Checks: [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 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. Suggested fixes: - 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). - 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. - 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. - 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. Images: stress: images/stress.png, zoom: images/zoom.png, safety: images/safety.png, deformed: images/deformed.png, convergence: images/convergence.png, fix_before: images/stress.png, fix_after: fix-gusset/images/stress.pngReport: report.htmlAfter wobbl fix --apply

As drawn
52.3 MPaSF 0.96
Fails

3 mm fillet
24.1 MPaSF 2.08
Marginal

Walls at 10 mm
21 MPaSF 2.38
Marginal

Gusset across the corner
9.82 MPaSF 5.09
Holds
About this example
This PLA L bracket is printed flat and screwed to a wall through two holes, and the shelf presses 40 N on the arm 65 mm from the wall. The inside corner has the 0.5 mm radius a printer leaves on a “sharp” corner.
| Version | Peak stress | Safety factor (PLA, 50 MPa) | Verdict |
|---|---|---|---|
| As drawn, 0.5 mm corner | 52.3 MPa | 0.96 | fails |
| 3 mm fillet | 24.1 MPa | 2.08 | marginal (target 2.5) |
| Legs thickened to 10 mm | 21.0 MPa | 2.38 | marginal |
| Gusset across the corner | 9.82 MPa | 5.09 | holds |
These are the checks Wobbl ran on the original.
- mesh convergence over four meshes, at 43.0, 50.9, 53.0 and 52.3 MPa
- reactions balance the 40 N load to 0.0001%
- beam theory through the corner gives 15.2 MPa nominal, so the corner multiplies stress by about 3.4
- the screws are modeled as bolted holes and the back of the upright can push on the wall but not pull, solved as contact
The thicker legs barely help because the sharp corner still multiplies the stress, and rounding
the corner or bracing it is what works. The gusset’s own toe is a sharp corner too, which Wobbl
excludes as a singularity and flags with medium confidence, so give it a small fillet in the real
part. The report is in output/report.html, the heatmap in output/images/stress.png and the
re-simulated versions in output/fix-*/.
Run it yourself
$ git clone https://github.com/sohan-bhat/wobbl$ cd wobbl/examples/shelf-bracket && ./run.shThe part, the script and every output are in examples/shelf-bracket on GitHub.