Go Down

Topic: kapazitiver Wasserstandsmesser (Read 1 time) previous topic - next topic

maik0815

Hallo zusammen
Ich bin neu hier im Forum und habe erste Schritte mit den uno gemacht. Jetzt habe ih aber ein Problem bei dem ich nicht weiter komme. Die Praxisbeispiele im Netz helfen mir leider nicht (weil sie nicht funktionieren).
Das ist mein Problem:
Ich möchte in einem Wasserbecken den Wassstand über einen Pegelmesser realisieren. Die üblichen "Kupferdrähte" funktionieren auf dauer nicht da sie sich mit der Zeit auflösen. Daher habe ich mich für die kapazitive Messung entschieden. Bei einem bestimmten Messwert soll die Wasserpumpe (Relaiskarte steuert 230 Pumpe) eingeschaltet und bei einem anderen wieder ausgeschaltet werden. Hier mein Code:

void setup()
{
  Serial.begin(9600);
  pinMode(A0, INPUT); //Messfühler
  pinMode(13, OUTPUT); // pumpe
  }

void loop()
{
  int s = analogRead(A0); //Messwert
  Serial.print(s); Serial.print(" - ");

if(s > 350 && s <= 500) {
  Serial.println("giessen");
   digitalWrite(13, HIGH);
} else
if(s > 1 && s <= 349) {
 Serial.println("nass");
   digitalWrite(13, LOW);
}     
 delay(50);
}

Der serielle Monitor gibt auch alles prima aus. leider funktioniert der "digitalwrite"-Befehl nicht.
Hat jemand ne Ahnung warum???

Vielen Dank Maik

ar182

Hallo,

nimm eine Ultraschallsensor!

maik0815

den kann ich da schlecht verbauen. Der Wasserstand liegt auch nur bei 8 cm.

someone83

Was heisst, dass der digitalWrite-Befehl nicht funktioniert, an was erkennst du das?

Im Serial-Monitor siehst du also "giessen" / "nass", aber die LED auf dem Board geht nicht an oder aus?
Macht die LED beim Blink-Sketch was sie soll?

Grüsse
Peter

ar182

Hallo,

sag erst mal was du für einen Behälter hast Maße usw

maik0815

Hallo Peter

genau das ist mein Problem
Ich haben einen einfachen sketch für die steuerung der Relaisplatine verwendet. mit delay schaltet der die pumpe alle x Sekunden ein und aus.

Wenn ich den sketch um die Messwerte und um digtialwrite erweitere schaltet die Platine nicht mehr.

uwefed

#6
Sep 05, 2018, 12:17 pm Last Edit: Sep 05, 2018, 12:21 pm by uwefed
@ar182
Ich verstehe Dein Nachfragen nicht.

Der TO hat digitalWrite(13, HIGH); bzw digitalWrite(13, LOW); in seinem Sketch und der funktioniert seiner Meinung nicht.
Wie vorgeschlagen sollte er das Blink-Beispiel der IDE auf den Arduino laden und kontrollieren ob das LED L blinkt.

@maik0815
Mach mal probeweise das delay() länger zB 2000. So siehst Du wenn die LED angeht und gleich beim nächsten Durchlauf aus.

Du solltest eine Hysterese programmieren. zB

s > 350 && s <= 500) trocken; LED aus
s < 250 naß, LED ein
 
So hast Du kein sschnelles Ein-Ausschalten wenn der Meßwert um den Grenzwert liegt.

Grüße Uwe

maik0815

Danke Uwe

Es handelt sich bei dem Gesamtprojekt um ein Aquaponik-System. Ich will im Beet mit den Maßen 80cm x 40 cm und einer Höhe von 10 cm das Wasser über die Pumpe einlaufen lassen und wenn die Höhe des Überlaufs erreicht ist wieder ausschalten.
Mein Ansporn war die Messung der relaen Füllstände (um eventuelles "verdrecken" der Pumpe zu berücksichtigen).
Aktuell schaltet das Relais ein, wartet mittels delay 2 Minuten und geht wieder aus. warten 60 Minuten und geht wieder für 2 Minuten an. Es funktioniert also.
Aber warum verdammt, geht es nciht mit dem Messfühler ;-)

luzie

Hallo

Warum nimmst du nicht ganze einfach einen Pegelschalter? diese können minimale wasserstände erkennen. also die 8 cm die du hast auf jedefall. (sind auch einstellbar) diese gibt es Kunstoff oder Edelstahl.

Dort programmierst du den high Eingang der eine Zeitverögerung drinne hat z.b 1 min. Liegt das signal 1 min an soll er die Pumpe einschalten.
nun den Low eingang der z.b nach 10sec den ausgang wieder abschaltet. Ist das einfachste was du machen kannst und das auch noch funktioniert da die pegelschalter mit einem Readkontakt arbeiten, also nichts mechanisches.
Ich frage so auch meinen Pumpensumpf im Keller ab wenn high dann Pumpe ein und wenn  low dann eine Minute nachlauf der Pumpe, da der pegelschalter nicht bis zum Boden reicht. Fertig mit dem ganzen.
Die Teile bekommst du schon für 2 euro beim Chinesen.*gg

someone83

Würde auch mal Uwes Vorschlag mit dem längeren Delay (auch wenn Delay böse ist, aber für die Testzwecke hier ganz ok) versuchen.

In welchem Bereich liegen denn deine Werte der Variable "s"?
Schaltet die LED gar nicht? Oder in welchem Zustand befindet sich diese?

Grüsse
Peter

uwefed

Auch ich sehe besser die Überwachung mittels Schwimmsschalter zu realisieren. Wenn Du dann anzeigen willst wieviel Wasser da ist dann kannst Du eine zusätzlichen Pegelmessung machen.

Grüße Uwe

ar182

@ar182
Ich verstehe Dein Nachfragen nicht.
Weil man dann Alternativen vorschlagen kann.
Und weil die kapazitive Messung mit einen Arduino extrem unzuverlässig ist.

Das mit dem Pegelschalter finde ich auch gut, da hat man einen exakten Schaltpunkt.

Ich würde es mit zwei Edelstahlelektroden realisieren.
Eine mit GND verbunden und die Andere mit einen Analogeingang und 22 kOhm Pullup.
Zusätzlich verbindest du den Analogeingang mit einen Digitalausgang.
Mit dem ziehst du die Elektrode am Analogeingang während der Messpause auf GND.
Das verhindert die Elektrolyse, weil die Messung in weniger als einer ms durchgeführt ist.
Wenn du dann nur einmal pro Sekunde misst dürften die Elektroden ziemlich lang halten.

Gruß Aron

maik0815

Hallo zusammen
Danke für die vielen Antworten. das mit dem längern delay und der  blinkenden LED verstehe ich nicht. Also ich verstehe was ihr mir sagen wollt, aber wenn die Relaiskarte meien pume zuverlässig im 5 Sekundentakt an und aus schaltet (wie oben geschrieben) dann funktioniert die ganze Sache doch. Lediglich die Verwendung der Messwerte als Schaltpunkt klappt nicht.
Schwimmerschalter hatte ich auch am Anfang auf dem Plan aber es ist wenig Platz. Ich versuche mal ein Foto hochzuladen.

maik0815

anbei 2Bilder

maik0815

#14
Jan 13, 2019, 01:59 pm Last Edit: Jan 13, 2019, 02:59 pm by maik0815
Hallo zusammen
Kann mir eventuell jemand helfen, ich habe jetzt den Ultraschallsensor verbaut, leider bleibt das Problem bestehen. Die Sensorwerte werden zur Steuerung der Relaiskarte nicht erkannt.
Ein einfaches Skript für die Relaiskarte habe ich getestet, das funktioniert.
Es soll ja der wasserstand in einem Tank geregelt werden. Ist er leer, zeit der Sensor 9cm an, ist der voll sind es 3 cm.
Hier mein script:
Code: [Select]
int trigger = 7;
int echo = 6;
long dauer = 0;
long entfernung = 0;
const int wasserpumpe = 8;      
void setup()
{
 Serial.begin (9600);
 pinMode(trigger, OUTPUT);
 pinMode(echo, INPUT);
 pinMode(wasserpumpe, OUTPUT);
}
void loop()
{
 digitalWrite(trigger, LOW);
 delay(5);
 digitalWrite(trigger, HIGH);
 delay(10);
 digitalWrite(trigger, LOW);
 dauer = pulseIn(echo, HIGH);
 entfernung = (dauer / 2) * 0.03432;
 if (entfernung >= 12 || entfernung <= 0)
 {
   Serial.println("Kein Messwert");
 }
 else
 {
   Serial.print(entfernung);
   Serial.println(" cm");
 }
 //Es wird eine weitere IF-Bedingung für den Sensor erstellt:
if(entfernung < 9){
digitalWrite(wasserpumpe, HIGH);
}
else if (entfernung > 10){
digitalWrite(wasserpumpe, LOW);
}
// Bedingung2
if(entfernung < 3){
digitalWrite(wasserpumpe, LOW);
}
else if (entfernung >3){
digitalWrite(wasserpumpe, HIGH);

 delay(1000);
}

Go Up