Überwachung Wasserdruck

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    folgende Projektidee würde ich euch gerne vorstellen und euch fragen, ob ihr da eventuell eine bessere Umsetzungidee hättet oder ob jemand mir etwas Unterstützung an einer Stelle geben kann.

    In meinem Haus habe ich an der Trinkwasserleitung einen Druckmesser in Form wie hier dargestellt . Da manchmal der Wasserdruck stark steigt, möchte ich ab einem bestimmten Druck (ca. 6 Bar) per Mail oder SMS benachrichtigt werden.

    Nach meinem Verständnis setzt sich das Projekt also aus folgenden Komponenten zusammen:

    1. Jede Minuten ein Foto des Druckmessers machen
    2. das letztgemachte Foto analysieren
    3. Wenn Druck zu hoch eine Mail schicken

    Zu 1. würde ich einen Cron-Job erstellen, der minütlich ein Foto erstellt

    Zu 2. wäre die Idee, über Python und machine learning die Fotos auszuwerten. Bei diesem Punkt würde ich mich über etwas Hilfe freuen. Hier fehlt mir leider der Ansatz und ich hoffe, das mir hier jemand weiterhelfen kann, welche Bibliothek sich hierfür sowohl zum Anlernen als auch zur Analyse für einen Einsteiger im ML-Bereich eignet.

    Zu 3. ... naja, wenn man schon in Python arbeitet und die Analyse aus zwei durchführt, dann würde ich von dort eine Mail schicken. Beispiele hierfür habe ich bereits gefunden.

    Beste Grüße und schonmal vielen Dank für eure Antworten

  • Hätte man einfache Zahlen, wie bei einem analogen Stromzähler oder Wasserzähler, könnte man da mit OCR drüberbügeln und die Zahlen auslesen. Ein etwas "schlaueres" Manometer zu kaufen, das man direkt auslesen kann, steht dir vielleicht auch nicht im Sinn. Also bleibt wirklich nur deine Idee mit der Kamera.

    Sobald es um Bildanalyse/Auswertung (Computer Vision) geht, landet man früher oder später sowieso bei "OpenCV", das es auch für Python gibt. Bei StackOverflow gibt es dazu sogar schon eine Lösung: https://stackoverflow.com/questions/4651…dle-with-opencv

    Weil bei dir aber alle Elemente schwarz sind und du deshalb nicht eine bestimmte Farbe herausfiltern kannst, müsstest du gleich den Bereich verkleinern, sodass die Zahlen und die Skala nicht mehr beachtet wird. Wenn du den Winkel der Nadel hast, brauchst du nur noch ein Mapping von Min-/Max-Winkel zu Min-/Max-Druck.

    Kelvin

  • Ich habe nochmal weiter gesucht, weil ich die Umsetzung ganz spannend finde und es einige interessante Wege gibt, die nach Rom führen:

    • https://sdsawtelle.github.io/blog/output/au…ith-opencv.html
      Vom Mittelpunkt ausgehend nimmt man viele Linien nach außen und sucht dann die Linie heraus, die mit der schwarzen Nadel am meisten übereinstimmt
    • Vom Mittelpunkt ausgehend wandert man in einem Kreis jedes Grad von 0-359° ab und guckt an den jeweiligen Pixeln nach der Bildfarbe. Ist die Farbe schwarz, gibt es eine Überschneidung mit der Nadel und man muss nur gucken in welcher Iteration man gerade ist. Wenn du unten mit 0° anfängst und im Uhrzeigersinn gehst, hätte man hier im Beispielbild ca. 45°. Wenn man unten anfängt, wird es mit dem Mapping auch einfacher. Der Winkel ist dann nur im Bereich von 45° bis 315°.
      Rechenbeispiel. Angenommen der Zeiger steht senkrecht, was dann 180° Rotation sind, dann kommt man mit dieser Formel auf den Druck:
      (180-45) / (315-45) * (10-0) + 0 = 5 (der Vollständigkeit halber habe ich alles in der Formel gelassen. (10-0) + 0 ist natürlich gleich 10).
      180-45: Die 180 sind unser aktueller (beispielhafter) Winkel der Nadel; 45 ist der Winkel bei dem die Skala beginnt
      315-45: 315 ist der Winkel bei dem die Skala endet; 45 bei dem sie endet (das ist also unser gesamter Bereich für die Winkel)
      (10-0) + 0: (10-0) ist unser Bereich der Wasserdruck-Skala, also die Werte in bar; +0 ist der Beginn der Skala und muss für's Mapping addiert werden.
    • Noch eine wilde Sache: https://answers.opencv.org/question/27065…post-body-27162
      Man nimmt die runde Skala und rollt sie quasi gerade aus. Dann muss man nicht mehr mit einer Nadel arbeiten, die sich um einen Punkt dreht, sondern sich auf der geraden Skala nur horizontal/vertikal bewegt. Dort zieht man dann ein Rechteck, das sich nur mit der Nadel überschneiden kann und macht dort dann ebenfalls ein Mapping mit der X- bzw. Y-Koordinate der Überschneidung.

    Kelvin

  • OpenCV kann Linien finden und deren Länge und Winkel erkennen. Da der Zeiger die längsten Linien auf dem Bild enthält, ist es relativ einfach, seinen Winkel zu bestimmen.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • OpenCV kann Linien finden und deren Länge und Winkel erkennen. Da der Zeiger die längsten Linien auf dem Bild enthält, ist es relativ einfach, seinen Winkel zu bestimmen.

    Wie würde man dort die Richtung der Linie bestimmen? Angenommen ich habe eine horizontale Linie, dann kann sie nach links (2 bar) oder rechts (8,2 bar) gedreht sein.

    Kelvin

  • Da müsstest du dir die Winkel ansehen, denn die beiden Linien laufen ja leicht aufeinander zu. Außerdem hast du noch die kurze Linie am hinteren Ende des Zeigers. Probleme wirst du dort bekommen, wo die Beschriftungen sind.

    OpenCV kann auch Ecken finden, z.B. eben die beiden Ecken an der Kurzen Linie am hinteren Ende des Zeigers. Aber auch da wird die Beschriftung stören.

    Es gibt ein Paar Videos zum Auslesen analoger Anzeigeinstrumente.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Hallo Kevin,

    die Nadel schneidet nur an zwei Punkten den roten Kreis. Damit lässt sich die Richtung bestimmen, so dass nur ein einziger Wert als Ergebnis möglich ist. In Polarkoordinaten ausgedrückt liefert der Mittelpunkt der beiden Schnittpunkte Nadel-Kreis den Winkel und damit das Ergebnis Wasserdruck.

    Ich würde wahrscheinlich die breite Seite der Nadel auswerten. Diese ist breiter und verringert damit den Fehler (falls es auf genauere Ergebnisse ankommen sollte).

    Deren Entfernung ist um den Mittelpunkt konstant. Wenn man die halbe Breite als Schrittweite nimmt, dann genügen relativ wenige Schritte, um die Nadelposition zu ermitteln.


    rodgerwilco :

    Unabhängig davon, dass es möglich ist, Photos bzgl. Nadelrichtung auszuwerten, würde ich mir an Deiner Stelle einen Wasserdrucksensor mit digitaler Schnittstelle (SPI, I2C, UART/USART, ...) zulegen. Einen solchen Sensor auszulesen ist wesentlich einfacher/schneller/zuverlässiger, als Nadelrichtungen als Photos zu ermitteln. Letzteres ist lediglich eine etwas abwechslungsreichere Programmiertätigkeit.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Vielen Dank für eure ganzen Rückmeldungen. Aktuell versuche ich mich in openCV einzuarbeiten und lese die Beispiele, die ihr gestellt habt.

    Ein anderer Druckmesser fällt leider in den nächsten Jahren aus, obwohl es deutlich einfacher wäre, diesen auszuwerten.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!