Hallo zusammen,
ich will in einem größeren, komplexen System (Gewächshaussteuerung) den Wasserdurchfluss in einer Leitung messen. Dazu habe ich einen digitalen Durchflussmesser (Modell YF-B10).
In diesem ist ein Rädchen, das pro Umdrehung einen Impuls sendet.
Diese messe ich mit der Funktion GPIO.add_event_detect(). Der Pin, an dem gemessen wird, wird von keinem anderen Programmteil angefasst (also keine Zugriffskonflikte)
Das funktioniert auch alles gut, aber nach einer halben oder ganzen Stunde stürzt das System ab mit der Fehlermeldung:
RuntimeError: Failed to add edge detection.
Die Funktion Abwasser () wird von einem übergeordneten Loop alle 5 Sekunden aufgerufen. Am Schluss der aufrufenden Funktion steht auch GPIO.cleanup().
Auch der Einbau von GPIO.remove_event_detect() am Ende jedes Durchgangs nutzt nichts.
global count, start_counter
count = 0
def countPulse(channel):
global count
if start_counter == 1:
count = count+1
def Abwasser(sensorpin):
global count, start_counter
FLOW_SENSOR_GPIO = sensorpin
GPIO.setmode(GPIO.BCM)
GPIO.setup(FLOW_SENSOR_GPIO, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.add_event_detect(FLOW_SENSOR_GPIO, GPIO.BOTH, callback=countPulse)
start_counter = 1
time.sleep(1)
start_counter = 0
flow = int((count / 7.5)) # Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.
count = 0
#GPIO.remove_event_detect(FLOW_SENSOR_GPIO)
return flow
Alles anzeigen