Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Bepaling van warmtecapaciteit van een onbekend materiaal

Introductie

Onbekende materialen kunnen geïdentificeerd worden door hun eigenschappen te meten. Een van deze eigenschappen is de warmtecapaciteit. In dit practicum gaan we de warmtecapaciteit van een onbekend materiaal bepalen door middel van een calorimeter experiment. Daarbij wordt een bepaalde massa van het materiaal naar een bekende temperatuur gebracht waarna het in een bekende hoeveelheid water met bekende temperatuur wordt geplaatst. Door de temperatuur van het water te meten na het mengen kan de warmtecapaciteit van het onbekende materiaal worden berekend.

Theorie

De soortelijke warmte cc van een materiaal is gedefinieerd als de hoeveelheid warmte QQ die nodig is om de temperatuur TT van een kilogram van het materiaal met één graad Celsius (of één Kelvin) te verhogen:

c=QmΔTc = \frac{Q}{m \Delta T}

Waarbij QQ de hoeveelheid warmte in Joules is, mm de massa in kilogram is en ΔT\Delta T de verandering in temperatuur is. Gegeven de wet van Black, die stelt dat de totale hoeveelheid warmte in een geïsoleerd systeem constant blijft, kunnen we de warmte die het onbekende materiaal verliest gelijkstellen aan de warmte die het water opneemt:

Qmateriaal=QwaterQ_{materiaal} = -Q_{water}

wanneer we de massa’s en de begintemperaturen van beide systemen kennen, maar slechts een van de twee soortelijke warmtes, kunnen we de onbekende soortelijke warmte berekenen. We combineren vergelijkingen (1) en (2) om de volgende vergelijking te krijgen:

Te=cwmwTw,b+cmmmTm,bcwmw+cmmmT_e = \frac{c_w m_w T_{w,b}+c_m m_m T_{m,b}}{c_w m_w + c_m m_m}

Waarbij de subscripts bb en ee respectievelijk staan voor begintoestand en eindtoestand, ww voor water en mm voor het onbekende materiaal.

Bij metingen aan verschillende massa’s van het onbekende materiaal en vervolgens een least square fit aan bovenstaande vergelijking kunnen we een precieze waarde voor de soortelijke warmte van het onbekende materiaal bepalen. Dat is, wanneer de warmtecapaciteit van bijvoorbeeld de beker te verwaarlozen is.

Methode en materialen

Ontwerp

De bovenstaande theorie wordt gebruikt om de soortelijke warmte van een onbekend materiaal te bepalen. Het experiment bestaat uit het verwarmen van verschillende massa’s van het onbekende materiaal tot een bekende temperatuur, waarna het in een bekende hoeveelheid water met bekende temperatuur wordt geplaats. Door de temperatuur van het water te meten na het mengen kan de warmtecapaciteit van het onbekende materiaal worden berekend. Om de tijd voor het meten van meerdere materialen te reduceren, worden de data van de verschillende groepen in het lokaal samengevoegd. Van tevoren is afgesproken welke massa’s door welke groep worden gemeten, en hoeveel water er gebruikt wordt.

Materialen

Hieronder staat de lijst van benodigde materialen bij deze proef:

  • Calorimeter

  • Thermometer of temperatuursensor

  • Verwarmingsbron

  • Diverse massablokjes van onbekend materiaal

  • Weegschaal

  • Water

  • Maatcilinder of maatbeker

Een schematische weergave van de opstelling

Figure 1:Een schematische weergave van de opstelling

Procedure

Bespreek wie welke massa’s van het onbekende materiaal gaat meten. Bespreek ook hoeveel water er gebruikt gaat worden. Bepaal de begintemperaturen. Hevel het aantal afgesproken massa’s in de maatbeker. Roer voorzicht zodat de temperatuur homogeen is. Noteer de hoogste gemeten temperatuur, dit is TeT_e. Wissel de metingen uit met de andere groepen en voer de data-analyse uit.

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

aantal_blokjes = (3,2,1,4,5)
massa_water = np.array([147.1,164.2,144.5,175.7,150.1]) * 10**-3
massa_blokjes = np.array([150.1,99.6,50.2, 199.7,250.2]) * 10**-3


KamerT_water = 20.8
T_beginblokjes = 72.9
T_homogeen = np.array([25.4,23.7,22.1,26.0,28.3])
c_water = 4168

Q_water = np.zeros(len(massa_water))
Soortelijke_warmte = np.zeros(len(massa_water))

Resultaten


import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

# we berekenen de soortelijke per meting en berekeen dan een mooi gemdiddelde van de metingen doormiddel van een curvefit waardoor de least squares method gebruikt wordt.
aantal_blokjes = (3,2,1,4,5)
massa_water = np.array([147.1,164.2,144.5,175.7,150.1]) * 10**-3
massa_blokjes = np.array([150.1,99.6,50.2, 199.7,250.2]) * 10**-3


KamerT_water = 20.8
T_beginblokjes = 72.9
T_homogeen = np.array([25.4,23.7,22.1,26.0,28.3])

delta_T_blokjes =   T_beginblokjes-T_homogeen 

c_water = 4186


Q_water = np.zeros(len(massa_water))
Soortelijke_warmte = np.zeros(len(massa_water))

for i in range(len(massa_water)):
    Q_water[i] = (T_homogeen[i] - KamerT_water) * massa_water[i]*c_water
    Soortelijke_warmte[i] = (Q_water[i])/(delta_T_blokjes[i] * massa_blokjes[i])

    


plt.figure()
plt.plot(massa_blokjes,Soortelijke_warmte,"r+")
plt.ylim(0,500)




def c_fit(massa,c_blokje):
    return c_blokje + massa *0

val, cov = curve_fit(c_fit,massa_blokjes,Soortelijke_warmte)

a = np.linspace(0,0.3,100)
y = c_fit(a, val[0])
plt.plot(a,y,"b")

print(val[0])
388.606951638778
<Figure size 640x480 with 1 Axes>
Source
# Sla figuren op met  
# 
# plt.savefig("Figuren/naam.png", dpi=450)
# waarbij naam vervangen wordt door de bestandsnaam. 
# Onderstaande voorbeeld code en output grafiek 
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit


massa_water = 199

x = np.linspace(0,10,11)
y = 2*x





# Maken van de grafiek
plt.figure()
plt.xlabel('$x$(m)')
plt.ylabel('$y(m)$')

plt.plot(x,y,'k.')
plt.savefig("figures/naam.png", dpi=450)
plt.show()
Output
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[3], line 27
     24 plt.ylabel('$y(m)$')
     26 plt.plot(x,y,'k.')
---> 27 plt.savefig("figures/naam.png", dpi=450)
     28 plt.show()

File c:\Users\bramr\miniconda3\Lib\site-packages\matplotlib\pyplot.py:1251, in savefig(*args, **kwargs)
   1248 fig = gcf()
   1249 # savefig default implementation has no return, so mypy is unhappy
   1250 # presumably this is here because subclasses can return?
-> 1251 res = fig.savefig(*args, **kwargs)  # type: ignore[func-returns-value]
   1252 fig.canvas.draw_idle()  # Need this if 'transparent=True', to reset colors.
   1253 return res

File c:\Users\bramr\miniconda3\Lib\site-packages\matplotlib\figure.py:3490, in Figure.savefig(self, fname, transparent, **kwargs)
   3488     for ax in self.axes:
   3489         _recursively_make_axes_transparent(stack, ax)
-> 3490 self.canvas.print_figure(fname, **kwargs)

File c:\Users\bramr\miniconda3\Lib\site-packages\matplotlib\backend_bases.py:2186, in FigureCanvasBase.print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)
   2182 try:
   2183     # _get_renderer may change the figure dpi (as vector formats
   2184     # force the figure dpi to 72), so we need to set it again here.
   2185     with cbook._setattr_cm(self.figure, dpi=dpi):
-> 2186         result = print_method(
   2187             filename,
   2188             facecolor=facecolor,
   2189             edgecolor=edgecolor,
   2190             orientation=orientation,
   2191             bbox_inches_restore=_bbox_inches_restore,
   2192             **kwargs)
   2193 finally:
   2194     if bbox_inches and restore_bbox:

File c:\Users\bramr\miniconda3\Lib\site-packages\matplotlib\backend_bases.py:2042, in FigureCanvasBase._switch_canvas_and_return_print_method.<locals>.<lambda>(*args, **kwargs)
   2038     optional_kws = {  # Passed by print_figure for other renderers.
   2039         "dpi", "facecolor", "edgecolor", "orientation",
   2040         "bbox_inches_restore"}
   2041     skip = optional_kws - {*inspect.signature(meth).parameters}
-> 2042     print_method = functools.wraps(meth)(lambda *args, **kwargs: meth(
   2043         *args, **{k: v for k, v in kwargs.items() if k not in skip}))
   2044 else:  # Let third-parties do as they see fit.
   2045     print_method = meth

File c:\Users\bramr\miniconda3\Lib\site-packages\matplotlib\backends\backend_agg.py:481, in FigureCanvasAgg.print_png(self, filename_or_obj, metadata, pil_kwargs)
    434 def print_png(self, filename_or_obj, *, metadata=None, pil_kwargs=None):
    435     """
    436     Write the figure to a PNG file.
    437 
   (...)    479         *metadata*, including the default 'Software' key.
    480     """
--> 481     self._print_pil(filename_or_obj, "png", pil_kwargs, metadata)

File c:\Users\bramr\miniconda3\Lib\site-packages\matplotlib\backends\backend_agg.py:430, in FigureCanvasAgg._print_pil(self, filename_or_obj, fmt, pil_kwargs, metadata)
    425 """
    426 Draw the canvas, then save it using `.image.imsave` (to which
    427 *pil_kwargs* and *metadata* are forwarded).
    428 """
    429 FigureCanvasAgg.draw(self)
--> 430 mpl.image.imsave(
    431     filename_or_obj, self.buffer_rgba(), format=fmt, origin="upper",
    432     dpi=self.figure.dpi, metadata=metadata, pil_kwargs=pil_kwargs)

File c:\Users\bramr\miniconda3\Lib\site-packages\matplotlib\image.py:1657, in imsave(fname, arr, vmin, vmax, cmap, format, origin, dpi, metadata, pil_kwargs)
   1655 pil_kwargs.setdefault("format", format)
   1656 pil_kwargs.setdefault("dpi", (dpi, dpi))
-> 1657 image.save(fname, **pil_kwargs)

File c:\Users\bramr\miniconda3\Lib\site-packages\PIL\Image.py:2583, in Image.save(self, fp, format, **params)
   2581         fp = builtins.open(filename, "r+b")
   2582     else:
-> 2583         fp = builtins.open(filename, "w+b")
   2584 else:
   2585     fp = cast(IO[bytes], fp)

FileNotFoundError: [Errno 2] No such file or directory: 'figures/naam.png'
<Figure size 640x480 with 1 Axes>
Hier is het onderschrift van de figuur.

Figure 2:Hier is het onderschrift van de figuur.

Discussie en conclusie

Hier een korte discussie en conclusie over de resultaten van het experiment en de implicaties daarvan.