Bird
Raised Fist0
Raspberry Piprogramming~10 mins

Automated plant watering system in Raspberry Pi

Choose your learning style10 modes available
Introduction

An automated plant watering system helps keep plants healthy by watering them when they need it without you having to remember.

When you want to water your plants regularly but often forget.
If you travel and cannot water your plants yourself.
To save water by only watering plants when the soil is dry.
For plants that need very specific watering schedules.
To learn how sensors and small computers can work together.
Syntax
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.

Examples
Set the soil sensor pin as input and the water pump pin as output.
Raspberry Pi
GPIO.setup(soil_sensor_pin, GPIO.IN)
GPIO.setup(water_pump_pin, GPIO.OUT)
If the soil sensor reads dry, turn the water pump on.
Raspberry Pi
if GPIO.input(soil_sensor_pin) == GPIO.LOW:
    GPIO.output(water_pump_pin, GPIO.HIGH)
Water the plant for 5 seconds, then turn the pump off.
Raspberry Pi
time.sleep(5)
GPIO.output(water_pump_pin, GPIO.LOW)
Sample Program

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.

Raspberry Pi
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()
OutputSuccess
Important Notes

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.

Summary

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

(1/5)
1.

What is the main purpose of an automated plant watering system using a Raspberry Pi?

easy
A. To control room temperature automatically
B. To water plants continuously without checking soil
C. To measure sunlight for plants
D. To water plants only when the soil is dry

Solution

  1. Step 1: Understand the system goal

    The system uses sensors to check soil moisture.
  2. Step 2: Identify the watering condition

    It waters plants only when soil is dry to save water.
  3. Final Answer:

    To water plants only when the soil is dry -> Option D
  4. Quick Check:

    Water only if dry = A [OK]
Hint: Focus on saving water by watering only when needed [OK]
Common Mistakes:
  • Thinking it waters plants all the time
  • Confusing soil moisture with sunlight
  • Assuming it controls temperature
2.

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?
easy
A. GPIO.setup(17, GPIO.OUT)
B. GPIO.setup(17, GPIO.IN)
C. GPIO.output(17, GPIO.IN)
D. GPIO.output(17, GPIO.OUT)

Solution

  1. Step 1: Identify pin mode setup

    GPIO.setup(pin_number, GPIO.OUT) sets pin as output.
  2. Step 2: Choose correct function and mode

    GPIO.setup(17, GPIO.OUT) correctly sets pin 17 as output.
  3. Final Answer:

    GPIO.setup(17, GPIO.OUT) -> Option A
  4. Quick Check:

    Setup output pin = A [OK]
Hint: Use GPIO.setup(pin, GPIO.OUT) to set output pins [OK]
Common Mistakes:
  • 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
3.

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")
medium
A. SyntaxError
B. Pump OFF
C. Pump ON
D. No output

Solution

  1. Step 1: Check soil moisture condition

    Value 300 is less than 400, so condition is true.
  2. Step 2: Determine pump action and output

    GPIO.output sets pin HIGH and prints "Pump ON".
  3. Final Answer:

    Pump ON -> Option C
  4. Quick Check:

    300 < 400 triggers Pump ON [OK]
Hint: Compare sensor value to threshold to decide pump state [OK]
Common Mistakes:
  • Misreading the comparison operator
  • Confusing HIGH and LOW states
  • Ignoring print output
4.

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")
medium
A. soil_moisture value is invalid
B. Missing colon (:) after if condition
C. GPIO.output should be GPIO.setup
D. Wrong GPIO pin number

Solution

  1. Step 1: Check if statement syntax

    Python requires a colon (:) after the if condition.
  2. Step 2: Identify missing colon error

    The code misses ':' after 'if soil_moisture > 400', causing syntax error.
  3. Final Answer:

    Missing colon (:) after if condition -> Option B
  4. Quick Check:

    if statement needs ':' = D [OK]
Hint: Always put ':' after if conditions in Python [OK]
Common Mistakes:
  • Forgetting colon after if
  • Confusing GPIO.output with GPIO.setup
  • Assuming pin number is wrong
5.

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")
hard
A. now.hour >= 6 and now.hour <= 8
B. now.hour > 6 or now.hour < 8
C. now.hour < 6 and now.hour > 8
D. now.hour == 6 or now.hour == 8

Solution

  1. Step 1: Understand time range condition

    We want hours from 6 to 8 inclusive, so hour >= 6 and hour <= 8.
  2. Step 2: Combine soil moisture and time conditions

    Use 'and' to check both soil moisture and time range.
  3. Final Answer:

    now.hour >= 6 and now.hour <= 8 -> Option A
  4. Quick Check:

    Check hour between 6 and 8 = B [OK]
Hint: Use 'and' with hour >= 6 and <= 8 for time range [OK]
Common Mistakes:
  • Using 'or' instead of 'and' for time range
  • Using strict inequalities excluding 6 or 8
  • Checking only exact hours 6 or 8
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard