An automated plant watering system helps keep plants healthy by watering them when they need it without you having to remember.
Automated plant watering system in Raspberry Pi
import time import RPi.GPIO as GPIO # Setup GPIO pins GPIO.setmode(GPIO.BCM) soil_sensor_pin = 17 water_pump_pin = 27 GPIO.setup(soil_sensor_pin, GPIO.IN) GPIO.setup(water_pump_pin, GPIO.OUT) while True: if GPIO.input(soil_sensor_pin) == GPIO.LOW: # Soil is dry GPIO.output(water_pump_pin, GPIO.HIGH) # Turn pump on time.sleep(5) # Water for 5 seconds GPIO.output(water_pump_pin, GPIO.LOW) # Turn pump off else: GPIO.output(water_pump_pin, GPIO.LOW) # Soil is wet, pump off time.sleep(60) # Check every minute
This code uses the Raspberry Pi's GPIO pins to read a soil moisture sensor and control a water pump.
GPIO.LOW means the soil is dry in this example, so the pump turns on to water the plant.
GPIO.setup(soil_sensor_pin, GPIO.IN) GPIO.setup(water_pump_pin, GPIO.OUT)
if GPIO.input(soil_sensor_pin) == GPIO.LOW: GPIO.output(water_pump_pin, GPIO.HIGH)
time.sleep(5)
GPIO.output(water_pump_pin, GPIO.LOW)This program checks the soil moisture every minute. If the soil is dry, it waters the plant for 5 seconds. It prints messages to show what it is doing. You can stop it safely with Ctrl+C.
import time import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) soil_sensor_pin = 17 water_pump_pin = 27 GPIO.setup(soil_sensor_pin, GPIO.IN) GPIO.setup(water_pump_pin, GPIO.OUT) try: while True: if GPIO.input(soil_sensor_pin) == GPIO.LOW: print("Soil is dry. Watering plant...") GPIO.output(water_pump_pin, GPIO.HIGH) time.sleep(5) GPIO.output(water_pump_pin, GPIO.LOW) print("Watering done.") else: print("Soil is wet. No watering needed.") GPIO.output(water_pump_pin, GPIO.LOW) time.sleep(60) except KeyboardInterrupt: print("Program stopped by user.") GPIO.cleanup()
Make sure to connect the soil moisture sensor and water pump to the correct GPIO pins.
Use a relay or transistor to safely control the water pump from the Raspberry Pi.
Always clean up GPIO pins with GPIO.cleanup() when your program ends.
An automated plant watering system uses sensors and a pump to water plants only when needed.
It saves time and water by checking soil moisture regularly.
Raspberry Pi GPIO pins can read sensors and control devices like pumps easily.
Practice
What is the main purpose of an automated plant watering system using a Raspberry Pi?
Solution
Step 1: Understand the system goal
The system uses sensors to check soil moisture.Step 2: Identify the watering condition
It waters plants only when soil is dry to save water.Final Answer:
To water plants only when the soil is dry -> Option DQuick Check:
Water only if dry = A [OK]
- Thinking it waters plants all the time
- Confusing soil moisture with sunlight
- Assuming it controls temperature
Which of the following Python code snippets correctly sets up a GPIO pin 17 as an output to control a water pump?
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) # What goes here?
Solution
Step 1: Identify pin mode setup
GPIO.setup(pin_number, GPIO.OUT) sets pin as output.Step 2: Choose correct function and mode
GPIO.setup(17, GPIO.OUT) correctly sets pin 17 as output.Final Answer:
GPIO.setup(17, GPIO.OUT) -> Option AQuick Check:
Setup output pin = A [OK]
- Using GPIO.IN instead of GPIO.OUT for output pins
- Calling GPIO.output instead of GPIO.setup to set mode
- Confusing pin numbers or modes
What will be the output of this Python code controlling a pump based on soil moisture sensor reading?
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
soil_moisture = 300 # sensor value
if soil_moisture < 400:
GPIO.output(17, GPIO.HIGH)
print("Pump ON")
else:
GPIO.output(17, GPIO.LOW)
print("Pump OFF")Solution
Step 1: Check soil moisture condition
Value 300 is less than 400, so condition is true.Step 2: Determine pump action and output
GPIO.output sets pin HIGH and prints "Pump ON".Final Answer:
Pump ON -> Option CQuick Check:
300 < 400 triggers Pump ON [OK]
- Misreading the comparison operator
- Confusing HIGH and LOW states
- Ignoring print output
Identify the error in this Raspberry Pi watering system code snippet:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
soil_moisture = 500
if soil_moisture > 400
GPIO.output(17, GPIO.LOW)
print("Pump OFF")Solution
Step 1: Check if statement syntax
Python requires a colon (:) after the if condition.Step 2: Identify missing colon error
The code misses ':' after 'if soil_moisture > 400', causing syntax error.Final Answer:
Missing colon (:) after if condition -> Option BQuick Check:
if statement needs ':' = D [OK]
- Forgetting colon after if
- Confusing GPIO.output with GPIO.setup
- Assuming pin number is wrong
You want to improve the watering system to water plants only if soil moisture is below 400 and only between 6 AM and 8 AM. Which Python code snippet correctly adds this time condition?
import datetime
now = datetime.datetime.now()
soil_moisture = 350
if soil_moisture < 400 and ???:
print("Watering plants")
else:
print("No watering")Solution
Step 1: Understand time range condition
We want hours from 6 to 8 inclusive, so hour >= 6 and hour <= 8.Step 2: Combine soil moisture and time conditions
Use 'and' to check both soil moisture and time range.Final Answer:
now.hour >= 6 and now.hour <= 8 -> Option AQuick Check:
Check hour between 6 and 8 = B [OK]
- Using 'or' instead of 'and' for time range
- Using strict inequalities excluding 6 or 8
- Checking only exact hours 6 or 8
Ready to prove it?
Pass the test and this pattern moves unknown
