iot-root / garden-of-eden

Truly own that which is yours!
GNU General Public License v3.0
22 stars 6 forks source link

add pump control code #17

Closed ammaratef45 closed 11 months ago

ammaratef45 commented 11 months ago

I've used this code to test the pump on my device and it worked

p = Pump()
p.start()
p.stop()
iot-root commented 11 months ago

@ammaratef45 looks like there is some current info attached to the pump: cat yplant148/FactoryTest/water_pump_sensor.py

# coding=utf-8

from ina219 import INA219
from ina219 import DeviceRangeError

SHUNT_OHMS = 0.08
#MAX_EXPECTED_AMPS = 1.2
#ina = INA219(SHUNT_OHMS, MAX_EXPECTED_AMPS)
#ina.configure(ina.RANGE_12V)

def read_ina219():
    ina = INA219(SHUNT_OHMS)
    ina.configure()
    try:
        print('Voltage: {} V'.format(round(float(ina.voltage()),1)))
        print('Power: {} W'.format(round(float(ina.power()),1)))

    except DeviceRangeError as e:
        print(e)

    finally:
        return (ina.voltage(),ina.power())
iot-root commented 11 months ago

Looks like the GPIO for the pump is a PWM signal so you can control how pump speed.

cat water_pump_switch.py

# coding=utf-8
import RPi.GPIO as GPIO
import time
from water_pump_sensor import read_ina219
from config import CHANNEL_WATER_PUMP, FREQ_WATER_PUMP, INIT_DUTY_WATER_PUMP, LAST_SECS_WATER_PUMP

Pump_power = 30 #Set the duty cycle of the pump to 30%

def init():
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(CHANNEL_WATER_PUMP, GPIO.OUT)
    return GPIO.PWM(CHANNEL_WATER_PUMP, FREQ_WATER_PUMP)

def pump_n_current():
    pump_power = 0
    pump_voltage = 0
    pwm = init()
    duty = INIT_DUTY_WATER_PUMP
    pwm.start(duty)
    start_time = int(time.time())
    try:
        print("Starting the pump")
        pwm.ChangeDutyCycle(Pump_power)
        time.sleep(4)
        (pump_voltage,pump_power) = read_ina219()
        pump_working = input('Is the pump working (Y/N)? ')
        pwm.ChangeDutyCycle(0)

    except KeyboardInterrupt:
        pass

    finally:
        return ((pump_working=='Y' or pump_working=='y'),pump_voltage,pump_power)
        pwm.stop()
        GPIO.cleanup()
ammaratef45 commented 11 months ago

@iot-root yeah, we can expand to allow control either by on/off switch or by pwm (I believe the same goes for the LED)