MyScienceBlog

DIY Poolthermometer

Luke
25.11.2024

Die Regelung der Temperatur von einem Pool ist nicht immer leicht, da man regelmäßig zum Pool gehen muss, um das Thermometer abzulesen. Aus diesem Grund habe ich in meinem eigenen Smart-Home-System (MSH - MySmartHome) ein selbstgebasteltes Thermometer integriert. 

Schaltung
Das Thermometer wurde mit einem ESP8266-12F und einem DS18B20 (Temperatursensor) realisiert und in eine wetterfeste Box gepackt. Aus der Box reicht das Thermometer über ein ca. 1,5m langen Kabel, dass in den Pool gehalten werden kann. So wird die Themperatur nicht an der Oberfläche gemessen und man bekommt zuverlässigere Werte der Themperatur. Hier ist ein Foto vom Inneren der Box:


Da das Kabelchaos recht unübersichtlich ist, habe ich hier nochmal den Schaltplan mit Fritzing nachgebaut:


Software
Da die Batterien sich nicht lange halten würden, geht der ESP in den Deepsleep, um Strom zu sparen. Das heißt, dass sich der ESP alle 15min anschaltet und die Pooltemperatur an MSH übermittelt. Der Code für den ESP ist folgender (Sensible Daten verändert):
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ArduinoJson.h>

// Replace with your network credentials
const char* ssid = "WLAN-NAME";
const char* password = "PWD";

// Server URL
const char* serverName = "MSH/api/temperatur/postData";

// GPIO where the DS18B20 is connected to
#define ONE_WIRE_BUS 4

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

void setup() {
  delay(10);

  // Connecting to WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
  }

  sensors.begin();

  // Request temperature
  sensors.requestTemperatures();
  float temperatureC = sensors.getTempCByIndex(0);

  // Send temperature data to server
  if (WiFi.status() == WL_CONNECTED) {
    WiFiClient client;
    HTTPClient http;
    http.begin(client, serverName);

    // Specify content-type header
    http.addHeader("Content-Type", "application/json");

    // Create JSON object
    StaticJsonDocument<200> jsonDoc;
    jsonDoc["temperatur"] = temperatureC;

    // Serialize JSON object to string
    String jsonString;
    serializeJson(jsonDoc, jsonString);

    // Send HTTP POST request
    http.POST(jsonString);

    // Close connection
    http.end();
  }

  // Configure Deep Sleep mode
  ESP.deepSleep(15 * 60 * 1000000); // Sleep for 15 minutes
}

void loop() {
  // This will never be called
}


Dargestellt wurde es über MSH. Hier ist ein Screenshot der Ansicht:

Ein ganzer Artikel zu MSH kommt noch

Zusammenfassung
Durch die Auswertung konnten wir feststellen, wann und dadurch zurückschließen warum die Temperatur abfällt und etwas dagegen zu unternehmen. Somit konnten wir die Temperatur gut regeln.