Und wieder habe ich Probleme mit der Füllstandsmessung in meiner Regenwasser Zisterne. Diesmal liegt es am Kabel vom Abstandssensor in der Zisterne bis zur eigentlichen Elektronik, die im Pumpenhaus ist.

Also wieder ein Projekt dazwischen geschoben…

Zuerst habe ich mir überlegt, die ganze Elektronik, also Sensor und ESP8266 in die Zisterne zu packen. Dazu brauche ich natürlich ein möglichst Wasserdichtes Gehäuse. Ich habe mir etwas entsprechendes schnell in 3D entworfen und ausgedruckt. Auch sind die zuletzt von mir montierten Gewindestangen beim reinigen des Schmutzkorbes irgendwie immer im Weg. Darum habe ich mir eine Rohrschelle besorgt, so dass ich mein Gehäuse mit einer Schraube direkt an einem der Rohre befestigen kann.

Hier auch wie immer die STL-Dateien für das Gehäuse.

Auch habe ich die Verbindung zwischen Platine und Sensor nun mit einem Stecker gelöst. Sollte der Sensor also wieder einmal rosten, kann ich ihn einfach durch einen neuen ersetzen.

Die eigentliche Steuerplatine mit dem ESP8266 habe ich im Gehäuse dann einfach darüber gelegt. Auf dem Bild ist rechts auch der neue Stromanschluss zu sehen. Diesmal als Steckverbindung und mit ordentlich Schrumpfschlauch schön wasserfest gemacht.

ESP8266 Elektronik mit Abstandssensor im Gehäuse
Elektronik im Gehäuse

Dann das Gehäuse mit einer M8 Schraube an der Rohrschelle befestigt und den Deckel mit M3 Gewindeschrauben auf das Gehäuse geschraubt. Nicht zu fest anziehen, sonst bricht der Kunststoff…

Gehäuse an Rohrschelle mit zugeschraubtem Deckel
Zugeschraubtes Gehäuse an Rohrschelle

Dann habe ich das ganze wie geplant an einem der KG Rohre in der Zisterne, kurz über der maximalen Wasserhöhe montiert und den vorher verlegten Stromstecker angeschlossen.

Abstandssensor montiert an Rohrschelle in Zisterne
Sensor in Zisterne

Das eigentliche Netzteil ist im Pumpenhaus geblieben. Zur Sicherheit habe ich dort noch einen 1 Ampere Sicherungsautomaten zwischen geschaltet. Nur für den Fall, das es bei der Elektronik doch einen Wasserschaden gibt, will ich nicht das mein Steckernetzteil “abbrennt”.

1A Sicherung im Pumpenhaus

Bei der Überarbeitung der Wasserstandsmessung habe ich auch die Software auf dem ESP8266 aktualisiert:
– Umstellung auf ESP8266WebServer
– Daten werden nicht mehr zum Homeserver gepusht, sondern dieser kann sich die Daten über eine URL abholen (pull)
– Kleine Internetseite zu Diagnosezwecken gemacht
– Messroutine ist geblieben

// Zisterne3.0.ino
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const int pingPin = 14; // Trigg
const int start_signal = 12; // Echo
const long middles = 5; // Mittelwerte

ESP8266WebServer server(80); // Webserver
WiFiClient client;

              
void setup() {
  Serial.begin(115200);

  IPAddress ip(192, 168, X, Y);
  IPAddress gateway(192, 168, X, Z); 
  IPAddress subnet(255, 255, 255, 0); 
  WiFi.config(ip, gateway, subnet);
  WiFi.begin("SSID", "PWD");

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP());  

  server.on("/", handle_normal);
  server.on("/hs", handle_hs);
  server.on("/hs/1", handle_hs);
  server.onNotFound(handle_NotFound);  
  server.begin();
  Serial.println("http server startet");
}


void loop() {
  server.handleClient();
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

void handle_normal() {
  Serial.println("handle /");
  long distance = measureMiddle();
  String msg = String("<!DOCTYPE html><html>") + 
    "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">" + 
    "<link rel=\"icon\" href=\"data:,\">" + 
    "<body><h1>Zisterne F&uuml;llstand Server</h1>" + 
    "<p>Example for simple output: /hs/1</p>" + 
    "<br><p>Current distance: " + String(distance) + "</p>" + 
    "</body></html>\r\n" ;
  server.send(200, "text/html", msg); 
}

void handle_hs() {
  Serial.println("handle /hs");
  long distance = measureMiddle();
  String msg = String("D=" + String(distance) + "\r\n");
  server.send(200, "text/html", msg); 
} 

long measureMiddle() {
    Serial.println("measuering");
    long distance, i; 
    distance = 0;
    for (i = 0 ; i <= middles ; i++) {
      distance = distance + doMeasure();
    } 
    distance = distance / middles;  

    Serial.println(distance);

    return (distance);    
}

long doMeasure() {
  long duration;

  pinMode(pingPin,OUTPUT);
  pinMode(start_signal,OUTPUT);
  digitalWrite(start_signal,HIGH);
  delayMicroseconds(20);
  digitalWrite(start_signal,LOW);
  digitalWrite(pingPin,LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin,HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin,LOW);
  pinMode(pingPin,INPUT);  
  duration = pulseIn(pingPin,HIGH);
  delay(80);
  return (microsecondsToCentimeters(duration));
}
 
long microsecondsToCentimeters (long microseconds) {
  return microseconds  / 29 / 2;
}

Dadurch ist der Code auch deutlich aufgeräumter und übersichtlicher geworden.

Die Logik im Homeserver um die Webseite regelmäßig zu laden ist sehr einfach.

Logik für regelmäßigen Aufruf der Internetseite vom Gira Homeserver
Logik für regelmäßígen Aufruf der Internetseite

Ich nutze einfach den Telegrammgenerator um alle 60 Sekunden die Webseite abzurufen. Ich habe das generisch umgesetzt, da ich plane alle ESP8266 Sensoren auf diese Technik umzubauen.
Unterhalb des Telegrammgenerators ist die Umrechnung von der Füllhöhe auf eine Prozentanzeige zu sehen.

Wie ist immer so ist im Leben: Man kann noch so viel planen, irgendwas kommt immer dazwischen und wirft alles wieder durcheinander. 😉

So auch dieses Projekt, denn:
Mein Zisternen-Sensor hat einen Wasserschaden!

Wasserschaden HC-ST04 Ultraschall Abstandssensor
Wasserschaden am HC-ST04 Ultraschall Abstandssensor.

Das kommt daher, dass sich am Deckel über dem Sensor Kondenswasser bildet und dann auf den Sensor tropft. Das ist auch wohl schon im Winter passiert, so durchgerostet wie einige Teile des Sensor-Moduls sind.

Da ich den Sensor nun erneuern muss, bot sich auch die Gelegenheit gleich noch ein paar Dinge mit zu verbessern:

  • Die Halterung. Diese muss jetzt ja auch vor Wasser von oben schützen
  • Außerdem war der Sensor sehr nah über dem Saugschlauch montiert, das brachte die Messung hin und wieder durcheinander.
  • Und dann muss man ja auch alle paar Wochen noch den Schmutz-Fang-Korb sauber machen. Also wollte ich die Kabel steckbar machen um die Wartung zu erleichtern.

Zunächt also musste ein neuer Sensor her. Wie schon zuletzt habe ich einen HC-SR04 besorgt. Diesmal als Set – man weiß ja nie. 😉

Dann habe ich eine neue Halterung entworfen und ausgedruckt. Diesmal mit Deckel und auch etwas näher an der Wasseroberfläche montiert. Es sind drei Teile: Einmal die Halterung, dann der Deckel und dann der Haltewinkel für die Metallschiene swe Zisterne. Alles werde ich mit 6mm Gewindestangen verbinden. Hier gibts auch die .STL Datei.

Zisternen Sensor Halterung 2.0
Neue Halterung für Abstandssensor

Doch bevor ich alles zusammenbaue, hier nochmal die Einzelteile:

Einzelteile Halterung 2.0
Einzelteile Halterung 2.0, M6 Muttern, Unterlegscheiben, Gewindestangen und die gedruckten Halterungen.

Dann habe ich erstmal gelötet und das Kabel bzw. Sensor mit Pfostensteckern versehen. So kann ich das Kabel ganz leicht vom Sensor oder von der Basis trennen.

Und montiert in der Zisterne sieht es dann so aus. Denke, das ist deutlich professioneller als mit der alten Halterung. Und ich hoffe das “Dach” schützt den Sensor ausreichend.

Montierter Abstandssensor in Zisterne
Montierter Abstandssensor in Zisterne