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 (, )
Voedingsbron
Thermometer of temperatuursensor
Stopwatch of timer

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'
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.