Hallo zusammen, ich habe zurzeit in meinem Aubildungsbetrieb ein Projekt, das Rolltor zu unserem Lager mittels Raspberry pi und Reed-schalter zu überwachen. Ich bin mittlerweile soweit, dass ich auf anfrage am Raspberry den jeweiligen zustand ausgeworfen bekomme (GPIO-pin gibt mir 0 oder 1 aus). Nun möchte ich aber dass mir automatisch augegeben wird sobald der zustand sich ändert. Wie/in welcher Art und weise ist das möglich? Ach ja der code ist in Python geschrieben. Vielen Dank im voraus für die Antworten.
Jonathan schrieb: > ich habe zurzeit in meinem Aubildungsbetrieb ein Projekt, das Rolltor zu > unserem Lager mittels Raspberry pi und Reed-schalter zu überwachen. Ich > bin mittlerweile soweit, dass ich auf anfrage am Raspberry den > jeweiligen zustand ausgeworfen bekomme (GPIO-pin gibt mir 0 oder 1 aus). > Nun möchte ich aber dass mir automatisch augegeben wird sobald der > zustand sich ändert. Wie/in welcher Art und weise ist das möglich? Ach > ja der code ist in Python geschrieben. Es wäre zweifellos sinnvoll gewesen, Deinen Schaltplan und Deinen Code an Deinen Beitrag anzuhängen. :-) Grundsätzlich können viele der GPIOs eines RasPi nicht nur abgefragt (gepollt) werden, sondern auch Interrupts auslösen. Du kannst dabei wählen, ob Dein Programm blockierend auf einen Interrupt wartet, oder ob beim Auftreten eines Interrupt eine Callback-Funktion aufgerufen werden soll. Wie das geht, findest Du ausführlich hier [1] oder auf deutsch und knapper hier [2]. Viel Erfolg! [1] https://roboticsbackend.com/raspberry-pi-gpio-interrupts-tutorial/ [2] https://www.kampis-elektroecke.de/raspberry-pi/raspberry-pi-gpio/interrupts/
Ein T. schrieb: > Grundsätzlich können viele der GPIOs eines RasPi nicht nur abgefragt > (gepollt) werden, sondern auch Interrupts auslösen. Prellende Kontakte an einem Interrupt geben ein lustiges Geklimper. Wenn es darum geht, nur bei Änderungen eine Aktion auszuführen, muss man diese Änderung erstmal über einen Vergleich mit dem vorigen Zustand erkennen. Bei mechanischen Kontakten muss man zusätzlich noch entprellen.
Rainer W. schrieb: > Ein T. schrieb: >> Grundsätzlich können viele der GPIOs eines RasPi nicht nur abgefragt >> (gepollt) werden, sondern auch Interrupts auslösen. > > Prellende Kontakte an einem Interrupt geben ein lustiges Geklimper. Das ist natürlich korrekt, aber: ich weiß nicht, wie die Schaltung des jungen Mannes aussieht. Vielleicht hat er ja bereits ein R/C-Glied verbaut, weißt Du möglicherweise mehr als ich? > Wenn es darum geht, nur bei Änderungen eine Aktion auszuführen, muss man > diese Änderung erstmal über einen Vergleich mit dem vorigen Zustand > erkennen. IIRC kann der RasPi steigende und fallende Flanken unterscheiden.
Einfach forumuliert: Merk dir den Zustand vom Pin und vergleiche ihn mit dem aktuellen Zustand. Wenn unterschiedlich, gab's eine Änderung. Entprellen muss man natürlich auch noch.
Ein Raspberry pi hat wohl die meiste Zeit über nichts zutun, während er ein Tor überwacht. Daher sollte es doch kein Problem sein, den aktuellen Zustand zwischenzuspeichern und später dann zu überprüfen ob es immer noch der Gleiche ist. Es kann natürlich sinnvoll sein, den aktuellen Zustand erst nach der Prellerei zu sichern. Wie das aber geht ist wohl in einem halben Tausend Posts hier abgehandelt worden.
Ein T. schrieb: > Vielleicht hat er ja bereits ein R/C-Glied verbaut, weißt Du > möglicherweise mehr als ich? Warum sollte man zusätzliche externe Filter verbauen, wenn der Raspberry Pi sich sowieso langweilt. Bei einem Schalter, der einen mechanischen Zustand zurück meldet, kann der Pi alle paar Centisekunden mal vorbei schauen und den Zustand bewerten. Die Sache mit dem Entprellen kann der gefälligst selber machen bzw. erledigt sich durch das Abtastintervall von selbst.
Rainer W. schrieb: > Warum sollte man zusätzliche externe Filter verbauen, Warum nicht? > wenn der Raspberry Pi sich sowieso langweilt. Das ist nur eine Unterstellung Deinerseits, und bisher jedenfalls von nichts in den Aussagen des TO gedeckt. Nebenbei bemerkt, hat er ausschließlich gefragt, wie er mit seiner Software auf Ereignisse reagieren kann, und ich habe ihm die Möglichkeit aufgezeigt, Interrupts zu verwenden. Warum Du jetzt verhindern möchtest, daß ein junger Mensch seine eigenen Erfahrungen macht, und mir eine gleichermaßen halt- wie gegenstandslose Diskussion über Entprellung an die Backe klebst, wird wohl Dein kleines Geheimnis bleiben. Trotzdem vielen Dank für das Gespräch, hab' noch einen schönen Tag.
Ein T. schrieb: > Vielleicht hat er ja bereits ein R/C-Glied verbaut Mit einem RC-Glied entprellen? Auch wenn dass hier auf µC.net als Notlösung aufgeführt ist, hätte uns der Prof dafür geohrfeigt!
Kay-Uwe R. schrieb: > Mit einem RC-Glied entprellen? Auch wenn dass hier auf µC.net als > Notlösung aufgeführt ist, hätte uns der Prof dafür geohrfeigt! Die Ohrfeige wäre aber nur dann berechtigt, wenn der Eingang keine Schmitttrigger-Eigenschaft hat. Mit Schmitttrigger und richtiger Dimensionierung der RC-Glieds ist das durchaus seriös.
Interrupt ist schön wenn man eine niedrige Latenz bräuchte. Für ein Garagentor reicht polling völlig. Nebenbei, auch in Python wurde das triviale Problem des debouncing bereits gelöst. Kurze Suche und man stößt auf gpiozero https://gpiozero.readthedocs.io/en/latest/api_input.html Keine Ahnung ob das was taugt, sieht aber nicht so verkehrt aus. Gibt aber bestimmt auch Alternativen. Wenn ich das richtig deute müsste sowas in der Art reichen für eine Change-Detection:
1 | from gpiozero import Button |
2 | from signal import pause |
3 | |
4 | myButtonPin = 13 #BMC Pin numbering! |
5 | myDebounceTime =0.05 #50ms |
6 | |
7 | def button_change(): |
8 | print("Button change detected!") |
9 | |
10 | button = Button(pin=myButtonPin,bounce_time=myDebounceTime) |
11 | button.when_pressed = button_change |
12 | button.when_released = button_change |
13 | pause() |
Jonathan schrieb: > Nun möchte ich aber dass mir automatisch augegeben wird sobald der > zustand sich ändert. wie soll denn das überhaupt ausgegeben werden bzw. was soll passieren? anzeige mit einer led? email verschicken? mitteilung an den chef mittels pager? logdatei schreiben? alarmplan für atomwaffenlager abarbeiten? bakterien-/virenkulturen vernichten?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.