mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wasserstand messen per Beschleunigungssensor realisiert


Autor: Alexander Brickwedde (alexbrickwedde)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Horst Hahn (horha)
Datum:

Bewertung
0 lesenswert
nicht 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."

Autor: Horst Hahn (horha)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Edi R. (edi_r)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Edi R. (edi_r)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wasserstand mit zwei Beschleunigungssensoren messen: LOL, double LOL and 
of course triple LOL.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander Brickwedde (alexbrickwedde)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Edi R. (edi_r)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander Brickwedde (alexbrickwedde)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.