Difference between revisions of "Barometrische Höhenstufe"

From phyphox
Jump to navigation Jump to search
(Created page with "{{Infobox Experiment | Name = Druckmessungen | Category = Arduino library experiments | Sensors = MPU-6050 }} File:PressureSensor2.jpg File:PressureSensor1.jpg...")
 
 
(13 intermediate revisions by 2 users not shown)
Line 2: Line 2:
 
  | Name = Druckmessungen
 
  | Name = Druckmessungen
 
  | Category = Arduino library experiments
 
  | Category = Arduino library experiments
  | Sensors = MPU-6050
+
  | Sensors = BMP581
 
}}
 
}}
 +
Der Drucksensor BMP581 ist für die Messung atmosphärischer Drücke ausgelegt. Er misst sehr schnell und hat eine so gute Auflösung, dass sich Höhendifferenz von nur wenigen Zentimetern auflösen lassen.  Die barometrische Höhenstufe auf Meeresniveaus beträgt 1 hPa auf 8 m.
  
 +
<gallery widths=500px heights=400px>
 +
File:IMG_3042.jpg|Aufbau
 +
</gallery>
  
 +
==Setup==
 +
Die Verdrahtung ist wie üblich bei I2C-Sensoren trivial: 3V3 – Vin, GND – GND, SCL – GPIO22, SDA – GPIO21.
  
[[File:PressureSensor2.jpg]]
+
==Programming==
 +
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("Barometer_01")'' festgelegt). Anschließend kann über das Plus-Symbol in phyphox ein Bluetooth-Experiment hinzugefügt werden, das Experiment wird dann automatisch geladen.
  
[[File:PressureSensor1.jpg]]
+
<pre>
 +
#include <phyphoxBle.h>
 +
#include <Wire.h>
 +
#include "SparkFun_BMP581_Arduino_Library.h"
  
Der Drucksensor MPRLS ermöglicht Absolutdruckmessungen im Bereich 0 bis 25 PSI (1,72 bar). Die Auflösung ist so gut, dass sich 1 m Höhendifferenz auflösen lassen.  Die barometrische Höhenstufe auf Meeresniveaus beträgt 1 hPa auf 8 m.
+
BMP581 pressureSensor;
 +
uint8_t i2cAddress = BMP581_I2C_ADDRESS_DEFAULT; // 0x47
  
 +
void setup()
 +
{
 +
    PhyphoxBLE::start("Barometer_01");                //Start the BLE server
  
Die Verdrahtung ist wie üblich bei I2C-Sensoren trivial: 3V3 – Vin, Gnd – Gnd, SCL – 22, SDA –21. Schlauerweise wurde kein Foto gemacht, bevor der Sensor mit Spiegeltape aufgeklebt und alles schön mit Schrumpfschlauch verpackt wurde.
+
    //Experiment
Verbindet man den Sensor mit einem dünnen Schlauch, kann man auch sehr gut den Schweredruck in Flüssigkeiten messen.
+
    PhyphoxBleExperiment experiment;
  
 +
    experiment.setTitle("Barometer");
 +
    experiment.setCategory("Arduino Experiments");
 +
    experiment.setDescription("Plot the pressure over time.");
  
==Setup==
+
    //View
Die Verdrahtung ist wie üblich bei I2C-Sensoren trivial: 3V3 – Vin, Gnd – Gnd, SCL – 22, SDA –21. Schlauerweise wurde kein Foto gemacht, bevor der Sensor mit Spiegeltape aufgeklebt und alles schön mit Schrumpfschlauch verpackt wurde.
+
    PhyphoxBleExperiment::View view;
Verbindet man den Sensor mit einem dünnen Schlauch, kann man auch sehr gut den Schweredruck in Flüssigkeiten messen. Achtung: aufpassen, dass keine Flüssigkeit über die Kapillarwirkung in den Sensor gerät.
+
    //Value
 +
    PhyphoxBleExperiment::Value Value1;
 +
    Value1.setLabel("p = ");
 +
    Value1.setUnit("hPa");
 +
    Value1.setChannel(1);
  
==Programming==
+
    //Graph
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]].
+
    PhyphoxBleExperiment::Graph graph;
 +
    graph.setLabel("Druck");
 +
    graph.setUnitX("s");
 +
    graph.setUnitY("hPa");
 +
    graph.setLabelX("time");
 +
    graph.setLabelY("Druck");
 +
    graph.setChannel(0,1);
  
Es ist darauf zu achten, dass jeder ESP32 eine eigene Kennung hat (diese wird in ''PhyphoxBLE::start("Barometer_01")'' festgelegt). Anschließend kann über das Plus-Symbol in phyphox ein Bluetooth-Experiment hinzugefügt werden, das Experiment wird dann automatisch geladen.
+
    view.addElement(graph);                //Attach graph to view
 +
    view.addElement(Value1);
 +
    experiment.addView(view);              //Attach view to experiment
 +
    PhyphoxBLE::addExperiment(experiment);  //Attach experiment to server
  
Der Sensor ist sehr schnell. Deshalb wird stark gemitelt.
+
    Serial.begin(115200);
 +
    Wire.begin();
 +
    pressureSensor.beginI2C(i2cAddress);
 +
    bmp5_iir_config config =
 +
    {
 +
        .set_iir_p = BMP5_IIR_FILTER_COEFF_127, // Set filter coefficient
 +
        .shdw_set_iir_p = BMP5_ENABLE, // Store filtered data in data registers
 +
        .iir_flush_forced_en = BMP5_DISABLE // Flush filter in forced mode
 +
    };
 +
    }
  
 +
void loop()
 +
{
 +
    bmp5_sensor_data data = {0,0};
 +
    int8_t err = pressureSensor.getSensorData(&data);
 +
    //Serial.print(data.temperature);
 +
    float p = data.pressure/100;
 +
    Serial.println(p)/100;
 +
    PhyphoxBLE::write(p);
 +
    delay(10);
 +
}
 +
</pre>
  
<pre>
+
==Arbeitsmaterialien==
 +
Ein mögliches Schülerarbeitsblatt zur barometrischen Höhenstufe, wo die Höhe eines Treppenhauses bestimmt werden soll.
 +
(aktuelle Sicherheitsrichtlinien nach RISU beachten!)
  
#include <Wire.h>
 
#include "Adafruit_MPRLS.h"
 
#include <phyphoxBle.h>
 
float Messwert;
 
#define RESET_PIN -1
 
#define EOC_PIN -1
 
Adafruit_MPRLS mpr = Adafruit_MPRLS(RESET_PIN, EOC_PIN);
 
void setup() {
 
PhyphoxBLE::start("Barometer_01");
 
//Experiment
 
PhyphoxBleExperiment experiment;
 
experiment.setTitle("Barometer_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);
 
//Graph
 
PhyphoxBleExperiment::Graph graph;
 
graph.setLabel("Druck");
 
graph.setUnitX("s");
 
graph.setUnitY("hPa");
 
graph.setLabelX("time");
 
graph.setLabelY("p");
 
view.addElement(graph);
 
view.addElement(Value1);
 
experiment.addView(view);
 
PhyphoxBLE::addExperiment(experiment);
 
Serial.begin(38400);
 
mpr.begin();
 
}
 
void loop() {
 
Messwert=0;
 
for(int i=0;i<37;i++){
 
Messwert+=mpr.readPressure();
 
delay(10);
 
}
 
Messwert=Messwert/37;
 
PhyphoxBLE::write(Messwert);
 
Serial.println(Messwert);
 
delay(10);
 
}
 
  
 +
[[file:AB_Barometrische_Höhenstufe.pdf]]
  
</pre>
 
 
[[Category:Arduino library experiments]]
 
[[Category:Arduino library experiments]]

Latest revision as of 12:18, 7 November 2023

Druckmessungen
Experiment Druckmessungen
Category Arduino library experiments
Used sensors BMP581

Der Drucksensor BMP581 ist für die Messung atmosphärischer Drücke ausgelegt. Er misst sehr schnell und hat eine so gute Auflösung, dass sich Höhendifferenz von nur wenigen Zentimetern auflösen lassen. Die barometrische Höhenstufe auf Meeresniveaus beträgt 1 hPa auf 8 m.

Setup

Die Verdrahtung ist wie üblich bei I2C-Sensoren trivial: 3V3 – Vin, GND – GND, SCL – GPIO22, SDA – GPIO21.

Programming

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("Barometer_01") festgelegt). Anschließend kann über das Plus-Symbol in phyphox ein Bluetooth-Experiment hinzugefügt werden, das Experiment wird dann automatisch geladen.

#include <phyphoxBle.h> 
#include <Wire.h>
#include "SparkFun_BMP581_Arduino_Library.h"

BMP581 pressureSensor;
uint8_t i2cAddress = BMP581_I2C_ADDRESS_DEFAULT; // 0x47

void setup()
{
    PhyphoxBLE::start("Barometer_01");                //Start the BLE server

    //Experiment
    PhyphoxBleExperiment experiment;

    experiment.setTitle("Barometer");
    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);

    //Graph
    PhyphoxBleExperiment::Graph graph;
    graph.setLabel("Druck");
    graph.setUnitX("s");
    graph.setUnitY("hPa");
    graph.setLabelX("time");
    graph.setLabelY("Druck");
    graph.setChannel(0,1);

    view.addElement(graph);                 //Attach graph to view
    view.addElement(Value1);
    experiment.addView(view);               //Attach view to experiment
    PhyphoxBLE::addExperiment(experiment);  //Attach experiment to server

    Serial.begin(115200);
    Wire.begin();
    pressureSensor.beginI2C(i2cAddress);
    bmp5_iir_config config =
    {
        .set_iir_p = BMP5_IIR_FILTER_COEFF_127, // Set filter coefficient
        .shdw_set_iir_p = BMP5_ENABLE, // Store filtered data in data registers
        .iir_flush_forced_en = BMP5_DISABLE // Flush filter in forced mode
    };
    }

void loop()
{
    bmp5_sensor_data data = {0,0};
    int8_t err = pressureSensor.getSensorData(&data);
    //Serial.print(data.temperature);
    float p = data.pressure/100;
    Serial.println(p)/100;
    PhyphoxBLE::write(p);
    delay(10);
}

Arbeitsmaterialien

Ein mögliches Schülerarbeitsblatt zur barometrischen Höhenstufe, wo die Höhe eines Treppenhauses bestimmt werden soll. (aktuelle Sicherheitsrichtlinien nach RISU beachten!)


File:AB Barometrische Höhenstufe.pdf