Nov-20-2018, 10:41 PM
(This post was last modified: Nov-20-2018, 10:41 PM by onlinegill.)
Hi i am working on a wine dispenser.i am using raspberry pi to turn on GPIO relay solenoids with hall flowmeter.
everything is working but when it comes to turn on clean solenoid it start fluctuating (clicking).
Idea :
press a button
turn on first solenoid
flowmeter read pulses and turn off first solenoid to stop pouring
than on 2nd clean solenoid for 2 seconds ( which is flickering )
along with flowmeter i need to turn off first solenoid in 10 sec time just incase flowmeter failed to send pulse so solenoid will not burn out.
i tried to use external supply for flowmeter and solenoid relays but still same issue.
here are the codes
everything is working but when it comes to turn on clean solenoid it start fluctuating (clicking).
Idea :
press a button
turn on first solenoid
flowmeter read pulses and turn off first solenoid to stop pouring
than on 2nd clean solenoid for 2 seconds ( which is flickering )
along with flowmeter i need to turn off first solenoid in 10 sec time just incase flowmeter failed to send pulse so solenoid will not burn out.
i tried to use external supply for flowmeter and solenoid relays but still same issue.
here are the codes
from gpiozero import Button, LED from signal import pause from time import sleep import threading import time pulse = Button(23) button_small = Button(18) # first button to pour small button_medium = Button(21) # 2nd button to pour medium button_big = Button(22) # 3rd button to pour big solenoid = LED(17) clean = LED(25) GAS_PAUSE = 0.05 TIME_OUT = 10.0 MEASURE_SMALL = 80 MEASURE_MEDIUM = 130 MEASURE_BIG = 200 def pour_small(): start_pour(MEASURE_SMALL) def pour_medium(): start_pour(MEASURE_MEDIUM) def pour_big(): start_pour(MEASURE_BIG) def kill_loop(): global kill_time while True: if time.time() > kill_time: solenoid.off() time.sleep(1.0) kill_time = 0.0 t = threading.Thread(target=kill_loop) t.daemon = True t.start() def start_pour(amount): global count, count_cut_off, kill_time count_cut_off = amount count = 0 solenoid.on() kill_time = time.time() + TIME_OUT def count_pulse(): global count, count_cut_off count += 1 if count >= count_cut_off: solenoid.off() clean.on() # run flow meter cleaning solenoid with food grade gas sleep(GAS_PAUSE) #keep clean mode for 2 second clean.off() # turn off clean mode enjoy drink pulse.when_released = count_pulse button_small.when_pressed = pour_small button_medium.when_pressed = pour_medium button_big.when_pressed = pour_big count = 0 count_cut_off = MEASURE_MEDIUM import tkinter as tk root = tk.Tk() root.wm_title('By Sukhpal Gill') button_frame = tk.Frame(root) button_frame.pack(fill=tk.X, side=tk.BOTTOM) small_button = tk.Button(button_frame, text='Pour Small', command=pour_small) medium_button = tk.Button(button_frame, text='Pour Medium', command=pour_medium) big_button = tk.Button(button_frame, text='Pour Full Glass', command=pour_big) button_frame.columnconfigure(0, weight=1) button_frame.columnconfigure(1, weight=1) button_frame.columnconfigure(2, weight=1) small_button.grid(row=0, column=0, sticky=tk.W+tk.E) medium_button.grid(row=0, column=1, sticky=tk.W+tk.E) big_button.grid(row=0, column=2, sticky=tk.W+tk.E) root.mainloop() # do this instead of the pause() used in the gpiozero code