Difference between revisions of "Barometrische Höhenstufe"
(Created page with "{{Infobox Experiment | Name = Druckmessungen | Category = Arduino library experiments | Sensors = MPU-6050 }} File:PressureSensor2.jpg File:PressureSensor1.jpg...") |
|||
Line 32: | Line 32: | ||
<pre> | <pre> | ||
+ | #include <phyphoxBle.h> | ||
#include <Wire.h> | #include <Wire.h> | ||
− | #include " | + | #include "SparkFun_BMP581_Arduino_Library.h" |
− | + | ||
− | + | BMP581 pressureSensor; | |
− | + | uint8_t i2cAddress = BMP581_I2C_ADDRESS_DEFAULT; // 0x47 | |
− | + | ||
− | + | void setup() | |
− | void setup() { | + | { |
− | PhyphoxBLE::start("Barometer_01"); | + | PhyphoxBLE::start("Barometer_01"); //Start the BLE server |
+ | |||
//Experiment | //Experiment | ||
− | PhyphoxBleExperiment experiment; | + | PhyphoxBleExperiment experiment; |
− | experiment.setTitle(" | + | |
− | experiment.setCategory("Arduino Experiments"); | + | experiment.setTitle("Barometer"); |
− | experiment.setDescription("Plot the pressure over time."); | + | experiment.setCategory("Arduino Experiments"); |
− | //View | + | experiment.setDescription("Plot the pressure over time."); |
− | PhyphoxBleExperiment::View view; | + | |
− | //Value | + | //View |
− | PhyphoxBleExperiment::Value Value1; | + | PhyphoxBleExperiment::View view; |
− | Value1.setLabel("p = "); | + | //Value |
− | Value1.setUnit("hPa"); | + | PhyphoxBleExperiment::Value Value1; |
− | Value1.setChannel(1); | + | Value1.setLabel("p = "); |
− | //Graph | + | Value1.setUnit("hPa"); |
− | PhyphoxBleExperiment::Graph graph; | + | Value1.setChannel(1); |
− | graph.setLabel("Druck"); | + | |
− | graph.setUnitX("s"); | + | //Graph |
− | graph.setUnitY("hPa"); | + | PhyphoxBleExperiment::Graph graph; |
− | graph.setLabelX("time"); | + | graph.setLabel("Druck"); |
− | graph.setLabelY(" | + | graph.setUnitX("s"); |
− | view.addElement(graph); | + | graph.setUnitY("hPa"); |
− | view.addElement(Value1); | + | graph.setLabelX("time"); |
− | experiment.addView(view); | + | graph.setLabelY("Druck"); |
− | PhyphoxBLE::addExperiment(experiment); | + | |
− | Serial.begin( | + | view.addElement(graph); //Attach graph to view |
− | + | view.addElement(Value1); | |
− | } | + | experiment.addView(view); //Attach view to experiment |
− | void loop() { | + | PhyphoxBLE::addExperiment(experiment); //Attach experiment to server |
− | + | ||
− | + | Serial.begin(115200); | |
− | + | Wire.begin(); | |
− | delay(10); | + | 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> | ||
[[Category:Arduino library experiments]] | [[Category:Arduino library experiments]] |
Revision as of 14:58, 12 September 2023
Experiment | Druckmessungen |
---|---|
Category | Arduino library experiments |
Used sensors | MPU-6050 |
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.
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.
Verbindet man den Sensor mit einem dünnen Schlauch, kann man auch sehr gut den Schweredruck in Flüssigkeiten messen.
Setup
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. 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.
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.
Der Sensor ist sehr schnell. Deshalb wird stark gemitelt.
#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"); 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); }