树莓派论坛

 找回密码
 立即注册

YF-S201, 使用树莓派 , 怎么计算出流出了多少水量

iie075 发表于 2019-7-10 16:31:32 | 显示全部楼层 |阅读模式
我怎么获取脉冲数那?
写了这个代码, 可是结果都不对


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 07-01 13:30
# @Author  : iie075
# @File    : control_hwd.py

# vol_number 单位为
# YF-S201 黑色  F=7.5*Q(L/Min)  误差:±2%  1L: 450个脉冲
# YF-S401 白色  F=5.5*Q(L/Min)  误差:±2%  1L: 330个脉冲


import sys
import time
import os
import RPi.GPIO as GPIO

import subprocess

i = subprocess.call("clear", shell = True)

sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '..'))
sys.path.append("..")

pin = 13

GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.IN, pull_up_down = GPIO.PUD_UP)

minutes = 0
# rate of cocunt L/min

# 计数
# tot_cnt = 0
# 常数
constant = 1 / 5.5 / 2
time_new = None

# 计算频率
cf = 1

counter = 0


# 检测到一个脉冲则脉冲数加1
def my_callback(channel):
    global counter
    if GPIO.event_detected(pin):
        counter = counter + 1
    # print('counter, 得到脉冲数', counter)


# 在通道上添加上升临界值检测,忽略由于开关抖动引起的小于 200ms 的边缘操作
GPIO.add_event_detect(pin, GPIO.RISING, callback = my_callback, bouncetime = 200)


def calc(t_col = 1):
    print('收到流量为: ', t_col, 'L ,开始计算....')
   
    tol_rf = 0
    rf = 0
    receive_counter = 0
    try:
        while tol_rf <= t_col:
            # print('------------------------------------', tol_rf, t_col)
            # 每两秒计算一次, 计算流量
            time_new = time.time() + cf
            while time.time() <= time_new:
                try:
                    # 计算这个时间内的脉冲数
                    # 等待脉冲数
                    pass
                except KeyboardInterrupt:
                    print('\nCTRL C -exit')
                    GPIO.cleanup()
                    sys.exit()
                # print(rate_cnt, tot_cnt)
            counter_tmp = counter - receive_counter
            print('得到脉冲数----------------->>>>', counter_tmp, '当前值', counter)
            print('\n计算2s')
            # 流速
            # vf = round(counter_tmp * constant, 4)
            vf_s = round(counter_tmp * constant / 60, 4)
            # print('Liters / min 流速每分', vf)
            print('Liters / s 流速每秒', vf_s)
            
            # 此时间段算出的流量
            rf = round(vf_s * 2, 4)
            print('Total Liters 此时间段算出的流量', rf)
            # print('Time (min & clock) ', minutes, '\t', time.asctime(time.localtime()))
            tol_rf = tol_rf + rf
            print('此时间段打出的流量: ', tol_rf)
            receive_counter = counter
    except Exception as e:
        print('error !', e)
        return 'error'
    else:
        return 'ok'
    finally:
        GPIO.remove_event_detect(pin)
        GPIO.cleanup()
        print('exit !')


def main():
    while True:
        calc()


if __name__ == '__main__':
    # main()
    calc()

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版 | Archiver | 树莓派论坛 ( 粤ICP备15075382号-1 )