-
-
Save benrules2/6f490f3a0e082ae6592a630bd7abe588 to your computer and use it in GitHub Desktop.
# External module imp | |
import RPi.GPIO as GPIO | |
import datetime | |
import time | |
init = False | |
GPIO.setmode(GPIO.BOARD) # Broadcom pin-numbering scheme | |
def get_last_watered(): | |
try: | |
f = open("last_watered.txt", "r") | |
return f.readline() | |
except: | |
return "NEVER!" | |
def get_status(pin = 8): | |
GPIO.setup(pin, GPIO.IN) | |
return GPIO.input(pin) | |
def init_output(pin): | |
GPIO.setup(pin, GPIO.OUT) | |
GPIO.output(pin, GPIO.LOW) | |
GPIO.output(pin, GPIO.HIGH) | |
def auto_water(delay = 5, pump_pin = 7, water_sensor_pin = 8): | |
consecutive_water_count = 0 | |
init_output(pump_pin) | |
print("Here we go! Press CTRL+C to exit") | |
try: | |
while 1 and consecutive_water_count < 10: | |
time.sleep(delay) | |
wet = get_status(pin = water_sensor_pin) == 0 | |
if not wet: | |
if consecutive_water_count < 5: | |
pump_on(pump_pin, 1) | |
consecutive_water_count += 1 | |
else: | |
consecutive_water_count = 0 | |
except KeyboardInterrupt: # If CTRL+C is pressed, exit cleanly: | |
GPIO.cleanup() # cleanup all GPI | |
def pump_on(pump_pin = 7, delay = 1): | |
init_output(pump_pin) | |
f = open("last_watered.txt", "w") | |
f.write("Last watered {}".format(datetime.datetime.now())) | |
f.close() | |
GPIO.output(pump_pin, GPIO.LOW) | |
time.sleep(1) | |
GPIO.output(pump_pin, GPIO.HIGH) | |
You can see line 43 pump_pin is assigned a default value of 7. Can you confirm all lines 44-50 are indented properly so they're a part of "pump_on" ?
a brief explanation on how the code works would be nice
Traceback (most recent call last):
File "<pyshell#1>", line 1, in
import water
ImportError: No module named 'water'
what does this mean
Hi,
I have a problem with your schema. How can you use an Analog output from the moisture sensor? I always get 1 either in water or without water?
Do you use any trick?
Cheers
Luigi
def pump_on(pump_pin = 7, delay = 1): time.sleep(1)
I believe you intended to use "delay" as the input to time.sleep()
Nice and simple, I like it. I like the external power source for the water pump in the design. Great example of using a relay in a circuit especially if the circuit is expanded to more than one plant and pump.
Shouldn't you use a MCP3008 analog to digital converter for the water sensor? Plus allows multiple moisture sensors.
A little code cleanup needed:
Introduce constants for pumpOn = GPIO.HIGH and pumpOff = GPIO.LOW for clarity and to easily change if the relay is on low and off high.
Ln
6 init = false # variable init never used or changed
43 def pump_on(pump_pin = 7, delay = 1): # parameter delay is never used
I've got this error: