Как управлять перистальтическим насосом до желаемой производительности в мл, используя Rpi по времени? - PullRequest
0 голосов
/ 23 января 2019

У меня есть моя проблема с управлением перистальтическим насосом, потому что наш проект касается дозировки хлора.Я хочу запускать программу динамически по времени.Я хотел бы получить желаемый мл на основе расчетов.Вот мой код,

import RPi.GPIO as GPIO
import time
from time import sleep

GPIO.setmode(GPIO.BOARD)
inpt = 12
motor = 11
GPIO.setup(inpt,GPIO.IN)
GPIO.setup(motor,GPIO.OUT)
motor = GPIO.PWM(11, 100)
motor.start(0)
rate_cnt = 0
tot_cnt = 0
minutes = 0
constant = 0.10
time_new = 0.0
gpio_last = 2
demand=0.5
residual=0.3
pause_time=5


print('Water Flow - Approximate')
print('control C to exit')

while True:
    for sec_mult in range(0,1):
        time_new = time.time() + 5
        rate_cnt = 0
        while time.time() <= time_new:
            gpio_cur = GPIO.input(inpt)
            if gpio_cur != gpio_last:
                rate_cnt += 1
                tot_cnt +=1
            else:
                rate_cnt = rate_cnt
                tot_cnt = tot_cnt
            try:
                print(GPIO.input(inpt), end='')
                None
            except KeyboardInterrupt:
                print('\nCTRL C - Extiting nicely')
                GPIO.cleanup()
                print('Done')
                sys.exit()
            gpio_last = gpio_cur
    minutes += 1
    print('\n', round(rate_cnt * constant / 7.5, 4), 'Liters / min approximate')

    dosage= demand+residual

    dosageRate=(dosage/0.15)*round(rate_cnt * constant / 7.5,4)
    dosageConvert=dosageRate*(0.001/1)




    if rate_cnt * constant / 7.5 >= 5:
        motor.ChangeDutyCycle(100)
        time.sleep(dosageConvert)
        sleep(pause_time)
    if rate_cnt * constant / 7.5 >= 4:
        motor.ChangeDutyCycle(80)
        time.sleep(dosageConvert)
        sleep(pause_time)
    if rate_cnt * constant / 7.5 >= 3:
        motor.ChangeDutyCycle(50)
        time.sleep(dosageConvert)
        sleep(pause_time)
    if rate_cnt * constant / 7.5 >= 2:
        motor.ChangeDutyCycle(40)
        time.sleep(dosageconvert)
        sleep(pause_time)
    if rate_cnt * constant / 7.5 >= 1:
        motor.ChangeDutyCycle(30)
        time.sleep(dosageConvert)
        sleep(pause_time)
    if rate_cnt * constant / 7.5 == 0:
        motor.ChangeDutyCycle(0)
        time.sleep(dosageConvert)
        sleep(pause_time)

    print('\n', round(dosageConvert, 4), 'mL / min approximate')
    print('Total Liters ', round(tot_cnt * constant / 7.5, 4))
    print('Time (min & clock) ', minutes, '\t', time.asctime(time.localtime(time.time())), '\n')

Пожалуйста, кто-нибудь может мне помочь решить эту проблему .. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...