Forum: Mikrocontroller und Digitale Elektronik Wasserstand messen per Beschleunigungssensor realisiert


von Alexander B. (Firma: brickwedde.dev) (alexbrickwedde)


Lesenswert?

Hallo,

nur mal so zur Info, wenn jemand Wasserstand messen will:

Die klassischen Methoden die ich hier gefunden habe 
(kapazitiv/ultraschall/druck/poti) fand ich alle "zu kompliziert" (da 
ich nur wenig Elektronik Erfahrung habe und am besten mit 0 und 1 klar 
komme) oder unpraktisch. Da habe ich mir überlegt einen 
Beschleunigungssensor zu verwenden.

Habe BS - komplett im wasserdichten Gehäuse verschwunden (funkt über 
RFM12) - an einen Schwimmer-Arm angebracht (Schwimmer-Arm besteht aus 
55cm Kabelkanal-Abdeckung. Am Ende eine leere Duschgel-Flasche für den 
Auftrieb). Da hier anscheinend nicht 1g herrscht musste ich 
Korrektur-Offset/Faktor auf die Messdaten des BMA020 geben (der soll 
angeblich kalibriert sein). Die Querbeschleunigung ist dann direkt 
proportional zur Höhendifferenz ( x * (1 / 0,5m) ).

Fazit: einfache Ansteuerung über SPI. einfaches Errechnen der 
Höhendifferenz. Absolut wasserdicht gekapselt. Messung liefert relativ 
ungenaue Werte (Schwankungen von +-2cm), habe mit höherer Genauigkeit 
gerechnet. einigermassen sparsam, ca. 30mA für weniger als 0,5s pro 
Messung und Aussenden (1/Minute), unter 0,02mA im Standby - Batterien 
sollten eine Saison halten.

...Alex

PS: Habe auch ein paar Temperatur-Sensoren mit RFM12 im Haus verteilt. 
Alle gefunkten Werte gehen per RFM12 auf ein Avr-Net-IO und von dort als 
UDP-Broadcast in's IP-Netz. Ein Receiver-Prozess auf einem "Server"-PC 
empfängt die Broadcasts, wertet sie aus und sendet Ergebnis an Icinga 
(Nagios), der mir eine eMail schickt, wenn der Wasserstand eine 
Warngrenze unterschreitet und mich per VoIP anruft wenn der Wasserstand 
kritisch wird.

Der ganze Code ist auf github zu finden:
http://github.com/alexbrickwedde/floodping
Aber Achtung: Der Code ist teilweise sehr stark zusammengefrickelt! 
(insbesondere für's net-io, aber für mich arbeitet er ausreichend gut, 
Schaltpläne gibt's übrigens auch keine und Doku sowieso nicht). Vielen 
Dank an alle, die hier ihre Sourcen zur Verfügung stellen!!!

von Horst H. (horha)


Lesenswert?

Hallo,

wie wäre eine Skizze.
Ich sehe keine Beschleunigung, die gemessen wird, eher eine Verschiebung 
des Nullabgleichs, weil es schief hängt.
Der Schwimmer wird sich doch mit minimaler Beschleunigung bewegen.Selbst 
in einem Toilettenspülkasten ( oder was sonst wird hier gemessen ? ) 
treten keine großen Beschleunigungen auf und der ist in ein paar 
Sekunden leer.
Wenn der Abflußquerschnitt 1/15 der Spülkastenwasseroberfläche hat, kann 
bei widerstansdslosem abfliessen auch nur 1/15 g an der Wasseroberfläche 
entstehen ) da bleiben von 2g == 10 Bit= 1024 nur 34 = 5 Bit übrig.

P.S
Im Datenblatt ist der BMA auf zero g-offset von +-220 mg = 0,22 g 
"kalibriert."

von Horst H. (horha)


Lesenswert?

Hallo,

ich nehme alles zurück und behaupte das Gegenteil.
Natürlich ist der Sensor nur in einer bestimmten Lage kompensiert und 
kann die statische Lage auch anzeigen.Ich nehme mir noch ein Mütze 
Schlaf...

von Edi R. (edi_r)


Lesenswert?

Die Beschreibung habe ich so verstanden:

An einem drehbaren Hebel, dessen Drehachse etwa am oberen Ende des 
Behälters liegt und der sich durch einen Schwimmer am Ende mit dem 
Wasserstand mitbewegt, ist irgendwo ein Beschleunigungssensor 
angebracht. Im Extremfall, wenn der Hebel waagrecht steht (Behälter 
voll), wird die volle Erdbeschleunigung gemessen. Im anderen Extremfall, 
wenn der Behälter leer ist und der Hebelarm senkrecht herunterhängt (und 
der Beschleunigungsmesser senkrecht gedreht ist), wird keine 
Erdbeschleunigung gemessen.

Nennen wir den Winkel des Hebels gegenüber der Wasseroberfläche alpha, 
die Länge des Hebels und damit die maximal messbare Änderung im 
Wasserstand r und die momentane Höhe der Wasseroberfläche gegenüber dem 
Minimum h (= Füllhöhe). Die gemessene Erdbeschleunigung ist dann
Der Winkel alpha ergibt sich andererseits aus der Füllhöhe mit
Durch Gleichsetzung und Umformung bekommt man

Das Verfahren läuft also nicht mit der Beschleunigung des Hebels, wie 
man (auch ich) vielleicht auf Anhieb meinen könnte, das wäre 
messtechnisch nicht so einfach zu realisieren.

Es gibt natürlich auch einen Nachteil bei dem Verfahren: Der Behälter 
muss breit genug sein, damit sich der Hebel bewegen kann. Und wie bei 
allen mechanisch beweglichen Lösungen können Korrosion und Verschmutzung 
stören. Ansonsten ist das Ganze genial einfach. Wenn man den Hebel aus 
dem Behälter hinaus verlängern kann, dann kann man den Sensor auch dort 
anbringen, wo er wesentlich besser geschützt ist.

Allerdings würde ich auf jeden Fall eine Kalibriertabelle aufstellen, 
weil es doch ein paar Unsicherheitsfaktoren gibt. Wenn der Schwimmer z. 
B. unsymmetrisch ist, dann taucht er möglicherweise je nach Winkel 
unterschiedlich tief ins Wasser ein. Eine Kalibriertabelle dürfte aber 
kein Problem sein, und bei dieser Gelegenheit könnte man die Tabelle 
auch gleich in Litern statt in Zentimetern anlegen (falls das überhaupt 
erwünscht ist).

von Edi R. (edi_r)


Lesenswert?

Ach ja, noch ein Nachteil ist mir eingefallen: Die Auflösung und die 
Genauigkeit sinken mit zunehmender Füllhöhe. Wenn das stört, kann man 
vielleicht zwei Beschleunigungssensoren verwenden, die zueinander 
senkrecht stehen. Mit dem zweiten misst man dann die volle 
Erdbeschleunigung, wenn der Behälter leer ist.

von Martin (Gast)


Lesenswert?

Wasserstand mit zwei Beschleunigungssensoren messen: LOL, double LOL and 
of course triple LOL.

von Peter D. (peda)


Lesenswert?

Alexander Brickwedde schrieb:
> Die klassischen Methoden die ich hier gefunden habe
> (kapazitiv/ultraschall/druck/poti) fand ich alle "zu kompliziert" (da
> ich nur wenig Elektronik Erfahrung habe

Für mich wiederum ist alles mechanische "ungeheuer kompliziert".
Wenn ich Software statt Mechanik nehmen kann, dann ist mir das lieber.

Daher finde ich kapazitiv am einfachsten.
Da brauchts auch keine großen Elektronikkenntnisse. Der Kondensator wird 
über nen Widerstand geladen und die Zeit gemessen bis zu einem 
Schwellwert (analog Komparator).
Die "komplizierte" Elektronik besteht also aus 3 Bauteilen: dem 
eingetauchten Kondensator, einem Widerstand und dem AVR zur Zeitmessung. 
Das kriegt doch jeder hin.
Die Zeit ist außerdem linear zur Füllhöhe.


Peter

von Peter D. (peda)


Lesenswert?

Alexander Brickwedde schrieb:
> PS: Habe auch ein paar Temperatur-Sensoren mit RFM12 im Haus verteilt.

Wie ist denn so die Reichweite?
D.h. welches ist die maximale Entfernung von Sensor zu Empfänger?
Und wieviel Mauern sind maximal dazwischen?
Hast Du auch übliche Störquellen mit im Haus (WLAN, DECT, Bluetooth)?


Peter

von Alexander B. (Firma: brickwedde.dev) (alexbrickwedde)


Lesenswert?

Peter Dannegger schrieb:

> Für mich wiederum ist alles mechanische "ungeheuer kompliziert".

Habe für's Studium mal ein Praktikum Kunststoff- und Metallverarbeitung 
machen müssen. Ist 'n wenig hängen geblieben... ;-)

> Wie ist denn so die Reichweite?
> D.h. welches ist die maximale Entfernung von Sensor zu Empfänger?
> Hast Du auch übliche Störquellen mit im Haus (WLAN, DECT, Bluetooth)?

Auf 868 MHz ca. 10m mit 3 Wänden und Türen. Reichte aber nicht aus 
(fehlen 1-2m), da habe ich den Net-Io näher richtung Sensor platziert. 
Natürlich arbeitet WLAN, BT und DECT im Haus. Ich find's ein bisschen 
sehr wenig, insbesondere da ich die Radio-Baudrate auf nur 666 
eingestellt habe. Über 2000 Baud kommt gar nix mehr an. Muss ich mich 
nochmal in Ruhe mit beschäftigen...

@Edi R.: Übrigens hat der Sensor 3-Achsen, also kann man im oberen und 
unteren Bereich die entsprechende Achse die fast Quer zur 
Erdbeschleunigung liegt verwenden und die Auflösung so verbessern. Ist 
bei mir nicht relevant, weil ich nur 15cm Differenz messen muss (Ist ein 
unterirdischer Wasserbehälter für einen Bachlauf, HBT: 30cm*60cm*30cm).

> wenn der Behälter leer ist und der Hebelarm senkrecht herunterhängt (und
> der Beschleunigungsmesser senkrecht gedreht ist), wird keine
> Erdbeschleunigung gemessen.

Ich messe im Voll-Zustand die Querbeschleunigung, also 0g und leer wäre 
dann 1g. Da habe ich bei 15cm Differenz (komme nur bis 0,3g) die 
besseren Messwerte. Man kann natürlich den Arm auch noch von senkrecht 
nach oben bis senkrecht nach unten verwenden und -1g bis 1g messen.

...Alex

von Edi R. (edi_r)


Lesenswert?

Martin schrieb:
> Wasserstand mit zwei Beschleunigungssensoren messen: LOL, double LOL and
> of course triple LOL.

Dann hast Du es wahrscheinlich nur nicht verstanden.

Peter Dannegger schrieb:
> Daher finde ich kapazitiv am einfachsten.

Ich auch, und so habe ich es bei mir auch gelöst. Aber "am einfachsten" 
heißt nicht "ohne Probleme". Beispielsweise verändert sich der 
Kunststoff (also das Dielektrikum), wenn es längere Zeit im Wasser 
liegt. Wasser ist aggressiver, als man denkt. Es ist nur eine Zeitfrage.

Alexander Brickwedde schrieb:
> Übrigens hat der Sensor 3-Achsen

Das ist natürlich praktisch, dann hast Du über den ganzen Bereich eine 
gute Auflösung.

von Alexander B. (Firma: brickwedde.dev) (alexbrickwedde)


Lesenswert?

Hi,

Kleines Update: Mein wasserdichter Behälter war doch undicht. Als eines 
Tages kein Funksignal mehr kam lag Schnee ohne Ende und danach war's 
dann kalt ohne Ende -> Sensor 4 Wochen im unbekannten Zustand im 
Wasserbehälter. Als letzte Woche das Eis im Behälter geschmolzen war, 
habe ich ihn dann rausgeholt und trockengelegt.

Das Design hat sich geändert: Der BS, vorher mit reichlich Plastik-Spray 
behandelt, sitzt jetzt in einem ganz kleinen Behältnis und dieses dann 
mit Silikon aufgefüllt. Ein Flachbandkabel führt jetzt zu einem 
überirdischen Kästchen, das nur noch Regendicht sein muss, welches 
Batterien, uC, Funkmodul und Programmier-Anschluss beheimatet.

Gleichzeitig gab's ein Software-Update. Da jetzt die Batterien einfacher 
gewechselt werden können, darf der Stromverbrauch jetzt höher sein. Es 
wird immer noch 1/Min. gesendet, aber der Messwert wird als 
Durchschnittswert aus 128 Messungen (mit je 1ms delay) errechnet. Statt 
+/- 2cm schwankt es jetzt nur noch +/- 0,3cm. Also < 1% der max. 
Ablenkung.

...Alex

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.