Difference between revisions of "Druckmesungen"

From phyphox
Jump to navigation Jump to search
(Created page with "{{Infobox Experiment | Name = Druckmessungen | Category = Arduino library experiments | Sensors = MPU-6050 }} File:Drehrate.jpg Auch wenn man für viele Beschleunigun...")
 
 
(3 intermediate revisions by one other user not shown)
Line 2: Line 2:
 
  | Name = Druckmessungen
 
  | Name = Druckmessungen
 
  | Category = Arduino library experiments
 
  | Category = Arduino library experiments
  | Sensors = MPU-6050
+
  | Sensors = MPRLS
 
}}
 
}}
 +
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.
  
[[File:Drehrate.jpg]]
 
  
Auch wenn man für viele Beschleunigungsexperimente prinzipiell den im Smartphone verbauten Beschleunigungs- und Drehratensensor verwenden könnte, macht auch hier ein externer Sensor sehr viel Sinn:
+
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.
  
1. Man möchte nicht, dass ein Smartphone bei einer Messung Schaden nimmt.
+
Verbindet man den Sensor mit einem dünnen Schlauch, kann man auch sehr gut den Schweredruck in Flüssigkeiten messen.
  
2. Man weiß nicht millimetergenau, wo genau die Sensoren im Smartphone verbaut sind.
+
<gallery widths=500px heights=400px>
 +
File:PressureSensor2.jpg|Verkabelung
 +
File:PressureSensor1.jpg|Aufbau eines Experimentes
 +
</gallery>
  
3. Sensoren wie der hier verwendete MPU-6050 sind günstig, gut und dank der I2C-Bus-Schnittstelle sehr einfach zu verlöten.
+
==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.
  
Hier soll der Sensor für Beschleunigungsmessungen auf der Luftkissenbahn sowie für Drehraten- und Zentrifugalbeschleunigungsmessungen eingesetzt werden. Aus diesem Grund ist das Programm so aufgebaut, dass der Sensor die Resultierende aus ax und ay sowie die Resultierende Drehrate aller drei Achsen übermittelt. Direkt nach dem Starten oder einem Reset muss der Sensor einige Sekunden ruhen. Während dieser Zeit wird die Beschleunigung auf null Tariert. So wird die Erdbeschleunigung rausgerechnet, falls der Sensor schief liegt. Der Sensor funktioniert so gut, dass aus den Parabeln im 3. Graph millimetergenau der Radius zur Dreachse ermittelt werden kann.
+
==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.
  
==Aufbau==
+
Der Sensor ist sehr schnell. Deshalb wird stark gemittelt.
Die Verkabelung des Sensors ist wieder wie üblich: 3V3 – Vin, Gnd – Gnd, SCL – 22,
 
SDA –21. Als Stromversorgung dient hier einfach eine kleine Powerbank, auf die der ESP32 mit Doppelseitigem Klebeband befestigt wird. Der MPU-6050 wurde mit etwas Heißkleber auf den ESP32 neben das Kommunikationsmodul geklebt und am Ende alles mit Schrumpfschlauch versiegelt. [[File:Drehrate_2.jpg]]
 
==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("Thermometer_01")'' festgelegt). Anschließend kann über das Plus-Symbol in phyphox ein Bluetooth-Experiment hinzugefügt werden, das Experiment wird dann automatisch geladen.
 
  
 
<pre>
 
<pre>
#include <Adafruit_MPU6050.h>
 
#include <Adafruit_Sensor.h>
 
 
#include <Wire.h>
 
#include <Wire.h>
#include <phyphoxBle.h>  
+
#include "Adafruit_MPRLS.h"
Adafruit_MPU6050 mpu;
+
#include <phyphoxBle.h>
 
 
float Beschleunigung = 0;
 
float Drehrate = 0;
 
float ZeroX = 0;
 
float ZeroY = 0;
 
 
 
void setup(void) {
 
 
 
    PhyphoxBLE::start("Beschleunigungssensor");               
 
 
 
//Experiment
 
    PhyphoxBleExperiment experiment;
 
 
 
    experiment.setTitle("Beschleunigungssensor");
 
    experiment.setCategory("Arduino Experiments");
 
    experiment.setDescription("Plot the acceleration over time.");
 
 
 
    //View
 
    PhyphoxBleExperiment::View view;
 
  
    //Graph
+
float Messwert;
    PhyphoxBleExperiment::Graph graph1;
+
#define RESET_PIN -1
    graph1.setLabel("Beschleunigung");
+
#define EOC_PIN -1
    graph1.setUnitX("s");
+
Adafruit_MPRLS mpr = Adafruit_MPRLS(RESET_PIN, EOC_PIN);
    graph1.setUnitY("m/s2");
 
    graph1.setLabelX("time");
 
    graph1.setLabelY("ax");
 
    graph1.setChannel(0,1);
 
  
 +
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
 
   //Graph
    PhyphoxBleExperiment::Graph graph2;
+
  PhyphoxBleExperiment::Graph graph;
    graph2.setLabel("Drehrate");
+
  graph.setLabel("Druck");
    graph2.setUnitX("s");
+
  graph.setUnitX("s");
    graph2.setUnitY("1/s");
+
  graph.setUnitY("hPa");
    graph2.setLabelX("time");
+
  graph.setLabelX("time");
    graph2.setLabelY("omega");
+
  graph.setLabelY("p");
    graph2.setChannel(0,2);
+
  view.addElement(graph);
 
+
  view.addElement(Value1);
 +
  experiment.addView(view);
 +
  PhyphoxBLE::addExperiment(experiment);
 +
  Serial.begin(38400);
 +
  mpr.begin();
 +
}
  
    PhyphoxBleExperiment::Graph graph3;
+
void loop() {
    graph3.setLabel("Beschleunigung");
+
   Messwert=0;
    graph3.setUnitX("1/s");
+
   for(int i=0;i<37;i++){
    graph3.setUnitY("m/s2");
+
    Messwert+=mpr.readPressure();
graph3.setLabelX("omega");
+
    delay(10);
    graph3.setLabelY("ax");
 
    graph3.setStyle("dots");
 
    graph3.setChannel(2,1);
 
 
 
 
 
    view.addElement(graph1);                //Attach graph to view
 
    view.addElement(graph2);                //Attach graph to view
 
    view.addElement(graph3);                //Attach graph to view
 
    experiment.addView(view);              //Attach view to experiment
 
    PhyphoxBLE::addExperiment(experiment);  //Attach experiment to server
 
 
 
  mpu.begin();
 
  mpu.setAccelerometerRange(MPU6050_RANGE_4_G);
 
   mpu.setGyroRange(MPU6050_RANGE_1000_DEG);
 
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
 
  delay(1000);
 
 
 
//Offsetkorrektur 
 
  ZeroX=0;
 
  ZeroY=0;
 
   for(int i=0;i<7;i++){
 
  sensors_event_t a, g, temp;
 
  mpu.getEvent(&a, &g, &temp);
 
  ZeroX+=a.acceleration.x;
 
  ZeroY+=a.acceleration.y;
 
  delay(10);
 
 
   }
 
   }
  ZeroX=ZeroX/7;
 
  ZeroY=ZeroY/7;
 
 
}
 
  
void loop() {
+
   Messwert=Messwert/37;
   sensors_event_t a, g, temp;
+
   PhyphoxBLE::write(Messwert);
   mpu.getEvent(&a, &g, &temp);
+
   Serial.println(Messwert);
  Beschleunigung = sqrt(sq(a.acceleration.x-ZeroX)+sq(a.acceleration.y-ZeroY));
 
   Drehrate = sqrt(sq(g.gyro.x)+sq(g.gyro.y)+sq(g.gyro.z));
 
  PhyphoxBLE::write(Beschleunigung, Drehrate);
 
 
   delay(10);
 
   delay(10);
 
}
 
}
 
 
</pre>
 
</pre>
  
==Arbeitsmaterialien==
 
 
[[Category:Arduino library experiments]]
 
[[Category:Arduino library experiments]]

Latest revision as of 15:23, 21 September 2023

Druckmessungen
Experiment Druckmessungen
Category Arduino library experiments
Used sensors MPRLS

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

#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);
}