Difference between revisions of "Amontons‘sches Gesetz"

From phyphox
Jump to navigation Jump to search
 
(4 intermediate revisions by 2 users not shown)
Line 4: Line 4:
 
  | Sensors = MPRLS, DS18B20
 
  | Sensors = MPRLS, DS18B20
 
}}
 
}}
 +
Amontons‘sches Gesetz: Gleichzeitige Messung von Druck und Temperatur in einem Gas.
  
Amontons‘sches Gesetz: Druck und Temperatur messen
+
Die Notwendigkeit der Einführung der Kelvinskala erschließt sich, wenn man den Druck eines idealen Gases in Abhängigkeit der Temperatur bei konstantem Volumen misst. Bei einer ordentlichen Messung sollte p(Theta) einen linearen Zusammenhang zeigen, wobei der Wert p = 0 extrapoliert bei Theta ≈ -273 °C erreicht werden sollte. Experimentell lässt sich dies im Physikunterricht nur sehr schwer zeigen, weshalb meist auf Filme oder Simulationen zurückgegriffen wird. Um so interessanter ist es, die bereits verwendeten Temperatur- und Drucksensoren für diesen Zweck auszuprobieren. Hierfür werden beide Sensoren gemeinsam, wie bereits einzeln beschrieben, mit einem ESP32 verbunden.
 
 
 
 
Die Notwendigkeit der Einführung der Kelvinskala erschließt sich, wenn man den Druck
 
eines idealen Gases in Abhängigkeit der Temperatur bei konstantem Volumen misst. Bei
 
einer ordentlichen Messung sollte p(Theta) einen linearen Zusammenhang zeigen, wobei der
 
Wert p = 0 extrapoliert bei Theta ≈ -273 °C erreicht werden sollte.
 
 
 
Experimentell lässt sich dies im Physikunterricht nur sehr schwer zeigen, weshalb meist auf
 
Filme oder Simulationen zurückgegriffen wird. Um so interessanter ist es, die bereits
 
verwendeten Temperatur- und Drucksensoren für diesen Zweck auszuprobieren. Hierfür
 
werden beide Sensoren gemeinsam, wie bereits einzeln beschrieben, mit einem ESP32
 
verbunden.
 
 
 
[[File:Amontons_Glas_1.jpg]]
 
  
 
Hier wurde das Glas mit den Sensoren zuerst offen bei Theta = 60 °C im Backofen temperiert. Hier ist es natürlich ganz wichtig einen Akku zu verwenden, der für diese Temperatur spezifiziert ist.
 
Hier wurde das Glas mit den Sensoren zuerst offen bei Theta = 60 °C im Backofen temperiert. Hier ist es natürlich ganz wichtig einen Akku zu verwenden, der für diese Temperatur spezifiziert ist.
  
 
Anschließend wurde das Glas geschlossen, aus dem Backofen genommen und die Messung gestartet. Aufgenommen werden jetzt drei Diagramme: p (t), Theta (t) und p (Theta).
 
Anschließend wurde das Glas geschlossen, aus dem Backofen genommen und die Messung gestartet. Aufgenommen werden jetzt drei Diagramme: p (t), Theta (t) und p (Theta).
 
[[File:Amontons_Glas_mess.jpg]]
 
  
 
Schon nach kurzer Zeit zeigt sich der zu erwartende lineare Zusammenhang zwischen dem Druck im Glas und der Temperatur (3. Graph). Den absoluten Temperaturnullpunkt erhält man hier mithilfe einer Ausgleichsgeraden. Hier lautet das Ergebnis der Regression:
 
Schon nach kurzer Zeit zeigt sich der zu erwartende lineare Zusammenhang zwischen dem Druck im Glas und der Temperatur (3. Graph). Den absoluten Temperaturnullpunkt erhält man hier mithilfe einer Ausgleichsgeraden. Hier lautet das Ergebnis der Regression:
Line 32: Line 17:
  
 
Die Nullstelle liegt demnach bei - 834,4: 2,972 °C = - 281 °C. Dies liegt für so einen primitiven Versuchsaufbau erstaunlich nahe beim echten Wert von - 273 °C.
 
Die Nullstelle liegt demnach bei - 834,4: 2,972 °C = - 281 °C. Dies liegt für so einen primitiven Versuchsaufbau erstaunlich nahe beim echten Wert von - 273 °C.
[[File:IMG_0033.PNG]]
+
 
 +
<gallery widths=500px heights=300px>
 +
File:Amontons_Glas_1.jpg|Aufbau mit Glas im Backofen
 +
File:Amontons_Glas_mess.jpg|Aufbau bei der Messung
 +
File:IMG_0033.PNG|Messdaten Temperatur über Druck mit Ausgleichsgerade
 +
</gallery>
 +
 
 
==Aufbau==
 
==Aufbau==
Der Drucksensor MPRLS ist über den I2C-Bus mit dem ESP32 verbunden. Die Verdrahtung ist wie üblich bei I2C-Sensoren trivial: 3V3 – Vin, Gnd Gnd, SCL – 22, SDA –21
+
Der Drucksensor MPRLS ist über den I2C-Bus mit dem ESP32 verbunden. Die Verdrahtung ist wie üblich bei I2C-Sensoren trivial: 3V3 – Vin, GND GND, SCL – GPIO22, SDA – GPIO21. Der Temperatursensor liefert seine Daten über den OneWire-Bus: 3V3 – Vin, GND GND, Datenbus - GPIO4. Der Pin des Datenbus sollte noch mit einem Pullup-Widerstand (z. B. 4k7) von 3V3 hochgezogen werden.
Der Temperatursensor liefert seine Daten über den OneWire-Bus: 3V3 – Vin, Gnd Gnd, 4 - Datenbus.
 
  
 
Die Stromversorgung liefert ein 3,7 LiPo-Akku mit 1,2 Wh. Hier ist darauf zu achten, dass der Akku möglichst klein geweählt wird (störende Wärmekapazität), aber über ausreichend Kapazität verfügt.
 
Die Stromversorgung liefert ein 3,7 LiPo-Akku mit 1,2 Wh. Hier ist darauf zu achten, dass der Akku möglichst klein geweählt wird (störende Wärmekapazität), aber über ausreichend Kapazität verfügt.
Line 45: Line 35:
  
 
<pre>
 
<pre>
 
 
#include <Wire.h>
 
#include <Wire.h>
 
#include "Adafruit_MPRLS.h"
 
#include "Adafruit_MPRLS.h"
Line 58: Line 47:
 
#define EOC_PIN -1
 
#define EOC_PIN -1
 
Adafruit_MPRLS mpr = Adafruit_MPRLS(RESET_PIN, EOC_PIN);
 
Adafruit_MPRLS mpr = Adafruit_MPRLS(RESET_PIN, EOC_PIN);
 +
 
void setup() {
 
void setup() {
PhyphoxBLE::start("Baro_Therm_01");
+
  PhyphoxBLE::start("Baro_Therm_01");
//Experiment
+
  //Experiment
PhyphoxBleExperiment experiment;
+
  PhyphoxBleExperiment experiment;
experiment.setTitle("Baro_Therm_01");
+
  experiment.setTitle("Baro_Therm_01");
experiment.setCategory("Arduino Experiments");
+
  experiment.setCategory("Arduino Experiments");
experiment.setDescription("Plot the pressure over time.");
+
  experiment.setDescription("Plot the pressure over time.");
//View
+
 
PhyphoxBleExperiment::View view;
+
  //View
//Value
+
  PhyphoxBleExperiment::View view;
PhyphoxBleExperiment::Value Value1;
+
 
Value1.setLabel("p = ");
+
  //Value
Value1.setUnit("hPa");
+
  PhyphoxBleExperiment::Value Value1;
Value1.setChannel(1);
+
  Value1.setLabel("p = ");
PhyphoxBleExperiment::Value Value2;
+
  Value1.setUnit("hPa");
Value2.setLabel("Theta = ");
+
  Value1.setChannel(1);
Value2.setUnit("°C");
+
  PhyphoxBleExperiment::Value Value2;
Value2.setChannel(2);
+
  Value2.setLabel("Theta = ");
//Graph
+
  Value2.setUnit("°C");
PhyphoxBleExperiment::Graph graph1;
+
  Value2.setChannel(2);
graph1.setLabel("Druck");
+
 
graph1.setUnitX("s");
+
  //Graph
graph1.setUnitY("hPa");
+
  PhyphoxBleExperiment::Graph graph1;
graph1.setLabelX("time");
+
  graph1.setLabel("Druck");
graph1.setLabelY("p");
+
  graph1.setUnitX("s");
graph1.setChannel(0,1);
+
  graph1.setUnitY("hPa");
PhyphoxBleExperiment::Graph graph2;
+
  graph1.setLabelX("time");
graph2.setLabel("Temperatur");
+
  graph1.setLabelY("p");
graph2.setUnitX("s");
+
  graph1.setChannel(0,1);
graph2.setUnitY("°C");
+
  PhyphoxBleExperiment::Graph graph2;
graph2.setLabelX("time");
+
  graph2.setLabel("Temperatur");
graph2.setLabelY("Theta");
+
  graph2.setUnitX("s");
graph2.setChannel(0,2);
+
  graph2.setUnitY("°C");
PhyphoxBleExperiment::Graph graph3;
+
  graph2.setLabelX("time");
graph3.setLabel("p over Theta");
+
  graph2.setLabelY("Theta");
graph3.setUnitX("°C");
+
  graph2.setChannel(0,2);
graph3.setUnitY("hPa");
+
  PhyphoxBleExperiment::Graph graph3;
graph3.setLabelX("Theta");
+
  graph3.setLabel("p over Theta");
graph3.setLabelY("p");
+
  graph3.setUnitX("°C");
graph3.setStyle("dots");
+
  graph3.setUnitY("hPa");
graph3.setChannel(2,1);
+
  graph3.setLabelX("Theta");
view.addElement(graph1);
+
  graph3.setLabelY("p");
view.addElement(Value1);
+
  graph3.setStyle("dots");
view.addElement(graph2);
+
  graph3.setChannel(2,1);
view.addElement(Value2);
+
  view.addElement(graph1);
view.addElement(graph3);
+
  view.addElement(Value1);
experiment.addView(view);
+
  view.addElement(graph2);
PhyphoxBLE::addExperiment(experiment);
+
  view.addElement(Value2);
Serial.begin(38400);
+
  view.addElement(graph3);
sensors.begin();
+
  experiment.addView(view);
mpr.begin();
+
  PhyphoxBLE::addExperiment(experiment);
 +
 
 +
  Serial.begin(38400);
 +
  sensors.begin();
 +
  mpr.begin();
 
}
 
}
 +
 
void loop() {
 
void loop() {
p=0;
+
  p = 0;
for(int i=0;i<37;i++){
+
  for(int i = 0; i < 37; i++) {
p+=mpr.readPressure();
+
    p+=mpr.readPressure();
delay(10);
+
    delay(10);
 +
  }
 +
  p=p/37;
 +
  sensors.requestTemperatures();
 +
  float T = sensors.getTempCByIndex(0);
 +
  PhyphoxBLE::write(p,T);
 +
  Serial.print(p);
 +
  Serial.print(" ");
 +
  Serial.println(T);
 +
  delay(10);
 
}
 
}
p=p/37;
 
sensors.requestTemperatures();
 
float T = sensors.getTempCByIndex(0);
 
PhyphoxBLE::write(p,T);
 
Serial.print(p);
 
Serial.print(" ");
 
Serial.println(T);
 
delay(10);
 
}
 
 
 
 
</pre>
 
</pre>
  
 
==Arbeitsmaterialien==
 
==Arbeitsmaterialien==
 
[[Category:Arduino library experiments]]
 
[[Category:Arduino library experiments]]

Latest revision as of 16:08, 25 September 2023

Amontons'sches Gesetz
Experiment Amontons'sches Gesetz
Category Arduino library experiments
Used sensors MPRLS, DS18B20

Amontons‘sches Gesetz: Gleichzeitige Messung von Druck und Temperatur in einem Gas.

Die Notwendigkeit der Einführung der Kelvinskala erschließt sich, wenn man den Druck eines idealen Gases in Abhängigkeit der Temperatur bei konstantem Volumen misst. Bei einer ordentlichen Messung sollte p(Theta) einen linearen Zusammenhang zeigen, wobei der Wert p = 0 extrapoliert bei Theta ≈ -273 °C erreicht werden sollte. Experimentell lässt sich dies im Physikunterricht nur sehr schwer zeigen, weshalb meist auf Filme oder Simulationen zurückgegriffen wird. Um so interessanter ist es, die bereits verwendeten Temperatur- und Drucksensoren für diesen Zweck auszuprobieren. Hierfür werden beide Sensoren gemeinsam, wie bereits einzeln beschrieben, mit einem ESP32 verbunden.

Hier wurde das Glas mit den Sensoren zuerst offen bei Theta = 60 °C im Backofen temperiert. Hier ist es natürlich ganz wichtig einen Akku zu verwenden, der für diese Temperatur spezifiziert ist.

Anschließend wurde das Glas geschlossen, aus dem Backofen genommen und die Messung gestartet. Aufgenommen werden jetzt drei Diagramme: p (t), Theta (t) und p (Theta).

Schon nach kurzer Zeit zeigt sich der zu erwartende lineare Zusammenhang zwischen dem Druck im Glas und der Temperatur (3. Graph). Den absoluten Temperaturnullpunkt erhält man hier mithilfe einer Ausgleichsgeraden. Hier lautet das Ergebnis der Regression:

p(Theta) = 2,972 hPa/°C Theta +834,4 hPa.

Die Nullstelle liegt demnach bei - 834,4: 2,972 °C = - 281 °C. Dies liegt für so einen primitiven Versuchsaufbau erstaunlich nahe beim echten Wert von - 273 °C.

Aufbau

Der Drucksensor MPRLS ist über den I2C-Bus mit dem ESP32 verbunden. Die Verdrahtung ist wie üblich bei I2C-Sensoren trivial: 3V3 – Vin, GND – GND, SCL – GPIO22, SDA – GPIO21. Der Temperatursensor liefert seine Daten über den OneWire-Bus: 3V3 – Vin, GND – GND, Datenbus - GPIO4. Der Pin des Datenbus sollte noch mit einem Pullup-Widerstand (z. B. 4k7) von 3V3 hochgezogen werden.

Die Stromversorgung liefert ein 3,7 LiPo-Akku mit 1,2 Wh. Hier ist darauf zu achten, dass der Akku möglichst klein geweählt wird (störende Wärmekapazität), aber über ausreichend Kapazität verfügt.

Programmierung

Der ESP32 wird über die Arduino IDE programmiert. Es müssen die Definitionen für den ESP32 und die phyphox-Bibliothek installiert sein. Siehe dazu das Video unter Category: Arduino library experiments.

Es ist darauf zu achten, dass jeder ESP32 eine eigene Kennung hat (diese wird in PhyphoxBLE::start("Baro_Therm_01") festgelegt). Anschließend kann über das Plus-Symbol in phyphox ein Bluetooth-Experiment hinzugefügt werden, das Experiment wird dann automatisch geladen.

#include <Wire.h>
#include "Adafruit_MPRLS.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#include <phyphoxBle.h>
float p;
#define RESET_PIN -1
#define EOC_PIN -1
Adafruit_MPRLS mpr = Adafruit_MPRLS(RESET_PIN, EOC_PIN);

void setup() {
  PhyphoxBLE::start("Baro_Therm_01");
  //Experiment
  PhyphoxBleExperiment experiment;
  experiment.setTitle("Baro_Therm_01");
  experiment.setCategory("Arduino Experiments");
  experiment.setDescription("Plot the pressure over time.");
  
  //View
  PhyphoxBleExperiment::View view;
  
  //Value
  PhyphoxBleExperiment::Value Value1;
  Value1.setLabel("p = ");
  Value1.setUnit("hPa");
  Value1.setChannel(1);
  PhyphoxBleExperiment::Value Value2;
  Value2.setLabel("Theta = ");
  Value2.setUnit("°C");
  Value2.setChannel(2);

  //Graph
  PhyphoxBleExperiment::Graph graph1;
  graph1.setLabel("Druck");
  graph1.setUnitX("s");
  graph1.setUnitY("hPa");
  graph1.setLabelX("time");
  graph1.setLabelY("p");
  graph1.setChannel(0,1);
  PhyphoxBleExperiment::Graph graph2;
  graph2.setLabel("Temperatur");
  graph2.setUnitX("s");
  graph2.setUnitY("°C");
  graph2.setLabelX("time");
  graph2.setLabelY("Theta");
  graph2.setChannel(0,2);
  PhyphoxBleExperiment::Graph graph3;
  graph3.setLabel("p over Theta");
  graph3.setUnitX("°C");
  graph3.setUnitY("hPa");
  graph3.setLabelX("Theta");
  graph3.setLabelY("p");
  graph3.setStyle("dots");
  graph3.setChannel(2,1);
  view.addElement(graph1);
  view.addElement(Value1);
  view.addElement(graph2);
  view.addElement(Value2);
  view.addElement(graph3);
  experiment.addView(view);
  PhyphoxBLE::addExperiment(experiment);
  
  Serial.begin(38400);
  sensors.begin();
  mpr.begin();
}

void loop() {
  p = 0;
  for(int i = 0; i < 37; i++) {
    p+=mpr.readPressure();
    delay(10);
  }
  p=p/37;
  sensors.requestTemperatures();
  float T = sensors.getTempCByIndex(0);
  PhyphoxBLE::write(p,T);
  Serial.print(p);
  Serial.print(" ");
  Serial.println(T);
  delay(10);
}

Arbeitsmaterialien