Zisterne Füllstandsanzeige

65 Kommentare
Zisterne Füllstandsanzeige

Hier zeige ich euch wir Ihr mit einem Wemos den Wasserstand einer Zisterne überwachen könnt.
Ich habe es recht einfach gehalten, der Ultraschallsensor misst die Entfernung zur Wasseroberflache und rechnet das in ein Volumen um. Dieses kann dann über eine Intranetseite abgerufen werden. Man kann das ganze natürlich noch erweitern z.B. ab einem bestimmten Wasserstand ein Benachrichtigung via Mail zu erhalten.
So sieht das Ganze auf der Intranet Seite aus, die Bilder für die Balkenanzeige liegt auf meiner Homepage, kann man auch weglassen.



Leider habe ich vor dem Einbau keine Fotos mehr von den Bauteilen gemacht, aber ich denke das ist nicht so schwer zum nachbauen. Denn Ultraschallsensor habe ich in eine Abzweigdose aus dem Baumarkt eingebaut und mit Silikon abgedichtet. Den Wemos D1 mini habe ich in eine etwas größere Abzweigdose gepackt und das ganze mit einer 4 Adrigen Leitung verbunden. Der Wemos benötigt noch Spannung, die bei mir eh vorhanden ist durch die Wasserpume.

Die Beschaltung


Der Programmcode:

Wie Ihr den Wemos D1 mini installiert findet Ihr hier. Die Bilder für die Batterie könnt Ihr hier herunterladen.

#include <ESP8266WiFi.h>
  
const char* ssid = "Wifi Name";
const char* password = "Password vom Wifi";
  
WiFiServer server(80);
  
int trigger = 0;
int echo = 2;
long dauer = 0;
  
long entfernung = 0;
  
void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println();
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  // Connect to WiFi network
  WiFi.mode(WIFI_STA);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  // Start the server
  server.begin();
  Serial.println("Server started");
  // Print the IP address
  Serial.println(WiFi.localIP());
}
void loop() {
  digitalWrite(trigger, LOW);
  delay(5);
  digitalWrite(trigger, HIGH);
  delay(10);
  digitalWrite(trigger, LOW);
  dauer = pulseIn(echo, HIGH);
  entfernung = (dauer / 2) / 29.1;
  String cmd;
  cmd += """;
  WiFiClient client = server.available();
  client.println("HTTP/1.1 200 OK");
  client.println();
  client.println("<!DOCTYPE html>");
  client.println("<html xmlns='http://www.w3.org/1999/xhtml'>");
  client.println("<head>n<;meta charset='UTF-8'>");
  client.println("<title>Wasserstand Regenwasserzisterne</title>");
  client.println("</head>n<body>");
  client.println("<H2>Wasserstand Regenwasserzisterne</H2>");
  client.println("<h3>");
  if (entfernung >= 200 || entfernung <= 0)
  {
    client.println("Kein Messwert");
  }
  else
  {
    entfernung = 192 - entfernung;
    entfernung = entfernung * 84.7457;
    client.print(entfernung);
    client.println(" Liter");
  }
  if (entfernung >= 0 && entfernung <= 1833)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://xxx/bat_0.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(80);
    client.print(cmd);
    client.println("/>");
  }
  if (entfernung >= 1833 && entfernung <= 3666)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://xxx/bat_emty.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(80);
    client.print(cmd);
    client.println("/>");
  }
    if (entfernung >= 3666 && entfernung <= 5500)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://xxx/bat_2.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(80);
    client.print(cmd);
    client.println("/>");
  }
    if (entfernung >= 5500 && entfernung <= 7332)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://xxx/bat_half.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(80);
    client.print(cmd);
    client.println("/>");
  }
    if (entfernung >= 7332 && entfernung <= 9165)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://xxx/bat_4.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(80);
    client.print(cmd);
    client.println("/>");
  }
    if (entfernung >= 9165 && entfernung <= 16000)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://xxx/bat_full.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(80);
    client.print(cmd);
    client.println("/>");
  }
  client.println("</h3>");
  client.print("</body>n</html>");
  delay(500);
}

Die Berechnung des Volumen:

Die Zisterne fast 10000 Liter. Die 192 cm ist die Enfternung vom Sensor bis zum Boden der Zisterne. Jetzt brauchen wir den Multiplikator, die 100% sind bei mir bei 118 cm erreicht, also 10000/118=84,7457.
Das ist nun der Multiplikator aus der Sketch.

UPDATE:

Ich habe einen Wasserdichten Sensor gefunden und getestet. Der JSN-SR04T, dieser Funktioniert ohne Probleme und kann in den bestehenden Sketch eingebunden werden ohne was zu verändern. Ich habe auch den DYP-ME007Y ausprobiert, diesen habe ich jedoch nicht zum laufen bekommen. Ich hatte zwei Stück und beide haben nicht funktioniert.

Folgende Bauteile wurden verwendet:

1x Ultraschallsensor HC-SR04 https://ap-url.de/hcsr04
1x Ultraschallentfernungsmesser AJ-SR04M / JSN-SR04T Wasserdicht https://ap-url.de/jsnsr04t
1x D1 mini https://ap-url.de/d1mini
1x ca. 2m 4 Adrige Leitung http://amzn.to/2nqOzWs
1x Silikon http://amzn.to/2nHPqOn
1x Abzweigdose klein
1x Abzweigdose groß http://amzn.to/2nHWFpA
1x ein Stück Blech um den Sensor am Decker der Zisterne zu befestigen
Arduino HC-SR04 Projekte Wemos D1 mini Zisterne Füllstandsanzeige

65 Kommentare

Hallo, ich hab mal hier eine Adresse von Ebay für ein Wasserdichte Füllstandsanzeige: https://www.ebay.de/itm/JSN-SR04T-Wasserdichtes-Ultraschall-Modul-Entfernungsmesser-Arduino-Raspberry-Pi/182897980375?hash=item2a9591b3d7:g:Ud8AAOSwVFJbu3KJ. Natürlich gibt es noch mehrere Händler dafür.

Gerald Weigelt

Hallo Tobias,
tolles Projekt! Ich baue es gerade nach. Wenn die 1833 Literangaben sind, warum geht die “if”-Abfrage zur Anzeige des Zisternenfüllstandsbildes dann im Script bis 16000, wenn Deine Zisterne nur 10.000 Liter hat. Oder bin ich auf dem falschen Weg?

Ingo Marx

Sehr coole Idee.
habe selber noch OTA funktion eingebaut. Nur dann kann ich nicht mehr auf die website zugreifen.
Irgendwelche ideen warum das nicht geht?

Genutzt habe ich Arduino OTA

Toasteraxt

Guten Tag,
ich bin völlig neu in der Arduino Programmierung, da mich dieses Projekt sosehr gereizt hat, dass ich mich daran versuche.
Nunja, wie immer als Noob, gelingt eben nicht alles sofort, deshalb hier nun ein paar Fragen zu diesem Projekt:
Ich habe alles versucht nachzuvollziehen, was mir auch bei vielem geglückt ist. Nur eben nicht bei der Entfernung…
Bei mir sitzt der Ultraschallsensor 44cm über der Max. Höhe des Wassers am Deckel der Zisterne. Dieser ist vom Boden der Zisterne 192cm entfernt. Also max. Höhe Wasser 148cm vom Boden. Daraus habe ich berechnet bei 5500L Zisternenvolumen, ein Multiplikator von 37,16L.
Wie kommst du nun auf die Entfernungen für deine Anzeige aus den 6 Balken?
if (entfernung >= 0 && entfernung <= 1833)
Was bedeutet hier 1833???

Ich habe bei mir alles so übernommen, jedoch erscheint immer die Anzeige "kein Messwert". Allerdings auch nur, wenn ich direkt mit USB verbunden bin. Aber das liegt wohl an dem Bug mit D3 und D4. Das werde ich noch ändern, dass es dann auch per Netzteil funktioniert.
Falls ich irgendwelche wichtigen Infos vergessen habe, bitte ich um einen kleinen Hinweis.

Pat Schu

> Anstatt D3 und D4 kann man auch GPIO D1 und D2 nehmen. Echo (D2) sollte über einen Spannungsteiler zum D1 mini geführt werden z.B. R1=1,2k u. R2=2,2k Ohm (5V>3.3V).

gerry.s

Hinterlassen Sie einen Kommentar

Bitte beachten Sie, dass Kommentare vor der Veröffentlichung genehmigt werden müssen.