"Geisterimpulse" vom Pluviometer mit ESP32 und ESPEasy

Begonnen von TheTrumpeter, 02 Dezember 2020, 16:29:48

Vorheriges Thema - Nächstes Thema

Papa Romeo

Tip:

Optimal wäre es natürlich, wenn der GPIO ständig einen definierten LOW-Pegel bekäme und nur für den Moment des Impulses vom Sensor freigeben wird.

In der Schaltung im Anhang z.B. haben "Störimpulse" keine Chance, da der Transistor am GPIO ständig ein "LOW" erzeugt und nur für die Zeit des Impulses
am GPIO ein "HIGH" zulässt.

Mit einem optionalen Kondensator parallel zum Reed (gestrichelt) könnte man den Impuls auch etwas verlängern.


LG

Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Klaus0815

Womit versorgst DU das Teil momentan?

Falls über Netzteil - versuche es mal über Batterie

Papa Romeo

Zitat von: Papa Romeo am 03 Dezember 2020, 17:06:47
In der Schaltung im Anhang z.B. haben "Störimpulse" keine Chance, da der Transistor am GPIO ständig ein "LOW" erzeugt und nur für die Zeit des Impulses
am GPIO ein "HIGH" zulässt.

EDIT: ...dann ist es auch unerheblich auf welche Flanke der ESP reagiert
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

TheTrumpeter

Ich habe bzgl. des "LOW"-Problems mal den Code nachgelesen, da konnte ich keinen Fehler entdecken. Dann habe ich die Arduino-Referenz konsultiert und bin der Meinung, dass es ohnehin keinen Unterschied macht ob ich im konkreten Anwendungsfall auf "RISING", "FALLING" oder "LOW" triggere:

Zitat
LOW Interrupt wird getriggert, wenn der Pin LOW ist,
CHANGE Interrupt wird getriggert, wenn der Pin den Wert ändert
RISING Interrupt wird getriggert, wenn der Pin von LOW auf HIGH wechselt,
FALLING Interrupt wird getriggert, wenn der Pin von HIGH auf LOW wechselt.
Und weiter:
ZitatHIGH
Die Bedeutung von HIGH (In Bezug auf den Pin) ist unterschiedlich, je nachdem, ob der Pin als INPUT oder OUTPUT definiert ist. Wenn ein Pin als INPUT mit pinMode() definiert wird und mit digitalRead() gelesen wird, gibt der Arduino (ATmega) HIGH zurück, wenn:
    eine Spannung größer als 3,0V an dem Pin anliegt (5V-Boards)
    eine Spannung größer als 2,0V an dem Pin anliegt (3,3V-Boards)

LOW
Die Bedeutung von LOW (In Bezug auf den Pin) ist ebenfalls unterschiedlich, je nachdem, ob der Pin als INPUT oder OUTPUT definiert ist. Wenn ein Pin als INPUT mit pinMode() definiert wird und mit digitalRead() gelesen wird, gibt der Arduino (ATmega) LOW zurück, wenn:
    eine Spannung kleiner als 1,5V an dem Pin anliegt (5V-Boards)
    eine Spannung kleiner als 1,0V (circa) an dem Pin anliegt (3,3V-Boards)

Offen habe ich 3V3 anliegen, angenommen es kommt ein Störimpuls und die Spannung am GPIO sinkt ab.
Habe ich LOW gewählt, dann zählt der Impuls sobald die Spannung unter ca. 1V sinkt, beim Wiederherstellen der 3V3 passiert nichts mehr.
Habe ich RISING gewählt, dann muss die Spannung ebenfalls unter ca. 1V sinken, beim Wiederherstellen der 3V3 wird dann gezählt.
Habe ich FALLING gewählt, dann zählt der Impuls sobald die Spannung unter ca. 1V sinkt, beim Wiederherstellen der 3V3 passiert nichts mehr.

Da durch die Wippe der Reed-Kontakt nur kurz schliesst, ist es völlig unerheblich ob der Impuls beim Schliessen oder beim gleich darauffolgenden Öffnen gezählt wird.

Und Einbrüche von 3V3 auf 1V bei Versorgung über ausreichend dimensioniertes 5V-Netzteil für ESP32 und Sensoren/Aktuatoren? Kann ich mir irgendwie nicht vorstellen.

Zitat von: Papa Romeo am 03 Dezember 2020, 17:11:50
EDIT: ...dann ist es auch unerheblich auf welche Flanke der ESP reagiert
Handynetzteil auf die Pinleiste, im fertigen Ausbau dann statt dem Handynetzteil ein kleines PCB-Netzteil, entweder von 24V AC oder wahrscheinlicher von 220V AC auf 5V DC.
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

Papa Romeo

Zitat von: Papa Romeo am 03 Dezember 2020, 17:06:47
In der Schaltung im Anhang z.B. haben "Störimpulse" keine Chance, da der Transistor am GPIO ständig ein "LOW" erzeugt und nur für die Zeit des Impulses
am GPIO ein "HIGH" zulässt.

vielleicht falsch verstanden...

Meine Aussagen über "LOW" oder "HIGH" bezogen sich jetzt nicht auf die Rückgabewerte es ESP und ist auch unerheblich
ob der GPIO durch die Software jetzt als Aus- oder Eingang definiert ist.

Aber ich denke wir reden hier eigentlich über einen Sensor-Eingang

--> "LOW" --> GPIO hat etwa den gleichen Pegel wie Gnd also ca. 0 Volt

--> "HIGH" --> GPIO hat annähernd den gleichen Pegel wie die Betriebsspannung

Wenn ein GPIO auf Gnd gelegt wird, also sozusagen mit Gnd kurzgeschlossen ist, dann kann eine Störspannung an dem Pin
"Purzelbäume" schlagen und das wird Diesen nicht im geringsten interessieren.


LG

Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

TheTrumpeter

Leider habe ich mich zu früh gefreut, meine Schaltung ist immer noch äusserst anfällig.

Hatte ich mehrere Tage ohne angeschlossenes Pluviometer nun keine Fehlauslösungen mehr, geht's nach dem erneuten Anschluss erneut unmotiviert "nach oben". Wackler sind diesmal wirklich ausgeschlossen, ich habe auch das Pluviometer weiter weg gestellt, sodass das Kabel nicht mehr zusammengerollt ist.

Was mich irritiert: Wie kann das bloße An- und Abstecken vom Reed-Kontakt Fehlauslösungen verursachen? Der GPIO ist mittels PullUp auf 3V3 gelegt, da muss es doch völlig unerheblich sein, dass ich an denselben Pin zusätzlich ein Kabel, das zu einem offenen Reed-Kontakt (der mit Masse verbunden ist) geht, an- oder abstecke? (Das An- und Abstecken vom Kabel führt sicher nicht zu Erschütterungen am Reed-Kontakt.)

Entsprechend denke ich nun doch über die kleine Zusatzschaltung nach. Von links gesehen bis zum Transistor ist mir alles klar, aber dann beginnen die Fragezeichen in meinem Kopf. Auf der Zeichnung sieht es so aus als ob der GPIO sowohl mit Masse als auch 3V3 verbunden ist.

Ein Versuch der Erklärung:
Bei offenen Reed-Kontakt fliesst der Strom über den 4k7 durch die Basis zum Emitter, daher fliesst auch Strom über den Pullup vom Kollektor zum Emitter, die Spannung fällt am Pullup ab und daher "sieht" der GPIO durch den Kurzschluss mit Masse keine Spannung, obwohl er auch mit 3V3 verbunden ist?
Bei geschlossenem Reed-Kontakt fliesst kein Strom von der Basis zum Emitter, weil der über den 4k7 kommende Strom über den Reed-Kontakt mit Masse verbunden wird. Dadurch sperrt der Transistor, sodass der Strom von 3V3 direkt über den GPIO zu Masse fliesst?
Wenn der Reed-Kontakt geschlossen bleibt, habe ich dann aber einen dauerhaften Kurzschluss?
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

Papa Romeo

Zitat von: TheTrumpeter am 09 Dezember 2020, 17:16:10
Auf der Zeichnung sieht es so aus als ob der GPIO sowohl mit Masse als auch 3V3 verbunden ist.

Der GPIO kann nur einen Zustand haben. Entweder er hat "Gnd-Pegel" also 0 Volt oder er hat den Pegel der Betriebsspannung als 3.3 Volt.

Deine Erklärungen sind teilweise richtig, aber ich versuch´s auch mal zu erklären.

Wir gehen mal davon aus, dass der GPIO einen sehr,sehr hohen Eingangswiderstand hat.

Wenn der Reed offen (hochohmig) ist, kann über den 4k7 ein Basisstrom fließen und der Transistor steuert durch.
D.h. der Kollektor des Transistor hat dann in etwa den Pegel wie der Emitter und der GPIO hat somit den gleichen Pegel.
Man sagt, der GPIO liegt auf "LOW" (Gnd, Masse) und die ganze Spannung fällt über dem Pullup ab, was aber keine Auswirkung hat, ausser dass er, sagen wir mal
"Strom" verbraucht.

Schließt nun der Reed (niederohmig), wird dem Transistor die Basisspannung genommen, der Basisstrom wird somit 0 und der Transitor sperrt.
Das wiederum heißt, da wir von einem sehr hohen Einganswiderstand des GPIO ausgehen, durch den Pullup kann kein Strom mehr fließen.
Da in einem Stromkreis in dem kein Strom fließt, an einem Widerstand keine Spannung abfallen kann, ist die Spannung an allen Punkten gleich und wir messen somit an beiden Seiten des Pullup´s die Betriebsspannung.
Der GPIO liegt auf +Ub (HIGH).

Ich hoffe es ist so verständlich.


LG

Papa Romeo

...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

TheTrumpeter

Zitat von: Papa Romeo am 09 Dezember 2020, 18:35:22
Ich hoffe es ist so verständlich.
Danke, jetzt habe ich es verstanden.
Als Transistor kann ich vmtl. jeden x-beliebiges Modell nehmen, solange es ein npn-Typ ist, oder?
Und für den PullUp sollte ein Wert deutlich über den 4k7 gewählt werden, richtig?
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

Papa Romeo

Ja, gängige Typen sind z.B. der BC546, BC547, BC548 oder der BC337

Gängige Werte für die Pullup´s liegen zwischen 4.7 und 10 kOhm.
Ist also unkritisch ... solange du die Impulse nicht verlängern must und ein Kondensator zum Einsatz kommt.
Da ist es dann schon gefordert, dass man mit dem Pullupwert und dem C auf die entsprechenden Zeiten kommt.


LG

Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

TheTrumpeter

Ok, die Widerstände habe ich da, Transistor werde ich nächste Woche besorgen und das dann mal zusammenstecken.

Danke für die Hilfe.
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

Papa Romeo

...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

michael.winkler

Ich würde mal die Spannung am GPIO dauerhaft messen und aufzeichnen. Vielleicht kann hier zumindest erkennen das ein kurzer Impuls anliegt. Ich verwende hier diese Messegerät:

Messgerät PeakTech 2025 ==> https://amzn.to/37PVRHQ

Kostet ca. 55€. Hier könnt Ihr die gemessenen Daten per USB an Euren PC senden und Grafisch darstellen.

TheTrumpeter

Zitat von: michael.winkler am 11 Dezember 2020, 08:25:48
Ich würde mal die Spannung am GPIO dauerhaft messen und aufzeichnen. Vielleicht kann hier zumindest erkennen das ein kurzer Impuls anliegt.
Ich glaube, dass der Impuls anliegt, steht ausser Frage. Ohne angeschlossenes Pluviometer ist ja dauerhaft "Ruhe".

Offen ist eher woher der Impuls kommt bzw. wie er dauerhaft abgestellt werden kann. Zu letzterem hat Papa Romeo auch schon einen Vorschlag geliefert.
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

frank

vielleicht schlecht gelötet, zb "kalte" lötstelle, im pluviometer?
einfach mal alle lötstellen nachlöten. dabei immer etwas neues lötzinn hinzufügen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

TheTrumpeter

Zitat von: Papa Romeo am 03 Dezember 2020, 17:06:47
In der Schaltung im Anhang z.B. haben "Störimpulse" keine Chance, da der Transistor am GPIO ständig ein "LOW" erzeugt und nur für die Zeit des Impulses
am GPIO ein "HIGH" zulässt.
So, heute habe ich die Schaltung nachgebaut, nur ohne Erfolg. Nach langer Fehlersuche bin ich dann draufgekommen, dass ich offenbar pnp- statt npn-Transistoren "erwischt" habe, die müssen wohl falsch einsortiert gewesen sein.

Ich habe mich an folgende Anleitung zum Überprüfen gehalten (https://www.gutefrage.net/frage/wierum-wird-ein-transistor-eingebaut):
ZitatDas lässt sich aber leicht überprüfen mit einem Multimeter im Diodentest. Im Diodentest zeigt das Multimeter die Knickspannung in mV an:

1) Rot in die Mitte, schwarz muss an beiden anderen Beinchen um 700 anzeigen.
=> Es ist ein NPN Transistor mit C-B-E Belegung

2) Schwarz in die Mitte, Rot muss an beuden anderen Beinchen um 700 anzeigen.
=> Es ist ein PNP Transistor mit C-B-E Belegung

Bei mir zeigte der Test in 2) immer ca. 600 an, bei 1) war kein Durchgang :-(

Gibt's eine Möglichkeit die Schaltung auch mit einem pnp-Transistor zu realisieren?
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110