Ripy the smart flowerpot
a self-watering plant pot with configurable parameters
Author: Nedelcu Andreea
GitHub Project Link: https://github.com/UPB-PMRust-Students/project-andreea-35
Descriptionβ
Ripy is a plant pot add-on that waters your plant regularly! You set a desired humidity level and it adds water accordingly so as to maintain it. The display is where you can view your plant's conditions (current humidity / temperature) or set parameters (desired humidity level / number of times to water the plant per day).
Motivationβ
Sometimes you have households where family members are away more often than they are at home. Even those who do spend a lot of time inside might go on vacation or have to be out of town for a couple of days, maybe a week - and not even the least demanding of plants can go unwatered that long! Ripy makes sure any green friend, fussy or not, is maintained happy and hydrated!
My family has a bunch of plants around the house but some aren't exactly thriving due to us getting busy and forgetting to water them or leaving them unwatered while we're away on vacation. That's what inspired me to take on this project!
Architectureβ
Logβ
Week 5 - 11 Mayβ
Having had all components arrive and soldered the previous week, it was time to put it all together. To plan everything out more exactly, I started with the KiCAD schematic. Not all of the components had symbols in the base library, so some I got off of Github and others I drew myself. With everything decided, connecting everything went quite smoothly. The relay module did confuse me a bit, but feedback from this week's lab and reading up on it answered all of my questions (seeing the module schematic especially helped). I also set-up the debugger pico within this timeframe and wrote code to test out the capacitive soil moisture sensor and buttons, which worked! I moved onto testing the LCD screen, and while it did light up, I couldn't manage to display anything on it. I'm planning on trying a different driver/library.
Week 12 - 18 Mayβ
Unfortunately, this week hasn't seen as much progress as the previous when it comes to the project itself. I did the move from Gitlab to Github for the documentation, set up my local source code repository and pushed my first code. I had the water pump cables extended with some jumper wires at the lab and insulated them with tape at home. Spent Saturday morning updating the log with everything for the hardware milestone. Sunday I worked on the LCD again and while I did solve one big issue (not finding the correct I2C device address) I still couldn't get it to display anything.
Week 19 - 25 Mayβ
Hardwareβ
The main challenge regarding hardware was having components that operate on 5V, incompatible with the pico's 3.3V output. Additional components had to be acquired to accomodate those.
Raspberry Pi Pico W - the brains: reads sensor data, controls the relay module (which switches the pump) and updates the LCD;
Capacitive Soil Moisture Sensor - measures the soilβs moisture level through analog output. The Pico reads this to determine if watering is needed;
- Connections:
- VCC
- GND
- OUT (Output)
LM35D Analog Temperature Sensor - measures ambient temperature through analog output; Values are displayed on the LCD;
- Connections:
- VCC
- GND
- OUT (Output)
5V Relay Module- acts as a switch for the water pump. Triggered by a GPIO pin from the Pico;
- Connections:
- VCC
- GND
- IN (Input / Control Pin) - used to control the output of the relay
- COM (Common) - the common connection for both NO and NC
- NO (Normally Open) - the load connection when the relay is ON
- NC (Normally Closed) - connects to the COM terminal by default, or when the relay is OFF
Water Pump - turns on when the relay is triggered to water the plant;
1602 LCD Display with I2C Adapter - shows current humidity, temperature, and user-set parameters. Connects to the Pico via I2C;
- Interface: I2C
- Connections:
- VCC
- GND
- SDA (Serial Data Line)
- SCL (Serial Clock Line)
3 Γ Push Buttons - provide input for adjusting settings like desired humidity and number of waterings per day. Each button connects to a GPIO pin.
Picturesβ
Schematicsβ
Bill of Materialsβ
Device | Usage | Price |
---|---|---|
Raspberry Pi Pico 2W | The microcontroller | 39.66 RON |
Breadboard power supply | The voltage source | 4.69 RON |
Capacitive Soil Moisture Sensor | The soil moisture sensor | 4.77 RON |
LM35D Analog Temperature Sensor (TO-92) | The temperature sensor | 4.99 RON |
Water Pump | The water dispenser | 13.49 RON |
ΓΈ 8mm 1m Transparent Tube | Water transportation from the pump to the pot | 2.92 RON |
1 Channel 5V Relay Module | Water pump activation | 4.99 RON |
1602 Green LCD Display with I2C adapter | Display for our parameters | 26.83 RON |
TXS0108E 8 Bit Bidirectional Logic Level Converter | Voltage converter to use 5V components with the PICO | 6.49 RON |
3x 6 x 6 x 6 Push Buttons | Interaction with the display | 1.08 RON |
Softwareβ
Library | Description | Usage |
---|---|---|
embedded_hal | Hardware abstraction layer for embedded systems | Used for abstracting hardware interactions |
gpio | GPIO manipulation | Used for interacting with GPIO pins |
defmt | Efficient logging for embedded systems | Enables detailed logging for system diagnostics and debugging during development |
embassy-rp | Peripheral access library | Used for initializing and interacting with peripherals |
embassy-time | Time management library | Used for time-based operations such as delays |
heapless | Data structure library | Used for String vectors |
Linksβ
- Build A Plant Watering System π±π€ | With a Pi Pico by VEEB Projects
- DIY Raspberry Pi Arduino Plant Watering System by Caroline Dunn
- How to create IOT Plant Watering System Using Raspberry Pi Pico W
- Pico Pico - Embedded Programming with Rust
- Connect I2C 1602 LCD to Raspberry Pico
- Breadboard Power Supply module - How to use it?
- Sunfounder: 5V Relay module
- Circuit digest: Understanding How a Single Channel Relay Module Works
- Last Minute Engineers: Interface One Channel Relay Module with Arduino