Hardwareaufbau

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    folgendes script habe ich gefunden und möchte es für die Flankenerkennung eines Reed-Kontaktes nutzen.

    Leider wird bei einer Steigenen UND bei einer fallenden Flanke hochgezählt. Dafür sehr stabil, so dass ich eigentlich den Counter nur :2 teilen müsste ...

    Das ist aber blöd ! Warum ist das so, ich würde es gerne richtig machen ...

    (den PD-R des Pi habe ich ausgeklammert, da ich einen PD-R beschaltet habe)

  • Zur hilfreichsten Antwort springen
  • Beitrag von SmallSunset65327 (9. November 2021 um 17:23)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Hallo,

    wenn du externe Pull-(Up/Down) Widerstände verwendest, solltest du die per SW deaktivieren.

    Sieh dir mal das schönere gpiozero an:

    https://gpiozero.readthedocs.io/en/stable/recipes.html#button

    Für deinen Zweck den 3. gelben Block unter Button.

  • Beitrag von SmallSunset65327 (9. November 2021 um 17:52)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Viel wichtiger ist doch das Script,

    Nach der Schaltung fragte ich wegen dem Pulldown, den Du im Skript deaktiviert hast. Skript und Schaltung gehören also zusammen. Wäre da kein externer verbaut, wäre das Verhalten kein Wunder.

    Btw. War bei einem Reed nicht Low wenn offen? Anders gefragt: Ist das nicht ein Schließer?

  • Beitrag von SmallSunset65327 (9. November 2021 um 18:41)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Nein ist es nicht ganz. Als Beispiel ein zu überwachendes Fenster:

    Du detetierst in Deinem Skript ob der Reed / Schalter geschlossen wurde und dann zählt der Counter hoch. Bei einem Fenster z.B. willst Du aber wissen, wenn es offen ist und genau an diesem Punkt macht das Skript nichts ausser daruf zu warten, bis das Fenster wieder geschlossen wird und zählt dann den Counter hoch. Eine Bouncetime sehe ich Deinem Skript auch nicht, also muss mit "Schalterprellen" gerechnet werden. Das kann bei einem Reed passieren, wenn der zu langsam geöffnet oder geschlossen wird.

    Davon abgesehen ist ein Pullup-Widerstand gerade bei längeren Kabeln besser geeignet, weil zuverlässiger.

  • Beitrag von SmallSunset65327 (9. November 2021 um 18:58)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Wenn Du schon dabei bist, dann baue in die while-Schleife gleich noch ein kleines time.sleep(0.1) mit ein, denn eine CPU-Auslastung eines Kerns von 100% ist auf dauer unnötig und verheizt nur sinnlos Strom. Das siehst Du mit htop im Terminal / CLI. EDIT: Das war in dem Fall Käse!

    Noch besser, Du verwendest "Interrupt" statt der Schleife oder gpiozero, wie schon von Hofei vorgeschlagen wurde.

  • Beitrag von SmallSunset65327 (9. November 2021 um 19:31)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Lt. Script ist der deaktiviert:

    stimmt, das # hatte ich übersehen

    Ja schätzungsweise prellt der Reedkontakt einfach.

    Würd dir auf Dauer aber trotzdem zu gpiozero raten ;)

    Das könnte dann so aussehen:

  • Beitrag von SmallSunset65327 (9. November 2021 um 20:40)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Wenn Du weiterhin den externen Pulldown verwendest, dann erweitere die Zeile 38 im Code aus Beitrag #15 von Hofei noch um pull_up=None, also

    Python
    reed_kontakt = gpiozero.Button(GAS_METER_PIN, pull_up=None, bounce_time=ENTPRELLZEIT

    In Deinem Testskript übrigens auch. Siehe dazu hier: https://gpiozero.readthedocs.io/en/stable/api_input.html#button

  • Beitrag von SmallSunset65327 (10. November 2021 um 10:21)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Beitrag von SmallSunset65327 (10. November 2021 um 15:12)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

Jetzt mitmachen!

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