Forum: Projekte & Code Berührungsloser Füllstandssensor XKC-Y26-PNP


von Andreas J. (ajbln)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

hier wieder ein Miniprojekt und vielleicht für diejenigen interessant, 
die wie ich vergeblich nach einer Schaltung für diesen Sensor gesucht 
haben.

Sensor:
Der Sensor kann Wasser in bis zu 2cm Abstand berührungslos detektieren. 
Bei mir sind es 6mm Glas + 8mm MDF-Platte + 1mm doppelseitiges 
Klebeband, also 17mm.
Im Sensor ist ein kleines Poti verbaut. Das musste ich auch einstellen, 
um diesen Abstand hinzubekommen.
Der Sensor kann mit 5-24 V betrieben werden und hat einen PNP Pin als 
Ausgang. Es gibt auch ein Modell mit NPN.
Und es gibt noch einen vierten Pin, mit dem man die Ausgangslogik 
invertieren kann.
Ist dieser unbeschaltet, schaltet der PNP durch, wenn der Sensor Wasser 
detektiert hat.
Der Sensor wird bei mir für eine Wasser-Nachfüllautomatik meiner 
Aquarien verwendet.
Zum einen, um bei einem zu geringen Wasserstand eine 12V Pumpe zu 
schalten, die Osmosewasser in das Aquarium nachfüllt. Und zum anderen, 
um mir ein Alarm auf meinem Handy auszugeben, wenn mein Nachfüllbehälter 
(fast) alle ist.

Hardware:
Ich brauche das Signal für meinen 3.3V Mikrocontroller, kann also nicht 
die viel simplere Schaltung bei 5V verwenden, die man im Netz finden 
kann. Wobei ich hier gleich mal anmerken muss, dass User von 
Detektionsproblemen bei 5V berichtet haben. Man sollte den Sensor also 
scheinbar sowieso höher bestromen als 5V.
Da ich 24V als Hauptspannungsquelle habe, nehme ich auch gleich die 
vollen 24V. Und ich habe auch gleich vorgesehen, den Sensor nicht im 
Dauerbetrieb laufen zu lassen. Ich schalte den Sensor also nur bei 
Bedarf ein.
Die verwendeten Bauteile sind eigentlich überdimensioniert, aber dafür 
wenige, billig und bei mir eben zigfach vorhanden.
Mit dem Optokoppler umgehe ich das Problem der getrennten Massen, da ich 
über NPN ja eine eigene Masse bekomme, die mir ein sauberes 
Ausgangssignal (dann über einen Spannungsteiler) am Mikrocontroller 
erschweren würde.
Ich weiß, das getrennte Massenproblem bekommt man auch ohne Optokoppler 
gelöst, aber dann müsste ich weit mehr Teile verwenden und später 
einlöten.
Das alles läuft bei mir jetzt schon seit ein paar Wochen. Ich habe mir 
daher eine Platine in CH anfertigen lassen.
Die kann man - wie man auf dem Bild erkennt - auch direkt an ein 
Breadboard betreiben. Ist aber bei mir für eine Art Modulbaukasten für 
meine ESP32 Platine gedacht, bei der ich bis zu 15 Module anschließen 
kann.
Das ist hier aber ein Doppelmodul, braucht also zwei Steckplätze. Daher 
der merkwürdige Aufbau.
Die Schaltung ist ein hierarchischer Schaltplan in KiCad, daher wurden 
dort hierarchische Pins statt Spannungssymbole verwendet.

Software:
Bei mir wird der Sensor jede Stunde zwischen 8-20 Uhr einmal 
angeschaltet.
Danach gebe ich den Sensor ca. 1 Sekunde Zeit zum Einschwingen, bevor 
ich den Ausgang des Optokopplers prüfe.
Ist dieser durchgeschaltet, ist nichts zu tun und ich schalte den Sensor 
wieder aus.
Ist das Signal nicht an, schalte ich erst mal für 3 Sekunden die Pumpe 
an (um kurze Pulse zu vermeiden), bevor ich dann in einer Schleife 
abfrage, ob der Wasserstand immer noch zu niedrig ist.
Das mache ich max. 7 Sekunden lang bevor ich die Pumpe und dann den 
Sensor wieder abschalte, um ein Überlaufen bei einem Sensordefekt zu 
vermeiden.
Erkennt der Sensor schon vor Ablauf der 7 Sekunden, dass wieder genügend 
Wasser vorhanden ist, schalte ich früher ab (unterbreche also die 
Schleife).
Ich habe anhand der Fördermenge berechnet, dass selbst nach 24h nicht 
mein 120 Liter Aquarium überläuft. Die Zeiten hängen aber natürlich von 
der Förderleistung der Pumpe ab und müssen individuell an die 
Gegebenheiten angepasst werden.
Bei mir haben bisher die 3 Sekunden immer ausgereicht, um den Sensor 
wieder einzuschalten. Hängt aber eben wie gesagt von der Größe 
(=Verdunstungsmenge) des Aquariums und der Förderleistung der Pumpe ab.
Über Pushover (eine App fürs Handy) schicke ich mir dann Alarmsignale 
auf mein Handy, wenn entweder die vollen 7 Sekunden lang gepumpt wurde 
(„Sensor kontrollieren!“) oder der Nachfüllbehälter alle ist („Wasser 
nachfüllen!“).

von Wolfgang (Gast)


Lesenswert?

Andreas J. schrieb:
> Wobei ich hier gleich mal anmerken muss, dass User von
> Detektionsproblemen bei 5V berichtet haben. Man sollte den Sensor also
> scheinbar sowieso höher bestromen als 5V.

Die Angabe "5V" ist eine Spannung. Der Strom wird durch den Widerstand 
R2 bestimmt. Ein Widerstand von 390Ω bei 5V lässt etwas den gleichen 
Strom fließen, wie der 2.4kΩ Widerstand bei 24V.

von Andreas J. (ajbln)


Lesenswert?

Wolfgang schrieb:
> Die Angabe "5V" ist eine Spannung.

Du hast natürlich Recht. ;-)

von fehlt (Gast)


Lesenswert?

kapazitiver Schalter

von Robert R. (Gast)


Lesenswert?

Hallo,
kann mir einer erklären, wie das Prinzip der kapazitiven Erkennung 
mittels Optokopler funktioniert... Ich steige da nicht wirklich 
hinter... Thx.

von Andreas J. (ajbln)


Lesenswert?

Robert R. schrieb:
> Hallo,
> kann mir einer erklären, wie das Prinzip der kapazitiven Erkennung
> mittels Optokopler funktioniert... Ich steige da nicht wirklich
> hinter... Thx.

Der Optokoppler hat nichts mit der kapazitiven Erkennung zu tun.
Er dient nur dazu, das 24V Ausgangssignal des Sensors auf die 3.3V für 
einen Mikrocontroller zu bringen. Wie der Sensor selbst funktioniert ist 
ja im Netz leicht zu finden.

Nach einem halben Jahr Dauereinsatz (wobei ich den Sensor ja nur für ein 
paar Sekunden pro Tag über eine Automatisierung in Home Assistant 
einschalte) kann ich den Sensor weiterhin empfehlen. Funktioniert noch 
immer einwandfrei und zuverlässig.

von Ramirez (Gast)


Lesenswert?


von Andreas J. (ajbln)


Lesenswert?

Ramirez schrieb:
> Warum nicht hier kopieren?
> 
https://tutorials-raspberrypi.de/raspberry-pi-giessomat-kapazitiver-erdfeuchtigkeitssensor/

Dieser Sensor liefert einen Analogwert über die umgebene Feuchtigkeit in 
einem relativ großen Bereich in unmittelbarer Nähe.
Der XKC-Y26-PNP dagegen liefert ein binäres Signal, ob Wasser in einen 
sehr kleinen Bereich, dafür aber in bis zu 2 cm Entfernung vorhanden ist 
oder eben nicht. Letzter ist deutlich kleiner und wird für den quasi 
millimetergenauen Füllstand außerhalb eines Behälter verwendet.
Gleiche Technik, aber unterschiedliche Einsatzzwecke.

von Ramirez (Gast)


Lesenswert?

Andreas J. schrieb:
> Dieser Sensor liefert einen Analogwert

So ein Blödsinn!
Hast nicht mal gelesen oder kapiert, wie der funktioniert und gleich das 
Rad neu und schlechter erfunden.

Hier werden die verschiedenen Sensortechnologien aufgezählt:
https://www.google.com/url?sa=t&source=web&rct=j&url=https://wwwvs.cs.hs-rm.de/vs-wiki/images/e/e7/SmartPlant_Praesentation.pdf

von Andreas J. (ajbln)


Lesenswert?

don't feed the troll...

von Ramirez (Gast)


Lesenswert?

Andreas J. schrieb:
> don't feed the troll...

Stimmt:
https://opus.hs-offenburg.de/files/2804/Bachelorthesis_SebastianMoehringer.pdf

Ist eine Bachelorthesis über kapazitive Sensoren.
Ich weiss nicht, ob es für dich schon etwas ist.

von Andreas J. (ajbln)


Lesenswert?

Ramirez schrieb:
> Ist eine Bachelorthesis über kapazitive Sensoren.

Die Frage ist: was willst Du uns damit sagen?

Meine Schaltung da oben ist nicht meine "Erfindung", sondern eine 08/15 
- Schaltung, um einen speziellen Füllstandssensor per Mosfet 
anzuschalten und über einen Optokoppler das Signal auf 3.3V für einen 
Mikrocontroller zu bringen. Warum ich das mache, steht ganz oben.
Der Sensor ist logischerweise auch nicht von mir, sondern ein relativ 
preisgünstiger Sensor aus CH, um einen Wasserstand durch eine dicke Wand 
hindurch - also von außen - zu messen.

Den gibt's z.B. hier:
https://www.amazon.de/gp/product/B07R12DGHJ/ref=ox_sc_act_title_1?smid=A1Q58M7T3108LZ&psc=1

Ja, es gibt viele Wege, einen Füllstand zu messen.
Nur von außen durch eine undurchsichtige Wand hindurch, da wird die 
Auswahl deutlich geringer.
Man kann wahrscheinlich auch einen Bodenfeuchtesensor außen an das 
Aquarium klatschen. Vielleicht ist das Teil empfindlich genug, keine 
Ahnung. Ist aber auch völlig irrelevant, da ich mich für einen anderen 
Sensor entschieden habe.

Also was daran ist Blödsinn?
Und hilfreich wäre ohne Beleidigungen und wenn schon Kritik, dann mit 
einer Erklärung, WAS Du eigentlich kritisierst.

von Ramirez (Gast)


Lesenswert?

Ganz einfach:
Bastel dir so einen Sensor selbst!

Die Pegelanpassung und das ein/ausschalten verrät mir, dass du nicht 
jeden Tag mit Elektronik zu tun hast.

Wo ist dein Schaltplan, für deine Ein/Ausschalter?

Alle Informationen die du da veröffentlicht hast, sind nur Fetzen und 
nicht konsistent.

Lass die Ein/Ausschalterei und es reicht 1 Serienwiderstand für die 
Pegelanpassung.
Den Rest machen die Rail Dioden.
So wird das auch in der Praxis erledigt.

von Andreas J. (ajbln)


Lesenswert?

Ramirez schrieb:
> Ganz einfach:
> Bastel dir so einen Sensor selbst!
Ah, na das ist ja schon mal deutlich konkreter.
Na klar könnte man so einen Sensor auch selber basteln aber das war 
nicht mein Ziel. Da lohnt sich der Aufwand für mich nicht.

> Die Pegelanpassung und das ein/ausschalten verrät mir, dass du nicht
> jeden Tag mit Elektronik zu tun hast.
Definitiv.

> Wo ist dein Schaltplan, für deine Ein/Ausschalter?
Steht da, ich schalte den Sensor über einen Mikrocontroller an.
Ich regle nur einmal am Tag den Wasserstand für ein paar Sekunden.
Da Strom zu sparen war für mich Pflicht (mal abgesehen davon, dass ich 
auch den Einfluss der EM-Strahlung nicht einschätzen kann).

> Alle Informationen die du da veröffentlicht hast, sind nur Fetzen und
> nicht konsistent.
Das ist mir wieder zu wenig konkret. Konsistent in Bezug auf was?
Das ist hier nur EINE mögliche Lösung, wie man diesen Sensor an einen 
Mikrocontroller anbinden kann. Mein Anspruch war nicht, die einfachste 
Minimalstbeschaltung aufzuzeigen.

> Lass die Ein/Ausschalterei und es reicht 1 Serienwiderstand für die
> Pegelanpassung.
> Den Rest machen die Rail Dioden.
> So wird das auch in der Praxis erledigt.
Die Ein/Ausschalterei war für mich wie gesagt Pflicht. Bei dem 
Serienwiderstand und den Raildioden hast Du mich abgehängt. Zu dem 
Sensor gibt es keinen Schaltplan (zumindest konnte ich keinen finden).
Ohne das Mosfet hätte ich einen Spannungsteiler genommen (der aber auch 
wieder viel Strom verbraucht hätte (24V->3.3V)), aber das ging dann eh 
nicht wegen der getrennten Massen. Und ja, das Problem der getrennten 
Massen kann man auch anders lösen, das habe ich gefunden.
Aber der Optokoppler ist da für mich simpler und bringt zusätzlich auch 
noch einen Schutz mit.
Also ich gebe Dir zu 100% Recht, dass man das bestimmt besser und 
simpler machen kann. Bei dieser Lösung sind es aber auch nur 5 billige 
Bauteile, die glaube ich fast jeder in seinem Fundus hat. Die Schaltung 
hier ist einfach zu verstehen, verbraucht extrem wenig Strom, und selbst 
wenn der Sensor aus CH komplett ausfällt, pumpe ich nur für ein paar 
Sekunden unnötig Wasser in das Aquarium und das führt auch nach 
wochenlangem Urlaub nicht dazu, dass mein Aquarium überlaufen kann...

von Ramirez (Gast)


Lesenswert?

Warum verbindest du die Massen nicht miteinander?

Danach vom Sensorausgang direkt über einen 10k Serienwiderstand auf den 
Eingang des Mikrocontrollers.

Habe jetzt leider nichts zum zeichnen da (31 Tage Urlaub in Istrien).

von Andreas J. (ajbln)


Lesenswert?

Ramirez schrieb:
> Warum verbindest du die Massen nicht miteinander?
Weil ich den Sensor über einen NPN Mosfet einschalte.
Mit PNP hätte ich das Problem nicht, nur bräuchte ich dann wieder mehr 
Bauteile.

> Danach vom Sensorausgang direkt über einen 10k Serienwiderstand auf den
> Eingang des Mikrocontrollers.
Also Du kannst ja gerne eine Challenge starten mit möglichst wenigen 
Bauteilen den Sensor anzusteuern. ;-)
Aber ohne Spannungsteiler direkt die 24V an den Mikrocontroller, da bin 
ich raus. Ich weiß, hier haben das auch schon einige gemacht und wenn 
man den Strom möglichst klein macht, scheinen das einige Mikrocontroller 
(außerhalb der Spec) auch mitzumachen. Aber das wäre definitiv nicht 
mein Weg. Und ich habe auch noch andere Sensoren an den anderen Pins 
dran. Die würden da mWn. alle mit reinspielen. Also da spendiere ich 
dann doch lieber einen Widerstand mehr und hab Ruhe. Aber wie gesagt, 
bei Schalten über NPN gehen diese beide Wege sowieso nicht.

von Ramirez (Gast)


Lesenswert?

Warum ausserhalb der Specs?
Der maximale Strom der Raildioden darf nicht überschritten werden.
Einfach den Widerstand so dimensionieren, dass der Spannungsabfall hoch 
genug ist.

Warum schaltest du nicht einfach mit einem NPN die Versorgung des 
Sensors weg?
So wird das bei jedem KFZ auch gelöst, wenn es was zum schalten gibt.

Einfach hinten bis vorn schlecht durchdacht.
Also kein feriges Projekt oder Code.

von Ramirez (Gast)


Lesenswert?


von Andreas J. (ajbln)


Lesenswert?

Ramirez schrieb:
> Der maximale Strom der Raildioden darf nicht überschritten werden.
> Einfach den Widerstand so dimensionieren, dass der Spannungsabfall hoch
> genug ist.

Also Ziel meines kleinen Mini-Projektes war eine universelle Lösung für 
die Anbindung dieses (oder eines ähnlichen) Sensors für ALLE 
Mikrocontroller.

> Warum ausserhalb der Specs?

Die Datenblätter aller mir bekannten Mikrocontroller schreiben bei den 
Inputpins ganz klar und eindeutig: max. x mA und max. y V. In meinem 
Beispiel 20mA und 3.3V. Manche sind 5V tolerant. Aber nirgends steht da 
24V tolerant!
Trotzdem vermute ich mal ganz stark, dass die Inputpins sich trotzdem 
vor Überspannung schützen, daher behaupte ich NICHT, dass "Deine" Lösung 
nicht funktioniert, sondern nur, dass das außerhalb der Spec ist. UND 
individuell vom gewählten Mikrocontroller abhängig also NICHT universell 
ist.

> PS: Leg dir die Basics zu:
> https://www.sprut.de/electronic/pic/grund/ioports.htm#inbeispiel

Außerdem fehlt mir in diesem min. 11 Jahre altem Dokument die Erwähnung 
eines Spannungsteilers als Beschaltungsvariante, was mich etwas stutzig 
macht, denn diese Lösung ist imho die am meisten verbreitete Lösung für 
dieses Problem. Denn sie funktioniert völlig unabhängig vom 
Mikrocontroller, man muss nur den Spannungsteiler auf den 
Spannungsbereich des Mikrocontrollers abstimmen (hier also dann 3.3V).

> Warum schaltest du nicht einfach mit einem NPN die Versorgung des
> Sensors weg?

Aber genau das tue ich doch. Siehe Schaltung.
Aber falls Dir (oder andere) das nicht klar sein sollte: die Massen 
(Sensor + Mikrocontroller) kann man dann logischerweise nicht verbinden, 
da man damit ja den NPN kurzschließen würde. Den Ausgang des Sensors 
über einen Widerstand direkt oder über einen Spannungsteiler an den 
Eingangspin des Mikrocontrollers anzuschließen, geht auch nicht, da Du 
über den Eingangspin vom Mikrocontroller ein Massepotential in den 
Ausgangspin des Sensors einschleust (egal ob bei Pullup- oder 
Pulldown-Betrieb). Je nach Art und Weise, wie der Ausgangspin im Sensor 
intern beschaltet ist, kann das zu Problemen führen. Btw. der Sensor 
arbeitet auch schon bei 5V. Und ich meine auch gelesen zu haben, dass 
genau das bei diesem Sensor nicht funktioniert und mich daher über 
mögliche Lösungsansätze bei getrennten Massen informiert. Und genau EINE 
mögliche Lösung hier umgesetzt.

> Einfach hinten bis vorn schlecht durchdacht.
> Also kein feriges Projekt oder Code.

Beide Aussagen sind imho falsch.
Diese Lösung funktioniert seit Monaten absolut zuverlässig und ich 
behaupte auch mal, dass sie eine absolut valide und universelle Lösung 
ist, die zudem auch mit wenigen günstigen Bauteilen auskommt. Und 
nochmal, das ist nicht MEINE Lösung, sondern eine 08/15 Standardlösung.

Aber es gibt ganz bestimmt auch andere Lösungen, die Du oder andere 
besser, eleganter oder was auch immer fänden.
Falls Du (oder jemand anders) das beweisen mag, freue ich mich über 
einen neuen Thread mit einer anderen Lösung. Dafür sind solche Foren ja 
da. ;-)

Daher meine Bitte an den Mod, diesen Thread zu schließen (zu viel 
Off-Topic). PN ist bei Fragen/Kritik/Anmerkungen ja trotzdem immer 
möglich.

/CLOSED

von Ramirez (Gast)


Angehängte Dateien:

Lesenswert?

Ich finde dein "Masseproblem" nicht.

Zum Rs:
An jedem Widerstand, welcher von einem Strom durchflossen wird, fällt 
eine Spannung ab.
Wenn der Mikrocontroller mit 3.3V versorgt wird, müssen 20V am 
Widerstand abfallen. Wo sind die 0.7V hin? Genau. Die fallen an den 
Raildioden ab. (Umbedingt mit den "Specs" abgleichen!!!)
Kirchhofsche Regel erfüllt.
Wie berechne ich nun Rs?
Kommt auf den maximalen Strom der Raildioden an.
Bei 20mA würde ich 10mA vorschlagen.
20V / 10mA = 2k

Kapiert?

Ein Spannungsteiler ist eine schlechte Option, da du den internen Pullup 
nicht mehr verwenden kannst.
Du bildest damit einen PullDown.
Es ist schön, dass du den Strom neu erfinden willst, aber der 
Serienwiderstand bleibt nun mal StateOfTheArt.
So wird das täglich aber Millionen mal designt.

von Markus (Gast)


Lesenswert?

Hast du das auf wertvolles Klopapier gemalt? Und warum ist das Bild um 
90° verdreht?

von Ramirez (Gast)


Lesenswert?

Das sind hier in Kroatien die Tischunterlagen.
Bin, wie du bereits weiter oben gelesen hast, auf Urlaub und habe eben 
keinen Schreibwarenladen um die Ecke parat.
Btw: Das sind Blubberblasen, Delphine, ... und ein Serienwiderstand.

von Andreas J. (ajbln)


Lesenswert?

Wir können das ja einfach so zusammenfassen:

Der Einsatz eines Optokopplers funktioniert mit jedem Sensor (mit einem 
24V Ausgangssignal, ansonsten müsste man R2 anpassen) und mit jedem 
Mikrocontroller. Und bietet zusätzlichen Schutz vor Überspannungen.
Ich kann meine Platine dort oben also jederzeit an einen anderen 
Mikrocontroller anschließen.

Dein Vorschlag ist: man kann auf den Optokoppler verzichten und 
stattdessen über R direkt das Ausgangssignal an den Inputpin des 
Mikrocontrollers anschließen.
Nachteile sind:
- Man muss R berechnen, und braucht dafür Wissen über den jeweiligen 
Mikrocontroller (also welche Spannung fällt bei den Raildioden ab - das 
wird nicht im Datenblatt stehen - dann max U und max I, die stehen immer 
drin)
- Es darf kein Massepotential über Input nach Output wirken (wenn man 
über NPN abschaltet)
- Es gibt keinen zusätzlichen Schutz vor Überspannung (also nur der 
eingebaute vom Mikrocontroller)
- wechselt man den Mikrocontroller muss R erneut berechnet werden.

Jetzt kann also jeder selbst entscheiden, welche Variante für den 
jeweiligen Anwendungsfall besser geeignet ist.
Das war zwar nicht Thema dieses Threads, aber dann haben wir das auch 
geklärt. ;-)

von Ramirez (Gast)


Angehängte Dateien:

Lesenswert?

Oder man nimmt 10k und es wird jeder Mikrocontroller seit den 80ern 
funktionieren.

Die ESD Dioden sind schon ewig bei den Mikrocontrollern vorhanden.
Da muss man aktiv suchen, welche keine verwenden.

Rate mal, warum ich mit 10mA dimensioniert habe. (Überspannung?)

Anbei eine 'Spec' eines nicht allzu kleinen Herstellers.

Du hast dir schlichtweg ein Problem erfunden.

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.