Hi,
Ich habe mir eine Klingel mit einem wemos d1 gebaut. Sehr simpel: eine analoge Klingel ist über die Pins angeschlossen. Wenn der Schaltkreis durch das betätigen der Klingel geschlossen wird, reagierte ich darauf und schicke eine mqtt Nachricht an mein smart Home. Dort wird der gong ausgelöst.
Der wemos selbst ist per USB an einer Steckdose angeschlossen.
Allerdings löst das Programm auch aus, wenn ich einen Rollläden bestätige der auf der gleichen Phase liegt.
Es muß also so sein, dass es eine Art Stromspitze gibt die dazu führt, dass der wemos denkt, die Klingel wurde betätigt...
Habe ans uns Kabel schon ferrit klammern angebracht, seist ohne Erfolg. Habt ihr noch einen Tipp für mich?
Eine Klingel oder ein Klingeltaster, an den sonst nichts angeschlossen ist?
Vermutlich der Taster, mit ca 2 * 20m Zuleitung, ungeschirmt. Mit einem ziemlich hochohmigen Pulldown-Widerstand.
Mach den mal so klein, dass das Signal erst HIGH wird, wenn "richtig viel" Strom beim Betätigen fließt ( Größenordnung 3,3V / 10 mA = 330 Ohm )
Für @Tommy56 s Stromschleife bräuchtest du eine Stromquelle die dauernd 20 mA liefert. An einem 150 Ohm Widerstand kann der Arduino dann 3V erkennen, außer der Klingeltaster bildet einen Kurzschluss über dem Widerstand. Etwas übertriebener Aufwand, finde ich. (Oder er meint was anderes)
Nö. Du brauchst nur eine 3,3V Speisung wenn der Taster geschlossen ist und einen niederohmigen Pulldown (ca. 150Ohm), so dass bei geschlossenen Taster 20 mA fließen und 3,3V am Eingang anliegen. Bei geöffnetem Taster ist der Eingang dann so niederohmig nach GND abgeschlossen, dass es Störungen schwer fallen dürfte, da Hight auszulösen.
Ich habe jetzt mal den analogen pin A0 des wemos für die Klingel verwenden. Damit bekomme ich beim Klingeln eine 1024 zurück, beim Rolladen-Runterfahren nicht. So funktioniert es erstmal... Weiß aber nicht ob die Lösung optimal ist
analogRead lädt einen kleinen Kondensator auf, der dann in ca. 100 µs auf 10 Stufen abgetastet wird. digitalRead ist wesentlich empfindlicher und schneller.
Da dein Arduino sonst nichts zu tun hat, kannst du gerne (anstelle eines kleineren Widerstands) die analogRead - Methode verwenden.
Optimal ist in der Regel, Hardware durch Software zu ersetzen, die immer noch bei weitem schnell genug ist. Ob der ADC ungenutzt da ist, oder du auf einen extra PullDown- Widerstand verzichten kannst, ist deine Sache.
Nebenbei: vermutlich bekommst du 1023 zurück und beim Rolladen-Runterfahren gelegentlich einen Wert > 0. Wenn du klingelst während der Rolladen fährt, oder wenn der Klingeltaster verstaubt ist, sind es eventuell gelegentlich auch mal weniger als 1023