CactusCare
Smart Cactus Monitoring & Watering System
Author: Vladuta Aida
GitHub Project Link: https://github.com/UPB-PMRust-Students/project-xwidaa
Description
CactusCare is a smart monitoring and watering system designed specifically for cactus plants. It uses a soil humidity sensor to detect moisture levels and decides when watering is needed. If the soil remains too dry for a set period, a small water pump activates to deliver just enough water, preventing overwatering. A water level sensor checks if the reservoir is empty, and an LCD display notifies the user only when a refill is needed. An RGB LED indicates the soil's wet or dry status. Additionally, the system connects to a remote mobile or web app over Wi-Fi, allowing users to monitor sensor readings and manually control watering from anywhere.
Motivation
CactusCare was designed to make cactus care easier and smarter. It monitors soil moisture and waters the plant only when needed, preventing overwatering or neglect. With a water level sensor and simple LCD alerts, users are notified only when the reservoir is empty. This helps save water, keeps the cactus healthy, and reduces the need for constant attention.
Architecture
The CactusCare system is designed to automate the monitoring and watering of cactus plants. It utilizes various sensors and actuators connected to a Raspberry Pi Pico W microcontroller and includes Wi-Fi capability to allow remote monitoring and control through an app.
-
Microcontroller: Raspberry Pi Pico W Function: Acts as the central processing unit, reading sensor data and controlling actuators.
Connections:
Soil Moisture Sensor: Reads analog voltage corresponding to soil moisture levels.
Water Level Sensor: Monitors the water reservoir level.
RGB LED: Indicates soil moisture status (e.g., green for moist, red for dry).
LCD Display: Displays messages, such as low water alerts.
Water Pump: Activated when soil is dry and water is available.
Wi-Fi Module (built-in): Connects to a remote app for monitoring and control.
-
Soil Moisture Sensor Function: Measures the moisture content of the soil.
Connection: Analog output connected to an ADC pin on the Pico W.
-
Water Level Sensor Function: Detects the water level in the reservoir to prevent dry pumping.
Connection: Digital or analog output connected to the Pico W.
-
RGB LED Function: Provides a visual indication of soil moisture status.
Connection: Three GPIO pins control the red, green, and blue channels.
-
LCD Display Function: Displays system messages, such as "Water Reservoir Empty."
Connection: Typically connected via I²C interface to the Pico W. Raspberry Pi Forums
-
Water Pump Function: Irrigates the plant when soil moisture is low.
Connection: Controlled via a relay module connected to a GPIO pin. element14 Community
-
Remote App (Web/Mobile) Function: Allows users to remotely check soil moisture and water level status, and optionally trigger watering. Connection: Communicates with the Raspberry Pi Pico W over Wi-Fi (e.g., via HTTP or MQTT).
-
Power Supply Function: Provides necessary voltage and current to the system.
Components: Battery pack or USB power source.
Log
Week 5 - 11 May
Week 12 - 18 May
Week 19 - 25 May
Hardware
This project uses a Raspberry Pi Pico W as the main controller to automate plant watering. A soil humidity sensor monitors the moisture level in the soil, while a water level sensor checks if there is enough water in the reservoir. An RGB LED visually indicates the soil's condition—dry or wet—and an LCD module displays a warning when the reservoir is empty. When the soil is dry and water is available, a small water pump motor is activated to water the plant through connected tubing. All components are connected using a breadboard, jumper wires, and appropriate resistors, and the system is powered by a battery for portability.
Schematics
Place your KiCAD schematics here.
Bill of Materials
Device | Usage | Price |
---|---|---|
Raspberry Pi Pico W | The microcontroller | 35 RON |
Soil Moisture Sensor | Detects soil moisture levels | 5 RON |
Water Level Sensor | Detects water level in the reservoir | 1.5 RON |
RGB LED 5mm | Shows dry/wet status with colors | 11 RON |
LCD Module 16x2 Blue Backlight | Displays reservoir empty status | 35 RON |
Mini Submersible Water Pump | Pumps water to the plant | 10 RON |
Water Tank and Tube Kit | Stores and channels water | 27 RON |
Mini Breadboard 400 Holes | For prototyping and connections | 7 RON |
Jumper Wires M-M 20cm | For connecting components | 5 RON |
Resistors | Used with sensors and LEDs | 3 RON |
Software
Library | Description | Usage |
---|---|---|
st7789 | Display driver for ST7789 | Used for the display for the Pico Explorer Base |
embedded-graphics | 2D graphics library | Used for drawing to the display |
embedded-hal | Hardware Abstraction Layer for embedded systems | For interfacing with hardware components like sensors and actuators |
embassy-rp | Async framework for RP2040-based microcontrollers | Manages async tasks on the Raspberry Pi Pico W |
cortex-m-rt | Rust runtime for ARM Cortex-M microcontrollers | Provides startup/runtime support for low-level embedded code |
lcd | Library for controlling LCD displays | Used to control the 16x2 LCD module |
dc-motor or relay-control | Control DC motors or relays | Used for driving the water pump motor |
esp-wifi | Wi-Fi stack for RP2040 and ESP chips | Connects Raspberry Pi Pico W to Wi-Fi network |
minimq | MQTT client library for embedded Rust | Publishes sensor data and subscribes to commands over MQTT |
serde_json | JSON serialization/deserialization | Formats sensor readings into JSON for MQTT messages |