A un assaig de tracció, una proveta normalitzada amb una secció $s$ es somet a un força $F$ de tracció. La tensió normal o esforç $\sigma$ generat per la força $F$ a la secció $s$ té l'expressió:
$$\sigma = \frac{F}{s}$$Quan l'esforç en la proveta està per sota del límit elàstic ens trobem a la zona elàstica on es cumpleix la llei de Hooke
$$\sigma = E\epsilon$$on $E$ és el mòdul de Young o Mòdul elàstic i $\epsilon$ la deformació $\epsilon = \frac{\Delta L}{L_{0}}$
Si l'esforç supera el límit elàstic ens trobarem a la zona plàstica, on ja no es cumpleix la llei de Hooke i la deformació és permanent. Si continuem aplicant esforç a aquesta zona arribarem a un màxim, després d'ell ens costarà menys esforç deformar el material fins arribar a la tensió de ruptura on el material es trenca.
Aquestes assatjos es realitzen amb instruments com el de la fotografia, on s'utilitzen provetes normalitzades del material a estudiar.
Anem a estudiar un assaig amb un acer 4142 (trobareu diverses dades experimentals a https://github.com/ProfessorKazarinoff/staticsite/tree/master/content/code/matplotlib_plots i a https://pythonforundergradengineers.com/stress-strain-curve-with-python-and-matpotlib.html)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import statistics as st
from scipy.stats import linregress
from IPython.display import Markdown
with open('data/acero_4142.npy', 'rb') as f:
e = np.load(f)
s = np.load(f)
e = e * 100 # treballarem amb la deformació en %
%matplotlib inline
plt.rcParams['figure.figsize'] = (16,7) # determines the dimensions (size of the figure)
fig = plt.figure()
plt.plot(e, s)
plt.xlabel('$\epsilon$ [%]')
plt.ylabel('$\sigma$ [MPa]')
plt.title("Diagrama de tracció");
Si ens fixem en la zona elàstica, podrem fer una estimació del mòdul elàstic, agafant els punts que estan en línia recta
ms = linregress(e[35:102], s[35:102])
Es = ms[0]
offset_acer = Es*(e - 0.2)
print("El Mòdul elàstic de l'acer 4142 és %d MPa" % Es )
El Mòdul elàstic de l'acer 4142 és 2022 MPa
%matplotlib inline
plt.rcParams['figure.figsize'] = (9,7)
plt.plot(e, s)
plt.plot(e, offset_acer,'k--')
plt.xlabel('$\epsilon$ [%]')
plt.ylabel('$\sigma$ [MPa]')
plt.title("Detall zona elàstica")
plt.axis([0,3,0,700])
plt.legend(["acer 4142 ($\sigma_{y}$)","0.2% off-set"],loc='lower right');
Podeu observar que hem dibuixat una líne paral·lela a la del comportament elàstic desplaçada un 0,2 % a la dreta. Com és molt difícil saber on acaba la recta i comenza la zona no linial, s'agafa com a valor experimental del límit elàstc el punt de tall de la corba amb aquesta recta desplaçada.
%matplotlib inline
plt.rcParams['figure.figsize'] = (9,7)
plt.plot(e, s)
plt.plot(e, offset_acer,'k--')
plt.xlabel('$\epsilon$ [%]')
plt.ylabel('$\sigma$ [MPa]')
plt.title("Límit elàstic experimental")
plt.axis([0.45,0.55,620,640])
plt.legend(["acer 4142 ($\sigma_{y}$)","0.2% off-set"],loc='lower right');
#plt.savefig('acer_limit_elastic.png')
podem veure que el punt de tall es troba al voltant dels 630 MPa
Amb la llibreria holoviews i els seus gràfics interactius podem precisar més fàcilment el punt de tall
import holoviews as hv
hv.extension('bokeh')
import bokeh
curve = hv.Curve((e, s),'deformació [%]','tensió normal [MPa]')
offset_curve = hv.Curve((e, offset_acer),'deformació [%]','tensió normal [MPa]')
curve * offset_curve
s_exp = 631.9
s_max = max(s)
print("L'acer 4142 té un límit elàstic de %.1f MPa i i una tensió màxima de %.1f MPa" %(s_exp, s_max))
L'acer 4142 té un límit elàstic de 631.9 MPa i i una tensió màxima de 659.3 MPa
Una vegada que la proveta s'ha trencat a la tensió de ruptura, recupera la deormació elàstica. Per estimar la deformació plàstica que ens dona la ductibilitat del material caldrà restar la deformació elàstica amb una paral·lela a la recta elàstica. Podem fer una estimació amb un gràfic interactiu:
%matplotlib inline
from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np
def f(b):
offset_acer2 = Es*(e - b)
plt.figure()
plt.plot(e, s)
plt.plot(e, offset_acer2,'k--')
plt.xlabel('$\epsilon$ [%]')
plt.ylabel('$\sigma$ [MPa]')
plt.title("Detall zona elàstica")
plt.axis([19.2,19.6,0,400])
plt.legend(["acer 4142 ($\sigma_{y}$)","0.2% off-set"],loc='lower right'); plt.xlabel('x')
plt.show()
interactive_plot = interactive(f, b=(19.2,19.6, 0.02))
output = interactive_plot.children[-1]
interactive_plot
interactive(children=(FloatSlider(value=19.38, description='b', max=19.6, min=19.2, step=0.02), Output()), _do…
Podeu comprobar fàcilment que la deformació plàstica és d'un 19,36 %