Ce capteur de débit est constitué d'un rotor et d'un capteur à effet hall. Lorsque l'eau passe dans le capteur, la rotation du rotor génère des impulsions en fonction du débit. La fréquence de sortie varie en fonction de la vitesse du rotor.
Si on mesure le nombre d'impulsion pendant des intervalles de temps fixe, on peut en déduire la quantité d'eau passant dans le capteur.
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time, sys
# Initialisation des GPIO ----------------------------------
# Il faut mettre la Pin du sensor YF-S201 sur la Pin No11 du RPI
Pin_FlowSensor = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(Pin_FlowSensor, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
# Initialisation de la sonde DHT11 -------------------------
import Adafruit_DHT
Pin_DHT11 = 4
# ----------------------------------------------------------
global pulseCount
pulseCount = 0
global tdelta
tdelta = 0
calibrationFactor = 7.5
time_start= time.time() # en secondes
# ----------------------------------------------------------
# function pour le callback de l'evenement du FlowSensor.
# Lorsque le FlowSensor va tourner, on va enregistrer les
# donnees.
def fct_decompte(channel):
global pulseCount
global time_start
pulseCount += 1
# Enregistrement des donnees toutes les 2 secondes
tdelta = (time.time() - time_start)
if tdelta >= 2:
# Calcul du flux
flow = (pulseCount / calibrationFactor) / (tdelta * 60)
flow = round(flow,2)
# Recuperation de la temperature et de l'humidite
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, Pin_DHT11)
# ecriture de donnees dans le fichier
fichier = open("/home/pi/mesuresDebit.log", "a")
fichier.write("%s,%s,%s,%s\n" % (time.strftime('%a %H:%M:%S'), flow, temperature, humidity))
fichier.close()
# traces a l ecran
print time.asctime( time.localtime(time.time()) ),' debit : ', flow, 'l/min ', temperature, 'C ',humidity, '%'
# Remise a zero
tdelta = 0
pulseCount = 0
time_start = time.time()
# ----------------------------------------------------------
# On ajoute une gestion d'evenement sur le GPIO du capteur
# Des qu'on va avoir une interruption sur le GPIO du capteur, on
# envoie la fonction de decompte
GPIO.add_event_detect(Pin_FlowSensor, GPIO.RISING, callback=fct_decompte)
while True:
try:
# On s'arrete toutes les 1 secondes
# On a donc une mesure par secondes
time.sleep(1)
except KeyboardInterrupt:
print '\ncaught keyboard interrupt!, bye'
GPIO.cleanup()
sys.exit()