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 zusammen,

ich bin totaler Neueinsteiger was die Wemos Welt angeht, deshalb verzeiht meine vielleicht blöden Fragen. Ich habe nach der Anleitung das IDE konfiguriert und den Sketch auch ohne Probleme draufspielen können. Leider bekomme ich vom Sensor aber wohl keine Werte zurück (ich habe die wasserdichte Variante JSN-SR04T genommen).
Verkabelt habe ich wie in der Anleitung mit 5v/GND/D3/D4, es leuchte am SR04T auch das rote Licht.
Hat jemand eine Idee wo ich weiter suchen könnte? Habe ich noch irgendwas vergessen oder falsch verkabelt?

Sven

Hallo, ich möchte gerne das Projekt nachbauen.
Ich würde einen JSN-SR04T benutzen und habe dazu eine Frage:
Wie “wasserdicht” ist der JSN-SR04T? Ich hatte nämlich schon mal das Problem, dass aufgrund eines Jahrhundertregens die Zistene übergelaufen ist. Dabei hat es sogar den Gullideckel angehoben. Kann der JSN-SR04T so eine Belastung ab oder ist danach eine Neuanschaffung notwendig? Vielen Dank, Andreas

Andreas

Weiß jemand, wie man Werte im ESP auf und abrunden kann? Oder in FHEM?
Den Wasserstand lasse ich mir mit 1 Nachkommastelle ausgeben und logge nur wenn sich dieser ändert. Die Umrechnung in LITER allerdings ändert sich stetig, da er die Berechnung mit dem Zwei Nachkommastellenwert vornimmt.

Ideal wäre auf 5L auf- und abzurunden, zb 4191Liter = 4190, 4196Liter=4200

2019-07-22_09:11:42 ESPEasy_ESP_Zisterne_LEVEL Level: 83.8
2019-07-22_09:11:50 ESPEasy_ESP_Zisterne_LITER Liter: 4191
2019-07-22_09:24:11 ESPEasy_ESP_Zisterne_LITER Liter: 4192
2019-07-22_09:34:11 ESPEasy_ESP_Zisterne_LITER Liter: 4193
2019-07-22_09:44:11 ESPEasy_ESP_Zisterne_LITER Liter: 4191

Dennis

Hallo zusammen,
besten Dank für diese hervorragende Anleitung! ich nutze ebenfalls den JSN-SR04T für meine Zisterne. Den Sensor habe ich über ein Leerohr 1m unter den Zisternendeckel gehangen. Die Verbindung zum D1 Mini habe ich mit einem 15m Cat7 Kabel verlängert, funktioniert ohne Probleme. Vorteil ist, der D1 Mini ist in der trockenen Garage. Mal sehen wie lange das Setup so funktioniert :)

Dennis

Hab ich und der Sensor meint das Faß ist immer voll. Durch die Reflektionen der Seitenwand vermute ich mal. Der Schallkegel ist einfach zu breit für ein Faß mit 60cm Durchmesser. Ich Baue jetzt mal die Version: http://denstomotolog.ru/wasserstandsanzeige-wohnwagen/
Mal sehen ob es das bei meinem hohen und schmalen Faß besser funktioniert.

Grüße Marko

Marko

Hinterlassen Sie einen Kommentar

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