Difference between revisions of "Ein Thermometer für alle Fälle"

From phyphox
Jump to navigation Jump to search
(Created page with "{{Infobox Experiment | Name = Ein Thermometer für alle Fälle | Category = Arduino library experiments | Sensors = DS18B20 }} Text File:Amontons_Glas_1.jpg ==Aufba...")
 
 
(3 intermediate revisions by one other user not shown)
Line 5: Line 5:
 
}}
 
}}
  
Text
+
Der DS18B20 ist ein sehr weit verbreiteter Temperatursensor. Dank des OneWire-Buses hat der Sensor nur drei Anschlüsse und kann extrem einfach mit einem Mikrocontroller verbunden werden. Zusätzlich wird noch ein 4k7-Widerstand benötigt, um den OneWire-Bus zu stabilisieren. Um den Temperatursensor schön kompakt zu gestalten, wurde auf dem Bild oben ein ESP32-C3 verwendet. Der kann nicht so viel wie der normale ESP32, muss es hier aber auch nicht.
  
[[File:Amontons_Glas_1.jpg]]
+
[[File:DS18B20.jpg]]
  
  
 
==Aufbau==
 
==Aufbau==
  
Der Temperatursensor liefert seine Daten über den OneWire-Bus: 3V3 – Vin, Gnd – Gnd, 4 - Datenbus.
+
Der Temperatursensor liefert seine Daten über den OneWire-Bus: 3V3 – Vin, Gnd – Gnd, 2 - Datenbus. Der Datenbus Pin 2 ist, wie oben beschrieben, über Pullup-widerstand auf "High" hochgezogen. Die Bluetooth-Antenne wurde einfach abgeknipst, für kurze Entfernungen reicht es mit dem Rest den Rest den Anschlusskabels. Achtung: Das Koaxialkabel muss so abgekniffen werden, dass nichts kurzgeschlossen wird!
 +
 
 +
Ist alles verlötet und funktioniert, kann es kompakt mit Schrupfschlauch eingepackt werden. Nicht vergessen, den dünneren Schrupfschlauch für die Zugentlastung und Knickschutz vor dem Löten übers Kabel zu schieben...
 +
 
 +
[[File:DS18B20_2.jpg]]
 +
 
  
  
Line 18: Line 23:
 
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]].
 
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.
+
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>
 +
/* ////////////////////////////////////////////////////////////////////////////
 +
  phyphox ESP32 for temperature sensor DS18B20
 +
  TODO: -
 +
  AUTHOR: Torsten Klaffs
 +
  LICENSE: CC0
 +
*/
 +
 +
#include <phyphoxBle.h>
 +
#include <OneWire.h>            // listet in library manager
 +
#include <DallasTemperature.h>  // listet in library manager
 +
#define ONE_WIRE_BUS 2          // sensor is connected to GPIO2
  
#include <Wire.h>
 
#include "Adafruit_MPRLS.h"
 
#include <OneWire.h>
 
#include <DallasTemperature.h>
 
#define ONE_WIRE_BUS 4
 
 
OneWire oneWire(ONE_WIRE_BUS);
 
OneWire oneWire(ONE_WIRE_BUS);
 
DallasTemperature sensors(&oneWire);
 
DallasTemperature sensors(&oneWire);
#include <phyphoxBle.h>
+
 
float p;
+
 
#define RESET_PIN -1
+
void setup(void) {
#define EOC_PIN -1
+
  // Start the BLE server, argument is visible name
Adafruit_MPRLS mpr = Adafruit_MPRLS(RESET_PIN, EOC_PIN);
+
  PhyphoxBLE::start("Thermometer 01");
void setup() {
+
 
PhyphoxBLE::start("Baro_Therm_01");
+
  //Experiment
//Experiment
+
  PhyphoxBleExperiment thermometer;
PhyphoxBleExperiment experiment;
+
  thermometer.setTitle("Thermometer");
experiment.setTitle("Baro_Therm_01");
+
  thermometer.setCategory("ESP32 Experiment");
experiment.setCategory("Arduino Experiments");
+
  thermometer.setDescription("Plot the Temperature over time. Used togehter with an DS18B20");
experiment.setDescription("Plot the pressure over time.");
+
 
//View
+
  // View
PhyphoxBleExperiment::View view;
+
  PhyphoxBleExperiment::View view;
//Value
+
  view.setLabel("Raw data");
PhyphoxBleExperiment::Value Value1;
+
 
Value1.setLabel("p = ");
+
  // Graph
Value1.setUnit("hPa");
+
  PhyphoxBleExperiment::Graph tempGraph;
Value1.setChannel(1);
+
  tempGraph.setLabel("Temperatur");
PhyphoxBleExperiment::Value Value2;
+
  tempGraph.setUnitX("s");
Value2.setLabel("Theta = ");
+
  tempGraph.setUnitY("°C");
Value2.setUnit("°C");
+
  tempGraph.setLabelX("time");
Value2.setChannel(2);
+
  tempGraph.setLabelY("Theta");
//Graph
+
  tempGraph.setChannel(0, 1);
PhyphoxBleExperiment::Graph graph1;
+
 
graph1.setLabel("Druck");
+
  view.addElement(tempGraph);             // attach graph to view
graph1.setUnitX("s");
+
  thermometer.addView(view);               // attach view to experiment
graph1.setUnitY("hPa");
+
  PhyphoxBLE::addExperiment(thermometer); // attach experiment to server
graph1.setLabelX("time");
+
 
graph1.setLabelY("p");
+
  sensors.begin();
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;
+
void loop(void) {  
for(int i=0;i<37;i++){
+
  sensors.requestTemperatures();         // request all temperatures
p+=mpr.readPressure();
+
  float T = sensors.getTempCByIndex(0); // get temperature with index 0
delay(10);
+
  PhyphoxBLE::write(T);                 // send temperature to phyphox
}
+
  delay(500); // wait 500ms
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 08:54, 18 November 2023

Ein Thermometer für alle Fälle
Experiment Ein Thermometer für alle Fälle
Category Arduino library experiments
Used sensors DS18B20


Der DS18B20 ist ein sehr weit verbreiteter Temperatursensor. Dank des OneWire-Buses hat der Sensor nur drei Anschlüsse und kann extrem einfach mit einem Mikrocontroller verbunden werden. Zusätzlich wird noch ein 4k7-Widerstand benötigt, um den OneWire-Bus zu stabilisieren. Um den Temperatursensor schön kompakt zu gestalten, wurde auf dem Bild oben ein ESP32-C3 verwendet. Der kann nicht so viel wie der normale ESP32, muss es hier aber auch nicht.

DS18B20.jpg


Aufbau

Der Temperatursensor liefert seine Daten über den OneWire-Bus: 3V3 – Vin, Gnd – Gnd, 2 - Datenbus. Der Datenbus Pin 2 ist, wie oben beschrieben, über Pullup-widerstand auf "High" hochgezogen. Die Bluetooth-Antenne wurde einfach abgeknipst, für kurze Entfernungen reicht es mit dem Rest den Rest den Anschlusskabels. Achtung: Das Koaxialkabel muss so abgekniffen werden, dass nichts kurzgeschlossen wird!

Ist alles verlötet und funktioniert, kann es kompakt mit Schrupfschlauch eingepackt werden. Nicht vergessen, den dünneren Schrupfschlauch für die Zugentlastung und Knickschutz vor dem Löten übers Kabel zu schieben...

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

/* ////////////////////////////////////////////////////////////////////////////
  phyphox ESP32 for temperature sensor DS18B20
  TODO: -
  AUTHOR: Torsten Klaffs
  LICENSE: CC0
*/

#include <phyphoxBle.h>
#include <OneWire.h>            // listet in library manager
#include <DallasTemperature.h>  // listet in library manager
#define ONE_WIRE_BUS 2          // sensor is connected to GPIO2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);


void setup(void) {
  // Start the BLE server, argument is visible name
  PhyphoxBLE::start("Thermometer 01");

  //Experiment
  PhyphoxBleExperiment thermometer;
  thermometer.setTitle("Thermometer");
  thermometer.setCategory("ESP32 Experiment");
  thermometer.setDescription("Plot the Temperature over time. Used togehter with an DS18B20");

  // View
  PhyphoxBleExperiment::View view;
  view.setLabel("Raw data");

  // Graph
  PhyphoxBleExperiment::Graph tempGraph;
  tempGraph.setLabel("Temperatur");
  tempGraph.setUnitX("s");
  tempGraph.setUnitY("°C");
  tempGraph.setLabelX("time");
  tempGraph.setLabelY("Theta");
  tempGraph.setChannel(0, 1);

  view.addElement(tempGraph);              // attach graph to view
  thermometer.addView(view);               // attach view to experiment
  PhyphoxBLE::addExperiment(thermometer);  // attach experiment to server

  sensors.begin();
}

void loop(void) { 
  sensors.requestTemperatures();         // request all temperatures
  float T = sensors.getTempCByIndex(0);  // get temperature with index 0
  PhyphoxBLE::write(T);                  // send temperature to phyphox
  delay(500); // wait 500ms
}

Arbeitsmaterialien