Problem bei GPIO.add_event_detect

  • Hallo,

    da ich im Netz nicht fündig geworden bin, versuche ich es nun auf diesem Weg.
    Ich bin dabei, mir eine Alarmanlage zu basteln, mit Magnetkontakten oder Bewegungsmelder.
    D.h. beim Auslösen des Magnetschalters beispielsweise und Erkennen mittels GPIO.add_event_detect soll eine Aktion ausgeführt werden.
    Schaltung und Programmierung steht soweit und funktioniert eigentlich auch.
    Nun ist mir aufgefallen, dass sämtliche Stromverbraucher (Lampen etc.), die am selben Stromkreis wie der PI hängen, bei Zustandsänderung (An-/ausschalten) ein Event auslösen. Das ist natürlich nicht gewollt.
    Ich habe schon die verschiedensten Schaltungen und Programmierungen (auch aus Fachbüchern) ausprobiert und habe immer dasselbe Problem.

    Kennt jemand dieses Problem und kann mir einen Hinweis geben?
    Danke!

  • Ohne dein Code oder Schaltung zu kennen? Nein.

    1. Dein Script posten
    2. Mit fritzing ein Schaltplan zeigen.

    FAQ => Nützliche Links / Linksammlung => Interrupt
    Ebenfalls zu beachten: GPIO mit Pullup- oder Pulldown-Widerstand beschalten?

  • also ein Bsp.script wäre:

    • Offizieller Beitrag

    Hallo czwolle,


    Nun ist mir aufgefallen, dass sämtliche Stromverbraucher (Lampen etc.), die am selben Stromkreis wie der PI hängen, bei Zustandsänderung (An-/ausschalten) ein Event auslösen.

    evtl. liege ich ja auch völlig daneben, aber was hast Du für ein Netzteil am RPi?

    Habe den Schnipsel nur kurz überflogen... Eine bouncetime würde dem callback auch nicht schaden, so in etwa:

    Code
    GPIO.add_event_detect(MAGNET_GPIO, GPIO.BOTH, callback=my_callback, bouncetime=300)


    Nicht schaden weil: Fenster auf == Fenster auf, aber kurze Impulse würden abgefangen.

  • Ich sehe das Problem eher in der Schaltung selbst.
    Der GPIO ist als Eingang definiert, die 3,3 Volt laufen über den 10kOhm zum GPIO, über den Schalter nur 1 kOhm vom GPIO nach Masse.
    Warum nicht so:
    Vom GPIO zu Masse 10 kOhm, von 3,3 Volt über den Schalter mit 1 kOhm auf den GPIO.
    Damit sollte der Zustand eindeutiger definiert sein und wäre nicht so anfällig für Störungen.
    Wenn das nicht hilft, kann man immernoch an der Bouncetime-Schraube drehen.

    • Offizieller Beitrag


    Ich nutze das Netzteil, das im Set dazu war: 5V, 2500mA

    Da Antworte ich mal ala Crocodile Dundee.. Was ein Netzteil? DAS [Anzeige] ist ein Netzteil! ;)

    Zitat

    Europaischen (EU) USB Netzteil Labegerat (2.5 AMP)

    :baeh2:

  • Dein Code zeigt nur die Behandlung eines GPIO's, du schreibst aber das du mehrere Sachen behandeln willst und dabei Probleme hast :s
    Desweiteren bedarf es für Pull-Up / Down nur einen Widerstand, nicht zwei.

    Bitte lese dir die Links aus Beitrag#2 genauer durch.


  • Dein Code zeigt nur die Behandlung eines GPIO's, du schreibst aber das du mehrere Sachen behandeln willst und dabei Probleme hast :s
    Desweiteren bedarf es für Pull-Up / Down nur einen Widerstand, nicht zwei.

    Bitte lese dir die Links aus Beitrag#2 genauer durch.

    Naja, momentan steuere ich nur einen GPIO an: Entweder durch Erkennen ob ein Reed-Kontakt geschlossen ist, oder nicht... oder eben mittels einer einfachen Schaltung das Auslösen eines Bewegungsmelders. Es spielt keine Rolle, das Problem ist immer dasselbe. Die obige Schaltung soll nur ein einfaches Bsp. sein, bei der es schon dieses Problem gibt.
    Einen weiteren GPIO ansteuern/auslesen macht ja momentan wenig Sinn, wenn es schon bei einem Schwierigkeiten gibt.
    Ich werde die oben genannten Hinweise erst noch ausprobieren...

    Eine Schaltung mit nur einem Widerstand hatte ich auch schon ausprobiert -> mit dem selben Problem...

  • Naja, bei anderen funktioniert es ja auch also wieso aber bei dir nicht? :-/

    Bau die Schaltung richtig auf, zeig davon dann ein fritzing Schaltplan und poste dazu eine Beschreibung was du machst und worin das Problem besteht bzw dessen Ausgabe. Dann sehn wir weiter.

    Eine Entprellung ist auch oft wichtig - entweder Hardwareseitig oder via Software

  • Hallo,

    hier nun mein Update:

    1. ein anderes Netzteil brachte keine Verbesserung.
    2. der Hinweis von fred0815: Vertauschen von 1kOhm und 10kOhm brachte leider auch nichts.
    3. ich habe nun die Schaltung mit einem Pulldown-Widerstand aufgebaut (siehe Bild), mit einem 100kOhm:
    Durch Ein-/Ausschalten des Lichtschalters wird nun kein Event mehr ausgelöst. Das ist schon einmal ein Fortschritt. Allerdings
    löst z.b. das Ein-/Ausschalten meiner Schreibtischlampe noch ein Event aus, nicht immer, aber hin und wieder...
    4. Darüber ob der Tipp mit der Bouncetime Verbesserung bringt, bin ich mir noch nicht richtig im Klaren, evtl. leichte
    Verbesserung.

    • Offizieller Beitrag

    zu 4. Mit bouncetime wird softwareseitig entprellt. Ob das in Deinem Falle was bringt, kannst nur Du beantworten.

    zu 1. Du meinst Du hast ein Ladegerät gegen ein anderes Ladegerät getauscht oder hast Du jetzt ein Netzteil?

    [OT]
    Ich hatte bei meinem Versuchsaufbau eines Internetradios das Problem einer flackernden LED (Display-Hindergrundbeleuchtung). Die Energieversorgung sollte dieses Teil (2400mA) erledigen, bisher ging es ja auch mit diesem Ladegerät dachte ich mir. Um diesen Fehler aber auch ausschliessen zu können, habe ich mal das originale NT drangehangen und das flackern war weg. Die LED leuchtet konstant. Dann hatte ich einen Denkfehler und dachte das bisher von mir verwendete Ladegerät liefert zu wenig Strom für den RPi jetzt wo noch ein Display dranhängt. Also habe ich eine grössere Version (4800mA) des Ladegeräts gekauft. :rolleyes: Da war das flackern wieder. :wallbash: Zum Glück konnte ich dann das Ladegerät gegen das NT mit der Himbeere eintauschen.
    [/OT]

    Also wenn meine LED als Output flackert, wie wird ein Sensor bei Input reagiren?

  • zu 1. Du meinst Du hast ein Ladegerät gegen ein anderes Ladegerät getauscht oder hast Du jetzt ein Netzteil?

    [OT]
    Ich hatte bei meinem Versuchsaufbau eines Internetradios das Problem einer flackernden LED (Display-Hindergrundbeleuchtung). Die Energieversorgung sollte dieses Teil (2400mA) erledigen, bisher ging es ja auch mit diesem Ladegerät dachte ich mir. Um diesen Fehler aber auch ausschliessen zu können, habe ich mal das originale NT drangehangen und das flackern war weg. Die LED leuchtet konstant. Dann hatte ich einen Denkfehler und dachte das bisher von mir verwendete Ladegerät liefert zu wenig Strom für den RPi jetzt wo noch ein Display dranhängt. Also habe ich eine grössere Version (4800mA) des Ladegeräts gekauft. :rolleyes: Da war das flackern wieder. :wallbash: Zum Glück konnte ich dann das Ladegerät gegen das NT mit der Himbeere eintauschen.
    [/OT]

    Ich hatte ein anderes Netzteil ausprobiert. Ich habe mir vor wenigen Tagen aber noch das Original-Netzteil für den RPi bestellt, vielleicht bringt das ja noch eine Verbesserung.



    Hast du es schon mal mit einem Pull-UP versucht?

    Die Schaltung mit einem Pull-Up-Widerstand (10kOhm) hatte ich auch schon ausprobiert. Das hatte bei mir aber schlechtere Ergebnisse geliefert als mit einem Pull-Down. Hier wurde auch durch das Ein-/Ausschalten des Lichtschalters hin und wieder ein Event detektiert.


  • Dann schmeiss die Lampe weg :D Elektrosmok ist eh ungesund... Wer weiß was die Lampe sonst noch so beeinflusst

    Update: heute löst auch der Lichtschalter bei der Schaltung mit Pull-Down ein Event aus. Zwar nicht immer aber regelmäßig. Es ist zum Verrücktwerden... :s

  • Hast du eine Lösung gefunden? Mir ist vorgestern das selbe Phänomen aufgefallen, ebenfalls in Kombination mit einer Schreibtischlampe. Ich experimentiere derzeit mit einem Lichtsensor herum, der bei Schwellwertüberschreitung einen Interrupt sendet. Dazu habe ich die Schreibtischlampe an- und ausgeschaltet und hatte aber immer viel zu viele Events, bis ich drauf gekommen bin, dass es an der Lampe liegt. Ich teste daher jetzt mit einer Taschenlampe. Die erzeugt naturgemäß keine Unregelmäßigkeiten im Stromnetz. In Anleitungen hatte ich gefunden, dass man einen 0,1 pF Kondensator vor den GPIO schalten soll, um solche kurzzeitigen Spannungsspitzen ausgleichen zu können (das müsste bei dir mit deinem Magnetkontakt eigentlich auch klappen), aber bei meinen Interrupts ist das natürlich Käse, denn die sind ja nichts anderes als kurze Spannungsspitzen. ;)
    Ich wäre daher durchaus für eine andere Lösung offen, falls du eine gefunden hast. :)

    Edit:
    Da es dem TE vorher schon als Anregung genannt wurde, habe ich gerade auch einmal das offizielle 2,5 A Raspberry Pi Netzteil mit Himbeere ausprobiert und auch damit kommt es zu den unbeabsichtigten Interrupts. Mit Störfaktoren muss man im 230 V Stromnetz leider einfach rechnen. Die Frage ist nur, wie man ihnen passend begegnet.

    Einmal editiert, zuletzt von e-nighthawk (26. April 2017 um 19:03)

  • Ich antworte mir mal selbst:
    Ich hatte mir für mein Projekt vor einiger Zeit sowieso ein TP4056 Ladeboard für Lithium-Ionen Akkus bestellt, das dann vorgestern auch endlich angekommen ist. Wenn ich an dem Board meinen Pi (und natürlich einen Akku) anschließe, schlagen die Störungen aus dem Stromnetz nicht mehr bis zu den GPIOs durch. Nicht unbedingt die simpelste Lösung, aber - da ich ohnehin keine andere gefunden habe - immerhin etwas.

  • Wie wäre es, die Stromversorgung von Pi-GPIOs und Sensorleitung zu trennen? Hast du mal versucht, einen Optokoppler dazwischen zu schalten.
    Pi-seitig 3,3V wahlweise als High oder Low-Level über den Optokoppler schalten.
    Die Sensoren mit 12-24 V ansteuern und über einen höheren Widerstand (4K7-10K) auf den Eingang vom Optokoppler. Ggf. noch einen Kondensator dazu.

    Ich plane gerade so einen Aufbau, habe erste Funktionstests gemacht, aber noch keine Erfahrungen im Praxiseinsatz. Ich gehe davon aus, dass bei 12V Sensorspannung die Störeinflüsse von Spannungsspitzen geringer sind. Auch die Einflüsse von elektromagnetischen Impulsen (Leuchtstofflampen und sowas) sollten geringer sein. Meine Optokoppler sind 817C - die bekommen dann so gut 2 mA und schalten damit hinreichend durch, um am GPIO erkannt zu werden.
    Weiterer Vorteil: Du spatzt dir nicht gleich dein ganzes System, wenn mal jemand das Sensorkabel mit 230 V beschickt.

    Hat jemand Erfahrung mit so einer Konfiguration?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!