Wassermelder bauen - Frage zu den GPIOs

  • Hallo zusammen,


    ich möchte meinem PI Zero gerne eine zusätzliche Aufgabe geben, unzwar das melden von Wasser.

    Im Internet habe ich die folgende Schaltung dazu gefunden:


    Quelle: https://www.circuitlab.com/cir…ater-sensor-raspberry-pi/


    Ich habe das soweit nachgebaut (außer das ich 10k statt 100k als Widerstand für R3 genommen habe). Leider funktioniert das nicht sehr zuverlässig.. Ich vermute, dass das Problem an meinem langen Kabel liegt (10m), und deshalb nicht mehr genug Strom an Pin11 ankommt und dieser so low bleibt. Kann das sein? (Habe leider keine Möglichkeit das nachzumessen..)

    Ehrlich gesagt weiß ich auch nichtmal genau wozu man die Widerstände braucht - ich vermute, dass dadurch Fehlauslösungen verhindert werden sollen. Daher meine Frage, wäre es möglich die Widerstände wegzulassen und einfach Pin1 über das Wassersensorkabel an Pin11 zu stecken? Oder könnte ich mir damit die GPIOs zerschießen?


    Vielen Dank im Voraus!

    Lg

  • Ehrlich gesagt weiß ich auch nichtmal genau wozu man die Widerstände braucht

    :conf:warum änderst du dann die Werte?

    Ließ dir das mal durch, das ist gut beschrieben:

    https://www.elektronik-kompend…/raspberry-pi/2006051.htm


    EDIT: Komisch das Bild hat er mir jetzt anfangs gar nicht angezeigt...Da hilft dann die pull-up und down Link natürlich nicht mehr weiter^^

  • Also, mit 10 K kann es meiner Meinung nach nicht funktionieren und mit 100 K eigentlich auch nicht.

    R1 und R3 bilden (wenn Wasser da ist) einen Spannungsteiler.
    Bei 10 K ist die Spannung am GPIO ca. 10/45 * 3,3 = 0,7 V - das gibt kein HIGH-Signal.

    Bei 100 K ist die Spannung am GPIO ca. 100/135 * 3,3 = 2,4 V - besser als nichts, aber es sollten eigentlich besser mehr sein.

    Die 35 KOhm sind nur ein Schätzwert für den Widerstand des Wassers. Das hängt davon ab, wie leitfähig das Wasser durch Bestandteile aus der Umwelt wird. Ist es Schmutzwasser mit gelösten Stoffen oder ist der Boden ein poröser Betonboden, aus dem sich Mineralien lösen, wird der Widerstand geringer. Du kannst auch tricksen. Z. B. die beiden Kabelenden, die das Wasser detektieren sollen, mit Küchenpapier verbinden, das du vorher in Salzwasser getränkt und getrocknet hast. Oder einfach die beiden Drähte zusammen (ohne dass sie sich berühren) in das Küchenpapier wickeln und etwas Salz zwischen die Papierlagen streuen, das sich dann im Wasser löst und es leitfähiger macht... Auch der Abstand der Drähte spielt einer Rolle - je geringer, desto besser der Kontakt.
    Jedenfalls sollte R3 mindestens 10 mal so groß sein wie R1.



    Vorschlag für eine alternative Schaltung:
    Nimm einen 0815-Optokoppler (z.B. Typ 817) und baue den Sensor damit wie folgt: 5V vom Pi - Optokoppler - 200 Ohm Widerstand - langes Kabel zum Wassermesspunkt - langes Kabel zurück zum Pi - an GND.

    Den Ausgang des OK benutzt zum Schalten des GPIO. Du kannst den internen Pullup benutzen. Vor den GPIO sollte zur Sicherheit noch ein 1KOhm Widerstand.
    Allerdings brauchst du auch hier eine ausreichende Leitfähigkeit des Wassers. Insofern machts keinen nennenswerten Unterschied. Lediglich Fehlsignale wegen des langen Kabels sind hier ausgeschlossen.



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

    Edited 3 times, last by Gnom ().

  • :conf:warum änderst du dann die Werte?

    Ließ dir das mal durch, das ist gut beschrieben:

    https://www.elektronik-kompend…/raspberry-pi/2006051.htm


    EDIT: Komisch das Bild hat er mir jetzt anfangs gar nicht angezeigt...Da hilft dann die pull-up und down Link natürlich nicht mehr weiter^^

    Ich hatte das Bild erst falsch eingebunden, in der Vorschau war es da im Post hinterher nicht, deswegen habe ich es nochmal bearbeitet.


    Der Link hilft mir ggf. doch weiter. Dort steht, dass man Softwareseitig auch einen Pull-Down-Widerstand einstellen kann, der dann zwischen 50k-65k Ohm liegt.

    Ich habe meinen Pin in Python so aktiviert:

    GPIO.setup(pinnr, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

    Bin davon ausgegangen dass ich ihm damit mitteile "ich hab da einen Pulldown-Widerstand hinter" aber anscheind ist das ein eigener!? Und ich habe so quasi 2 hintereinander!?


    Also, mit 10 K kann es meiner Meinung nach nicht funktionieren und mit 100 K eigentlich auch nicht.

    R1 und R3 bilden (wenn Wasser da ist) einen Spannungsteiler.
    Bei 10 K ist die Spannung am GPIO ca. 10/45 * 3,3 = 0,7 V - das gibt kein HIGH-Signal.

    Bei 100 K ist die Spannung am GPIO ca. 100/135 * 3,3 = 2,4 V - besser als nichts, aber es sollten eigentlich besser mehr sein.

    Die 35 KOhm sind nur ein Schätzwert für den Widerstand des Wassers. Das hängt davon ab, wie leitfähig das Wasser durch Bestandteile aus der Umwelt wird. Ist es Schmutzwasser mit gelösten Stoffen oder ist der Boden ein poröser Betonboden, aus dem sich Mineralien lösen, wird der Widerstand geringer. Du kannst auch tricksen. Z. B. die beiden Kabelenden, die das Wasser detektieren sollen, mit Küchenpapier verbinden, das du vorher in Salzwasser getränkt und getrocknet hast. Oder einfach die beiden Drähte zusammen (ohne dass sie sich berühren) in das Küchenpapier wickeln und etwas Salz zwischen die Papierlagen streuen, das sich dann im Wasser löst und es leitfähiger macht... Auch der Abstand der Drähte spielt einer Rolle - je geringer, desto besser der Kontakt.
    Jedenfalls sollte R3 mindestens 10 mal so groß sein wie R1.

    Das Wasser sollte normales Leitungswasser sein, der Boden sind Fliesen. Die Lösung mit dem Küchenpapier kommt für mich nicht in Frage, da der Sensor in der Waschküche offen sichtbar liegen wird. (Soll nicht so aussehen als hätte ich nicht aufgeräumt ^^)


    Wenn ich mit dem 10k und den geschätzten 35k Widerstand auf 0,7V komme und mit 100k auf 2,4V dann müsste es doch eigentlich mit einem 100k Widerstand funktionieren oder nicht? Ich habe hier gelsen, dass die Zustände an Eingängen als Bereiche definiert sind:

    Quote

    Die Pegel bzw. Spannungswerte sind nicht in Stein gemeißelt. Sie unterliegen einer Toleranz. Ein GPIO-Eingang wird Spannungen unter 0,8 V als "Low" erkennen und Spannungen über 1,3 V als "High".

    Quelle: https://www.elektronik-kompend…/raspberry-pi/2006031.htm


    und mit 2,4V wäre ich ja schon deutlich über den 1,3V.. oder habe ich da einen Denkfehler?



    Zu deiner alternativen Schaltung:

    Erstmal danke für die Mühe, mir das aufzumalen :)

    Du hast geschrieben, dass nur Fehlsignale durch das lange Kabel so ausgeschlossen werden. Ich habe das im Eingangspost nicht erwähnt aber ich könnte mein Kabel auch auf ca. 5m kürzen (gabs nicht mit unter 10m, ich wollte gerne ein Ende haben, dass nach einem Wassermelder aussieht und nicht nur normale Drähte da hängen haben). Ich war mir nur nicht sicher, ob mein Problem wirklich an der Länge des Kabels liegt..

    Könnte das zusammen mit einem 100k Widerstand schon reichen, damit es funktioniert?

  • Zu den Schaltschwellen des Pi gibt es unterschiedliche Angaben - die gehen bis 2,3 Volt für high. Da würde ich mich auf nichts verlassen. Deshalb die Empfehlung, der Pulldown sollte hier 10 mal so groß sein, wie der Widerstand am Sensor. Damit hast du 3,0 V - das genügt.

    Die Lösung mit dem Optokoppler ist eher nicht wirklich praktikabel. Lass es, wie es ist und nimm einen hinreichend großen Pulldown-Widerstand.

    Die Länge des Kabels hat kaum Einfluss.

    Den Sensor kannst du auch mit den Tricks hübsch machen. Steck die beiden Drähte mit dem "gesalzenen" Küchenpapier in ein kleines Röhrchen. Das sieht gut aus und wenn Wasser in das Röhrchen kommt, saugt sich das Papier voll, das Salz löst sich und du bekommst ein sauberes Signal.


    Google sagt, Leitungswasser läge bei 0,0005 S/m, also 2000 Ohm m - ich hab grad mal nachgemessen, das kann nicht hinkommen. Ich hab bei Leitungswasser in einer Tasse schon bei wenigen Zentimetern Abstand und Nutzung von zwei Löffeln als "Elektroden" einen Widerstand von 2000 KOhm (2 MOhm). Mit einer guten priese Salz drin, geht es auf 300 KOhm runter. Das klingt mir nicht sehr verlässlich.

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

    Edited 2 times, last by Gnom ().

  • Habe mich gestern nochmal dran gesetzt und weil ich zu ungeduldig war, habe ich es direkt und ohne die Widerstände angeschlossen. Also einfach das offene Kabel direkt an die GPIOs. Das habe ich jetzt mehrfach getestet und es reagiert bisher sehr zuverlässig auf Wasserkontakt. Bis jetzt gab es noch keinen Fehlalarm (läuft jetzt seit ca. 24h durchgehend ohne Wasserkontakt, nur ab und zu habe ich den Stromkreis mit etwas Wasser geschlossen, um zu testen).


    Spricht irgendetwas dagegen das einfach so laufen zu lassen (z.B. Beschädigung der GPIOs/des Pi's)?

  • Wenn du einen internen Pullup oder Pulldown verwendest, fungiert der als R3. Über die Größe der internen Widerstände gibt es unterschiedliche Angaben in der Größenordnung von 50-80 KOhm. R1 ist der Wasserwiderstand, der ist eh da. Fehlt also nur R2. Der würde den Pi bei falscher Programmierung vor einem Kurzschluss schützen. Ist in deinem Fall nur in Ausnahmefällen relevant, die eher nicht gegeben sein dürften (nämlich, wenn deine Sensorkabel kurzgeschlossen sind UND der GPIO auf Output programmiert ist UND dann noch der Output-Level ein anderer ist als der, auf den das Kabel kurzgeschlossen ist).

    Wenns funktioniert, kannst du es so lassen. Sicherer ist trotzdem, wenn du den zusätzlichen R2 einbaust. Die Funktion dürfte dadurch nicht beeinträchtigt werden.

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