PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wasserstandsanzeige f. Brunnen



dr_Bal
19.04.2007, 21:17
Hallo,

ich möchte eine Füllstandsanzeige für einen Brunnen realisieren.

Hier ein paar Infos:

Brunnentiefe: 17m
Anzahl Sensorwerte: 5-10
Erfassung der Werte mittels Microcontroller und weitergabe an PC und Auswertung mit VB

Nun zur Frage:

Wie kann ich zu den Daten kommen, meine Überlegung ist folgende:

Je 2 Drähte für einen Messpunkt in einem Abstand von 1 Meter in den Brunnen. 1 Draht an VCC und der andere an einen DigiPort vom µc.
Das ganze habe ich jetzt schonmal mit ner C-Control und im Waschbecken getestet, klappt alles bestens. Mit VB funktioniert auch alles.

Gibt es noch eine bessere Alternative ? Meine Angst ist, dass vielleicht die Drähte korrodieren könnten und das ganze dann nicht mehr funktioniert.

Andere Möglichkeiten wie Drucksensor (zu Teuer >200€) oder Ultraschall (für 17m entfernung nichts gefunden) scheiten wohl aus.

Edit: Achja, das ganze soll dann mal auf einen AVR (deutlich mehr IOs und Interupts) laufen und mit diesem mein erstes AVR Projekt werden.
CU Ronny

Rofo88
19.04.2007, 21:40
Mit dem korrodieren hast Du recht Gleichstrom und Wasser oxidiert wunderbar. Ne Möglichkeit währen Schwimmschalter da könnte man die Spannung aus dem Wasser raushalten.

Was würde eigentlich mit Edelstahlelektroden passieren?

dr_Bal
19.04.2007, 21:45
Hallo,

das mit den Schwimmschaltern habe ich auch schon überlegt, aber der Schalter bei z.B. 5 Meter ist bei einen Wasserstand von 10 Metern ja völlig unter Wasser. Es gibt also auch keine einfache lösung wenn der Schalter auch unter Wasser ist.

Wobei es ja auch diese Schwimmschalter an den Tauchpumpen gibt, weiss jemand wie die funktionieren, da ist ja scheinbar sowas wie ne Kugel drin, oder ?

Ronny

Tido
19.04.2007, 21:46
Hallo dr_Bal,


Meine Angst ist, dass vielleicht die Drähte korrodieren könnten und das ganze dann nicht mehr funktioniert.


ja, das wird passieren. Hatte letztes Jahr dasselbe Problem bei der Messung des Wasserstandes in einem Ufergraben.
Ich habe 2 Edelstahlstäbe in einem Edelstahlrohr isoliert befestigt (Messung Wasserstand minimum, maximum).
Das Rohr liegt an Masse, an den Stäben die Basen von je einem pnp-Transistor, die wiederum Optokoppler schalten, und damit den Wert eines Spannungsteiler verändern.

Leider war das ganze nach wenigen Tagen korrodiert und funktionierte nicht mehr.

Habe seit ein paar Tagen eine 'neue' Variante in Betrieb. Jetzt wird nur alle 15 Minuten die 5V-Spannung allpolig eingeschaltet, 1 Sekunde gemessen und wieder abgeschaltet. Natürlich kann ich die Zeit auch erhöhen.
Ich nehme mal an, dass unter diesen Umständen viel längere "Standzeiten" bis zur Korrosion möglich sind.

dr_Bal
19.04.2007, 21:58
Hallo Tido,

dachte ich mir fast mit der korrosion, halte mich mal auf den laufenden wie es mit der neuen Methode läuft.

ich habe gerade noch etwas interessantes gefunden, habe aber keine Ahnung wie das wirklich funktioniert.

http://forum.electronicwerkstatt.de/phpBB/topic61478_f34_bxtopic_timexDESC_by15_bz420_bs0.ht ml

Andree-HB
19.04.2007, 22:33
...in meinen Wassertank im Bully wird der Stand so gemessen, dass in einem senkrechten Rohr im Tank in regelmässigen Abständen kleine Reedschalter angebracht sind, die durch einen schwimmfähigen Magnetring je nach Wasserstand schalten und ausgewertet werden. Da kann nix korrodieren, da nix Relevantes mit Wasser in Berührung kommt.

Eine Alternative wäre noch eine Ultraschallmessung : Sender, Empfänger - Signallaufzeit.

geronet
19.04.2007, 23:42
Wenn das Wasser nicht grob verschmutzt ist und der Brunnen öfters leer wird, nimmt man Drucksensoren mit Schlauch und nem Trichter der nach unten offen ist. Entweder einen analogen oder n digitale, die aus alten Waschmaschinen sind z.B. super geeignet. Nachteil: Wenn das Rohr nie ganz leer wird füllt sich der Schlauch langsam mit Wasser.

Wenns doch mal dreckig wird kann man Schwimmerschalter verwenden, da is meist ne Kugel mit Mikroschalter und Hebel in einem wasserdichtem Kunststoffgehäuse drin, 30 cm vor dem Schwimmer ein Gewicht dran und das Kabel oben aufhängen. Nachteil: Irgendwann gibts Kabelbruch.

Es gibt aber auch Spezialdrucksensoren zum versenken, haben schon öfters welche eingebaut, die geben dann 4-20 mA raus und sind aber schweineteuer ;)

Grüsse, Stefan

geronet
19.04.2007, 23:44
...in meinen Wassertank im Bully wird der Stand so gemessen, dass in einem senkrechten Rohr im Tank in regelmässigen Abständen kleine Reedschalter angebracht sind, die durch einen schwimmfähigen Magnetring je nach Wasserstand schalten und ausgewertet werden. Da kann nix korrodieren, da nix Relevantes mit Wasser in Berührung kommt.


Auch ne coole Idee, macht man meist bei Schwimmbadbehältern heutzutage. Aussen die Elektr. Schalter und innen ein Schwimmer.

Im Brunnen könnte man es andersrum machen, ein Rohr nach unten, innen die Schalter und aussenrum nen Schwimmenden Ringmagneten ;)

dr_Bal
20.04.2007, 20:18
Hallo @all,

ich teste jetzt erstmal mit den Plastik Eiern aus Überaschungseiern als Schwimmschalter.
Muss nur noch was geeignetes als Schaltmedium finden, Alufolie tuts nicht wirklich gut.

Ronny

Tido
22.04.2007, 19:57
Hallo @all,
Muss nur noch was geeignetes als Schaltmedium finden, Alufolie tuts nicht wirklich gut.


Hi,

wie siehts denn z.B. mit einer Stahl-/Eisen-mutter (besser wär vllt. ne Stahlkugel) o.ä.
Aber willst du dann in den Brunnen alle paar cm so ein Ei reinbasteln?

Habe mal irgendwo eine Konstruktion mit einem Schwimmer, Schnur nach oben über eine Umlenkrolle und am anderen Ende ein Gegengewicht gesehen.
An der Umlenkrolle saß dann der Sensor für die Wassertiefe.

dr_Bal
05.05.2007, 11:50
Hallo,

sorry das ich jetzt erst Antworte.

Also die Ü Eier Variante habe ich jetzt mangels geeigneter Materialien aufgegeben.

Ich habe hier im Forum einen Elektor Artikel gefunden, welcher nach der Variante wie sie Tido geschrieben hat, funktionier.

Kurzfassung:
---------------

Es wird eine Umlenkrolle mit Schwimmer und Gegengewicht an dem Brunnen Rand angebracht. An die Welle der Rolle kommt ein 10Gang Wendelpoti dann kann man den Strom messen und die Höhe umrechnen.

Problem bei der Sache ist das bei einer Umlenkrolle mit 50cm Durchmesser und bei den 10 Umdrehungen des Potis nur 157cm höhe überwunden werden können.

Also muss eine andere Lösung her.
Ich habe nun meinen Versuchsaufbau wie folgt gemacht:

ich habe eine Umlenkrolle mit Umfang 22 cm genommen und dort zwei Magnete versetzt angebracht.
An die Halterung der Rolle habe ich nun 2 Reed Kontakte angebracht.
Dadurch das die Magnete versetzt an der Rolle sind kann ich die Richtung der Rolle erkennen und kann praktisch unbegrenzt viele Umdrehungen registrieren.
Ich habe das ganze mit meiner alten C-Control Micro getestet und funktioniert wunderbar.
Ich kann nun die Brunnentiefe in 22cm Schritten registrieren.

Ein kleines Problem gibt es aber noch, die Reed Kontakte schalten beim vorbeifahren der Magnete manchmal 2 mal und damit kommt die MicroControl durcheinander. Wenn ich den Durchmesser des Magnetpoles verkleinere geht es besser.
Ich werde das ganze jetzt nochmal mit Lichtschranke oder LDR testen, damit sollte es Störunanfälliger sein.

Ich mache am WE mal eine Zeichnung und stell sie hier ein.

Hier das Programm der C-Control:


define drehl port[5] 'erster ReedKontakt
define drehr port[6] 'zweiter Reedkontakt
define rot port[4] 'LED ROT
define gruen port[2] 'LED Gruen
define x byte 'Variable für die höhenwerte

baud 9600: pause 20

x=0 'Variable auf Null setzen

#start
put x 'Wert senden
if drehl = on then goto linksw 'ersten Reed abfragen
if drehr = on then goto rechtsw 'zweiten Reed abfragen
if x < 23 then goto rot 'Ampel ROT schalten bei zu geringen Stand
if x >= 23 then goto gruen 'Ampel Gruen schalten bei guten Stand
goto start

#linksw
if drehl = off then goto links 'warten Kontakt aus
put x 'daten senden
goto linksw

#links
if drehr = on then goto plus
if drehl = on then goto start
put x
goto links

#rechtsw
if drehr = off then goto rechts
put x
goto rechtsw

#rechts
if drehl = on then goto minus
if drehr = on then goto startre
put x
goto rechts

#startre
if drehr = off then goto start
put x
goto startre

#startli
if drehl = off then goto start
put x
goto startli

#plus
put x
if drehr = off then x = x+1 else goto plus
put x
goto start

#minus
put x
if drehl = off then x = x - 1 else goto minus
put x
goto start

#gruen
rot = off
gruen = on
goto start

#rot
rot = on
gruen = off
goto start


Damit man nicht immer PC angeschaltet haben muss, gibt es noch eine Ampel, welche bei zu geringen Wassestand Rot leuchtet.

Die gesendeten Daten werden dann mit einen Visual Basic Programm am PC ausgewertet.
Bei Interessse kann ich den Quellcode auch Posten.

MFG

Ronny

dr_Bal
06.05.2007, 12:18
Hi@all

so nun hier die Zeichung und der Screenshot des VB Programms:

Tido
06.05.2007, 16:48
Bei Interessse kann ich den Quellcode auch Posten.


Hallo,

mich würde er interessieren, vllt. ist das der VB-Einstieg, den ich schon so lange suche...

dr_Bal
06.05.2007, 18:03
Hallo Tido,


Der Code ist echt Simpel, ist nur aus einen MSomm (Serielle Schnittstelle) beispiel und einigen basics zusammengesetzt.

Wenn du noch fragen hast melde dich.

anbei der Quellcode, sowie der Link zu der vbp (visualBasic 6) datei.


'################################################# ################
'# #
'# Benötigte Elemente: #
'# -Label2 & label3 #
'# -mscomm1 #
'# -progressbar1 #
'# #
'################################################# ################


Private Sub Form_Load()
' Fire Rx Event Every x Bytes
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
' When Inputting Data, Input y Bytes at a time
MSComm1.InputLen = 1
MSComm1.Settings = "9600,N,8,1" 'Com port einstellungen
' Open COM1
MSComm1.CommPort = 1 'nummer des Com Ports
MSComm1.PortOpen = True 'Com Port öffnen
End Sub
' Kommunikationsereignis
Private Sub MSComm1_OnComm() 'Fehlerhandling COM Schnittstelle
Select Case MSComm1.CommEvent
Case comOverrun
MsgBox "Datenverlust!"

Case comRxOver
MsgBox "Datenverlust!"

Case comEvReceive

'jetzt gehts los

xx = MSComm1.Input 'Variable "xx" mit dem Empfangen Daten füllen

daten = Asc(xx) 'Empfangenen Daten in Ascii umwandeln
If daten > 71 Then daten = 0 '71 maximale Umdrehungen der Rolle = höhe des Brunnen, wenn größer als 71 dann null als höhe anzeigen
If daten < 12 Then Label3.ForeColor = &HFF& 'Farbe der höhenanzeige auf rot setzen
If daten > 12 Then Label3.ForeColor = &HFFFF& 'Farbe der höhenanzeige auf gelb setzen
If daten >= 23 Then Label3.ForeColor = &HFF00& 'Farbe der höhenanzeige auf grün setzen

Label3.Caption = daten * 0.22 & " METER" 'höhe ausrechnen und im Label3 anzeigen, 22 cm hat der Umfang des Rades
ProgressBar1.Value = daten 'Progressbar setzen
Label2.Caption = "letzter Empfang: " & "Datum: " & Date & " um: " & Time 'Label2 zeigt den letzten Empfang an
End Select
End Sub



Brunnen.zip Project Datei (http://www.ronbal.de/brunnen/brunnen.zip)


Ciao Ronny

schnasemann
23.08.2007, 10:59
andere Sensorlösung wäre der Druck gewesen. Wenn Du den Wasserdruck (unten abgenommen) entweder auf einen Drucksensor gibst (Wasser komprimiert die Luft in einem Rohr) oder aber eben ein Steigrohr erfasst (gut detektierbarer Schwimmer steigt in einem Rohr und wird mit Hallsensor oder optisch erfasst), hast Du kein Problem mit Verschmutzen o.ä.
Andere Lösungen sind Ultraschall - Laufzeitmessung (Abstandswarnerprinzip) oder Kapazitive Messung (Quantum stellt da tolle Bausteine her).

HTH
Carsten