Arduino entstören

Hey Leute,
ich mach jetzt doch mal einen neuen Thread speziell zu dem Thema auf, da der alte zu unübersichtlich wird.

Gegebenheiten:
Am Arduino ist ein Pin (Input_Pullup) direkt auf Masse geschlossen, schaltet ein externes Relais wird diese Verbindung getrennt, der Pin wird HIGH und der Arduino sendet eine Email.

Im selben Gebäude ist eine weiter Schaltung installiert.

Problem:
Sendet oder erhält die zweite Schaltung, welche keinerlei Verbindung zum Arduino hat sendet der Arduino eine E-Mail, der Pin wechselt also auf HIGH.
Anfangs war das ganze umgedreht, der Pin war immer High und wurde beim Auslösen des Relais auf LOW gezogen, hier waren die Fehlauslösungen sehr häufig.
Meine Hoffnung war, dass alle "Fehlströme" von der Masse "geschluckt" werden, man kann auch den 5V Ausgang direkt auf den Pin legen und der Arduino löst NICHT aus. Bis jetzt halten sich die Fehlauslösungen auch in Grenzen, lassen sich aber nicht ganz abstellen.

So langsam bin ich ratlos =( und hoffe ihr wisst weiter.

Schon mal Danke im Vorraus für eure Mühe :slight_smile:

Wenn man davon ausgehen kann dass das Relais, wenn es mal schaltet, längere Zeit umgeschaltet bleibt, könnte man die Mail erst dann senden wenn der Eingangspin länger als x ms oder Sekunden auf 1 geht.
Kurze Impulse also herausfiltern bzw. unterdrücken.

Gruß,
Peter

Gibst Du uns mal die Schaltung

Hallo,
hä, hä- das hört sich verdächtig nach einer "Masseschleife" an. Viel Spaß damit.
Du kannst einmal versuchen, den Strom zu reduzieren, der dort fließt.
Dann den Widerstand der Leitungen verringern.
Gruß und Spaß
Andreas

Wie lange ist denn die Leitung vom Arduino zum Relais?

Ich vermute, dass du hier Störpulse einfängst.
Die Abhilfe ist Filtern:
a) Hardware: Nach dem Pullup noch einen RC-Tiefpass.
b) Software: Wie Peter schon schrieb: zu kurze Pulse ausfiltern.

Am besten beides kombinieren.

uwefed:
Gibst Du uns mal die Schaltung

Ein Foto? Bin leider erst Freitag wieder zu Hause

Die Kabel vom Arduino zum Relais sind nur wenige cm lang, vielleicht 5 allerhöchstens 10.

Da habt ihr Recht kurze Impulse lassen sich softwareseitig ja wircklich einfach rausfiltern. Danke :slight_smile:
Allerdings kann ich wohl nicht mehr als 2 Sekunden warten, da es sich um eine Art Alarmierung handelt und der E-Mail Versandt schon ziemlich lange dauert. Andererseits bringt es mir auch nichts wenn die Mail schnell da is, dafür aber jede Menge Fehlauslösungen dabei sind :roll_eyes:
Bleibt die Frage ob es auch nur kurze Impulse sind, aber das lässt sich wohl nicht prüfen.
Endstörkondensator etc. hatte ich gehofft umgehen zu können, da ich eigentlich möglichst wenig Hardware verbauen wollte.

Nein, eine Schematic, bzw. Stromlaufplan. Ich denke, dort hast du ein paar andere Sachen falsch angeschlossen.

Soll ich euch da echt was Zeichnen?
Pin3->Relais Relais->Ground
Da kann man doch nichts falsch anschließen

Oder stehe ich gerade auf dem Schlauch?

Ich dachte diesen Zweck erfüllt der interne Pullup Widerstand?

Ja zeichnen! Falsch machen können da mache Leute einiges :wink: Wir wollen hier auch nicht immer hellsehen.

Sorry, stand grade auch auf dem Schlauch. Wird ja als Eingang verwendet. Nicht als Ausgang. Habe es daher wieder gelöscht :s

Muss das unbedingt ein Relais sein? Ist das durch eine Schaltung gegeben die du nicht ändern kannst? Wenn du das Schaltelement wählen kannst, wäre ein Optokoppler vielleicht weniger störanfällig.

nrg112:
Da habt ihr Recht kurze Impulse lassen sich softwareseitig ja wircklich einfach rausfiltern. Danke :slight_smile:
Allerdings kann ich wohl nicht mehr als 2 Sekunden warten, ...

Kurze Impulse bedeutet in diesem Falle: 100ns bis einige µs.
Wertest du mit Interrupt aus? dann reicht ein Nanosekundenimpuls um den Eingang zu triggern.

Endstörkondensator etc. hatte ich gehofft umgehen zu können, da ich eigentlich möglichst wenig Hardware verbauen wollte.

Ganz ohne gehts nicht. Ein kleiner Tiefpass spart dem Arduino viel Rechenzeit!
Zwischenablage01.jpg

@guntherb: Du hast bestimmt die Widerstände vertauscht. Pullup R1 müsste 10kOhm sein, und R2 sollte 200Ohm sein.

Hallo,
ich glaube nicht. R1 (220) begrenzt den Strom, und R2 (10) schützt den Eingang. C1 Entkoppelt das ganze.
Könnte funktionieren.
Gruß und Spaß
Andreas

Theseus:
@guntherb: Du hast bestimmt die Widerstände vertauscht. Pullup R1 müsste 10kOhm sein, und R2 sollte 200Ohm sein.

Nein, das passt so.

Der Pullup niederohmig, um einerseits für einen nennenswerten Kontaktstrom zu sorgen, andererseits um den Kreis möglichst niederohmig zu halten, damit wirds auch unempfindlicher.
Und der Widerstand des RC-Gliedes ist hochohmiger, damit man vernünftige Filterzeiten kriegt (Der hier hat ein Tau = 1ms)

Die Widerstände sind in der Reihenfolge schon okay. Die 220Ohm begrenzen den Strom auf ~20mA. Jedoch kann man den auch etwas größer auslegen.


@TE: Kannst du nicht diese schaltung nehmen? Dein Relais verhält sich doch auch nicht anderes wie ein Schalter.

So sah das ganze anfangs ja auch aus, aber wie gesagt waren bei dieser Anordnung die Fehlauslösungen sehr hoch.
Nun sieht das ganze genauso aus, nur dass der Schalter zwischen GND und 2 ist.

Wie wertest du denn den Pin aus?
Interrupt oder pollen?

pollen....

DAnn ist das doch einfach zu lösen:
über millis() einen festen Abfrageabstand einstellen, z.B. 30ms.
Und nur wenn Drei mal hintereinander der Wert stimmt, dann als gültig erklären.
So verlierst du maximal 90ms.

Trotzdem empfehle ich dir einen Hardware-Entstörung zusätzlich! Das ist immer besser.