Arduino Nano Wasserstandsanzeige mit LCD spielt verrückt

Hallo Arduino Gemeinde,
da ich als Neuling nicht viel Erfahrung mit Arduino und vor allem mit dem programmieren habe nimmt man natürlich einen Bauvorschlag aus dem Netz.
Folgendes wollte ich nachbauen
DIY Automatic WATER LEVEL MONITOR System using Arduino zu finden auf You…
von Easy HomeMade Projects.
Ich wollte allerdings nur die Anzeige verwenden um den Füllstand im Wohnwagentank (Frischwasser) anzuzeigen.
Alles was mit der Pumpe zu tun hat habe ich nicht aufgebaut.Im Sketch aber noch drin.
Also nachgebaut und Arduino Sketch aufgespielt.
Auf den ersten Blick OK.
Aber:

Im Sketch gibt es eine Zeile mit Z
int z = 111; // Adjust this value from 100 to 1023 if your circuit do not show correct value.
Da habe ich schon fleißig gespielt.
Ich vermute das hat was im Endeffekt mit der Leitfähigkeit des Wassers zu tun.
Kurz gesagt ich finde einen Wert (nur mit viel probieren und dann nur mit einem festen Wert,kaum Toleranz)wo das halbwegs funktioniert.
Wobei die 40%/60%/80% im LCD Display immer richtig angezeigt werden bzw. schaltet.
Bei Empty bzw. 20% verzweifle ich jetzt.
Als Sonde habe ich 6 VA Stäbe mit Verschraubung für den Tank.
1 x 5 Volt und 5 x zum Analogeingang von Nano

Ich verstehe einfach nicht warum 3 Levelabfragen einwandfrei funktionieren und Leer bzw. 20% und 100% nicht.

Ich hoffe auf eine Hinweiß

Vielen Dank

//Automatic Water Level control system by Easy HomeMade Projects.
//Arduino code written by Engr. Usman Ahmad.
//Use arduino UNO or Arduino NANO.
#include <LiquidCrystal.h>
int level1 = A1;
int level2 = A2;
int level3 = A3;
int level4 = A4;
int level5 = A5;
int motor = 6;
int a;
int b;
int c;
int d;
int e;
int r; //Water Pump status flag
int m = 0; //water Pump flag
int z = 81; // Adjust this value from 100 to 1023 if your circuit do not show correct value.


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
  pinMode(level1, INPUT);
  pinMode(level2, INPUT);
  pinMode(level3, INPUT);
  pinMode(level4, INPUT);
  pinMode(level5, INPUT);
  pinMode(motor, OUTPUT);
  lcd.begin(20, 4); // if you are using 16x2 line LCD, then replace these values and also adjust all LCD text for 1st and 2nd line in the loop below.
}

void loop()
{

  r = digitalRead(motor);
  a = analogRead(level1);
  b = analogRead(level2);
  c = analogRead(level3);
  d = analogRead(level4);
  e = analogRead(level5);
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print("  Knaus 420 QD");
  lcd.setCursor(0, 1);
  lcd.print("Water Level Monitor.");

  if (e > z && d > z && c > z && b > z && a > z )
  {
    {
      digitalWrite(motor, LOW);
    }
    lcd.setCursor(1, 2);
    lcd.print("Tank is 100% FULL");
  }
  else
  {
    if (e < z && d > z && c > z && b > z && a > z )
    {
      lcd.setCursor(1, 2);
      lcd.print("Tank is 80% FULL");
    }
    else
    {
      if (e < z && d < z && c > z && b > z && a > z )
      {
        lcd.setCursor(1, 2);
        lcd.print("Tank is 60% FULL");
      }
      else
      {
        if (e < z && d < z && c < z && b > z && a > z )
        {

          lcd.setCursor(1, 2);
          lcd.print("Tank is 40% FULL");
        }
        else if (e < z && d < z && c < z && b < z && a > z )
        {
          lcd.setCursor(1, 2);
          lcd.print("Tank is 20% FULL");
        }
        else
        {
          if (e < z && d < z && c < z && b < z && a < z )
          {
            {
              digitalWrite(motor, HIGH);
            }

            lcd.setCursor(3, 2);
            lcd.print("Tank is EMPTY");
          }
        }
      }
    }
  }
  if (r == LOW)
  {
    lcd.setCursor(0, 3);
    lcd.print("Water Pump is (OFF)");
  }
  else
  {
    lcd.setCursor(0, 3);
    lcd.print("Water Pump is (ON)");
  }
  {
    delay(100);
    lcd.clear();

  }
}

Knaus.ino (2.44 KB)

Bitte Poste das Schaltbild hier im Forum, damit es alle ohne viel Sucherrei sehen können.

Den Sketch bitte hier in Code-Tags einfügen, damit den alle lesen können.
Verwende dazu die Schaltfläche </> oben links im Editorfenster oder am Anfang [ code] und am Ende [ /code] ohne die Leerzeichen.

Ich hoffe so passt das jetzt mit dem Sketch und dem Schaltplan
Danke

dh5sdl:
Ich hoffe so passt das jetzt mit dem Sketch und dem Schaltplan
Danke

Ok, super. Da kann man alles gut erkennen.
Ich schau es mir an.

Ja, das Problem ist sicher die Leitfähigkeit.

Ich habe solche Sensoren schon gesehen, diese aber immer mit nachgeschalteten Verstärkern, wie z.B. Transistoren oder OpAmps. Da hat mann deutlich mehr Reserven. Nur so am Arduino sehe ich das seht kritisch, zumal du sehr wahrscheinlich im niedrigen Bereich nur wenige cm Wasser zur Verfügung hast. Da könnte man es an dieser Stelle ja mit einem Transistor versuchen.

Ich hatte auch versucht das mit Transistoren aufzubauen aus einem anderen Bauvorschlag.
Aber das war gar nichts.
Hier passiert nichts.

Was ich halt absolut nicht verstehe ist das 3 Eingänge einwandfrei funktionieren.
40/60/80%
Die anderen bekomme ich je nach dem wie ich z einstelle kurz zur Anzeige aber dann verschwindet der Wert bzw. die Zeile im Display Tank is 20% Full oder Tank is 100% Full
Wenn wenigstens alle nicht gehen würden…wäre auch nichts.
Aber das es nur teilweise geht bringt mich zur Verzweiflung.

Leider habe ich mit der von dir gezeigten Schaltung keine Erfahrung.

Daher würde ich es mit Transistoren aufbauen und dann jeden einzelnen Pin des Controllers im Wert einstellbar machen.
Das die von dir gezeigte Transistorschaltung nicht funktioniert, wundert mich schon.
Allerdings würde ich die Schaltung auch anders dimensionieren.

Ich werde später vom PC mal meine Schaltung posten, die bei mir seit Jahren für eine Drainagepumpe funktioniert.
Also bitte etwas gedulden.

Hier die versprochen Schaltung.
Als Transistor geht auch der BC548B und der 100Ohm (R7) Widerstand kann auch direkt in die Basisleitung.

Wassersensor.png

Wassersensor.png

(deleted)

Ja die Widerstände sind alle gleich.
Ich habe auch schon vermutet das 1 oder 2 Eingänge ne Macke haben.
Oder im Sketch stimmt etwas nicht...das glaube ich aber weniger da es ja manchmal klappt.
Aber nie so 100% wie die 3 anderen.Mal gehts mal nicht..eher ein Lotteriespiel.
Ich teste nachher mal bzw.tausche etwas um zu sehen was passiert.
Bis dann.....auch gesund bleiben.

Das mit Durchluss ist auch eine Variante.
Mal sehen wo die Reise hingeht

(deleted)

So habe nochmal die Kabel kontrolliert und auch auf Durchgang überprüft.
Ich weiß nicht warum aber jetzt bin ich schon etwas weiter.
Empty / 20% / 40% / 60% funktioniert jetzt ohne Probleme und wird zuverlässig im Display angezeigt.
Wenn aber der Eingang 4 dazukommt also 80% dann springt die Anzeige auf 100% und nicht auf 80% so wie vorgesehen.
Jetzt muss ich mal diesen Eingang irgendwie prüfen.
Gruß Thomas

Hallo Dieter,
Hallo Peter,

erstmal vielen Dank für die Unterstützung.
Das messen der Analogeingänge hat mir gezeigt wo es klemmt.
Danke für den Tip.
Kurz gesagt am Eingang 4 lag das Problem.Nachgelötet und gut.

Es geht!!!!!!!!!!
Und nebenbei wieder etwas dazugelernt.

Ich wünsche euch alles Gute bleibt gesund und Danke

73 de Thomas (DH5SDL)

dh5sdl:
Kurz gesagt am Eingang 4 lag das Problem.Nachgelötet und gut.

Es geht!!!!!!!!!!
Und nebenbei wieder etwas dazugelernt.

Ich wünsche euch alles Gute bleibt gesund und Danke

73 de Thomas (DH5SDL)

Prima und danke, für dich auch und danke für die Rückmeldung.

(deleted)

Hallo Peter

der Laie erkannt da nichts.........da bin ich weit weg von Programmcode optimieren.
Da es jetzt läuft kann ich es endlich einbauen in den Wohni und Anfang August testen.
Da geht es ein wenig auf Reise.

Und dann suche ich mir das nächste Problem hihi

Tschüß 73 Thomas

dh5sdl:
Und dann suche ich mir das nächste Problem hihi

Tschüß 73 Thomas

Hallo Thomas, solltest Du kein Problem finden, einfach bei mir melden, ich hab jede Menge Probleme, verschiedenster Art. Kannst Dir also einfach eines aussuchen.

LG Stefan