Programmierung Störfilter

Begonnen von m-zitter, 14 August 2018, 11:27:19

Vorheriges Thema - Nächstes Thema

m-zitter

Thema Störfilter.
Ich plane die Beleuchtung in unserem Neubau komplette mit Relais zu Schalten.

Die Lichtschalter werden hierbei mit konventioneller Verkabelung (NYM 1,5mm²) an einem Eingangspin an meinem Arduino aufgelegt. Ein Ausgangspin schaltet dann das Relais.
Ein Testaufbau hat gezeigt, dass der Eingangspin ab und zu Events aufgrund von Störsignalen auslöst. (z.b. sobald man einen Verbraucher in eine nahe gelegenen Steckdose steckt).

Um die Störsignale zu minimieren habe ich bereits einige Hardwarevorkehrungen getroffen (10kOhm pullup widerstand, 100nF Kondensator parallel zur Schalterverkabelung).
Dadurch wurden die Störsignale auch deutlich reduziert jedoch treten sie weiterhin ab und zu mal auf.

Meine Frage wie kann man programmiertechnisch entgegenwirken?
Mit Watchdog funktioniert das ganze zwar (1sek abwarten ob Eingangspin on bleibt erst dann Ausgangspin auf on). Jedoch ist eine Sekunde schon eine relativ lange Zeit beim Licht einschalten :(.
Ein Störsignal tritt meist nur ein paar Millisekunden auf. Hat daher jemand eine Idee was man nehmen könnte um den Eingangspin z.b. erst 250-500ms aktiv zu haben bevor er ein Event auslöst?

Vielen Dank im Voraus!

Damian

define di_lamp DOIF ([Taster:"on"])(set lamp on)

attr di_lamp wait 0.5
attr di_lamp do always
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Frank_Huber

Falls noch keine Kabel lieen würde ich über I-Y-ST-Y Kabel nachdenken. am besten 0,8er, das macht sich in Schaltern einfacher.
Vorteil ist hier der vorhandene Schirm der vor Störgrößen schützt.
Ich habe so 2016 den ganzen Neubau verkabelt.

r00t2

Alternativ kann man auch versuchen die Eingänge des Arduino besser zu entprellen: https://www.arduino.cc/en/Tutorial/Debounce
FHEM 6.0 (Raspberry Pi 2 B | Raspberry Pi OS Lite | Perl 5.28.1 | UZB Z-WAVE.Me | Hue Bridge V1 | SIGNALDuino 433 MHz | FritzBox | Kodi | Pioneer AVR | MQTT | Node-RED | Diverse Google Dienste)

Frank_Huber

Zitat von: r00t2 am 14 August 2018, 16:38:47
Alternativ kann man auch versuchen die Eingänge des Arduino besser zu entprellen: https://www.arduino.cc/en/Tutorial/Debounce

Alternativ oder zusätzlich! :-)

meine RPI GPIOs haben alle den debounce aktiviert.

m-zitter

Vielen Dank für die Hinweise.

Zitatdefine di_lamp DOIF ([Taster:"on"])(set lamp on)

attr di_lamp wait 0.5
attr di_lamp do always
mit wait hatte ich auch schon probiert aber hier werden keine kurzzeitigen Events herausgefiltert. Wenn das kurzzeitige "Störevent" eintritt wird einfach nur 0.5 sec gewartet bis die Lampe geschalten wird.
Es wird aber nicht gewartet ob das Event ([Taster:"on"]) 0.5sec aktiv ist bevor die Lampe geschalten wird.

ZitatAlternativ kann man auch versuchen die Eingänge des Arduino besser zu entprellen: https://www.arduino.cc/en/Tutorial/Debounce
Unter Entprellung/Debouncing hab ich verstanden dass ein Event ausgeführt wird und danach erstmal ZeitX abgewartet wird bis das nächste Event eintreten darf. Ich möchte allerdings gar nicht erst das dass Event unter bestimmten Umständen eintritt.

ZitatFalls noch keine Kabel lieen würde ich über I-Y-ST-Y Kabel nachdenken. am besten 0,8er, das macht sich in Schaltern einfacher.
Vorteil ist hier der vorhandene Schirm der vor Störgrößen schützt.
Ich habe so 2016 den ganzen Neubau verkabelt.
Habe ich tatsächlich auch schon überlegt. Mich schreckt dabei nur ab das man nie wieder auf eine konventionelle Schaltung zurückschwenken kann. Wie zufrieden bist du? Sind bei dir alle Lichtkreise über Relais und GPIO Pins gesteuert?