Automatisierte ausgabe sensordaten

#7726659
Lesenswert?

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.

#7726673
Lesenswert?

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/

#7726763
Lesenswert?

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.

#7726824
Lesenswert?

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.

#7726876
Lesenswert?

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.

#7726888
Lesenswert?

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.

#7727675
Lesenswert?

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.

#7728060
Lesenswert?

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()
#7728104
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren