Op 19 oktober 2020 18:10:44 schreef Lambiek:
[...]
Gegevens volgens de site.
Nauwkeurigheid [in 2 ~ 50L \ MIN] ± 5%. Flow puls kenmerken (6 * Q-8) Q = L/Min ± 5%.
aan allen die geholpen hebben, ik moet toch iets verkeerd hebben gedaan, inmiddels zijn de 2 nieuwe binnengekomen en werkt het perfect!
echter zit ik nu met een nieuwe vraag.
ik zou volgens bovenstaande flow = (6 * Q-8) = L/min
ik probeer echter de liters te berekenen die ik dan via MQTT wens te versturen.
ik heb eens de pulsen geteld maar ik raak er niet aan uit.
als ik bvb 0,5L vul heb ik:
- 45 pulsen als ik de kraan een beetje opendraai
- 95 pulsen als ik de kraan volledig opendraai.
ik dacht dat ik bvb kon zeggen 45 pulsen = 0,5l, 90 pulsen = 1L, maar zo werkt het duidelijk niet.
vermoedelijk moet ik de pulsen over een bepaalde tijdspanne tellen.
momenteel is dit m'n code die dus de pulsen gewoon "telt" maar ik zou dus een andere output moeten hebben, alleen weet ik zelf niet hoe/wat
code:
import RPi.GPIO as GPIO
import time, sys
FLOW_SENSOR = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(FLOW_SENSOR, GPIO.IN, pull_up_down = GPIO.PUD_UP)
global count
count = 0
def countPulse(channel):
global count
count = count+1
print(count);
GPIO.add_event_detect(FLOW_SENSOR, GPIO.FALLING, callback=countPulse)
while True:
try:
time.sleep(1)
except KeyboardInterrupt:
print('\ncaught keyboard interrupt!, bye')
GPIO.cleanup()
sys.exit()
ook heb ik volgend script geprobeerd maar hier krijg ik gewoon ook de flow rate in L/min volgens mij:
code:
import json
import time
from datetime import datetime
import RPi.GPIO as GPIO
class FlowMeter():
''' Class representing the flow meter sensor which handles input pulses
and calculates current flow rate (L/min) measurement
'''
def __init__(self):
self.flow_rate = 0.0
self.last_time = datetime.now()
def pulseCallback(self, p):
''' Callback that is executed with each pulse
received from the sensor
'''
# Calculate the time difference since last pulse recieved
current_time = datetime.now()
diff = (current_time - self.last_time).total_seconds()
# Calculate current flow rate
hertz = 1. / diff
self.flow_rate = hertz / 6
# Reset time of last pulse
self.last_time = current_time
def getFlowRate(self):
''' Return the current flow rate measurement.
If a pulse has not been received in more than one second,
assume that flow has stopped and set flow rate to 0.0
'''
if (datetime.now() - self.last_time).total_seconds() > 1:
self.flow_rate = 0.0
return self.flow_rate
def main():
''' Main function for repeatedly collecting flow rate measurements
and sending them to the SORACOM API
'''
# Configure GPIO pins
INPUT_PIN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(INPUT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Init FlowMeter instance and pulse callback
flow_meter = FlowMeter()
GPIO.add_event_detect(INPUT_PIN,
GPIO.RISING,
callback=flow_meter.pulseCallback,
bouncetime=20)
# Begin infinite loop
while True:
# Get current timestamp and flow meter reading
timestamp = str(datetime.now())
flow_rate = flow_meter.getFlowRate()
print('Timestamp: %s' % timestamp)
print('Flow rate: %f' % flow_rate)
# Delay
time.sleep(5)
if __name__ == '__main__':
main()