Forum: Mikrocontroller und Digitale Elektronik ESP-Easy mit ESP8266 - Eingang unregelmäßig falsch erkannt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Carsten R. (carsten_r855)


Angehängte Dateien:

Lesenswert?

Moin :)

Nach langer Zeit möchte ich mich wieder etwas mit dem Thema Hardware/ 
Elektronik beschäftigen.

Mein erstes Projekt soll eine Erkennung von einem Betätigen einer 
herkömmlichen, analogen Klingel mit einem ESP8266 sein.

Ich habe das aktuell auf einem Breadboard aufgebaut und nutze als 
Software ESPeasy.

Grundsätzlich funktioniert der Aufbau auch. Layout grob im Anhang (in 
der Software habe ich nicht alle Komponenten 100%ig gefunden, daher 
bitte etwas Nachsicht).

Als Code in ESPeasy nutze ich folgendes als "Rule Set":
1
on System#Boot do
2
   Monitor gpio,13
3
endon
4
5
On gpio#13=1 do  
6
   LogEntry,'%systime% - gpio,13 ist 1'
7
   SendToHTTP,http://192.168.2.85:8087/api/set?device=tuerklingel&action=1
8
endon
9
10
On gpio#13=0 do  
11
   LogEntry,'%systime% - gpio,13 ist 0'
12
   SendToHTTP,http://192.168.2.85:8087/api/set?device=tuerklingel&action=0
13
endon

Die SendToHTTP ist meine fhem Installation.

Ich habe als Versuche auch andere Eingänge und andere 
Pull-Down-Widerstände genutzt, einen Unterschied macht es nicht.

Er erkennt zuverlässig die Betätigung der Klingel.
Aber es gibt auch fehlerhafte (falsch positive) Erkennungen (keine 
Betätigung, trotzdem Eingang als High erkannt).

Kann mir jemand meinen Fehler erklären oder mir Tipps zum Suchen geben?

Danke und Gruß
Carsten

von Flip B. (frickelfreak)


Lesenswert?

Die Schaltung ist OK, auf der leitung von pin4 zu D7 fängst du dir 
elektromagnetische Störungen ein. Dagegen verringerst du die 
leitungslänge und die zwischen Signal und GND eingeschlossene fläche, 
bringst an D7 direkt einen kleinen keramikkondensator von 1nF an und 
sorgst in der Software für eine entprellung des Eingangspin.

von Steve van de Grens (roehrmond)


Lesenswert?

Statt 12k würde ich außerdem auf 2,2k runter gehen.

Bei 12k hatte ich manchmal ungewollte Reaktionen auf das eigene 
Funksignal des ESP Moduls.

von Loco M. (loco)


Lesenswert?

Parallel zum Elektrolytkondensator noch ein Widerstand, um den 
Kondensator definiert wieder zu entladen.

von Carsten R. (carsten_r855)


Lesenswert?

Vielen Dank!

Das mit dem Keramikkondensator werde ich testen (muss erst Teile 
besorgen).

Flip B. schrieb:
> sorgst in der Software für eine entprellung des Eingangspin.

Was genau würdest du darunter verstehen? Sowas wie eine Art 
programmierten, zeitlichen Mindestabstand zwischen 2 Auslösungen?
Aktuell ist ja das Problem, dass "dauerhaft" die Fehler kommen, also 
nicht nur direkt nach einem echten Signal, sondern grob geschätzt alle 1 
Minute, aber unregelmäßig.

Steve van de Grens schrieb:
> Statt 12k würde ich außerdem auf 2,2k runter gehen.

Ganz genau weiß ich es nicht mehr, aber grob habe ich 5 oder 6 
Widerstände zwischen 1 kΩ und 25 kΩ getestet. 12 kΩ war nur der 
berechnete Wert.
Aber ich werde dann mal eher auf 2,2 kΩ wieder runter gehen.

Ich überlege schon ein Oszilloskop zu kaufen um den Fehler "sehen" zu 
können :D

Danke und Gruß
Carsten

von Steve van de Grens (roehrmond)


Lesenswert?

Carsten R. schrieb:
> Ich überlege schon ein Oszilloskop zu kaufen um den
> Fehler "sehen" zu können :D

Wenn du Pech hast siehst du damit gar nichts, weil die Impulse für das 
Gerät zu kurz sind und dessen Kapazität sie auch noch bedämpft.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Carsten R. schrieb:
> Er erkennt zuverlässig die Betätigung der Klingel.
Gut.

> Aber es gibt auch fehlerhafte (falsch positive) Erkennungen (keine
> Betätigung, trotzdem Eingang als High erkannt).
Herzlich willkommen in der Welt der Elektromagnetischen Verträglichkeit, 
wo dir jeder Schaltvorgang einen kurzen Spike auf alle deine Leitungen 
legen kann.

Dir fehlt also eine sinnvolle Entprellung des Eingangs. Wie lange wird 
eine Türklingel gedrückt? Sagen wir mal mindestens 100ms. Also solltest 
du alles, was weniger als 100ms anliegt, in der Software einfach 
ignorieren.

Carsten R. schrieb:
> Aktuell ist ja das Problem, dass "dauerhaft" die Fehler kommen, also
> nicht nur direkt nach einem echten Signal, sondern grob geschätzt alle 1
> Minute, aber unregelmäßig.
Dein Aufbau ist aber schon arg störempfindlich...

Carsten R. schrieb:
> Layout grob im Anhang
Das ist ein Schaltplan. Und normalerweise sind in einem Schaltplan alle 
Linien rechtwinklig. Oder bestenfalls bei Busauskopplungen mal kurz mit 
45° verlegt.

: Bearbeitet durch Moderator
von Carsten R. (carsten_r855)


Lesenswert?

Lothar M. schrieb:
> Dein Aufbau ist aber schon arg störempfindlich...

Ich bin für jeden Verbesserungsvorschlag offen ;)
Wie ich eingangs schrieb, bin ich quasi Anfänger. Ich habe mir einiges 
dazu angelesen und für meine Bedürfnisse angepasst. Das ist auf Anhieb 
grundsätzlich funktioniert, finde ich für mich gut.

Lothar M. schrieb:
> Carsten R. schrieb:
>> Layout grob im Anhang
> Das ist ein Schaltplan. Und normalerweise sind in einem Schaltplan alle
> Linien rechtwinklig. Oder bestenfalls bei Busauskopplungen mal kurz mit
> 45° verlegt.

Ja, OK Schaltplan. :)
Da ich das nur als Hobby betreibe und mich gerade erst wieder einfuchse, 
habe ich nach einer einfachen Möglichkeit gefunden, damit ich euch bei 
meiner Hilfeanfrage möglichst viele Informationen geben kann, den 
Schaltplan aufzuzeichnen und bin auf TinyCAD gekommen.
Das ist nicht perfekt, aber ich hatte gehofft meinen Schaltplan damit 
zumindest erkennbar darstellen zu können.

Danke und Gruß
Carsten

von Steve van de Grens (roehrmond)


Lesenswert?

Carsten R. schrieb:
> Das ist nicht perfekt, aber ich hatte gehofft meinen Schaltplan damit
> zumindest erkennbar darstellen zu können.

Hast du, ich finde ihn gut genug.

: Bearbeitet durch User
von Carsten R. (carsten_r855)


Lesenswert?

Flip B. schrieb:
> Die Schaltung ist OK, auf der leitung von pin4 zu D7 fängst du dir
> elektromagnetische Störungen ein. Dagegen verringerst du die
> leitungslänge und die zwischen Signal und GND eingeschlossene fläche,
> bringst an D7 direkt einen kleinen keramikkondensator von 1nF an und
> sorgst in der Software für eine entprellung des Eingangspin.

Nur damit ich das nicht falsch verstehe.
Den 1 nF Keramikkondensator kommt zwischen D7 und Masse?

von Heinz R. (heijz)


Lesenswert?

versuch mal diesen Monitor-Befehl ganzweg zu lassen - dann definiere den 
GPIO in der Weboberfläche - benenne das Device z.B taster - als Value 
klingel

Dort kannst Du dann direkt Entprellzeit einstellen, auch den internen 
Pull-Up aktivieren

Der Code sieht dann ungefähr so aus - ich müsste selber nachsehen:

on taster#klingel do
   if [taster#klingel = 1
        LogEntry,'%systime% - gpio,13 ist 1'
        SendToHTTP,http://192.168.2.85:8087/api/setdevice=tuerklingel&action=1
   endif
endon

Falls es nicht geht, ich schaue gerne heute abend nach dem genauen Code

von Carsten R. (carsten_r855)


Lesenswert?

Heinz R. schrieb:
> versuch mal diesen Monitor-Befehl ganzweg zu lassen - dann definiere den
> GPIO in der Weboberfläche - benenne das Device z.B taster - als Value
> klingel
>
> Dort kannst Du dann direkt Entprellzeit einstellen, auch den internen
> Pull-Up aktivieren
>
> Der Code sieht dann ungefähr so aus - ich müsste selber nachsehen:
>
> on taster#klingel do
>    if [taster#klingel = 1
>         LogEntry,'%systime% - gpio,13 ist 1'
>         SendToHTTP,http://192.168.2.85:8087/api/setdevice=tuerklingel&action=1
>    endif
> endon
>
> Falls es nicht geht, ich schaue gerne heute abend nach dem genauen Code

Also ich habe es nicht einzeln getestet 🙈
Aber mit der Änderung des 1 nF Kondensators am D7 und dem neuen Code von 
Heinz funktioniert es bis jetzt. Kein Fehlalarm mehr nach 5 Minuten.

Das mit dem Entprellen finde ich sehr sinnvoll, aber bei mir tauchten 
die Fehlalarme ja dauerhaft mit Abständen von 1 bis 5 Minuten auf.
Das dürfte nicht mehr unter Entprellen fallen :D

Ich beobachte das jetzt noch mal ein paar Stunden und werde dann in den 
Live-Betrieb an der echten Hausklingel gehen.

Danke und Gruß
Carsten

von Carsten R. (carsten_r855)


Lesenswert?

Edit:

So, jetzt mache ich keinen neuen Beitrag mehr auf.

Ich denke ich habe den, hoffentlich letzten, Fehler gefunden.
Es war die Konfiguration des dummy-device. Bei "Switch Button Type" muss 
"normal Switch" stehen.

Danke und Gruß
Carsten

~~~~~~~~~~~~~~~~~~~~~~~~~

Heinz R. schrieb:
> versuch mal diesen Monitor-Befehl ganzweg zu lassen - dann definiere den
> GPIO in der Weboberfläche - benenne das Device z.B taster - als Value
> klingel
>
> Dort kannst Du dann direkt Entprellzeit einstellen, auch den internen
> Pull-Up aktivieren
>
> Der Code sieht dann ungefähr so aus - ich müsste selber nachsehen:
>
> on taster#klingel do
>    if [taster#klingel = 1
>         LogEntry,'%systime% - gpio,13 ist 1'
>         SendToHTTP,http://192.168.2.85:8087/api/setdevice=tuerklingel&action=1
>    endif
> endon
>
> Falls es nicht geht, ich schaue gerne heute abend nach dem genauen Code

Hmm, also das schien nur auf den ersten Versuch erfolgreich.

Mein Code sieht jetzt wie folgt aus:
1
on klingel#State do
2
   if [klingel#State]=1
3
        GPIO,2,0
4
        TaskValueSet,klingel_dummy,anz,[klingel_dummy#anz]+1
5
        LogEntry,'%systime% - gpio,13 ist 1 - bisher [klingel_dummy#anz]x ausgelöst'
6
        SendToHTTP,http://192.168.2.85:8087/api/setdevice=tuerklingel&action=1
7
   Elseif [klingel#State]!=1
8
        GPIO,2,1
9
        LogEntry,'%systime% - gpio,13 ist ungleich 1'
10
   endif
11
endon

Mit dem folgenden Dummy-Device:
Device: Switch input - Switch
Name: klingel
enabled: True
GPIO: GPIO-13 (D7)
Switch Type: Switch
Switch Button Type: Push Button Active High
De-bounce (ms): 50
Values: State

Jetzt ist das Verhalten, dass bei jedem "Klingeln" ein Statuswechsel 
erfolgt.
1. Klingeln -> High erkannt
2. Klingeln -> Low erkannt
usw.

Das GPIO2,0/1 habe ich eingefügt, um direkt auf der Onboard-LED das 
sehen zu können.

Hat noch jemand eine Idee?

--------------

Die Fehlalarme haben bisher komplett aufgehört. Ich denke das hier am 
ehesten der 1 nF Kondensator geholfen hat.

Danke und Gruß
Carsten

: Bearbeitet durch User
von Heinz R. (heijz)


Lesenswert?

Du darfst hier nicht "Push Button" verwenden - nimm "normal Switch"

Push Button wäre ein Taster der toggelt - deshalb das Fehlverhalten bei 
Dir

Und setz mal die debounce time noch weiter hoch, es drückt ja niemand 
den Klingeltaster nur 50 ms

Carsten R. schrieb:
> Das mit dem Entprellen finde ich sehr sinnvoll, aber bei mir tauchten
> die Fehlalarme ja dauerhaft mit Abständen von 1 bis 5 Minuten auf.
> Das dürfte nicht mehr unter Entprellen fallen :D

doch, wenn da halt kurze Impulse auf der Leitung sind kann das schon 
sein
Mit "debounce time" z.B. 300ms sagst Du dass das Signal mindestens 300 
mS high sein muss, sonst wird es ignoriert

: Bearbeitet durch User
von Carsten R. (carsten_r855)


Lesenswert?

Heinz R. schrieb:
> doch, wenn da halt kurze Impulse auf der Leitung sind kann das schon
> sein
> Mit "debounce time" z.B. 300ms sagst Du dass das Signal mindestens 300
> mS high sein muss, sonst wird es ignoriert

OK, danke für die Erklärung!
Ich hatte das falsch verstanden. Dachte die Zeit in ms müsste zwischen 
zwei Events liegen, ansonsten würde das zweit ignoriert.

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.