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 soortelijke warmte van water

Introductie

Water heeft een enorme buffercapaciteit: je moet veel energie toevoegen om de temperatuur van water een graad te verwarmen. In dit practicum gaan we de soortelijke warmte van water bepalen door een bekende hoeveelheid water te verwarmen met een bekende hoeveelheid energie, en de temperatuurstijging te meten.

Theorie

Geef hier de natuurkundige achtergrond van het onderwerp.

Methode en materialen

Ontwerp

Een waterbad met bekende massa aan water wordt verwarmd met een elektrisch verwarmingselement dat een bekende hoeveelheid energie levert. De temperatuur van het water wordt gemeten met een temperatuursensor. Door de temperatuurstijging als functie van de tijd te meten kan de soortelijke warmte van water worden berekend.

Materialen

Hieronder staat de lijst van benodigde materialen bij deze proef:

  • Maatbeker

  • Weegschaal

  • Water

  • Elektrisch verwarmingselement (10Ω10 \mathrm{\Omega}, 10W10 \mathrm{W})

  • Voedingsbron

  • Thermometer of temperatuursensor

  • Stopwatch of timer

Een schematische weergave van de opstelling

Een schematische weergave van de opstelling

Procedure

Resultaten

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

water = 0.4 #L
massa_water = 0.4 * 0.998
begin_temperatuur = 19.5 #graden celsius
U = 19.5 #V
I = 2 
time = np.array([0,30,60,90,120,150,180,210,240,270,300])
eind_temperatuur = np.array ([19.5, 20.9, 21.7, 22.4, 23.4, 23.9, 24.6, 25.1, 25.6, 26.1, 26.6])
vermogen = U * I


def function_model(time, a,b):
    return a * time + b

popt, pcov = curve_fit(function_model, time, eind_temperatuur)
a, b = popt
slope = var[0]
slope_err = np.sqrt(np.diag(cov))[0]


c = vermogen / (massa_water * a)
dc= c * (slope_err/slope)
print( "soortelijke warmte c = ", c/1000, "+/-", dc/1000, "kJ/(kg * K)")
t_fit = np.linspace(0,300,200)
T_fit = function_model(t_fit, a, b)

plt.figure()
plt.plot(time, eind_temperatuur, 'r.', label = 'werkelijke metingen')
plt.plot(t_fit, T_fit, '-', label = 'lineaire fit')
plt.xlabel('$t$ (s)')
plt.ylabel('$T$ (˚C)')
plt.title('Temperatuur water')
plt.legend()
plt.show()
soortelijke warmte c =  4.321645970896675 +/- 0.1502491435262887 kJ/(kg * K)
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[21], line 33
     31 plt.title('Temperatuur water')
     32 plt.legend()
---> 33 plt.savefig("../Figures/cwater_temp_vs_time_fit.png", dpi=450, bbox_inches='tight')
     34 plt.show()

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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 ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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 ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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 ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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 ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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 ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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 ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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 ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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/cwater_temp_vs_time_fit.png'
<Figure size 640x480 with 1 Axes>

Discussie en conclusie

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

De soortelijke warmte van water die uit deze proef kwam was 4.32 +/- 0.15 kJ/kg K. de theoretische waarde is 4.186 kJ/kgK. De waarde die gevonden is komt dus met de foutmarge goed overeen met the theoretische waarde. De conclusie hiervan is dat met deze proef en de bijbehorende formules de soortelijke warmte van water goed berekent kan worden.