Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • florian.weiss/calorimetry_laboratory
  • philipp.schmidt2/calorimetry_laboratory
  • paul.bobrinskoy/calorimetry_laboratory
  • vincent.jestaedt/calorimetry_laboratory
  • elias.rausch/calorimetry_laboratory
  • dennis.dibbern/calorimetry_laboratory
  • bianca.beer/calorimetry_laboratory
  • luca.sommer/calorimetry_laboratory
  • jannik.hoffmann/calorimetry_laboratory
  • adrian.gabel1/calorimetry_laboratory
  • erwin.durasow/calorimetry_laboratory
  • ole.quiring/calorimetry_laboratory
  • david.buening/calorimetry_laboratory
  • daniel.burgos/calorimetry_laboratory
  • malte.kramp/calorimetry_laboratory
  • vladimir.pascari/calorimetry_laboratory
  • fst-tuda/public/lehre/calorimetry_laboratory
  • nilay.kuslugil/calorimetry_laboratory
  • christoph.froehlich/calorimetry_laboratory
  • lucas.gomiero/calorimetry_laboratory
  • patrick.schell/calorimetry_laboratory
  • noel.schwibus/calorimetry_laboratory
  • gregor.komora/calorimetry-laboratory-komora
  • thomas.gruber/calorimetry_laboratory
  • leo.mensler/calorimetry_laboratory
  • paul_konrad.braun/calorimetry-laboratory-paul
  • jakob.maurer/calorimetry_laboratory
  • jakob.knoblach/calorimetry_laboratory
  • marius.stumpe/calorimetry_laboratory
  • diogo.fernandes_costa/calorimetry_laboratory
  • hiab.berhane/calorimetry_laboratory
  • zidane.buermann/calorimetry_laboratory
  • maximilian.gross1/calorimetry_laboratory
  • tahsin.ahmad/calorimetry_laboratory
  • santiago.ramirez_saldana/calorimetry_laboratory
  • moritz.roth/calorimetry_laboratory
  • noah.waltmann/calorimetry_laboratory
  • keanu.engel/calorimetry_laboratory
  • noah.michel1/calorimetry_laboratory
  • julie.kickstein/calorimetry_laboratory
  • maurizio.fell/calorimetry_laboratory
  • junghyun.seo/calorimetry-laboratory
  • paul.zuendel/calorimetry_laboratory
  • alexander.neubauer/calorimetry_laboratory
  • constantin.messingfeld/calorimetry_laboratory
  • malte.lesche/calorimetry_laboratory
  • felix.meyners/calorimetry_laboratory
  • henri.sprickmann/calorimetry_laboratory
  • zineb.karri/calorimetry_laboratory
  • ilhan_mert.dumlupinar/calorimetry_laboratory
  • tim.ostendorf/calorimetry_laboratory
  • lukas.ripp/calorimetry_laboratory
  • amen.bouzouraa/calorimetry_laboratory
  • ammon.wuendisch/calorimetry_laboratory
  • louis.randa/calorimetry_laboratory
  • mattheo.beyer/calorimetry_laboratory
  • pascal.grym/calorimetry_laboratory
  • bryan.lauren/calorimetry_laboratory
  • hani.husseini/calorimetry_laboratory
  • jonas.dissinger/calorimetry_laboratory
  • zhibo.zhao/calorimetry_laboratory
  • buesra.akkaya/calorimetry_laboratory
  • philipp.bojunga/calorimetry_laboratory
  • soner.elbudak/calorimetry_laboratory
  • pascal.schraut/calorimetry_laboratory
  • alicia.sachs/calorimetry_laboratory
  • tarish.kalra/calorimetry_laboratory
  • lilly.laubenheimer/calorimetry_laboratory
  • simon.peters/calorimetry_laboratory
  • tobias.erdmann/calorimetry_laboratory
  • philip.mahouttchi-hosseini/calorimetry_laboratory
  • yixing.tao/calorimetry_laboratory
  • konstantinos.boiadjiev/calorimetry_laboratory
  • ibrahim.alsaleh/calorimetry_laboratory
  • adonay.johannes/calorimetry_laboratory
  • sotiris.giovannis/calorimetry-laboratory-giovanns
  • manuel.kaster/calorimetry_laboratory
  • samuel.neidert/calorimetry_laboratory
  • rafi.noordin/calorimetry-laboratory-noordin-rafi
  • robert.schaefer1/calorimetry_laboratory
  • artashes.manukyan/calorimetry_laboratory
  • tolga.guelec/calorimetry_laboratory
  • bob.putz/calorimetry_laboratory
  • konrad.winkhaus/calorimetry-laboratory-kw
  • calvin.weide/calorimetry_laboratory
  • julius.damm/calorimetry_laboratory
  • louis.senff/calorimetry_laboratory
  • boris.dasgupta/calorimetry_laboratory
  • leon.herz/calorimetry_laboratory
  • marc.dobner/calorimetry_laboratory
  • benjamin.gross/calorimetry_laboratory
  • leon.dawkins/calorimetry_laboratory
  • nico.sebastian/calorimetry_laboratory
  • francisco.flores/calorimetry_laboratory
  • luca_tobias.nuecker/calorimetry_laboratory
95 results
Show changes
Commits on Source (54)
Showing
with 1504 additions and 73 deletions
# Lerneinheit II-II: Kalorimetrie (Präsenz)
## Einführung
Siehe Skript und Aufgabenstellung in [moodle](https://moodle.tu-darmstadt.de/course/view.php?id=36368&section=4#tabs-tree-start).
Siehe Skript und Aufgabenstellung in [moodle](https://moodle.tu-darmstadt.de/course/view.php?id=36368&section=5#tabs-tree-start).
## Materialien
In diesem GitLab Repo finden Sie:
......@@ -17,91 +17,56 @@ In diesem GitLab Repo finden Sie:
- Infosblatt (`DS18B20_Datasheet.pdf`): Infosblatt des DS18B20 Sensors
- Readme (`REAMDE.md`): diese Datei
- Requirements (`requirements.txt`): Beschreibt die pip-Umgebung, nicht relevant für die Ausarbeitung
- Matplotlib Style (`FST.mplstyle`): Einstellung für Matplotlib nach der FST-Institut-Vorschrift
### Datenstruktur
Messdaten und Metadaten existieren nicht nur in der Festplatte, sondern auch während der Durchführung des Programms im Arbeitsspeicher. Die Daten, die während der Durchführung des Programms eingelesen aus erstellt werden, bezeichnet man als `Runtime Daten`. Die Funktionen, die Sie bei der Bearbeitung implementieren werden, wurden unter Berücksichtigung der spziellen Datenstrukturen implementiert.
#### Runtime Metadaten
Die Datenstruktur basiert auf Python-Dictionary `dict`. `all` bezieht sich auf alle Komponenten des Prüfstandes. Das Value davon ist ein Python-Dictionary, das hat 2 Keys `values` und `names`. Die beinhalten jeweils eine Liste mit den UUIDs und Namen.
### Numpy Quick Start Quide
`numpy.ndarray` ist eine sehr effiziente Datenstruktur im Python-Package `numpy`, die von Datenwissenschaftlern jeden Tag gebraucht wird. Einige Beispiele werden hier gezeigt.
Das Value von Key `setup_path` muss den Pfad zur Setup-Datei entsprechen, aus der das Metadaten-Dictionary erzeugt wird.
Initializierung von `numpy.ndarray`:
```python
import numpy as np
Weitere Keys entsprechen die Namen der Typen der Komponenten. Das Vaule ist jeweils ein Python-Dictionary mit gleich Key-Value-Paar wie das Vaule von `all` Key. `sensor` Typ ist einer Sonderfall. Das Value-Dictionary kann noch `serials` als Key mit einer Serials-Liste als Value enthalten.
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
```
Anders als `list` müssen die Elemente im `ndarray` von gleichen Typen (zum Beispiel `float64`) sein. Und das Array muss wie eine Matrix in der Mathematik aussehen. Das heißt, die Anzahl der Elemente bei jeder Spalte bzw. Zeile gleich ist.
`numpy.ndarray` erleichert die mathematische Berechnung:
```python
{
'all': {
'values': [list of all UUIDs],
'names': [list of all names]
},
'setup_path': '/path/to/setup_up.json',
# Only for sensor type, there is serials key
'sensor': {
'values': [list of UUIDs of sensors],
'names': [list of names of sensors],
'serials': [list of serials of sensors]
},
'type1': {
'values': [list of UUIDs of type1],
'names': [list of names of type1]
},
'type2': {
'values': [list of UUIDs of type2],
'names': [list of names of type2]
},
...
}
# Assuming that each element in "a" is the radius of a circle,
# the area of each circle can be calculated in this way.
area = np.pi * a ** 2
# Print the array.
print(area)
# Print a element in the array.
print(area[0, 3])
```
#### Runtime Messdaten
Die Messdaten aller Sensoren werden während des Versuches in ein Python-Dictionary bzw. Liste abgespeichert. Das Dictionary hat UUIDs der Sensoren als Keys. Die entsprechenden Values sind Liste, die zwei Listen enthalten. Die erste Liste enthält die Tempraturdaten, während die zweite die Zeitpunten behalten.
Es ist möglich, Statistik des Arrays durch Build-in Funktionen von `numpy` zu brechen.
```python
{
'uuid1': [
[list of temprature],
[list of time step]
],
'uuid2': [
[list of temprature],
[list of time step]
],
'uuid3': [
[list of temprature],
[list of time step]
],
...
}
a_mean = a.mean()
print(a_mean)
# Calculate the average of each column.
a_mean_first_dimension = a.mean(0)
print(a_mean_first_dimension)
```
#### HDF5 structure
Die Messdaten werden am Ende der Versuche in HDF5-Daten abgespeichert. Die Daten müssen eine bestimmte Struktur aufweisen. In jeder HDF5-Datei existiert eine Sub-Gruppe `RawData`, die die weiteren als UUID benennten Sub-Gruppen enthält. Die Sub-Gruppen in `RawData` beinhalten zwei Datensätze mit den Namen `temperature` und `time`.
Die Metadaten `authors`, `created`, `experiment` und `group_number` sollten als Attribute der HDF5-Datei gespeichert werden. Die Attribute der Sub-Gruppen in `RawData` sind der Name und die Serial-Nummer des ensprechenden Sensores. Die Datasätze `time` beinhalten die Attribute über die verwendete Zeitkonvention. In diesem Fall sind folgende Attribute zu verwenden.
``` python
{
"time_convention": "Unixzeit",
"the_epoch": "Donnerstag, der 1. Januar 1970, 00:00 Uhr UTC",
"time_explanation": "Die Unixzeit zaehlt die vergangenen Sekunden seit The Epoch"
}
```
```
H5-File-Name (+ Attributes: authors, created[time], experiment, groupNumber, testrig)
RawData
UUID1 (+ Attributes: name, serial)
temperature (this is a data set)
timestamp (this is a data set)
UUID2 (+ Attributes: name, serial)
temperature (this is a data set)
timestamp (this is a data set)
UUID3 (+ Attributes: name, serial)
temperature (this is a data set)
timestamp (this is a data set)
...
```
### Links
Mehr Infomationen über die Datenstruktur sind in der [README.md](https://git.rwth-aachen.de/fst-tuda/public/lehre/calorimetry_home/-/blob/main/README.md) des Küchentischversuches zu finden.
[NumPy: the absolute basics for beginners](https://numpy.org/doc/stable/user/absolute_beginners.html)
[h5py Quick Start Guide](https://docs.h5py.org/en/stable/quick.html)
[NumPy Fundamentals](https://numpy.org/doc/stable/user/basics.html)
[Matplotlib Pyplot Scatter](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter)
[PyPi: W1ThermSensor](https://pypi.org/project/w1thermsensor/)
## Ausarbeitung
Die Ausarbeitung erfolgt in den Modul `m_labor` und Notebook. In diesen ist bereits eine Gliederung vorgegeben.
Die Ausarbeitung erfolgt in den Modul `m_labor` und Notebook `ausarbeitung_laborversuch.ipynb`. In diesen ist bereits eine Gliederung vorgegeben.
## Abgabe
Die Abgabe erfolgt über [moodle](https://moodle.tu-darmstadt.de/mod/assign/view.php?id=1249200). Committen und pushen Sie zunächst Ihre Änderungen auf GitLab, und clonen bzw. pullen Sie die aktuellen Module und Notebooks auf das Grät, von dem die bearbeitete Aufgabe abgegeben wird. Erstellen Sie eine .zip-Datei aus dem gesamten Ordner. Benennen Sie die .zip-Datei nach dem folgenden Schema:
Die Abgabe erfolgt über [moodle](https://moodle.tu-darmstadt.de/mod/assign/view.php?id=1249200). Committen und pushen Sie zunächst Ihre Änderungen auf GitLab und laden Sie von dort Ihr gesamtes Repo als .zip-Datei herunter (ein direkter Download vom JupyterHub ist leider nicht möglich). Benennen Sie die .zip-Datei nach dem folgenden Schema:
<p style="text-align: center;"> &lt;Nachname&gt;_&lt;Vorname&gt;_&lt;MATR-NR&gt;_&lt;GRUPPEN-NR&gt;_le_2-2.zip</p>
......
Source diff could not be displayed: it is too large. Options to address this: view the blob.
{
"JSON": {
"ID": "1ee21744-0355-6023-94b4-d5c041dd32cd",
"label": "",
"comment": "UUID6 is used"
},
"actor": {
"type": "immersion heater",
"manufacturer": "Zhuodingsen",
"power_supply": {
"voltage": 12,
"type": "DC voltage",
"source": {
"type": "adjustable laboratory power supply",
"model": "DPPS-32-20",
"manufacturer": "VOLTCRAFT",
"power": "640 Watt",
"technology": "clocked power supply",
"voltage": "1...32 V",
"current": "0...20 A",
"residual ripple": "<5 mV"
}
}
}
}
{
"JSON": {
"ID": "1ee5ec0c-0b57-68cd-9d39-c9b7e9b18753",
"label": "",
"comment": "UUID6 is used"
},
"calorimeter": {
"type": "heat flow calorimeter",
"manufacturer": "Fluidsystemtechnik",
"container": {
"type": "beaker",
"volume": {
"value": 600,
"unit": "milliliter"
}
},
"medium": {
"type": "water",
"mass": {
"value": 400,
"unit": "gramm",
"accuracy": {
"value": 0,
"type": "absolute",
"unit": "gramm"
}
}
}
}
}
File added
{
"JSON": {
"ID": "1ee5ec0a-1830-63f5-ac3e-6f8ce4468546",
"label": "",
"comment": "UUID6 is used"
},
"group": {
"number": "Laborversuch_Group37",
"author": [
"Diogo Fernandes Costa",
"Zidane Bürmann",
"Santiago Ramirez Saldana"
],
"experiment": "calorimetry",
"testrig_number": "1"
}
}
{
"JSON": {
"ID": "1ee5ec0d-e77c-68b7-90f7-2e33485ff91c",
"label": "",
"comment": "UUID6 is used"
},
"instrument": {
"name": "raspberry_pi",
"type": "single_board_computer",
"manufacturer": "Raspberry Pi Foundation",
"model": "Raspberry Pi 4 Model B Rev. 1.5",
"serial": "10000000dbd18662",
"operating_system": "Raspberry Pi OS",
"comment": "to get model and serial number put this code in the terminal: cat /proc/cpuinfo"
}
}
{
"JSON": {
"ID": "1ee5ec00-4a00-68a1-bb1e-873c2dd4dbde",
"label": "",
"comment": "UUID6 is used"
},
"sensor": {
"name": "Temperature_Sensor",
"type": "DS18B20",
"manufacturer": "keyestudio",
"serial": "3c01f0956007",
"comment": "",
"range": {
"min": -55,
"max": 125,
"units": "degree_celsius"
},
"accuracy": {
"value": 0.5,
"type": "absolute",
"unit": "degree_celsius"
}
}
}
{
"JSON": {
"ID": "1ee5ec03-7e64-6071-8ca3-98dbab0a7719",
"label": "",
"comment": "UUID6 is used"
},
"sensor": {
"name": "Temperature_Sensor",
"type": "DS18B20",
"manufacturer": "keyestudio",
"serial": "3cf9e3818fb8",
"comment": "",
"range": {
"min": -55,
"max": 125,
"units": "degree_celsius"
},
"accuracy": {
"value": 0.5,
"type": "absolute",
"unit": "degree_celsius"
}
}
}
{
"JSON": {
"ID": "1ee5ec04-30cd-678f-a64b-0ce7544ef5e8",
"label": "",
"comment": "UUID6 is used"
},
"sensor": {
"name": "Temperature_Sensor",
"type": "DS18B20",
"manufacturer": "keyestudio",
"serial": "3c01f095b066",
"comment": "",
"range": {
"min": -55,
"max": 125,
"units": "degree_celsius"
},
"accuracy": {
"value": 0.5,
"type": "absolute",
"unit": "degree_celsius"
}
}
}
{
"JSON": {
"ID": "1ee5ec04-c845-69e2-853a-25c11543466f",
"label": "",
"comment": "UUID6 is used"
},
"sensor": {
"name": "Temperature_Sensor",
"type": "DS18B20",
"manufacturer": "keyestudio",
"serial": "3c01f095d465",
"comment": "",
"range": {
"min": -55,
"max": 125,
"units": "degree_celsius"
},
"accuracy": {
"value": 0.5,
"type": "absolute",
"unit": "degree_celsius"
}
}
}
{
"JSON": {
"ID": "1ee5ec1a-e3f7-66be-b5a8-ad82b1e18627",
"label": "",
"comment": "UUID6 is used"
},
"comment": "this setup is used to measure the calorimeter constant by bringing in a known amount of energy, while measuring the temperature",
"setup": {
"1ee5ec0a-1830-63f5-ac3e-6f8ce4468546": {
"type": "group_info",
"name": "group_info",
"comment": ""
},
"1ee5ec0d-e77c-68b7-90f7-2e33485ff91c": {
"type": "instrument",
"name": "raspberry_pi",
"comment": ""
},
"1ee5ec0c-0b57-68cd-9d39-c9b7e9b18753": {
"type": "calorimeter",
"name": "calorimeter",
"comment": ""
},
"1ee21744-0355-6023-94b4-d5c041dd32cd": {
"type": "actor",
"name": "immersion_heater",
"comment": "this heater is used to warm up the water in the calorimeter for measuring the calorimeter constant"
},
"1ee5ec00-4a00-68a1-bb1e-873c2dd4dbde": {
"type": "sensor",
"name": "temperature_calorimeter_1",
"comment": ""
},
"1ee5ec03-7e64-6071-8ca3-98dbab0a7719": {
"type": "sensor",
"name": "temperature_calorimeter_2",
"comment": ""
},
"1ee5ec04-30cd-678f-a64b-0ce7544ef5e8": {
"type": "sensor",
"name": "temperature_calorimeter_3",
"comment": ""
},
"1ee5ec04-c845-69e2-853a-25c11543466f": {
"type": "sensor",
"name": "temperature_environment",
"comment": ""
}
}
}
\ No newline at end of file
File added
{
"JSON": {
"ID": "1ee21750-5282-63bc-86e9-b4de622ee43e",
"label": "",
"comment": "UUID6 is used"
},
"actor": {
"type": "Sous Vide cooker",
"model": "DE310B",
"manufacturer": "KitchenBoss",
"power_supply": {
"voltage": "230 V",
"type": "AC voltage",
"power": "1100 W"
},
"temperature_range": {
"min": 40,
"max": 90,
"unit": "degree Celsius"
},
"circulation": "available"
}
}
\ No newline at end of file
{
"JSON": {
"ID": "1ee5ec0c-0b57-68cd-9d39-c9b7e9b18753",
"label": "",
"comment": "UUID6 is used"
},
"calorimeter": {
"type": "heat flow calorimeter",
"manufacturer": "Fluidsystemtechnik",
"container": {
"type": "beaker",
"volume": {
"value": 600,
"unit": "milliliter"
}
},
"medium": {
"type": "water",
"mass": {
"value": 400,
"unit": "gramm",
"accuracy": {
"value": 0,
"type": "absolute",
"unit": "gramm"
}
}
}
}
}
{
"JSON": {
"ID": "1ee5ec0a-1830-63f5-ac3e-6f8ce4468546",
"label": "",
"comment": "UUID6 is used"
},
"group": {
"number": "Laborversuch_Group37",
"author": [
"Diogo Fernandes Costa",
"Zidane Bürmann",
"Santiago Ramirez Saldana"
],
"experiment": "calorimetry",
"testrig_number": "1"
}
}
{
"JSON": {
"ID": "1ee5ec0d-e77c-68b7-90f7-2e33485ff91c",
"label": "",
"comment": "UUID6 is used"
},
"instrument": {
"name": "raspberry_pi",
"type": "single_board_computer",
"manufacturer": "Raspberry Pi Foundation",
"model": "Raspberry Pi 4 Model B Rev. 1.5",
"serial": "10000000dbd18662",
"operating_system": "Raspberry Pi OS",
"comment": "to get model and serial number put this code in the terminal: cat /proc/cpuinfo"
}
}
{
"JSON": {
"ID": "1ee5ec00-4a00-68a1-bb1e-873c2dd4dbde",
"label": "",
"comment": "UUID6 is used"
},
"sensor": {
"name": "Temperature_Sensor",
"type": "DS18B20",
"manufacturer": "keyestudio",
"serial": "3c01f0956007",
"comment": "",
"range": {
"min": -55,
"max": 125,
"units": "degree_celsius"
},
"accuracy": {
"value": 0.5,
"type": "absolute",
"unit": "degree_celsius"
}
}
}
{
"JSON": {
"ID": "1ee5ec03-7e64-6071-8ca3-98dbab0a7719",
"label": "",
"comment": "UUID6 is used"
},
"sensor": {
"name": "Temperature_Sensor",
"type": "DS18B20",
"manufacturer": "keyestudio",
"serial": "3cf9e3818fb8",
"comment": "",
"range": {
"min": -55,
"max": 125,
"units": "degree_celsius"
},
"accuracy": {
"value": 0.5,
"type": "absolute",
"unit": "degree_celsius"
}
}
}
{
"JSON": {
"ID": "1ee5ec04-30cd-678f-a64b-0ce7544ef5e8",
"label": "",
"comment": "UUID6 is used"
},
"sensor": {
"name": "Temperature_Sensor",
"type": "DS18B20",
"manufacturer": "keyestudio",
"serial": "3c01f095b066",
"comment": "",
"range": {
"min": -55,
"max": 125,
"units": "degree_celsius"
},
"accuracy": {
"value": 0.5,
"type": "absolute",
"unit": "degree_celsius"
}
}
}