ESP-Easy mit ESP8266 - Eingang unregelmäßig falsch erkannt

OP #7606974
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

Angehängte Dateien:
#7606990
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.

OP #7607018
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

Moderator (Firma: Titel) Persönliche Seite #7607023
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.

OP #7607049
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

OP #7607540
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?

#7607562
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

OP #7607667
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

OP #7607693
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

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

20

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

23
Mein Code sieht jetzt wie folgt aus:
24

25
```c
26
on klingel#State do
27
   if [klingel#State]=1
28
        GPIO,2,0
29
        TaskValueSet,klingel_dummy,anz,[klingel_dummy#anz]+1
30
        LogEntry,'%systime% - gpio,13 ist 1 - bisher [klingel_dummy#anz]x ausgelöst'
31
        SendToHTTP,http://192.168.2.85:8087/api/setdevice=tuerklingel&action=1
32
   Elseif [klingel#State]!=1
33
        GPIO,2,1
34
        LogEntry,'%systime% - gpio,13 ist ungleich 1'
35
   endif
36
endon
37

38
```
39

40

41
Mit dem folgenden Dummy-Device:
42
Device: Switch input - Switch
43
Name: klingel
44
enabled: True
45
GPIO: GPIO-13 (D7)
46
Switch Type: Switch
47
Switch Button Type: Push Button Active High
48
De-bounce (ms): 50
49
Values: State
50

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

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

58
Hat noch jemand eine Idee?
59

60
--------------
61

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

64
Danke und Gruß
65
Carsten
#7607737
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

OP #7608125
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren