Water your plants with a Raspberry Pi
Control
If you look at commercial irrigation systems, they often seem relatively complicated to operate. In contrast, I want this system to be as simple as possible, so the DIY system remains manageable and works safely during periods of absence from home. That said, the automatic watering system does have one special trick up its sleeve: It can extend the watering time to achieve a certain level of moisture in the soil with the use of sensors that provide appropriate feedback from two different plant locations.
Capacitive sensors were chosen because they are less susceptible to corrosion than resistive sensors. Although I am talking about models with analog output, they can be connected quite easily to the Raspberry Pi in the control center through the ADC. To determine the various limits up front, I immersed the sensors in water in a test (Figure 5) and then put them in moist soil. The ADC in this setup is an ADS1115, which is addressed in Python 3 with a library by Adafruit. The easiest way to install it is to use the command:
pip3 install Adafruit_ADS1x15
This solution relies on a central control script named watering.py
, which resides in the Raspberry Pi's memory and takes care of flow control and polling the humidity sensors. The timing settings are stored there, as well. In an initial saver mode, the system now waters the plants for two minutes at 5:00pm every day. Controlled by the second solenoid valve, it then does the same thing for a little longer – five minutes. The values can be adjusted as required.
To water the plants, the Raspberry Pi always opens both solenoid valves first and then starts pumping from the tank. Once the timer for the first water delivery has expired, the system checks the first moisture sensor to discover whether the soil moisture at the plant location has reached the "wet" state; if not, follow-up is provided. The first valve then shuts off. The second line remains open for a longer time and is controlled along the same principle until the script first stops the pump and then finally shuts off the second valve.
The Python script resides in a separate folder below the home directory. Because it is called in rc.local
, it runs automatically at boot time. If you like, you can also convert the script into a genuine daemon. Everything has been kept quite simple here, but it's for daily use and can be extended at any time if you feel the urge to do so. The script and the remote control PHP website described below can be found in my GitHub project [1], where the wiring and routing diagram for the water supply also reside.
Because the Raspberry Pi is connected to the local network, you can also access and maintain it there over SSH. To do so, just log in to a terminal with:
ssh pi@watering
In contrast to similar projects, however, the automatic watering device does not have a separate terminal-based menu. At the end of the day, it is a simple workhorse that always follows the same routine. The idea is to do everything else that needs to be done in the web browser.
Web-Based Remote Control
The watering system works reliably even without Internet access, but it should at least have remote access to avoid the need to read everything at the device or to install buttons and a touchscreen. You have to remember that everything needs to be pretty much waterproof.
If the irrigation system in your garden is outside the range of your router, a repeater set up halfway can help. Alternatively, during the test phase, simply disconnect the control unit from the connectors and reprogram the Raspberry Pi on your home network. A network connection is always required for remote access, so you can intervene, even when on vacation.
Some of today's commercial watering systems come with a smartphone app. I designed a web interface that also works on cell phones. Without the benefit of a vendor-operated cloud, the Raspberry Pi, including the HTTP server, needs to be accessible over a static IP address on the Internet.
However, I went for a simpler variant and located the user interface (Figure 6) in a PHP file in my own web space. After calling the URL, the interface sends predefined commands to the watering system at the push of a button. Currently, the five actions in Table 1 are implemented. The Raspberry Pi queries the corresponding commands in the control script at short intervals and triggers the matching actions if needed.
Table 1
Web Interface Functions
Name | Function |
---|---|
|
Enable watering timer (default: on). |
|
Disable timer. System remains switched on. |
|
Immediate water delivery for 10 seconds through both lines. |
|
Reboots the system. The web interface is active again after restarting the Raspberry Pi. |
|
Shut down the Raspberry Pi. A manual off-on cycle is then required. |
The basis for the implementation is a development by Christian Grieger [3]. The advantage of his method is that it does not require elaborate arrangements such as dynamic DNS. The disadvantage is that feedback arrives with a bit of a delay; however, this delay is not likely to be of much importance, although you will definitely want to secure the remote control website with a login.
Conclusions
The plant watering system does exactly what it's supposed to do, in a positive way. I ran it at home in sunny weather during the last few days of summer, and checking it for functionality was no problem (Figure 7).
The system will star as my vacation stand-in next year. Trying to supply the whole garden would probably be overshooting the mark, but if you are looking to rescue your most important plants in a limited area (e.g., a greenhouse, conservatory, or living room), this controller can be a real helper.
Infos
- Project on GitHub: https://github.com/swenae/watering
- English version of code and image files: https://linuxnewmedia.thegood.cloud/s/5Rzx9tQW2FJ6N3Z
- Electronics projects by Christian Grieger: https://elektro.turanis.de (in German)
« Previous 1 2
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
So Long Neofetch and Thanks for the Info
Today is a day that every Linux user who enjoys bragging about their system(s) will mourn, as Neofetch has come to an end.
-
Ubuntu 24.04 Comes with a “Flaw"
If you're thinking you might want to upgrade from your current Ubuntu release to the latest, there's something you might want to consider before doing so.
-
Canonical Releases Ubuntu 24.04
After a brief pause because of the XZ vulnerability, Ubuntu 24.04 is now available for install.
-
Linux Servers Targeted by Akira Ransomware
A group of bad actors who have already extorted $42 million have their sights set on the Linux platform.
-
TUXEDO Computers Unveils Linux Laptop Featuring AMD Ryzen CPU
This latest release is the first laptop to include the new CPU from Ryzen and Linux preinstalled.
-
XZ Gets the All-Clear
The back door xz vulnerability has been officially reverted for Fedora 40 and versions 38 and 39 were never affected.
-
Canonical Collaborates with Qualcomm on New Venture
This new joint effort is geared toward bringing Ubuntu and Ubuntu Core to Qualcomm-powered devices.
-
Kodi 21.0 Open-Source Entertainment Hub Released
After a year of development, the award-winning Kodi cross-platform, media center software is now available with many new additions and improvements.
-
Linux Usage Increases in Two Key Areas
If market share is your thing, you'll be happy to know that Linux is on the rise in two areas that, if they keep climbing, could have serious meaning for Linux's future.
-
Vulnerability Discovered in xz Libraries
An urgent alert for Fedora 40 has been posted and users should pay attention.