Füllstandsanzeige verbessern

Hallo,
ich habe mir ein Sketch/Script geladen und auf meine Bedürfnisse geändert, mit dem ich den Füllstand meiner Zisterne kontrollieren kann. Ich verwende dazu den NodeMCU V3 und den Sensor HC-SR04. Nun würde ich gern zwei Variable x & y (Abstand min/Abstand max) innerhalb der HTML-Darstellung ändern wollen, da ich bis jetzt immer direkt in die INO-Datei hinein muß. Gibt es dafür in diesem Forum eine Hilfestellung? Das Script habe ich mal in den Anhang gelegt.

Danke im Voraus

fuellstand.ino (9.62 KB)

Es gibt unzählige Beispiele für Webserver mit dem ESP8266 und wie man damit Variablen ändern kann. Entweder suchen oder mal bei Fips vorbei schauen.

Gruß Tommy

Hallo Axel, schaust Du in die Sterne?

Suchst Du nach Formularen?

Ich suche auch eine Füllstandsmessung für diese Dinger (siehe Anhang).
Oben im Deckel mit HC-SR04 funktioniert nicht, da der Ultraschall in einem geschlossenem Behälter sinnlose Ergebnisse liefert.

container.jpg

und den sensor in ein rohr stecken welches unten (und oben auch) offen ist, also messung nur mit den (wenigeren) rohr-innen-reflektionen? füllstand des behälters dürfte ja im rohr gleich zum behälter sein.

natürlich nur wenn der behälter etc, das zulässt und nicht zb ein rührwerk darin arbeitet wo das 'messrohr' wäre ;-)

freddy64: Ich suche auch eine Füllstandsmessung für diese Dinger (siehe Anhang). Oben im Deckel mit HC-SR04 funktioniert nicht, da der Ultraschall in einem geschlossenem Behälter sinnlose Ergebnisse liefert.

Der geschlossene Behälter ist nicht das Problem.

Ich verwende einen wasserdichten US-Sensor in einer geschlossenen Zisterne und das funktioniert seit Jahren problemlos. Hier ist nur das Problem, der misst erst ab 20cm.

Bei den HC-SR04 macht die Feutigkeit schnell ein Problem. Evtl. sind da auch noch irgendwelche Schläuche im Weg ?

HotSystems: Ich verwende einen wasserdichten US-Sensor in einer geschlossenen Zisterne und das funktioniert seit Jahren problemlos.

Hast du davon mal ein Foto oder auch eine Handskizze parat, wie du das Ganze montiert hast, insbesondere mit Angabe von Abständen zur Zisternenwand usw.? Hintergrund ist, dass ich mittelfristig ebenso den Füllstand einer Zisterne überwachen möchte und mich aufgrund der schlechten Korrosionsbeständigkeit und der Reflexionsproblematik gedanklich bereits von Ultraschallsensoren verabschiedet habe. Statt dessen habe ich Differenzdrucksensoren in Betracht gezogen. Beispiel bei Amazon: Klick! In der Kabelummantelung läuft neben den Anschlusslitzen noch ein Kapillarschlauch, folglich wird immer gegen den äußeren Luftdruck gemessen.

sth77: Hast du davon mal ein Foto oder auch eine Handskizze parat, wie du das Ganze montiert hast, insbesondere mit Angabe von Abständen zur Zisternenwand usw.? .....

Ein Foto leider nicht, aber ich kann eine Skizze anfertigen. Gib mir ein paar Tage.

HotSystems: Gib mir ein paar Tage.

Selbstverständlich, danke schonmal vorab!

Moin zusammen,

Mir ist bewusst, dass der Thread schon älter ist, aber trotzdem.

In dem Script habe ich gesehen, dass man seine Füllstandswerte erfassen:

int x = 17; // Abstand Sensor Wasseroberfläche, ausmessen und den Wert hier eintragen
int y = 165; // Abstand Sensor Boden, ausmessen und den Wert hier eintragen

In welcher Einheit wird das eingegeben, cm, dm, m?

Danke im voraus,
Stephan

Das kommt darauf an, in welchen Einheiten im Rest deines Sketches gerechnet wird.

Moin,

Das ist ja gerade das Problem, es handelt sich ja um das Script, welches oben angepinnt ist, also nicht meins.

#include <ESP8266WiFi.h>

const char* ssid = "SSID";
const char* password = "PASSWORT";

WiFiServer server(80);

int trigger = 0;
int echo = 2;
long dauer = 0;
int x = 17; // Abstand Sensor Wasseroberfläche, ausmessen und den Wert hier eintragen
int y = 165; // Abstand Sensor Boden, ausmessen und den Wert hier eintragen
int z = 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) * 0.03432;

  String cmd;
  cmd += "\"";

  WiFiClient client = server.available();
  client.println("HTTP/1.1 200 OK");
  client.println();
  client.println("<!DOCTYPE html>");
  client.println("<meta name='viewport' content='width=device-width' />");
  client.println("<meta name='mobile-web-app-capable' content='yes' />");
  client.println("<meta name='viewport' content='width=device-width, initial-scale=1.0, user-scalable=no'>");
  client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
  client.println("<link rel='apple-touch-startup-image' href='http://webcam92.selfhost.eu:84/zisterne/fs.png'>");
  client.println("<link rel='apple-touch-icon' href='http://webcam92.selfhost.eu:84/zisterne/fs.png' />");
  client.println("<link rel='shortcut icon'' href='http://webcam92.selfhost.eu:84/zisterne/fs.png' size'196x196'>");
  client.println("<html xmlns='http://www.w3.org/1999/xhtml'>");
  client.println("<head>\n<meta charset='UTF-8'>");
  client.println("<title>Meine Zisterne</title>");
  client.println("</head>\n<body background-color: #666666;>");

  if (entfernung >= 200 || entfernung <= 0)
  {
    client.println("Kein Messwert");
    client.println("<br><input type='button' onclick='location.reload()' value='Aktualisieren' />");
  }
  else
  {

    z = 100.00 / (y - x) * (y - entfernung);
    

client.print ("<table width='100%'>");
client.print ("<tr>");
client.print ("<td colspan='2' align='center' style='color:#ffffff;font-size:200%;font-family:Arial;background-color:#2e86c1;padding:5px;'>Füllstandsanzeige</td></tr><tr>");
client.print ("<td style='font-size:90px;color:#000000;font-family:Arial;width:300px;text-align:center;background-color:#85C5EE;width:50%;'>");
client.print (z);
client.print ("</td><td style='font-size:90px;color:#000000;font-family:Arial;text-align:center;background-color:#85C5EE;width:50%;'>");
client.print (entfernung);
client.print ("</td></tr><tr><td style='font-size:15px;font-family:Arial;vertical-align:top;color:#000000;text-align:center;background-color:#5EACDF;'>F&uuml;llstand in %</td>");
client.print ("<td style='font-size:15px;font-family:Arial;vertical-align:top;color:#000000;text-align:center;background-color:#5EACDF;'>Abstand Sensor-Wasser in cm</td>");
client.print ("</tr><tr><td style='font-size:15px;font-family:Arial;vertical-align:top;color:#000000;text-align:center;background-color:#5EACDF;'>Wasservorrat in Liter</td>");
client.print ("<td style='font-size:15px;font-family:Arial;vertical-align:top;color:#000000;text-align:center;background-color:#5EACDF;'>");
client.print (3000/100*z);
client.print ("<p></p></td></tr><tr>");
client.print ("<td colspan='2' style='font-size:15px;font-family:Arial;vertical-align:top;color:#000000;text-align:center;background-color:#5EACDF;'>Konfiguration Sensor</td></tr><tr>");
client.print ("<td style='font-size:15px;vertical-align:top;font-family:Arial;color:#000000;text-align:center;background-color:#5EACDF;'>Sensor/Max. Höhe(cm)</td>");
client.print ("<td style='font-size:15px;vertical-align:top;font-family:Arial;color:#000000;text-align:center;background-color:#85C5EE;'>");
client.print (x);
client.print ("</td></tr><tr><td style='font-size:15px;font-family:Arial;vertical-align:top;color:#000000;text-align:center;background-color:#5EACDF;'>Sensor/Boden (cm)</td>");
client.print ("<td style='font-size:15px;font-family:Arial;vertical-align:top;color:#000000;text-align:center;background-color:#85C5EE;'>");
client.print (y);
client.print ("</td></tr><tr><td colspan='2' style='font-size:15px;vertical-align:top;color:#000000;text-align:center;background-color:#ffffff;'>");

    if (z >= -10 && z <= -1)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/low.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
  if (z >= 0 && z <= 5)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/0.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
    if (z >= 6 && z <= 10)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/1.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
    if (z >= 11 && z <= 20)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/2.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
    if (z >= 21 && z <= 30)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/3.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
    if (z >= 31 && z <= 40)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/4.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
    if (z >= 41 && z <= 50)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/5.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
    if (z >= 51 && z <= 60)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/6.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
      if (z >= 61 && z <= 70)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/7.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
      if (z >= 71 && z <= 80)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/8.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
      if (z >= 81 && z <= 90)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/9.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
      if (z >= 91 && z <= 100)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/10.jpg");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }

        if (z >= 101)
  {
    client.print("<br><img src=");
    client.print(cmd);
    client.print("http://webcam92.selfhost.eu:84/zisterne/jpg/11.gif");
    client.print(cmd);
    client.print(" ");
    client.print("width=");
    client.print(cmd);
    client.print(200);
    client.print(cmd);
    client.println("/>");
  }
   

client.print ("<br><input type='button' onclick='location.reload()' value='Aktualisieren' /></td>");
client.print ("</tr><tr><td colspan='2' style='font-size:15px;font-family:Arial;vertical-align:top;color:#000000;text-align:center;background-color:#5EACDF;'><br>© AxelM<br>Vers. Okt 2019<br><br></td></tr>");
client.print ("</table>");


  }


  client.println("</h3>");
  client.print("</body>\n</html>");
  delay(500);
}

Da es ja anscheinend um einen IPC Container geht, denke ich mal cm.

Dann lies man alles durch.
Steht doch im Sketch drin.

Okay, kann ich auch über den seriellen Monitor die Abfragen sehen? Ich würde gerne überhaupt mal sehen, ob der HC-SR04 funktioniert. Momentan zeigt er mir da gar nichts an.

Danke

Ok, hast du dir den verlinkten Sketch überhaupt mal durchgelesen ?
Da sind genügend serielle Ausgaben eingebaut. Somit solltest du, wenn du den Sketch verwendest, auch die Anzeigen sehen können.
Allerdings nur, wenn du alles richtig angeschlossen hast.

Das wissen wir allerdings nicht.
Ok, du musst noch eine serielle Ausgabe der gemessenen Daten einbauen, die sehe ich gerade nicht.

Moin,

Ja, angeschlossen ist alles korrekt, wenn ich ein anderen Sketch ausprobiere, dann sehe ich im Terminal Fenster auch die Werte. Nur bei diesem Sketch sehe ich nichts.

Wie müsste der Ausgabe-Befehl lauten? Bin noch nicht sehr bewandert mit den Arduinos.

Danke

Dann mach mal hiernach:
“entfernung = (dauer / 2) * 0.03432;”
dieses:
Serial.println(entfernung);

1 Like

1 Like

Inzwischen gibt es auch einen wasserdichten US-Sensor mit 2 Transducern, die ab 1-2 cm messen. Auch der verlinkte Druckdifferenzsensor hat bei mir im Test sehr gute Ergebnisse geliefert, allerdings mit ads1115 adc. Der interne Arduino adc ist wesentlich unpräziser.

@HotSystems Heißen Dank, aber wie du schon geschrieben hattest, sind in dem Script mehrere Abfragen enthalten. Nun weiß ich aber wenigstens den Befehl und habe die Abfrage mit eingebaut. Nachdem ich auch die korrekte Baudrate eingeben habe schreibt er nun auch. Nur die Abstandsmessung will noch nicht so wirklich funktionieren. Er schreibt mir immer nur “0”.

@agmue Danke schön, dann ist das auch schon mal geklärt.